he313sv1.asm
字号:
tst r16
breq DecodeKey05
tst ErrorByte
brne DecodeKey05 ;故障时按键无效
sbrc KeyByte , KeySameOn
rjmp DecodeKey100
;******************************************************
lds r16 , KeyReadByte
cpi r16 , KeyOnOff
brne DecodeKey20
;-------开/关键--------
mov r16 , SetByte
ldi r17 , 0b00000001
eor r16 , r17
andi r16 , 0b11111101 ;syg debug 09.21
mov SetByte , r16
clr r16
sts SetDelay , r16
sts TimerDispDelay , r16
sbrs setbyte,setonoff
rjmp DecodeKey95
sbrc setbyte,settimerA
rjmp decodekey95
set
bld askbyte,HeaterAsk
clt
bld runbyte,keeprun
; bld SystemByte,beepover
rjmp decodekey95
;********************************************************
DecodeKey20:
sbrs SetByte , SetOnOff
rjmp DecodeKey98
cpi r16 , keyset
brne DecodeKey30
;------;设置键-------
SetKey10:
ldi r16 , SetDelayInit
sts SetDelay , r16
lds r16 , SetSP
inc r16
cpi r16 , 12
brcs SetKey20
clr r16
sts SetDelay , r16
SetKey20:
sts SetSP , r16
lsl r16
ldi r30 , low(SetTab*2)
ldi r31 , high(SetTab*2)
add r30 , r16
brcc SetKey25
inc r31
SetKey25:
lpm r16 , Z+
lpm r17 , Z
sts SetLowLimite , r16
sts SetHighLimite, r17
rjmp SetKey90
SetKey40:
;--------Ask to display timer time-------
ldi r16 , TimerDispInit
sts TimerDispDelay , r16
rcall TimerDispLogic
SetKey90:
rjmp DecodeKey95
;********************************************************************************
DecodeKey30:
cpi r16 , keynow
brne DecodeKey40
;-----即时键--------
ldi r16 , 0b00001100
and r16 , SetByte
tst r16
breq now_key20
now_key10:
ldi r16 , (1<<SetNow)
eor SetByte , r16
ldi r16 , NowDelayInit
sts NowDelay , r16
set
sbrs setbyte,setnow
clt
bld askbyte,HeaterAsk
rjmp decodekey95
now_key20: ;没有设置定时模式
sbrc runbyte,keeprun
rjmp now_key10
rjmp decodekey95
;==============================================
DecodeKey40:
cpi r16 , KeyTime
brne DecodeKey50
;-------定时键------
clr r16
sts SetDelay , r16
sts TimerDispDelay , r16
sbrc SetByte , SetTADis
sbrs SetByte , SetTBDis
rjmp TimerKey10
;TA and TB both be disabled
ldi r16 , 0b01110011
and SetByte , r16
set
bld setbyte,setnow
rjmp TimerKey50
TimerKey10:
sbrs SetByte , SetTADis
sbrc SetByte , SetTBDis
rjmp TimerKey20
;TA and TB both can be enable
ldi r16 , 4
add SetByte , r16
ldi r16 , 0b01001101 ;clear SetNow
and SetByte , r16
set
sbrs setbyte,settimerA
sbrc setbyte,settimerB
rjmp TimerKey50
bld setbyte,setnow
bld askbyte,heaterask
rjmp TimerKey50
TimerKey20:
sbrs SetByte , SetTADis
rjmp TimerKey30
ldi r16 , (1<<SetTimerB)
eor SetByte , r16 ;cpl SetTimerB
rjmp TimerKey40
TimerKey30:
sbrs SetByte , SetTBDis
rjmp TimerKey40
ldi r16 , (1<<SetTimerA)
eor SetByte , r16 ;cpl SetTimerA
TimerKey40:
ldi r16 , 0b01111101 ;clear SetNow
and SetByte , r16
set
sbrc setbyte,setsts
sbrc setbyte,settimera
rjmp decodekey95
sbrs setbyte,settimerb
bld setbyte,setnow
TimerKey50:
rjmp DecodeKey95
;==================================================
DecodeKey50:
cpi r16 , keystsmode
brne DecodeKey60
;-------模式键--------
ldi r16 , (1<<SetSTS)
eor SetByte , r16
clr r16
sts roomtempl,r16
sts roomtemph,r16
clt
bld UserTrigger,time1h
; bld setbyte,setnow
lds r16,roomtempbuf
sbrc setbyte,setsts
sts roomtemp,r16
set
sbrc setbyte,setsts
bld SystemByte,roomtempok
sbrs setbyte,setsts
sbrc setbyte,settimera
rjmp decodekey95
sbrs setbyte,settimerb
bld setbyte,setnow
rjmp DecodeKey95
;*******************************************************
DecodeKey60:
cpi r16 , KeyDown
brne DecodeKey70
;;------下降键-----
lds r16, SetDelay
tst r16
brne DownKey10
rjmp Decodekey98
DownKey10:
ldi r16 , SetDelayInit
sts SetDelay , r16
sbrc SetByte , SetTimerA ;
sbrs SetByte , SetTimerB ;
rjmp DownKey15 ;
lds r16 , SetSP
cpi r16 , 4
brcc DownKey90
DownKey15:
lds r16 , SetSP
ldi r30 , low(SetRamStar -1)
ldi r31 , high(SetRamStar -1)
add r30 , r16
brcc DownKey20
inc r31
DownKey20:
ld r16 , Z
lds r18 , SetLowLimite
lds r19 , SetHighLimite
cp r18 , r16
brcc DownKey50 ;setram<=lowlimite
lds r17 , SetSP
cpi r17, 1
brne DownKey40
subi r16,1
rjmp DownKey60
DownKey40:
dec r16
rjmp DownKey60
DownKey50:
mov r16 , r19
DownKey60:
st Z , r16
rjmp UpKey90
DownKey90:
rjmp DecodeKey99
;**********************************************************************************
DecodeKey70:
cpi r16 , KeyUp
brne DecodeKey80
lds r16, SetDelay
tst r16
brne UpKey10
rjmp Decodekey98
UpKey10:
;;------上升-----
ldi r16 , SetDelayInit
sts SetDelay , r16
sbrc SetByte , SetTimerA ;
sbrs SetByte , SetTimerB ;
rjmp UpKey15 ;
lds r16 , SetSP
cpi r16 , 4
brcc UpKey90
UpKey15:
lds r16 , SetSP
ldi r30 , low(SetRamStar -1)
ldi r31 , high(SetRamStar -1)
add r30 , r16
brcc UpKey20
inc r31
UpKey20:
ld r16 , Z
lds r18 , SetLowLimite
lds r19 , SetHighLimite
cp r16 , r19
brcc UpKey50 ;setram>=Highlimite
lds r17 , SetSP
cpi r17, 1
brne UpKey40
ldi r17,1
add r16,r17
rjmp UpKey60
UpKey40:
inc r16
rjmp UpKey60
UpKey50:
mov r16 , r18
UpKey60:
st Z , r16
UpKey90:
lds r16,setsp
cpi r16,1
brne decodekey80
set
bld setbyte,setnow
bld askbyte,heaterask
clt
bld runbyte,keeprun
DecodeKey80:
rjmp DecodeKey99
Decodekey100:
sbrs SetByte , SetOnOff
rjmp DecodeKey99
lds r16,setdelay
tst r16
breq Decodekey99
lds r16 , KeyReadByte
rjmp DecodeKey60
Decodekey90:
; ldi r16 , SetDelayInit
; sts SetDelay , r16
Decodekey95:
Decodekey99:
Decodekey98:
ret
;-------------------------------------------
Delay10us:
nop
nop
nop
nop
nop
Delay5us:
nop
nop
nop
ret
;-------------------------------------------;Input:r16
CheckTemp1:
ldi r30 , low(TempTab1*2)
ldi r31 , high(TempTab1*2)
CheckTemp10_1:
lpm r17 , Z+
cp r17 , r16
brcc CheckTemp10_1
subi r30 , Low(TempTab1*2)+1
ret
;===========================================================
;Input:r16
CheckTemp:
ldi r30 , low(TempTab*2)
ldi r31 , high(TempTab*2)
CheckTemp10:
lpm r17 , Z+
cp r17 , r16
brcs CheckTemp10
subi r30 , Low(TempTab*2)+1
ret
;-------------------------------------------
ReadTemp:
;
sbrs UserTrigger , ADCTrigger
rjmp ReadTemp90
clt
bld UserTrigger , ADCTrigger
lds r18 , WaterADCL
lds r19 , WaterADCH
ldi r16 , 0b01100000|WaterSenLine
rcall ADCRead
sts WaterADCL , r18
sts WaterADCH , r19
rcall delay10us
rcall delay10us
rcall delay10us
rcall delay10us
lds r18 , RoomADCL
lds r19 , RoomADCH
ldi r16 , 0b01100000|RoomSenLine
rcall ADCRead
sts RoomADCL , r18
sts RoomADCH , r19
ReadTemp40:
lds r16 , ADCSP
inc r16
sts ADCSP , r16
brne ReadTemp90
ReadTemp45:
;-----256 times ADC collection over-------
lds r16,roomadch
cpi r16 , RoomLowErr
brcs ReadTemp46
cpi r16 , RoomHighErr
brcc ReadTemp46
rcall CheckTemp1
sts RoomTempBuf , r30 ;检测室温
rjmp ReadTemp47
ReadTemp46:
ldi r16 , 25
sts RoomTempBuf , r16
ReadTemp47:
lds r16 , WaterADCH
cpi r16 , ADCLowErr
brcs ReadTemp50
cpi r16 , ADCHighErr
brcc ReadTemp50
com r16
rcall CheckTemp
sts WaterTemp , r30
rjmp ReadTemp55
ReadTemp50:
set
bld ErrorByte , WaterSenErr
ldi r16 , Zero + 25
sts WaterTemp , r16
ReadTemp55:
sbrc SystemByte , TempReadOK
rjmp ReadTemp60
clt
bld ErrorByte , LeakErr
lds r16 , WaterTemp
sts TempRem0 , r16
sts TempRem1 , r16
sts TempRem2 , r16
ReadTemp60:
set
bld SystemByte , TempReadOK
ldi r16 , 0
sts WaterADCH , r16
sts WaterADCL , r16
sts RoomADCH , r16
sts RoomADCL , r16
rjmp ReadTemp90
ReadTemp70:
ReadTemp90:
ret
;------------------------------------------
ADCRead:
out ADMUX , r16
ldi r16 , 0b10000100
out ADCSR , r16
rcall Delay10us
rcall Delay10us
rcall Delay10us
sbi ADCSR , ADSC
ADCLoop1:
sbic ADCSR , ADSC
rjmp ADCLoop1
in r20 , ADCH
sbi ADCSR , ADSC
ADCLoop2:
sbic ADCSR , ADSC
rjmp ADCLoop2
in r21 , ADCH
sbi ADCSR , ADSC
ADCLoop3:
sbic ADCSR , ADSC
rjmp ADCLoop3
in r22 , ADCH
cp r20 , r21
brcs ReadADC10
mov r16 , r20
mov r20 , r21
mov r21 , r16
ReadADC10:
cp r21 , r22
brcs ReadADC30
mov r16 , r21
mov r21 , r22
mov r22 , r16
cp r20 , r21
brcs ReadADC30
mov r16 , r20
mov r20 , r21
mov r21 , r16
ReadADC30:
add r18 , r21
brcc ReadADC60
inc r19
ReadADC60:
ret
;-------------------------------------------
Driver:
sbrs setbyte,setonoff
rjmp driver100
clt
bld AskByte , UpAsk
bld AskByte , DownAsk
sbrs AskByte , HeaterAsk
rjmp Driver09
Driver02:
set
sbrc ModeByte , UpMode
bld AskByte , UpAsk
sbrc ModeByte , DownMode
bld AskByte , DownAsk
Driver09:
sbrs AskByte,UpAsk
sbrc AskByte,DownAsk
rJMP Driver091
clt
bld AskByte,NAsk
Driver091:
lds r16 , RelayDelay
tst r16
breq Driver10
dec r16
sts RelayDelay , r16
rjmp Driver90
Driver10:
mov r16 , OutByte
eor r16 , AskByte
sbrs r16 , NAsk
rjmp Driver20
ldi r18 , (1<<NAsk)
eor OutByte , r18
rjmp Driver80
Driver20:
sbrs r16 , UpAsk
rjmp Driver30
ldi r18 , (1<<UpAsk)
eor OutByte , r18
rjmp Driver80
Driver30:
sbrs r16 , DownAsk
rjmp Driver90
ldi r18 , (1<<DownAsk)
eor OutByte , r18
Driver80:
ldi r16 , RelayDelayInit
sts RelayDelay , r16
Driver90:
sbrs OutByte , DownAsk
cbi OutPort , upline;DownLine
sbrc OutByte , DownAsk
sbi OutPort , upline;DownLine
; sbrs OutByte , UpAsk
; cbi OutPort , UpLine
; sbrc OutByte , UpAsk
; sbi OutPort , UpLine
sbrs OutByte , NAsk
rjmp Driver95
sbrc BlinkByte0 ,Blink2ms
cbi OutPort , NLine
sbrs BlinkByte0 ,Blink2ms
Driver95:
sbi OutPort , NLine
Driver99:
ret
Driver100:
cbi OutPort , NLine
cbi OutPort , upline
ret
;-------------------------------------------
CheckSum:
;check sum from checkramstart to checkramend
ldi Reg0 , 0 ;output low
ldi Reg1 , 0 ;output high
ldi Reg2 , 0
ldi Reg3 , 0
ldi r29 , CheckRamEnd-CheckRamStart+1 ;length
ldi r30 , low(CheckRamStart) ;start address low
ldi r31 , high(CheckRamStart) ;start address high
CheckSum10:
ld Reg2 , Z+
ADD Reg0,Reg2
ADC Reg1,Reg3
dec r29
brne CheckSum10
ret
;-------------------------------------------
;Clear r0~r28,and $60~$160
ClearRam:
ldi r28 , 0 ;full contents
ldi r29 , 27 ;length
ldi r30 , 0 ;start address low
ldi r31 , 0 ;start address high
ClearRam10:
st Z+ , r28
dec r29
brne ClearRam10
ldi r29 , $ff
ldi r30 , $60
ldi r31 , $00
ClearRam20:
st Z+ , r28
dec r29
brne ClearRam20
ret
ResetRam:
ldi r28 , 0 ;full contents
ldi r29 , 13 ;length
ldi r30 , 0 ;start address low
ldi r31 , 0 ;start address high
ResetRam10:
st Z+ , r28
dec r29
brne ResetRam10
ldi r29 , $30
ldi r30 , $60
ldi r31 , $00
ResetRam20:
st Z+ , r28
dec r29
brne ResetRam20
ret
;========================================================
STSMODE:
sbrc setbyte,setsts
sbrs SystemByte,roomtempok
rjmp STSMODE90
clt
bld systembyte,roomtempok
lds r16,roomtemp
cpi r16,15
brcs STSMODE30
cpi r16,26
brcc STSMODE20
ldi r16,SettempSBothA
rjmp STSMODE50
STSMODE20:
ldi r16,SettempEstival
rjmp STSMODE50
STSMODE30:
ldi r16,SettempWinter
STSMODE40:
STSMODE50:
sts settempdefault,r16
STSMODE90:
RET
;====================================================================
;ROOMTEMP的平均值
RoomTemplogic:
sbrc setbyte,setsts
sbrs UserTrigger,time1h
rjmp RoomTempLogic90
clt
bld UserTrigger,time1h
lds r16,roomtempL
lds r17,roomtempH
lds r18,roomtempbuf
clr r19
add r16 , r18 ;低8位寄存器相加
adc r17 , r19 ;高8位寄存器相加
sts roomtempl,r16
sts roomtemph,r17
lds r16,roomtempcnt
inc r16
sts roomtempcnt,r16
cpi r16,24
brne roomtemplogic90
clr reg0
lds r16,roomtempl
roomtemplogic10:
sec
subi r16,24
brcs roomtemplogic20
inc reg0
rjmp roomtemplogic10
roomtemplogic20:
ldi r17 ,24
add r16,r17
lds r17,roomtemph
tst r17
breq roomtemplogic30
dec r17
sts roomtempH,r17
inc reg0
ldi r17,220
add r16,r17
rjmp roomtemplogic10
roomtemplogic30:
clc
rol r16 ;左移一位*2
sec
subi r16,24
brcs roomtemplogic40
inc reg0
roomtemplogic40:
mov r16,reg0
sts roomtemp,r16
set
bld systembyte,roomtempok
clr r16
sts roomtempL,R16
sts roomtempH,r16
sts roomtempcnt,r16
RoomTemplogic90:
ret
;==================================================================
;-------------------------------------------
; end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -