;*************************************************************************** ; ; File Name :'conv.asm" ; Title :STH-11 konverzios rutinok ; Date :2002.11.27. ; Version :1.0.0 ; Support telephone :+36-70-333-4034 VFX ; Support fax : ; Support Email :info@vfx.hu ; Target MCU :AT90S8515 ; ;*************************************************************************** ; D E S C R I P T I O N ; ; ; ;*************************************************************************** ; M O D I F I C A T I O N H I S T O R Y ; ; ; rev. date who why ; ---- ---------- --- ------------------------------------ ; 0.01 2002.11.27. VFX Creation ; ; ;*************************************************************************** ;********************************************** .DSEG Temperature: .byte 2 Humidity: .byte 2 .CSEG ;*************************************************************************** ; Public Parts: ; ; CaltTemp - Homerseklet kiszamitasa A valtozat ; Calc_Temp B valtozat ; CalcHum - Paratartalom kiszamitasa ; ;*************************************************************************** ;* Const Def ; ; ; ; ;************************************************************************** ;* Hardware Def. .include "mat32.asm" .include "8515DEF.INC" ;************************************************************************** ;** Homersekletet ASCIIban kiirja a ASCIIBuf-ba, 0-val lezarva ; PrintTemp: lds mant1,Temperature+0 lds mant1m,Temperature+1 clr mant1h clr mant1hh rcall ULTOA ret ;************************************************************************** ;* Y = mx+b fugveny, konstansok a programmemoriaban m,b sorrenden ;* Z - konstans tabla elso eleme ;* ACC1 = eredmeny ; LinearF: lpm adiw ZL,1 mov mant2,R0 lpm adiw ZL,1 mov mant2m,R0 lpm adiw ZL,1 mov mant2h,R0 lpm adiw ZL,1 mov mant2hh,R0 push ZL push ZH rcall UMUL pop ZH pop ZL lpm adiw ZL,1 mov mant2,R0 lpm adiw ZL,1 mov mant2m,R0 lpm adiw ZL,1 mov mant2h,R0 lpm adiw ZL,1 mov mant2hh,R0 push ZL push ZH rcall ADD32 pop ZH pop ZL ret ;************************************************************************** ;* Homerseklet szamitas ;* ;* ;* Y = m * x + b ;* 10T = 0.1 * x - 400 /*65536 TRC: .db 0x9A,0x19,0x00,0x00 ;m = 0x00001999 vagy 199A .db 0x00,0x00,0x70,0xFF ;b = 0xFF700000 Calc_Temp: clr mant1h clr mant1hh ;ACC1 = ADC value 0..16383 ldi ZL,Low(TRC*2) ;konstansok ldi ZH,High(TRC*2) rcall LinearF YCalcEnd: sts Temperature+0,mant1h sts Temperature+1,mant1hh ret ;************************************************************************** ;* Paratartalom szamitas ;* ;* Adatlap alpjan 12 bitre ;* x - paratartalom binaris erteke (ADC) 0..4095 ;* T - homerseklet kiszamolt erteke C-ban ;* ; RHlin = -2.8*10^-6*x^2 + 4.05*10^-2 * x -4 ; RHtrue= (T-25)*(10^-2 + 8*10^-5*x) +RHlin ; ;mindket egyenletet 10zel felszorozzuk a kijelzes miatt (T erteket nem az eleve 10T) ; ;Resz szamitasok: ; a, (T-250) - sub32 ; b, ((10^-1 + 8*10^-4*x)) - linf ; c, 4.05*10^-1 * x - 40 - linf ; d, -2.8*10^-5*x^2 - negyzet eftedi ; ; e, a*b ; ; RHtrue=a*b+c+d ; ; ;* ;* ;* Y = m * x + b ;* 'B' = 0.0008 * x + 0.1 PartB: .db 0x34,0x00,0x00,0x00 ;m = 0x00000034 0.0008 *65536 .db 0x9A,0x19,0x00,0x00 ;b = 0x0000199A 0.1 * 65536 ;* Y = m * x + b ;* 'C' = 0.405 * x - 40 PartC: .db 0xAE,0x67,0x00,0x00 ;m = 0x000067AE 0.405 *65536 .db 0x00,0x00,0xD8,0xFF ;b = 0xFFD80000 -40 * 65536 CalcHum: mov R6,mant1 mov R7,mant1m ;paratartalmat elmentjuk ;homerseklet mar kiszamolva memoriban van clr mant1h clr mant1hh ;ACC1 = ADC value 0..4095 ldi ZL,Low(PartB*2) ;konstansok a 'B' szamitashoz ldi ZH,High(PartB*2) rcall LinearF ;ACC1-ben a 'B' szamitas eredmenye ;itt az 'A' szamitasa jon ; T-250 lds mant2,Temperature+0 lds mant2m,Temperature+1 clr mant2h clr mant2hh ;ACC2 homerseklet subi mant2,250 sbci mant2m,0 sbci mant2h,0 sbci mant2hh,0 ;levontunk 250-t rcall UMUL ;acc1 = E = A * B /*65536 push mant1 push mant1m push mant1h push mant1hh mov mant1,R6 mov mant1m,R7 ;x erteke clr mant1h clr mant1hh ldi ZL,Low(PartC*2) ;konstansok a 'C' szamitashoz ldi ZH,High(PartC*2) rcall LinearF ;ACC1-ben a 'C' szamitas eredmenye pop mant2hh pop mant2h pop mant2m pop mant2 rcall add32 push mant1 push mant1m push mant1h push mant1hh mov mant1,R6 mov mant1m,R7 ;x erteke clr mant1h clr mant1hh mov mant2,R6 mov mant2m,R7 ;x erteke clr mant2h clr mant2hh rcall UMUL ;ACC1 = X^2 ldi mant2,0xD6 ldi mant2m,0x01 ldi mant2h,0x00 ldi mant2hh,0x00 ;2.8*10^-5 * 65536*256 rcall UMUL clr mant2hh mov mant2h,mant1hh mov mant2m,mant1h mov mant2,mant1m ;256-tal osztjuk az eredmenyt pop mant1hh pop mant1h pop mant1m pop mant1 rcall sub32 ;ACC1-ben a vegeredmeny sts Humidity+0,mant1h sts Humidity+1,mant1hh ;65536 valo szorzas miatt csak ; a felo 16 bit kell ret