📄 induction_cooker_v41.asm
字号:
LDA PWM_STATUS ,00H ;判断软启动是否结束
BA0 SOFT_END ;软启动已经结束
LDA PWM_STATUS ,00H ;判断软启动20MS定时已满否?
BA3 $+2 ;定时已到
JMP SOFT_END ;定时没有到
ANDIM PWM_STATUS ,0111B ;清除20MS定时已满标志
LDA PD0L ,00H ;PWM+1
STA TEMP ,00H
ADIM TEMP ,02H
LDI TEMP0 ,00H
ADCM PD0M ,00H
LDI TEMP0 ,00H
ADCM PD0H ,00H
LDA TEMP ,00H
STA PD0L ,00H
LDA PD0H ,00H ;比较高位是否达到
STA COMP1 ,00H
LDI COMP2 ,01H
CALL COMPARE ;比较数据
LDA COMPARE_STATUS ,00H
BA1 SOFT_END
LDA PD0L ,00H
STA ACCOMP1 ,01H ;比较当前的PWM和火力点的最小PWM比较,如果一样,那么软启动结束
LDA PD0M ,00H
STA ACCOMP2 ,01H
LDI TBR ,0CH
LDA HEAT_POINT ,00H ;判断当前的火力点
CALL 07C0H ;存放220V下的PWM参数值
STA ACCOMP4 ,01H
LDA TBR ,00H
STA ACCOMP3 ,01H
CALL ACCOMPARE ;比较
LDA COMPARE_STATUS ,00H ;读取比较结果
BA2 $+2
JMP SOFT_END
ORIM PWM_STATUS ,0001B ;设置软启动结束
JMP SOFT_END
SOFT_END:
RTNI
;;*****************************************************
;保温子函数:每一档保温点都有一个上限和一个下限.锅底温度
;高于这个上限的时候,关闭IGBT,锅底温度低于这个下限的时候
;开启IGBT.实际温度和保温的温度相差越大,加热的火力就越大
;;*****************************************************
HEAT_KEEP:
LDA WRONG ,00H ;如果出现故障,那么保温不能设置PWM参数
BNZ KEEPHEAT3
LDA EVEN_STATUS ,00H ;如果锅底平均值没有求取完毕,那么不用处理这一段
BA0 $+2
JMP KEEPHEAT3
LDI TBR ,0AH
LDA SHOW_POINT ,00H ;判断当前的保温温度点
CALL 07A0H
STA TEMP0 ,00H
LDA TBR ,00H
STA TEMP ,00H
CALL ARRIVE
LDA MAIN_STATUS ,00H ;检测保温是否达到设定值
BA3 KEEPHEAT4
LDI TBR ,0AH
LDA SHOW_POINT ,00H
CALL 07A0H
STA DELTA_H ,00H
LDA TBR ,00H
STA DELTA_M ,00H
LDA TPER0A ,01H
SUBM DELTA_M ,00H
LDA TPER0B ,01H
SBCM DELTA_H ,00H
SBI DELTA_H ,04H
BNC $+2
LDI DELTA_H ,0011B
SBI SHOW_POINT ,06H
BC $+3 ;大于
ADIM DELTA_H ,03H
JMP $+2
ADIM DELTA_H ,06H
STA HEAT_POINT ,00H
ORIM PWM_STATUS ,0010B ;设置需要开启IGBT标志
JMP KEEPHEAT3
KEEPHEAT4:
ANDIM PWM_STATUS ,1100B ;清除需要开启IGBT标志
KEEPHEAT3:
RTNI
;;*****************************************************
;ARRIVE THE POINT
;;*****************************************************
ARRIVE:
LDA TPER0A ,01H ;比较当前的温度和设定的保温温度上限的大小
STA ACCOMP1 ,01H
LDA TPER0B ,01H
STA ACCOMP2 ,01H
ADI TEMP ,00H
STA ACCOMP3 ,01H
LDA TEMP0 ,00H
STA COMP2 ,00H
LDI COMP1 ,00H
ADCM COMP2 ,00H
STA ACCOMP4 ,01H
CALL ACCOMPARE ;比较
LDA COMPARE_STATUS ,00H ;读取比较结果
BA2 KEEPHEAT1 ;当前温度值高于设定温度值上限
LDA TPER0A ,01H ;比较当前的温度和设定的保温温度下限的大小
STA ACCOMP1 ,01H
LDA TPER0B ,01H
STA ACCOMP2 ,01H
SBI TEMP ,02H
STA ACCOMP3 ,01H
LDA TEMP0 ,00H
STA COMP2 ,00H
LDI COMP1 ,00H
SBCM COMP2 ,00H
STA ACCOMP4 ,01H
CALL ACCOMPARE ;比较
LDA COMPARE_STATUS ,00H ;读取比较结果
BA1 KEEPHEAT2 ;比设定值的下限小
RTNI
KEEPHEAT1:
ORIM MAIN_STATUS ,1000B ;设定温度达到设定值标志
RTNI
KEEPHEAT2:
ANDIM MAIN_STATUS ,0111B ;清除保温达到设定值
RTNI
;;*****************************************************
;电压平均值子函数:把256次的AD采样值相加
;;*****************************************************
V_EVEN:
LDA ADCDL ,00H ;把每一次采集到的数据相加,一直+256次
ADDM ACVOL_0 ,01H
LDA ADCDH ,00H
ADCM ACVOL_1 ,01H
LDI TEMP0 ,00H
ADCM ACVOL_2 ,01H
LDI TEMP0 ,00H
ADCM ACVOL_3 ,01H
RTNI
;;*****************************************************
;锅底温度平均值子函数:把256次的AD采样值相加
;;*****************************************************
T_EVEN:
LDA ADCDL ,00H ;把AD采样值和前面的值之和相加
ADDM EVEN_T0 ,01H
LDA ADCDH ,00H
ADCM EVEN_T1 ,01H
LDI TEMP0 ,00H
ADCM EVEN_T2 ,01H
LDI TEMP0 ,00H
ADCM EVEN_T3 ,01H
RTNI
;;*****************************************************
;IGBT温度平均值子函数:
;;*****************************************************
I_EVEN:
LDA ADCDL ,00H ;把AD采样值和前面的值之和相加
ADDM EVEN_I0 ,01H
LDA ADCDH ,00H
ADCM EVEN_I1 ,01H
LDI TEMP0 ,00H
ADCM EVEN_I2 ,01H
LDI TEMP0 ,00H
ADCM EVEN_I3 ,01H
RTNI
;;*****************************************************
;电流平均值子函数:把256次的AD采样值相加
;;*****************************************************
C_EVEN:
LDA ADCDL ,00H ;求取256次平均值
ADDM CURRE_0 ,01H
LDA ADCDH ,00H
ADCM CURRE_1 ,01H
LDI TEMP0 ,00H
ADCM CURRE_2 ,01H
LDI TEMP0 ,00H
ADCM CURRE_3 ,01H
RTNI
;;*****************************************************
;锅底温度采样子函数:程序每循环一次,AD采样完成一次
;;*****************************************************
PAN_T_ADC:
CALL T_EVEN ;求得256次采样的平均值
LDI ADCS ,1001B ;选择第二路进行AD转化(IGBT温度)
LDI GOT ,1110B ;开始转化
LDI AD_STATUS ,0010B ;设置第二路AD转化标志
LDA EVEN_STATUS ,00H ;判断IGBT温度采样平均值是否求取完毕
BA0 $+2
JMP TP2 ;平均值没有求取完毕,那么不进行处理
ANDIM EVEN_STATUS ,1110B
LDA TPER0B ,01H ;锅底的热敏电阻断路,关机报警
BNZ TP3
LDA TPER0A ,01H
BNZ TP3
CALL CLOSE_M
LDI FAULT_STATUS ,03H ;设置故障F3
RTNI
TP3:
LDA TPER0B ,01H
STA TEMP ,00H
SBI TEMP ,0FH ;锅底的热敏电阻短路,关机报警
BNZ TP4
LDA TPER0A ,01H
STA TEMP ,00H
SBI TEMP ,0FH
BNZ TP4
CALL CLOSE_M
LDI FAULT_STATUS ,04H ;设置故障F4
RTNI
TP4:
LDA TPER0A ,01H ;锅底温度值与E0H比较,如果高于这一个值,那么就是锅底温度过高故障
STA ACCOMP1 ,01H
LDA TPER0B ,01H
STA ACCOMP2 ,01H
LDI TEMP0 ,00H
STA ACCOMP3 ,01H
LDI TEMP0 ,0EH
STA ACCOMP4 ,01H
CALL ACCOMPARE
LDA COMPARE_STATUS ,00H
BA2 TP1 ;过底温度过高
LDA TPER0A ,01H ;锅底温度值与D0H比较,如果低于这一个值,那么清除锅底温度过高
STA ACCOMP1 ,01H
LDA TPER0B ,01H
STA ACCOMP2 ,01H
LDI TEMP0 ,00H
STA ACCOMP3 ,01H
LDI TEMP0 ,0DH
STA ACCOMP4 ,01H
CALL ACCOMPARE
LDA COMPARE_STATUS ,00H
BA2 TP2 ;过底温度过高
ANDIM WRONG ,0111B ;清除锅底温度过高故障
JMP TP2
TP1:
ORIM WRONG ,1000B ;设置锅底温度过高故障
TP2:
RTNI
;;*****************************************************
;电流采样子函数:每一次采集完毕数据都要迳行处理,检测电流
;的变化不停的修正PWM参数
;;*****************************************************
CURRENT_ADC:
CALL C_EVEN ;求得256次采样的平均值
LDA ADCDH ,00H ;读取电流
STA NOWCURREB ,01H
LDA ADCDL ,00H
STA NOWCURREA ,01H
LDI ADCS ,1000B ;选择第一路进行AD转化(锅底温度)
LDI GOT ,1110B ;开始转化
LDI AD_STATUS ,0001B ;设置第一路AD转化标志
CALL CURRENT ;电流处理子函数
RTNI
;;*****************************************************
;IGBT温度采样子函数:程序每循环一次,AD采样完成一次
;;*****************************************************
IGBT_T_ADC:
CALL I_EVEN ;求得256次采样的平均值
LDI ADCS ,1011B ;选择第三路进行AD转化(电罔电压)
LDI GOT ,1110B ;开始转化
LDI AD_STATUS ,0100B ;设置第三路AD转化标志
LDA EVEN_STATUS ,00H ;判断IGBT温度采样平均值是否求取完毕
BA1 $+2
JMP ITP2 ;平均值没有求取完毕,那么不进行处理
ANDIM EVEN_STATUS ,1101B
LDA TPER1A_B ,01H
BNZ IP3
LDA TPER1B_B ,01H
BNZ IP3
LDA TPER1A ,01H ;IGBT热敏电阻断路,关机报警
BNZ IP3
LDA TPER1B ,01H
BNZ IP3
CALL CLOSE_M
LDI FAULT_STATUS ,01H ;设置故障F1
RTNI
IP3:
LDA TPER1B ,01H
STA TEMP ,00H
SBI TEMP ,0FH ;IGBT热敏电阻短路,关机报警
BNZ IP4
LDA TPER1A ,01H
STA TEMP ,00H
SBI TEMP ,0FH
BNZ IP4
CALL CLOSE_M
LDI FAULT_STATUS ,02H ;设置故障F2
RTNI
IP4:
LDA TPER1A ,01H ;IGBT温度过高,那么IGBT温度故障计数器+1
STA ACCOMP1 ,01H
LDA TPER1B ,01H
STA ACCOMP2 ,01H
LDI TEMP0 ,05H
STA ACCOMP3 ,01H
LDI TEMP0 ,08H
STA ACCOMP4 ,01H
CALL ACCOMPARE
LDA COMPARE_STATUS ,00H
BA2 ITP1 ;IGBT温度过高
LDA TPER1A ,01H ;IGBT温度过高,那么IGBT温度故障计数器+1
STA ACCOMP1 ,01H
LDA TPER1B ,01H
STA ACCOMP2 ,01H
LDI TEMP0 ,00H
STA ACCOMP3 ,01H
LDI TEMP0 ,08H
STA ACCOMP4 ,01H
CALL ACCOMPARE
LDA COMPARE_STATUS ,00H
BA2 ITP2 ;IGBT温度过高
ANDIM WRONG ,1011B ;清除IGBT温度故障
JMP ITP2
ITP1:
ORIM WRONG ,0100B ;设置IGBT温度故障
ITP2:
RTNI
;;*****************************************************
;比较子函数:2个8位数比较,>那么COMPARE_STATUS=04H,<那么
;COMPARE_STATUS=02H,=那么COMPARE_STATUS=01H
;;*****************************************************
ACCOMPARE:
LDA ACCOMP2 ,01H ;读取比较数高位
STA COMP1 ,00H
LDA ACCOMP4 ,01H ;读取被比较数高位
STA COMP2 ,00H
CALL COMPARE ;比较
LDA COMPARE_STATUS ,00H ;读取比较结果
BA2 ACCOM1 ;大于
BA1 ACCOM2 ;小于
LDA ACCOMP1 ,01H ;读取比较数低位
STA COMP1 ,00H
LDA ACCOMP3 ,01H ;读取被比较数低位
STA COMP2 ,00H
CALL COMPARE ;比较
LDA COMPARE_STATUS ,00H ;读取比较结果
BA2 ACCOM1 ;大于
BA1 ACCOM2 ;小于
LDI COMPARE_STATUS ,01H ;等于
JMP ACCOM3
ACCOM1:
LDI COMPARE_STATUS ,04H
JMP ACCOM3
ACCOM2:
LDI COMPARE_STATUS ,02H
ACCOM3:
RTNI
;;*****************************************************
;比较子函数:2个4位数比较,>那么COMPARE_STATUS=04H;<那么
;COMPARE_STATUS=02H,=那么COMPARE_STATUS=01H
;;*****************************************************
COMPARE:
LDI COMPARE_STATUS ,00H ;清零结果
LDA COMP2 ,00H ;备比较数高位
SUB COMP1 ,00H ;采样数据高位
BAZ $+4
BC $+5
ORIM COMPARE_STATUS ,02H ;小于
JMP $+4
ORIM COMPARE_STATUS ,01H ;等于
JMP $+2
ORIM COMPARE_STATUS ,04H ;大于
RTNI
;;*****************************************************
;电罔电压AD采样子函数:每当程序循环一次,AD采样一次,当采
;集完毕256次后,判断是否出现电压故障
;;*****************************************************
ACVOLTAGE_ADC:
CALL V_EVEN ;求平均值
LDI ADCS ,1100B ;选择第四路进行AD转化(电流)
LDI GOT ,1110B ;开始转化
LDI AD_STATUS ,1000B ;设置第四路AD转化标志
LDA EVEN_STATUS ,00H ;判断电罔电压256次是否求取完毕
BA2 $+2 ;求取完毕
JMP ACC2 ;没有求取完毕
ANDIM EVEN_STATUS ,1011B ;清除平均值结束标志
LDA ACVOLA ,01H ;读取采集到的平均电压
STA ACCOMP1 ,01H
LDA ACVOLB ,01H
STA ACCOMP2 ,01H
LDI TEMP0 ,V_L_ON_L ;设置低压关闭们限
STA ACCOMP3 ,01H
LDI TEMP0 ,V_L_ON_H
STA ACCOMP4 ,01H
CALL ACCOMPARE
LDA COMPARE_STATUS ,00H
BA2 ACC1 ;电压高于175V
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -