📄 ada682.asm
字号:
;***********************************************************
; MCU:EM78P418NP OSC:4M(内置RC) 2个时钟,2个周期
; 作者:chenxiongbin
; 日期:
; 开始:2006-10-8
; 结束:2006-11-2
; 型号:ADA682
;***********************************************************
;*****************特殊功能寄存器定义************************
IOC50 EQU 0X05 ;端口5寄存器(0段寄存器)
IOC60 EQU 0X06 ;端口6寄存器
IOC70 EQU 0X07 ;端口7寄存器
IOC80 EQU 0X08 ;PWM控制寄存器
IOC90 EQU 0X09 ;定时器控制寄存器
IOCA0 EQU 0X0A ;比较器控制寄存器
IOCB0 EQU 0X0B ;端口6的下拉控制寄存器
IOCC0 EQU 0X0C ;端口5漏极开路控制寄存器
IOCD0 EQU 0X0D ;上拉控制寄存器
IOCE0 EQU 0X0E ;WDT控制寄存器
IOCF0 EQU 0X0F ;中断屏蔽寄存器
IOC51 EQU 0X05 ;PWM1的周期PRD1(1段寄存器)
IOC61 EQU 0X06 ;PWM2的周期PRD2
IOC71 EQU 0X07 ;PWM3的周期PRD3
;******************操作寄存器定义***************************
IAR EQU 0X00 ;间接寻址寄存器
TCC EQU 0X01 ;时钟/计数器
STATUS EQU 0X03 ;状态寄存器
RSR EQU 0X04 ;存储区选择寄存器
PORT5 EQU 0X05 ;端口5
PORT6 EQU 0X06 ;端口6
PORT7 EQU 0X07 ;端口7
ADISR EQU 0X08 ;ADC输出选择寄存器
ADCON EQU 0X09 ;A/D控制寄存器
ADRUN EQU 4 ;ADC开始运行位,1为一个A/D转换开始、0为转换的复位完成
ADC_H EQU 0X0C ;A/D转换值
ADC_L EQU 0X0D ;A/D转换值
IMR EQU 0X0F ;中断标志寄存器
STORE_A EQU 0X10 ;存累加器ACC内容
STORE_STATUS EQU 0X11 ;存STATUS内容
TIME1 EQU 0X12 ;12.5MS计数寄存器(定时器变量寄存器)
TIME2 EQU 0X13 ;秒计数寄存器
TIME3 EQU 0X14 ;分计数寄存器
TIME4 EQU 0X15 ;小时计数寄存器
JZDY_L EQU 0X16 ;预热5分钟测得的电压作为基准电压
JZDY_H EQU 0X17
CKDY_L EQU 0X18 ;每隔0.5V为一个电压比较数据寄存器
CKDY_H EQU 0X19
FMQ1 EQU 0X1A
FMQ2 EQU 0X1B
DSCS EQU 0X1C ;定时参数变量寄存器
FSCS EQU 0X1D ;风速选择参数寄存器
CNT1 EQU 0X1E
CNT2 EQU 0X1F
CNT3 EQU 0X20
CNT4 EQU 0X21
DEL1 EQU 0X22 ;延时变量寄存器
DEL2 EQU 0X23
DEL3 EQU 0X24
HWX1 EQU 0X25 ;遥控信号码寄存器
HWX2 EQU 0X26
HWX3 EQU 0X27
KJTM EQU 0X28
AUTO_30S EQU 0X29
ZTBZ1 EQU 0X2D ;状态标志位
ZTBZ2 EQU 0X2E
;***********************************************************
; 主程序
;***********************************************************
ORG 0X000
JMP MAIN ;转主程序
NOP
NOP
NOP
NOP
NOP
NOP
NOP
ORG 0X008
JMP ZDFWCX ;转中断服务程序
MAIN:DISI ;关中断
BC STATUS,7 ;选择0段控制寄存器(IOC50~IOCF0)
BC STATUS,6 ;选择第一页程序存储页(000-3FF)
BC STATUS,5
BC RSR,7 ;选择存储区
BC RSR,6
MOV A,@0X10 ;通用寄存器从0X10开始,到0X3F结束,0X00到0X0F为特殊功能寄存器
MOV RSR,A
CSH0:CLR IAR
INC RSR
MOV A,RSR
AND A,@0X3F
XOR A,@0X3F
JBS STATUS,2
JMP CSH0
MOV A,@0X81
IOW IOC50
MOV A,@0X0B
IOW IOC60
MOV A,@0X0FF ;禁止PORT6口内部上拉
IOW IOCD0
MOV A,@0X02 ;选择P61为模拟输入口
MOV ADISR,A
MOV A,@0X01 ;模拟输入选择P61,ADC中VREF与VDD相连
MOV ADCON,A
MOV A,@0X01
IOW IOC70
MOV A,@0X19 ;允许PWM1IE中断、ADIE中断、EXIE中断、ICIE中断、TCIE中断
IOW IOCF0
MOV A,@0X3C ;允许看门狗计时,WDT比率为1:256,P50口为外部中断输入引脚
IOW IOCE0
MOV A,@0X0F ;开启TMR1定时,分频比为1:256
IOW IOC80
MOV A,@0X3F ;关闭定时器TMR2、TMR3
IOW IOC90
MOV A,@0X4F ;INT引脚信号由下降沿引起中断,TCC由低到高变化时加1,TCC比率设置为1:256
CONTW
BS PORT6,6 ;粉尘器开关为关状态
CLR FSCS
CLR DSCS ;清定时变量寄存器
CLR ZTBZ1 ;清各状态标志位
CLR ZTBZ2 ;定时参数变量赋初值(即刚开机不进行定时设置)
CLR AUTO_30S
BC PORT5,5 ;电机刚开始不工作
BC PORT6,2
BC PORT6,4
BC PORT6,5 ;负离子灯及发生器为关状态
BS ZTBZ1,2 ;蜂鸣器标志位
MOV A,@0X3C ;装载TCC计数初值
MOV TCC,A
ENI ;开中断
MAIN_1:WDTC ;清看门狗
CALL LED_GZ ;调用指示灯显示程序
CALL GZMS ;调用按键扫描控制程序
JBS ZTBZ2,5
JMP MAIN_2
MOV A,TIME2
XOR A,@0X02
JBS STATUS,2
JMP MAIN_2
BC ZTBZ2,5
CALL ZS_L
MOV A,@0X02
MOV FSCS,A
MAIN_2:MOV A,DSCS
XOR A,@0X0
JBC STATUS,2
CLR TIME4 ;清小时变量递增寄存器(没有定时一定要清0)
JBS ZTBZ2,3 ;判断是否工作在AUTO模式?
JMP MAIN_1 ;不是,继续循环
JBS ZTBZ2,0 ;到了,检测是否有第一次测量标志?
JMP MAIN_3
MOV A,KJTM
XOR A,@0X05
JBS STATUS,2 ;5分钟是否到了?
JMP MAIN_1
BS ADCON,ADRUN ;第一次测量作为基准电压
BC ZTBZ2,0 ;取消第一次测量标志
MAIN_3:MOV A,AUTO_30S
XOR A,@0X1E
JBS STATUS,2
JMP MAIN_1
CLR AUTO_30S
CALL FCCGQ
JBC ZTBZ2,1
BS ADCON,ADRUN ;置ADRUN=1,启动ADC工作
JMP MAIN_1
;***********************************************************
; 指示灯工作状态控制程序
;***********************************************************
LED_GZ:JBC ZTBZ1,0 ;检测开关状态标志
JMP LED_1
MOV A,@0XCF
IOW IOC50
NOP
JMP LED_4
LED_1:MOV A,@0X01 ;置P50为输入口
IOW IOC50
MOV A,@0X0A ;置P63、P61为输入口
IOW IOC60
MOV A,@0X0 ;置P70为输出口
IOW IOC70
NOP
BC PORT5,3 ;扫描
BC PORT5,2
BC PORT5,1
BS PORT7,0
BS PORT6,0
BS PORT5,6
JBC ZTBZ1,0 ;判开关状态?
BC PORT5,7 ;开关为开状态,POWER指示灯亮
JBS ZTBZ1,0
BS PORT5,7 ;开关为开状态,POWER指示灯灭
CALL DELAY_1 ;0.05MS延时
BS PORT5,7
BS PORT6,0
MOV A,DSCS ;判断是否是定时2小时?
XOR A,@0X02
JBC STATUS,2
BC PORT7,0 ;是,2H指示灯亮
JBS STATUS,2
BS PORT7,0 ;不是,2H指示灯灭
CALL DELAY_1
BS PORT5,7
BS PORT7,0
MOV A,FSCS ;判电机是否在L档?
XOR A,@0X02
JBC STATUS,2
BC PORT6,0 ;是,L档指示灯亮
JBS STATUS,2
BS PORT6,0
CALL DELAY_1
MOV A,@0X01
IOW IOC50
MOV A,@0X0A
IOW IOC60
MOV A,@0X0
IOW IOC70
NOP
BC PORT5,6
BC PORT5,2
BC PORT5,1
BS PORT7,0
BS PORT6,0
BS PORT5,3
JBS ZTBZ2,1 ;判电机的工作状态是否为MANUAL模式?
BC PORT5,7
JBC ZTBZ2,1
BS PORT5,7
CALL DELAY_1
BS PORT5,7
BS PORT6,0
MOV A,DSCS ;判电机是否是定时4小时?
XOR A,@0X04
JBC STATUS,2
BC PORT7,0
JBS STATUS,2
BS PORT7,0
CALL DELAY_1
BS PORT5,7
BS PORT7,0
MOV A,FSCS ;判电机是否在M档?
XOR A,@0X03
JBC STATUS,2
BC PORT6,0
JBS STATUS,2
BS PORT6,0
CALL DELAY_1
MOV A,@0X01
IOW IOC50
MOV A,@0X0A
IOW IOC60
MOV A,@0X0
IOW IOC70
NOP
BC PORT5,6
BC PORT5,3
BC PORT5,1
BS PORT7,0
BS PORT6,0
BS PORT5,2
JBS ZTBZ2,3 ;判断电机的工作状态是否为AUTO工作模式?
JMP LED_2 ;净化器在AUTO工作模式时,AUTO指示灯闪烁点亮
JBC TIME1,5
BC PORT5,7
JBS TIME1,5
BS PORT5,7
JMP LED_3
LED_2:JBC ZTBZ2,3
BC PORT5,7
LED_3:JBS ZTBZ2,3
BS PORT5,7
CALL DELAY_1
BS PORT5,7
BS PORT6,0
MOV A,DSCS ;判断是否定时8小时?
XOR A,@0X08
JBC STATUS,2
BC PORT7,0
JBS STATUS,2
BS PORT7,0
CALL DELAY_1
BS PORT5,7
BS PORT7,0
MOV A,FSCS ;判断电机是否在H档?
XOR A,@0X04
JBC STATUS,2
BC PORT6,0
JBS STATUS,2
BS PORT6,0
CALL DELAY_1
MOV A,@0X01
IOW IOC50
MOV A,@0X0A
IOW IOC60
MOV A,@0X0
IOW IOC70
NOP
BC PORT5,6
BC PORT5,3
BC PORT5,2
BS PORT7,0
BS PORT6,0
BS PORT5,1
JBC ZTBZ1,1 ;判断负离子工作状态?
BC PORT5,7
JBS ZTBZ1,1
BS PORT5,7
CALL DELAY_1
BS PORT5,7
BS PORT7,0
MOV A,FSCS ;判断静音档?
XOR A,@0X01
JBC STATUS,2
BC PORT6,0
JBS STATUS,2
BS PORT6,0
LED_4:RET
;***********************************************************
; 按键扫描控制程序
;***********************************************************
GZMS:WDTC ;清WDT
MOV A,@0X89 ;扫描键盘,置初值,P57、P70、P60设为输入口,P53、P56设为输出口
IOW IOC50
MOV A,@0X0A ;P61为A/D输入口,P63为粉尘检测输入口
IOW IOC60
MOV A,@0X00
IOW IOC70
NOP
BS PORT7,0
BS PORT6,0
BC PORT5,2
BC PORT5,1
BC PORT5,6
NOP
JBC PORT5,7 ;检测开关键S1是否按下?
BC ZTBZ1,5
JBC ZTBZ1,5
JMP GZMA
JBC ZTBZ1,6
JMP GZMA
JBC ZTBZ1,4
JMP GZMA
JBC ZTBZ2,6
JMP GZMA
JBC ZTBZ1,7
JMP GZMA
JBC ZTBZ2,7
JMP GZMA
JBS PORT5,7
CALL SET_1 ;调用开关状态控制子程序
GZMA:JBS ZTBZ1,0 ;判断开关状态是否为ON?
JMP GZM6 ;不是,返回
GZM1:MOV A,@0X09 ;是,继续扫描
IOW IOC50
MOV A,@0X0A
IOW IOC60
MOV A,@0X01
IOW IOC70
NOP
BS PORT5,7
BS PORT6,0
BC PORT5,2
BC PORT5,1
BC PORT5,6
NOP
JBC PORT7,0 ;检测UV灯键S2是否按下?
BC ZTBZ1,6
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -