Каждый 16разрядный регистр таймеров/счетчиков физически разме
щается в двух 8разрядных регистрах. Соответственно для обращения к ним
требуется выполнить по две операции чтения или записи. Для того чтобы
запись или чтение обоих байт содержимого 16разрядного регистра проис
ходила одновременно, в составе каждого таймера/счетчика имеется специ
альный 8разрядный регистр TEMP, предназначенный для хранения стар
шего байта значения (этот регистр используется только процессором и
программно недоступен).
Для выполнения цикла записи 16разрядного регистра первым должен
быть загружен старший байт, который помещается в регистр TEMP. При
последующей записи младшего байта он объединяется с содержимым реги
стра TEMP, и оба байта одновременно (в одном и том же машинном цикле)
записываются в 16разрядный регистр. Если требуется изменить несколько
16разрядных регистров таймера/счетчика, а старшие байты всех записы
ваемых значений одинаковы, загрузку старшего байта достаточно выпол
нить только один раз.
Для выполнения цикла чтения 16разрядного регистра первым должен
быть прочитан младший байт. При его чтении содержимое старшего байта
помещается в регистр TEMP. При последующем чтении старшего байта воз
вращается значение, сохраненное в регистре TEMP. Исключение составля
ют только регистры сравнения OCR1A/B/C (OCR3A/B/C), при чтении ко
торых регистр TEMP не задействуется.
При выполнении цикла обращения к 16разрядному регистру тайме
ра/счетчика прерывания должны быть запрещены. В противном случае, ес
ли прерывание произойдет между двумя командами обращения к 16раз
рядному регистру, а в подпрограмме обработки этого прерывания тоже будет
произведено обращение к какомулибо из 16разрядных регистров того же
таймера/счетчика, содержимое регистра TEMP будет изменено. Как следст
вие, результат обращения к 16разрядному регистру в основной программе
будет неверным. (Евстифеев. Вообще, все нюансы здесь)
В даташите все то же самое, только по английски. Текст приводить не буду.
Т.е. когда вы пишите значение в старший байт - вы фактически пишете его в Temp. А запись в сам старший байт происходит при записи значения в младший регистр. Т.е. Вы смотрели текущее значение страшего регистра до его модификации записью во младший.
Я так понимаю, Вы на железе проверяли?


