📄 detect.asm
字号:
jmp cookercheck90
;-----
bclr onecycleflag
bclr checkcookerflag
;-----
cookercheck90:
ret
;**********************************************
;Name :mnADconvert
;Function:A/D转换四次,去掉最大值和最小值,然后求平均值
;Input :
;Output :
;Register Used:var1
;***********************************************
mnADconvert:
b0bset fgchs ;enable ain
b0bset fadenb ;enable ad
call delay100us ;stable ad circuit
;----
convert_again:
b0bset fads ;start convert
waitadchigh:
b0bts1 feoc ;check finish convert or not
jmp waitadchigh
bclr feoc
;----
mov a,adr ;send A/D value to temp
and a,#0fh
mov ADCtempl,a
swap adb
mov ADCtemph,a
and a,#0f0h
or ADCtempl,a
mov a,#0fh
and ADCtemph,a
;----
;开始比较
b0bts0 startcompflag
jmp comparevalue
b0bts0 sendvalueflag
jmp sendnextvalue
;----
bset sendvalueflag
mov_ ADCmaxvaluel,ADCtempl
mov_ ADCmaxvalueh,ADCtemph
jmp decADCcount
;-------------------------------
sendnextvalue:
bset startcompflag
mov a,ADCtempl
sub a,ADCmaxvaluel
mov a,ADCtemph
sbc a,ADCmaxvalueh
b0bts1 fc
jmp sendminvalue
mov_ ADCminvaluel,ADCmaxvaluel
mov_ ADCminvalueh,ADCmaxvalueh
mov_ ADCmaxvaluel,ADCtempl
mov_ ADCmaxvalueh,ADCtemph
jmp decADCcount
;-----
sendminvalue:
mov_ ADCminvaluel,ADCtempl
mov_ ADCminvalueh,ADCtemph
jmp decADCcount
;--------------------------------
comparevalue:
mov a,ADCtempl
sub a,ADCmaxvaluel
mov a,ADCtemph
sbc a,ADCmaxvalueh
b0bts1 fc
jmp compareminvalue
mov a,ADCmaxvaluel
add ADCvaluel,a
mov a,ADCmaxvalueh
adc ADCvalueh,a
mov_ ADCmaxvaluel,ADCtempl
mov_ ADCmaxvalueh,ADCtemph
jmp decADCcount
;--------------------------------
compareminvalue:
mov a,ADCtempl
sub a,ADCminvaluel
mov a,ADCtemph
sbc a,ADCminvalueh
b0bts0 fc
jmp Addvalue
mov a,ADCminvaluel
add ADCvaluel,a
mov a,ADCminvalueh
adc ADCvalueh,a
mov_ ADCminvaluel,ADCtempl
mov_ ADCminvalueh,ADCtemph
jmp decADCcount
;--------------------------------
Addvalue:
mov a,ADCtempl
add ADCvaluel,a
mov a,ADCtemph
adc ADCvalueh,a
;--------------------------------
decADCcount:
decms ADCcnt
jmp mnADconvert90
;----
bset ADCendflag ;set A/D convert over
b0bclr fgchs ;disable ain
b0bclr fadenb ;disable ad
clr p4con ;release AIN pin
;----
bclr fc
rrcm ADCvalueh
rrcm ADCvaluel ;AD/2
;----
mnADconvert90:
ret
;**********************************************
;Name :mnpwmpulseset
;Function:pwm adjust
;Input :temp3,temp2,temp1,temp0
;Output :
;Register Used:var1,var2,var3
;***********************************************
mnpwmpulseset:
mov_ var1,#ADC50Wvaluel
mov_ var2,#ADC50Wvaluem
mov_ var3,#ADC50Wvalueh
b0bts0 beyondflag
jmp lowervaluecheck
;----------------------------------------
;uppervaluecheck
mov a,powervaluel
add var1,a
mov a,powervaluem
adc var2,a
mov a,powervalueh
adc var3,a
;----
mov a,temp0
sub a,var1
mov a,temp1
sbc a,var2 ;temp2,1,0-powervalueh,powervaluem,powervaluel
mov a,temp2
sbc a,var3
b0bts1 fc
jmp mnpwmpulseset70 ;<
;----- ;>
bset beyondflag
mov a,pwmpulsebuf ;dec pwm pulse width
sub a,#10
b0bts1 fc
jmp lessvalue
decms pwmpulsebuf
nop
jmp sendvolvalue
;---------------------------------------------
lowervaluecheck:
mov a,powervaluel
sub var1,a
mov a,powervaluem
sbc var2,a
mov a,powervalueh
sbc var3,a
;----
mov a,temp0
sub a,var1
mov a,temp1
sbc a,var2 ;temp2,1,0-powervalueh,powervaluem,powervaluel
mov a,temp2
sbc a,var3
b0bts0 fc
jmp mnpwmpulseset80 ;>
;----
incvolpwm: ;<
mov a,pwmpulsebuf
sub a,#58
b0bts0 fc
jmp beyondrange
incms pwmpulsebuf
nop
jmp sendvolvalue
;----
beyondrange:
mov_ pwmpulsebuf,#58
jmp sendvolvalue
;----
lessvalue:
mov_ pwmpulsebuf,#10
;----
sendvolvalue:
mov_ tc1r,pwmpulsebuf
ret
;----
mnpwmpulseset70:
bset beyondflag
ret
;----
mnpwmpulseset80:
bclr beyondflag
;----
mnpwmpulseset90:
ret
;**********************************************
;Name :voltageanalyse
;Function:市电电压分析
;Input :
;Output :
;Register Used:temp0,temp1
;***********************************************
voltageanalyse:
;-----
;过压分析
mov_ temp0,#uppervaluel
mov_ temp1,#uppervalueh
;----
mov a,ADCvaluel
sub a,temp0
mov a,ADCvalueh
sbc a,temp1
b0bts0 fc
jmp beyondvolt ;过压
;----
mov_ temp0,#lowervaluel
mov_ temp1,#lowervalueh
;----
mov a,ADCvaluel
sub a,temp0
mov a,ADCvalueh
sbc a,temp1
b0bts0 fc
jmp normalvolt ;电压正常
;----
;欠压
b0bts0 pushvalueflag
ret
bset pushvalueflag
call pushsegvalue
mov_ seg2buf,#Errorvalue4
mov_ seg1buf,#Errorvalue
bset abnormalvoltfalg
bclr startflag
ret
;----
;过压
beyondvolt:
b0bts0 pushvalueflag
ret
bset pushvalueflag
call pushsegvalue
mov_ seg2buf,#Errorvalue3
mov_ seg1buf,#Errorvalue
bset abnormalvoltfalg
bclr startflag
ret
normalvolt:
b0bts1 abnormalvoltfalg
ret
bclr abnormalvoltfalg
bclr pushvalueflag
bclr detecttimeflag
bclr checkcookerflag
bclr cyclestartflag
bclr onecycleflag
call popsegvalue
bclr secondflag
ret
;**********************************************
;Name :currentanalyse
;Function:过流分析
;Input :
;Output :
;Register Used:temp0,temp1
;***********************************************
currentanalyse:
mov_ temp0,#currentvaluel
mov_ temp1,#currentvalueh
;----
mov a,ADCvaluel
sub a,temp0
mov a,ADCvalueh
sbc a,temp1
b0bts1 fc
ret
;----
;过流
mov_ seg2buf,#Errorvalue0
mov_ seg1buf,#Errorvalue
bset malfunctionflag
ret
;**********************************************
;Name :hotestanalyse
;Function:陶瓷面板过热分析
;Input :
;Output :
;Register Used:temp0,temp1
;***********************************************
hotestanalyse:
mov_ temp0,#hotestvaluel
mov_ temp1,#hotestvalueh
;----
mov a,ADCvaluel
sub a,temp0
mov a,ADCvalueh
sbc a,temp1
b0bts1 fc
ret
;----
;过热
mov_ seg2buf,#Errorvalue6
mov_ seg1buf,#Errorvalue
bset malfunctionflag
ret
;**********************************************
;Name :sensoranalyse
;Function:传感器分析
;Input :
;Output :
;Register Used:temp0,temp1
;***********************************************
sensoranalyse:
;----
;开路分析
mov_ temp0,#openvaluel
mov_ temp1,#openvalueh
;----
mov a,ADCvaluel
sub a,temp0
mov a,ADCvalueh
sbc a,temp1
b0bts1 fc
jmp openproblem ;传感器开路
;----
;短路分析
mov_ temp0,#shortvaluel
mov_ temp1,#shortvalueh
;----
mov a,ADCvaluel
sub a,temp0
mov a,ADCvalueh
sbc a,temp1
b0bts1 fc
ret ;传感器正常
;----
;传感器短路
mov_ seg2buf,#Errorvalue6
mov_ seg1buf,#Errorvalue
bset malfunctionflag
ret
;------------------
;传感器开路
openproblem:
mov_ seg2buf,#Errorvalue5
mov_ seg1buf,#Errorvalue
bset malfunctionflag
ret
;**********************************************
;Name :ADC16x16bit
;Function:两个无符号16bit数相乘temp3,2,1,0=ADCvolbufh,l X ADCcurbufh,l
;Input :temp5,temp4,ADCvolbufh,ADCvolbufl;ADCcurbufh,ADCcurbufl
;Output :temp3,temp2,temp1,temp0
;Register Used:var1
;***********************************************
ADC16x16bit:
mov a,#16
mov var1,a
clr temp0
clr temp1
clr temp2
clr temp3
clr temp4
clr temp5
;-----
loop_mul:
bclr fc
rrcm ADCcurbufh
rrcm ADCcurbufl
b0bts1 fc
jmp adjustposition
;-----
mov a,ADCvolbufl
add temp0,a
mov a,ADCvolbufh
adc temp1,a
mov a,temp4
adc temp2,a
mov a,temp5
adc temp3,a
;-----
adjustposition:
bclr fc
rlcm ADCvolbufl
rlcm ADCvolbufh
rlcm temp4
rlcm temp5
decms var1
jmp loop_mul
ADC16x16bit90:
ret
;********************************************************
;********************************************************
initADCbuf:
mov_ ADCcnt,#4
clr ADCvaluel
clr ADCvalueh
clr ADCtempl
clr ADCtemph
bclr sendvalueflag
bclr startcompflag
ret
;********************************************************
;********************************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -