20.02.2008, 20:45
|
#11
|
Гражданин KAZUS.RU
Регистрация: 05.10.2006
Сообщений: 628
Сказал спасибо: 21
Сказали Спасибо 165 раз(а) в 92 сообщении(ях)
|
В модели AT89C2051(подозреваю, что и в остальных 51-х) не работают прерывания по переполнению таймера и внешние. Остальные не проверял. И это pull-up'ом не исправишь. Если я не прав, обрадуйте меня.
__________________
Быть,а не казаться.
|
|
|
|
20.02.2008, 23:13
|
#12
|
Частый гость
Регистрация: 14.04.2007
Сообщений: 16
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Всем Спасибо.
Но..
Это называется внешние подтягивающие резисторы?
А как , всётаки, получить высокий уровень на выходе порта? Только программно, т.е. через MOVX P0,@DPTR?
И как реализуется "защёлка"?
-- Прилагается рисунок: --
|
|
|
|
21.02.2008, 08:14
|
#13
|
Вид на жительство
Регистрация: 05.09.2006
Сообщений: 360
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
Сообщение от sanitar249
|
Иными словами, порт0 по внутренней логике, по разному реагирует на команды MOV и MOVX, я правильно понял?
Удачи!
|
Абсолютно точно.
Сообщение от Yuoson
|
Это называется внешние подтягивающие резисторы?
А как , всётаки, получить высокий уровень на выходе порта? Только программно, т.е. через MOVX P0,@DPTR?
И как реализуется "защёлка"?
|
А что, внешние резисторы не обеспечивают высокий уровень? Не хватает тока? Поставьте на выход буфер.
Программно только командой MOVX, но только на время выдачи адреса/данных. Конкретно надо смотреть в какие такты машинного цикла. Если надо - посмотрю, напишу. После отработки цикла записи/чтения внешней памяти в порт выводится значение, записанное в защелку, но выход уже с открытым стоком.
Удачи.
|
|
|
|
21.02.2008, 11:50
|
#14
|
Почётный гражданин KAZUS.RU
Регистрация: 19.01.2007
Сообщений: 1,747
Сказал спасибо: 2
Сказали Спасибо 46 раз(а) в 35 сообщении(ях)
|
Сообщение от LEAS
|
В модели AT89C2051(подозреваю, что и в остальных 51-х) не работают прерывания по переполнению таймера и внешние. Остальные не проверял. И это pull-up'ом не исправишь. Если я не прав, обрадуйте меня.
|
Напугали, но к счастью Вы не правы, все прекрасно работает....Вот код, во вложении проект.
Удачи!
Код:
|
org 0000h
jmp start
org 0003h
call obrab ;вызов обработки прерывания
org 000bh
call obrab1 ;вызов обработки прерывания TC0
start:
setb EA ; разрешаем прерываться
setb EX0 ;разрешаем внешнее прерывание
setb IT0 ;по срезу
mov TMOD, #00010000b ;устан режим ТС
setb TR0 ; запуск ТС0
setb ET0 ;разрешаем прерывание по таймеру0
begin: ;главный цикл
nop ;ничего не делаем
nop
jmp begin ;зацикливаемся
;******************************
; обработка прерываний
;******************************
obrab:
cpl P1.1 ; инвертируем по прерыванию
reti
obrab1:
cpl P1.2 ; инвертируем по прерыванию от ТС0
reti
END |
Прикрепленный файл: 1196265.zip
__________________
Я, думаю, нужно подумать...
|
|
|
|
21.02.2008, 13:17
|
#15
|
Почётный гражданин KAZUS.RU
Регистрация: 19.01.2007
Сообщений: 1,747
Сказал спасибо: 2
Сказали Спасибо 46 раз(а) в 35 сообщении(ях)
|
Сообщение от Yuoson
|
И как реализуется "защёлка"?
|
В классической схеме через защелку(74хх373) передаеться верхняя часть адресов А0-А7 адресного пространства внешних ЗУ. Суть в следующем, из РО сначала выводиться адрес, по сигналу ALE он защелкиваеться в регистре и присутствует весь цикл работы с данными внешней памяти(по указанному адресу). Защелкивать можно и по выходам к.л. порта (несколько разных защелок) с целью мультиплексирования порта, но к сожалению, порты 51 имеют маленькую нагрузочную способность и в этом случае не обойтись без шинного формирователя.
Удачи!
__________________
Я, думаю, нужно подумать...
|
|
|
|
21.02.2008, 20:36
|
#16
|
Частый гость
Регистрация: 14.04.2007
Сообщений: 16
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Спасибо за помощь. Ответы исчерпывающие. Буду пробовать.
|
|
|
|
21.02.2008, 21:38
|
#17
|
Гражданин KAZUS.RU
Регистрация: 05.10.2006
Сообщений: 628
Сказал спасибо: 21
Сказали Спасибо 165 раз(а) в 92 сообщении(ях)
|
sanitar249, посылаю Вам ваш же проект с маленьким изменением-в таймер записывается FFF9 для убыстрения и предлагаю Вам пошагать в программе по F10 по листингу. Увидите интересные процессы с TMR0 и TCON. Ваш комментарий "зацикливаемся" будет целиком соответствовать смыслу слова. Прерывания не работают. Может, у меня корявая версия, но в не пошаговом режиме, вроде, все работает, но в пошаговом-полный косяк-пришлось доделывать в KEIL uVISION(а вот там все в порядке как в пошаговом, так и в автоматическом режиме).
Прикрепленный файл: 7706150.RAR
__________________
Быть,а не казаться.
|
|
|
|
21.02.2008, 22:49
|
#18
|
Почётный гражданин KAZUS.RU
Регистрация: 19.01.2007
Сообщений: 1,747
Сказал спасибо: 2
Сказали Спасибо 46 раз(а) в 35 сообщении(ях)
|
Сообщение от LEAS
|
Ваш комментарий "зацикливаемся" будет целиком соответствовать смыслу слова. Прерывания не работают. Может, у меня корявая версия, но в не пошаговом режиме, вроде, все работает, но в пошаговом-полный косяк-пришлось доделывать в KEIL uVISION(а вот там все в порядке как в пошаговом, так и в автоматическом режиме).
|
Да, у меня тоже в пошаговом режиме прерывания по таймеру не вызвались ,в автомате все летает. Будем посмотреть. Но кажеться, это еще один вопрос г-ну ТЕНЬ
Удачи!
Прикрепленный файл: 7706150.RAR
__________________
Я, думаю, нужно подумать...
|
|
|
|
21.02.2008, 23:14
|
#19
|
Почётный гражданин KAZUS.RU
Регистрация: 19.01.2007
Сообщений: 1,747
Сказал спасибо: 2
Сказали Спасибо 46 раз(а) в 35 сообщении(ях)
|
Еще одна "странность" при исполнении этого кода и остановке исполнения по паузе. Указатель стека ни принудительно ни программно не трогался д.б. 07, в R0-R7 тоже "хрень".
Удачи!
-- Прилагается рисунок: --
__________________
Я, думаю, нужно подумать...
|
|
|
|
22.02.2008, 07:40
|
#20
|
Гражданин KAZUS.RU
Регистрация: 05.10.2006
Сообщений: 628
Сказал спасибо: 21
Сказали Спасибо 165 раз(а) в 92 сообщении(ях)
|
Прерывания не работают ни по таймеру, ни внешние. Во вложении картинка осциллоскопа однозначно это подтверждающая. Я так же писал " Увидите интересные процессы с TMR0 и TCON." Если обратите внимание, то флаг прерывания устанавливается, но само оно не происходит. И по достижении переполнения TL0 обнуляется, а в TH0 остается FF, после чего TL0 снова инкрементируется и уже по его FF на следующем цикле все обнуляется и устанавливается флаг прерывания.
-- Прилагается рисунок: --
__________________
Быть,а не казаться.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 15:40.
|
|