Всем привет. В общем есть простая мигалка по переполнению нулевого таймера. ATmega328. В АВР студии все прекрасно работает, в протеусе-0 реакции. Либо протеус тупит, либо я не настроил в нем что-то, так как собрал в железе и прошил - все работает замечательно. Файлы исходника, прошивки и протеуса прилагаю.
Добавлено after 4 hours 41 minute 41 second: Все разобрался. Я неправильно сбрасывал счетчик предделителя. Перечитал Евстифеева. Для обнуления предделителя достаточно выставить бит PSRSYNC в регистре GTCCR, обнуляется он сам на след. такте, а я выставлял бит TSM, который хоть и обнуляется сам, но его все равно нужно в 0 выставлять для запуска. Для останова нужно выставить ОБА!!! бита в 1, а для запуска выставить их опять в 0. Прикол в другом, почему это в железа работало? странно. но нужно это запомнить.
так что инициализацию можно сделать так:
; настройка таймера Т0 ; инизиализация предделителя на 1024 ldi r16, 0b00000101 out TCCR0B, r16 ;разрешаем превывания по переполнению таймера ldi r16, 1<<TOIE0 sts TIMSK0, r16 ; обнуляем предделитель и разрешаем глобально прерывания ldi r16, 1<<PSRSYNC out GTCCR, r16 sei clr r16
Вложения: |
Timer.zip [18.65 KiB]
Скачиваний: 174
|
P_5.hex [231 байт]
Скачиваний: 325
|
P_5.asm [1.4 KiB]
Скачиваний: 393
|
|