Загадочный сброс предделителя таймеров 0 и 1 Меги16
В даташите на AVR ATmega16 на листах 87-88 указано, что синхронные таймеры-счетчики 0 и 1 имеют общий предделитель. Соответственно, его сброс битом 0 регистра SFIOR воздействует на оба таймера.
Стукнуло в голову проверить этот факт, для чего написал код на ассемблере, приложенный ниже. Запускаются Т0 и Т1 в нормальном режиме с предделителями у обоих 1/64. В цикле регулярно производится сброс общего предделителя. Прогон в AVR-Студии дал пораэительный результат: Т0 стоял как и ожидалось, а вот Т1 ведет счет не обращая внимания на сбросы!!! В железе тест не прогонялся. Как такое может быть???
; АТМега16 Тестовая программа сброса предделителя таймеров во время счета
.include "m16def.inc" ; Присоединение файла описаний
.def temp = r16 ; Определение главного рабочего регистра
;--------------------------- Инициализация таймера-счетчика 0
ldi temp,0b00010011
out TIMSK, temp ;Разрешение прерываний по переполнению
ldi temp,0b00000011
out TCCR0, temp ;Нормальный режим Таймера 0
;--------------------------- Инициализация таймера-счетчика 1
ldi temp,0b00000000 ;Нормальный режим Таймера 1
out TCCR1A, temp
ldi temp,0b00000011;Нормальный режим Таймера 1
out TCCR1B, temp
ldi temp, 0b00000011
main:
out SFIOR, temp
rjmp main ; К началу цикла
|