Курсовая работа: Цифровой термометр на микропроцессоре AVR-MEGA 128
;Подпрограмма измерения с запрещёнными прерываниями. TP.2–.5 не
;используются поэтому переписаны. Используются только TPD.0 & 1.
;Начальная инициализация: Указатель стека = 0, Начало с TPD.1
;16–битный таймер, тактирование от MCLK, CIN разрешает счёт MEASURE PUSH.B #TPDMAX ;Сохранить в стеке для послед.использ.
CLR R8 ;Указатель для стека результата
MEASLOP MOV.B #(TPSSEL0*3)+ENA,&TPCTL
;TPCNT1 CLK=MCLK, EN1=1
;Конденсатор С заряжается на протяжении t>5нс.Используются выходы N–1
MOV.B #B16+TPDMAX–1,&TPD;один16-бит.счёт,выбор вых. заряда
MOV.B #TPDMAX–1,&TPE ; Разрешить выходы заряда
MOV.B #PRESET,&TPCNT2 ; Загрузить время заряда
BIS #CPUOFF,SR ; Режим понижен.потребления
MOV.B @SP,&TPE ;Разрешить только текущий датчик
CLR.B &TPCNT2
; Запрет.все прерыв.для обеспеч.непрерыв.работы тайм.и разряд конден.
DINT ; Запрет прерываний
CLR.B &TPCNT1 ; Очистить младший байт таймера
BIC.B @SP,&TPD ; Переключить все датчики в «0»
MOV.B #(TPSSEL0*3)+ENA+ENB,&TPCTL ;TPCNT1 CLK=MCLK,
; разрешить вход CIN
EINT ; Разрешить прерывания, общий старт
BIS #CPUOFF,SR ; Режим пониженного потребления
; EN=0:Завершение преобразования: 2X8 бит результата в MSTACK
; Сохранить результат в стеке
MOV.B &TPCNT2,MSTACK+1(R8)
; Сохранить старший байт результата
L$301 INCD R8 ; Инкремент адреса
RRA.B @SP ; Следующий выход TPD.X
JNC MEASLOP ; Если C=1 – завершение