P5 EQU 0X05
P6 EQU 0X06
;*******************控制寄存器***************************
IOC5 EQU 0X05
IOC6 EQU 0X06
IOCB EQU 0X0B
IOCC EQU 0X0C
IOCD EQU 0X0D
IOCE EQU 0X0E
IOCF EQU 0X0F
RF EQU 0X0F
;*******************特殊功能寄存器***********************
TCC EQU 0X01
PC EQU 0X02
PSW EQU 0X03
;********************用户自定义寄存器********************
T1 EQU 0X10 ;计时寄存器
T2 EQU 0X11
T3 EQU 0X12
LP_CNT0 EQU 0X13 ;循环计数寄存器
LP_CNT1 EQU 0X14
LP_CNT2 EQU 0X15
LP_CNT3 EQU 0X16
STACK_A EQU 0X17 ;A寄存器内容保存寄存器
STACK_S EQU 0X18 ;状态寄存器内容保存寄存器
;********************位定义******************************
WATER1 EQU 0X00 ;入水水箱
WATER2 EQU 0X01 ;出水水箱
KY EQU 0X02 ;按键
ALARM EQU 0X07 ;报警蜂鸣器
FIRE EQU 0X04 ;加热继电器
PUMP EQU 0X05 ;水泵
TMPR EQU 0X00 ;测温度电阻
ORG 0X00
ADD A,@0XFF
ADD A,@0XFF
ADD A,@0XFF
JMP MAIN
ORG 0X08
MOV STACK_A,A ;存储A值
SWAP STACK_A
SWAPA PSW ;存储状态寄存器值
MOV STACK_S,A
CLR RF
JMP TCCINT
INT_RET:
SWAPA STACK_S ;恢复状态寄存值
MOV PSW,A
SWAPA STACK_A ;恢复A值
RETI
MAIN:
MOV A,@0X0 ;禁看门狗
IOW IOCE
MOV A,@00001111b ;P60,P61,P62输入,P67,64,65输出
IOW IOC6
MOV A,@00000001b ;p50输入
IOW IOC5
MOV A,@00000111b ;TCC分频1:256
CONTW
MOV A,@130 ;20分钟延时
MOV T1,A
MOV A,@93
MOV T2,A
MOV A,@3
MOV T3,A
MOV A,@00000001b ;允许TCC中断
IOW IOCF
NOP
NOP
MOV A,@11111000b ;P60,P61,P62上拉使能
IOW IOCD
MOV A,@10110000b ;P64,P65,P67漏极开路使能
IOW IOCC
MOV A,@01111110b ;p50下拉使能
IOW IOCB
MAIN_1:
JBC P6,WATER2 ;出水水箱水满
JMP WT_1
WT_0:
JBS P6,WATER1 ;入水水箱水位不够
JMP WT_2
BS P6,PUMP ;抽水
JMP MAIN_2
WT_1:
BC P6,FIRE ;停加热
BC P6,PUMP ;停抽水,报警
JMP RING
WT_2:
BC P6,PUMP ;停抽水
JMP MAIN_2
MAIN_2:
JBS P6,KY ;未按键
JMP FR_1
JBC P5,TMPR ;温度到90度
JMP FR_2
BC P6,FIRE ;停止加热
JMP MAIN_1
FR_1:
MOV A,@00000000b ;禁止TCC中断
IOW IOCF
MOV A,@130 ;20分钟延时
MOV T1,A
MOV A,@93
MOV T2,A
MOV A,@3
MOV T3,A
MOV A,@00000001b ;允许TCC中断
IOW IOCF
FR_2:
BS P6,FIRE ;加热
JMP MAIN_1
RING: ;报警音1KHz,0.3S响,2.7s停
MOV A,@3
MOV LP_CNT3,A
RING_LP_1:
MOV A,@100
MOV LP_CNT2,A
RING_LP_2:
CALL DELAY_05MS
BS P6,ALARM
CALL DELAY_05MS
BC P6,ALARM
DJZ LP_CNT2
JMP RING_LP_2
DJZ LP_CNT3
JMP RING_LP_1
MOV A,@27
MOV LP_CNT3,A
RING_LP_3:
MOV A,@100
MOV LP_CNT2,A
RING_LP_4:
CALL DELAY_05MS
DJZ LP_CNT2
JMP RING_LP_4
DJZ LP_CNT3
JMP RING_LP_3
JBC P6,WATER2
JMP RING
JMP WT_0
DELAY_05MS: ;延时0.5ms子程序
MOV A, @1
MOV LP_CNT0, A
DEL_1:
NOP
MOV A, @200
MOV LP_CNT1, A
DEL_2:
NOP
NOP
NOP
DJZ LP_CNT1
JMP DEL_2
DJZ LP_CNT0
JMP DEL_1
RET
TCCINT: ;TCC中断子程序
DJZ T1
JMP INT_RET
MOV A,@130
MOV T1,A
DJZ T2
JMP INT_RET
MOV A,@130
MOV T1,A
MOV A,@93
MOV T2,A
DJZ T3
JMP INT_RET
MOV A,@00001110b ;WDT预分频,
CONTW
WDTC ;清WDT和预分频器
MOV A,@00000000b ;WDT禁止
IOW IOCE
MOV P6,P6 ;读端口6
MOV A,@00000010b ;使能端口6中断
IOW IOCF
DISI ;禁止全局中断
SLEP
NOP
NOP
MOV A,@0X0 ;禁看门狗
IOW IOCE
MOV A,@00000111b ;TCC分频1:256
CONTW
MOV A,@130 ;20分钟延时
MOV T1,A
MOV A,@93
MOV T2,A
MOV A,@3
MOV T3,A
MOV A,@00000001b ;允许TCC中断
IOW IOCF
JMP INT_RET