📄 ada682.asm
字号:
MOV A,TIME3
XOR A,@0X3C
JBS STATUS,2 ;是否1H到了?
JMP ZDFW1
CLR TIME3 ;清分钟计数寄存器
INC TIME4 ;小时加1
MOV A,TIME4
XOR A,DSCS
JBS STATUS,2
JMP ZDFW1
CALL SPE1 ;定时时间到,关闭电机及负离子发生器工作
ZDFW1:MOV A,@0X3C
MOV TCC,A
ZD0:JBS IMR,1 ;判断是否PORT6输入变化中断?
JMP ZD1 ;不是,转ZD1
BC IMR,1 ;是,ICIF中断标志位清0
ZD1:JBS IMR,2 ;判断是否外部中断?
JMP ZD2 ;不是,转ZD2
BC IMR,2 ;是,EXIF中断标志位清0
ZD2:JBS IMR,3 ;判断是否模拟到数字转换完成的的中断标志?
JMP ZD3 ;不是,转ZD3
BC IMR,3 ;是,ADIF中断标志位清0
JBS ZTBZ2,0 ;判断是否开机第一次测量?
JMP ZD2_1 ;否,转ZD2_1
MOV A,ADC_L ;是,保存电压作为基准电压
MOV JZDY_L,A
MOV A,ADC_H
MOV JZDY_H,A
JMP ZD3
ZD2_1:CALL DFBJ ;ADC测量并自动选择电机的相应风速工作
ZD3:JBS IMR,4 ;判断是否PWM1(脉冲宽度调制器)中断标志?
JMP ZD4 ;不是,转ZD4
BC IMR,4 ;是,清PWM1IF中断标志位
CALL INIT_IR
JBS ZTBZ2,3 ;判断工作模式是否为AUTO模式?
JMP ZD3_0
JBC PORT6,3 ;检测P63口状态
JMP ZD3_0
MOV A,@0X01 ;低电平计数
ADD CNT1,A
JBS STATUS,0 ;计数是否计满?
JMP ZD3_0
CLR CNT1
MOV A,@0X01
ADD CNT2,A
ZD3_0:JBS ZTBZ1,2 ;蜂鸣器驱动
JMP ZD4
INC FMQ1
MOV A,FMQ1
XOR A,@0X50
JBS STATUS,2
JMP ZD3_1
CLR FMQ1
INC FMQ2
MOV A,FMQ2
XOR A,@0X14
JBS STATUS,2
JMP ZD3_1
CLR FMQ2
BC ZTBZ1,2
ZD3_1:JBS ZTBZ2,2
JMP ZD3_2
BC PORT6,7
BC ZTBZ2,2
JMP ZD4
ZD3_2:BS PORT6,7
BS ZTBZ2,2
ZD4:JBS IMR,5 ;判断是否PWM2(脉冲宽度调制器)中断标志?
JMP ZD5 ;不是,转ZD5
BC IMR,5 ;是,清PWM2IF中断标志位
MOV A,@0X01 ;低电平计数
ADD CNT1,A
MOV A,CNT1
XOR A,@0X64
JBS STATUS,2 ;计数是否已经达到100个1MS即0.1S?
JMP ZD5
CLR CNT1
MOV A,@0X01
ADD CNT2,A
ZD5:JBS IMR,6 ;判断是否PWM3(脉冲宽度调制器)中断标志?
JMP ZD6 ;不是,转ZD6
BC IMR,6 ;是,清PWM3IF中断标志位
ZD6:JBS IMR,7 ;判断是否比较器中断?
JMP ZD7 ;不是,转ZD7
BC IMR,7
ZD7:SWAPA STORE_STATUS ;恢复现场
MOV STATUS,A
SWAPA STORE_A
ENI ;开中断
RETI
;***********************************************************
; 自动模式下,电机档次选择的比较控制电压
;***********************************************************
BIJIAO1:MOV A,@0X01 ;基准电压+0.5V
ADD A,JZDY_H
MOV CKDY_H,A
BC STATUS,0
MOV A,@0X9A
ADD A,JZDY_L
JBC STATUS,0
JMP J1
MOV CKDY_L,A
RET
J1:MOV CKDY_L,A
INC CKDY_H
RET
BIJIAO2:MOV A,@0X03 ;基准电压+1V
ADD A,JZDY_H
MOV CKDY_H,A
BC STATUS,0
MOV A,@0X34
ADD A,JZDY_L
JBC STATUS,0
JMP J2
MOV CKDY_L,A
RET
J2:MOV CKDY_L,A
INC JZDY_H
RET
;***********************************************************
; 测量电压及与传感器测量比较控制子程序
;***********************************************************
DFBJ:BC STATUS,0 ;判断‘基准电压-测量电压’的正负,来比较两者的大小
BC STATUS,2
Z1_1:MOV A,ADC_H ;基准电压与测量电压比较
SUB A,JZDY_H
JBC STATUS,2
JMP Z1_2 ;高位相等,则比较低位
JBS STATUS,0 ;高位不等,则比较大小
JMP Z2_1 ;高位减数小即基准电压〈 测量电压,则继续与基准电压+0.5V比较
JMP Z1_3 ;高位减数大即基准电压 〉测量电压,则与粉尘传感器比较
Z1_2:MOV A,ADC_L
SUB A,JZDY_L
JBC STATUS,2
JMP Z1_3 ;低位相等,则看粉尘传感器测量结果
JBS STATUS,0 ;低位不等,则判断大小
JMP Z2_1 ;低位减数大,继续与基准电压+0.5V比较
JMP Z1_3 ;低位减数小,则与粉尘传感器比较
Z1_3:MOV A,CNT4
XOR A,@0X04
JBS STATUS,2
JMP Z1_4
MOV A,@0X04
JMP Z4
Z1_4:MOV A,CNT4
XOR A,@0X03
JBS STATUS,2
JMP Z1_5
MOV A,@0X03
JMP Z4
Z1_5:MOV A,CNT4
XOR A,@0X02
JBS STATUS,2
JMP Z1_6
MOV A,@0X02
JMP Z4
Z1_6:MOV A,@0X01
JMP Z4
Z2_1:CALL BIJIAO1 ;基准电压+0.5V与基准电压比较
MOV A,ADC_H
SUB A,CKDY_H
JBC STATUS,2
JMP Z2_2 ;高位相等,则比较低位
JBS STATUS,0 ;高位不等,则比较大小
JMP Z3_1 ;高位减数小即基准电压+0.5V < 测量电压,则继续与基准电压+1V比较
JMP Z2_3 ;高位减数大即基准电压+0.5V > 测量电压,则与传感器比较
Z2_2:MOV A,ADC_L
SUB A,CKDY_L
JBC STATUS,2
JMP Z2_3 ;低位相等,则开启低档
JBS STATUS,0 ;低位不等,则判断大小
JMP Z3_1 ;低位减数小,则继续与基准电压+1V比较
JMP Z2_3 ;低位减数大,则粉尘传感器比较
Z2_3:MOV A,CNT4
XOR A,@0X04
JBS STATUS,2
JMP Z2_4
MOV A,@0X04
JMP Z4
Z2_4:MOV A,CNT4
XOR A,@0X03
JBS STATUS,2
JMP Z2_5
MOV A,@0X03
JMP Z4
Z2_5:MOV A,@0X02
JMP Z4
Z3_1:CALL BIJIAO2
MOV A,ADC_H
SUB A,CKDY_H
JBC STATUS,2
JMP Z3_2 ;高位相等,则比较低位
JBS STATUS,0 ;高位不等,则比较大小
JMP Z3_4 ;高位减数小即基准电压+1V < 测量电压,则开启高档
JMP Z3_3 ;高位减数大即基准电压+1V > 测量电压,则与粉尘传感器比较
Z3_2:MOV A,ADC_L
SUB A,CKDY_L
JBC STATUS,2
JMP Z3_3 ;低位相等,则开启中档
JBS STATUS,0 ;低位不等,则判断大小
JMP Z3_4 ;低位减数小,开启高档
JMP Z3_3 ;低位减数大,与粉尘传感器比较
Z3_3:MOV A,CNT4
XOR A,@0X04
JBC STATUS,2
JMP Z3_4
MOV A,@0X03
JMP Z4
Z3_4:MOV A,@0X04
Z4:MOV FSCS,A
CALL FSXZ
RET
;***********************************************************
; 风速选择控制子程序
;***********************************************************
FSXZ:MOV A,FSCS
XOR A,@0X01
JBS STATUS,2
JMP FSXZ1
CALL ZS_J
RET
FSXZ1:MOV A,FSCS
XOR A,@0X02
JBS STATUS,2
JMP FSXZ2
CALL ZS_L
RET
FSXZ2:MOV A,FSCS
XOR A,@0X03
JBS STATUS,2
JMP FSXZ3
CALL ZS_M
RET
FSXZ3:MOV A,FSCS
XOR A,@0X04
JBS STATUS,2
RET
CALL ZS_H
RET
;***********************************************************
; 遥控信号解码(红外信号)及译码动作处理程序
;***********************************************************
INIT_IR:JBC PORT5,0
JMP INIT_2
JBC ZTBZ1,3
JMP INIT_1
INC HWX3
BS ZTBZ1,3
INIT_1:INC HWX1
JMP INIT_6
INIT_2:JBS ZTBZ1,3
JMP INIT_6
BC ZTBZ1,3
MOV A,@0X32
SUB A,HWX1
JBS STATUS,0
JMP INIT_3
MOV A,@0X01
MOV HWX3,A
INIT_3:MOV A,@0X0C
SUB A,HWX1
JBS STATUS,0
JMP INIT_4
BC STATUS,0
RLC HWX2
JMP INIT_5
INIT_4:BS STATUS,0
RLC HWX2
INIT_5:CLR HWX1
MOV A,HWX3
XOR A,@0X11
JBS STATUS,2
JMP INIT_6
CALL YIMA
INIT_6:RET
;*************遥控译码动作处理程序**************************
YIMA:MOV A,HWX2
XOR A,@0X0A6
JBC STATUS,2
CALL SET_1 ;调用开关程序
JBS ZTBZ1,0
JMP YIMA_1
MOV A,HWX2
XOR A,@0X0A9
JBC STATUS,2
CALL SET_2
MOV A,HWX2
XOR A,@0X0CD
JBC STATUS,2
CALL SET_6
MOV A,HWX2
XOR A,@0X0F2
JBC STATUS,2
CALL YM1
MOV A,HWX2
XOR A,@0X0D1
JBC STATUS,2
CALL YM2
MOV A,HWX2
XOR A,@0X0B0
JBC STATUS,2
CALL YM3
JBC ZTBZ2,1
JMP YIMA_1
MOV A,HWX2
XOR A,@0X0AB
JBC STATUS,2
CALL SET_4
MOV A,HWX2
XOR A,@0X0EC
JBC STATUS,2
CALL YM4
MOV A,HWX2
XOR A,@0X0C8
JBC STATUS,2
CALL YM5
YIMA_1:RET
YM1:MOV A,DSCS
XOR A,@0X02
JBC STATUS,2
MOV A,@0X0
JBS STATUS,2
MOV A,@0X02
MOV DSCS,A
BS ZTBZ1,2
RET
YM2:MOV A,DSCS
XOR A,@0X04
JBC STATUS,2
MOV A,@0X0
JBS STATUS,2
MOV A,@0X04
MOV DSCS,A
BS ZTBZ1,2
RET
YM3:MOV A,DSCS
XOR A,@0X08
JBC STATUS,2
MOV A,@0X0
JBS STATUS,2
MOV A,@0X08
MOV DSCS,A
BS ZTBZ1,2
RET
YM4:MOV A,@0X03
MOV FSCS,A
BS ZTBZ1,2
RET
YM5:MOV A,@0X04
MOV FSCS,A
BS ZTBZ1,2
RET
;***********************************************************
; 延时子程序
;***********************************************************
DELAY_1:MOV A,@0X0C ;0.05MS延时程序
MOV DEL1,A
LP1:WDTC
NOP
DJZ DEL1
JMP LP1
RET
EOP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -