Все регистры таймеров/счетчиков микроЭВМ могут читаться или записываться в процессе работы, однако для этого надо соблюдать меры предосторожности.
Предположим, что подпрограмма RDTIME должна возвращать 16-разрядное значение в регистры R1 и R0, отражающее содержимое таймера 0. Существует опасность, что при считывании двух половин числа переполнение младшего регистра может перейти на одержимое старшего регистра, так что две возвращаемых половины слова окажутся "не в фазе". Решение этой проблемы заключается в том, чтобы читать сначала старший байт, а затем - младший, после чего выдать подтверждение того, что старший байт не изменился. Если изменение имело место, то следует повторить процесс сначала.
RDTIME: MOV А,ТН0 ; Выборка содержимого таймера Т0
MOV R0,TL0
CJNE A,TH0,RDTIME
MOV R1,A
RET
Измерение длительности сигнала.
Подпрограмма для измерения длительности «положительного» сигнала будет выглядеть так:
MOV TMOD,#00001001B ; Настройка Т/С0
MOV TH0,#0 ; Сброс таймера
MOV TL0,#0
SETB TCON.4 ; Старт Т/С0
|