


;*************Термометр
;ser tmp
;LDS r1,0x71;читаем вектор инд
;cpse tmp,r1
;rjmp li
;rjmp out_termoreactor

;li:
LDS r0,0x64 ;считали число выборок ADC
ldi tmp,0x3F;64
cpse tmp,r0
rjmp out_termoreactor ;если не насчитали 64,то идем нафиг
                  ;Насчитали,запускаем колбасу на орбиту
rcall adc_average

;r1	;  старший
;r0	; младший
;надо найти x=(y-b)*10/k ,где х-температура,а y-напряжение

ldi r16,0xFC ; b=252 |  0x0FC 
ldi r17,0x00 ;

sub r0,r16  ;младш
sbc r1,r17  ; старш

; multipli:

 ;***************************************************************************
;* 16x16 Bit Unsigned Multiplication
;.def	mc16uL	=r16		;multiplicand low byte
;.def	mc16uH	=r17		;multiplicand high byte
;.def	mp16uL	=r18		;multiplier low byte
;.def	mp16uH	=r19		;multiplier high byte
;.def	m16u0	=r18		;result byte 0 (LSB)
;.def	m16u1	=r19		;result byte 1
;.def	m16u2	=r20		;result byte 2
;.def	m16u3	=r21		;result byte 3 (MSB)
;.def	mcnt16u	=r22		;loop counter


mov r16,r0
mov r17,r1

ldi r18,0x0A ;10
clr r19     ;
clr r20
clr r21
clr r22

;умножаем на 10

rcall multipli


;.def	m16u0	=r18		;result byte 0 (LSB)
;.def	m16u1	=r19		;result byte 1
;Делим 



ldi tmp,0x12; k=18(1,8*10)|1C 
mov r3,tmp


mov r1,r18
mov r2,r19


.DEF rd1l = R1 ; LSB 16-bit-number to be divided
.DEF rd1h = R2 ; MSB 16-bit-number to be divided
.DEF rd1u = R4 ; interim register
.DEF rd2 = R3 ; 8-bit-number to divide with
.DEF rel = R5 ; LSB result
.DEF reh = R6 ; MSB result
.DEF rmp = R21; multipurpose register for loading

;
; Divide rd1h:rd1l by rd2
;
div8:
clr rd1u ; clear interim register
clr reh ; clear result (the result registers
clr rel ; are also used to count to 16 for the
inc rel ; division steps, is set to 1 at start)
;
; Here the division loop starts
;
div8a:
clc ; clear carry-bit
rol rd1l ; rotate the next-upper bit of the number
rol rd1h ; to the interim register (multiply by 2)
rol rd1u
brcs div8b ; a one has rolled left, so subtract
cp rd1u,rd2 ; Division result 1 or 0?
brcs div8c ; jump over subtraction, if smaller
div8b:
sub rd1u,rd2; subtract number to divide with
sec ; set carry-bit, result is a 1
rjmp div8d ; jump to shift of the result bit
div8c:
clc ; clear carry-bit, resulting bit is a 0
div8d:
rol rel ; rotate carry-bit into result registers
rol reh
brcc div8a ; as long as zero rotate out of the result

;.DEF rel = R5 ; LSB result
;.DEF reh = R6 ; MSB result

;r5 младший 0-255гр
;r6 старший
clr r17;
mov r16,r5
STS 0x78,r16 ; текущее число градусов загрузили в буфер

rcall EERead ;cчитываем для каждого градуса свою коррекцию
//------------------------------------------
;LDS r1,0x77 ; включен ли режим корр
;ser tmp
;cp tmp,r1
;brne no_cor_en // режим коррекции не включен

;STS 0x72,r21 ; текущее число коррекции показания датчика загрузили в буфер корр,и индикации

;no_cor_en:
//------------------------------------------
add r5,r21 ;производим коррекцию.


out_termoreactor:
;****************конец записи термометра********************