Курсовая работа: Цифровой термометр на микропроцессоре AVR-MEGA 128
; Вычисление сопротивления датчика
;Подпрограмма беззнакового умножения:MSTACK X TEN_K MRESLT_HW/MRESLT_LW
;Использованы рег.MSTACK,TEN_K,MLTPLR_HW,MRESLT_LW, MRESLT_HW, BITTEST
;Подпрограмма беззнакового умножения с накоплением
;(MSTACK X TEN_K) + MRESLT_HW|MRESLT_LW –> MRESLT_HW|MRESLT_LW
CALC_RES
MOV #10000,TEN_K ;Загрузить 10,000 десятичное в TEN_K
MPYU CLR MRESLT_LW ; 0 ? LSBS результата
CLR MRESLT_HW ; 0 ? MSBS результата
MACU CLR MLTPLR_HW ; 0 ? MSBS множителя
MOV #1,BITTEST ; Регистр проверки бит
L$002 BIT BITTEST,MSTACK ; Проверить текущий бит
JZ L$01 ; Если «0» ничего не делать
ADD TEN_K,MRESLT_LW ;Если «1»добавить множитель к резул
ADDC MLTPLR_HW,MRESLT_HW
L$01 RLA TEN_K ; Множитель X 2
RLC MLTPLR_HW
RLA BITTEST ; Проверить следующий бит
JNC L$002 ;Если бит в CARRY: завершить
; Подпрограмма беззнакового деления 32–бита на 16-бит
; Использованы регистры (MSTACK+2),MRESLT_LW,RESULT, LPCNTR, MRESLT_HW
; MRESLT_HW MRESLT_LW / (MSTACK+2) RESULT Остаток в MRESLT_HW
; По выходу: CARRY = 0: OK CARRY = 1: Частное > 16 Бит
DIVIDE CLR RESULT ; Очистить RESULT
MOV #17,LPCNTR ; Инициализация счётчика
DIV1 CMP MSTACK+2,MRESLT_HW
JLO DIV2
SUB MSTACK+2,MRESLT_HW
DIV2 RLC RESULT