📄 xishou.asm
字号:
JMP CHKINFRAOV
;追加一组探测
CALL SENDONEWAVE ;发射一组红外波
JBS FLAG, RCVWAVE_F ;本次收到反射信号时,才允许进行下一次检测
JMP CHKINFRAOV
;进行最后一组探测
CALL SENDONEWAVE ;发射一组红外波
JBC FLAG, RCVWAVE_F
BS FLAG,REFLECT_F ;收到全部反射信号时,设置检测到物体标志
CHKINFRAOV:
BC P6OUT,ENRCV ;关闭接收电路
MOV A,P6OUT
MOV P6,A
RET
;====================================================================
;发射一个红外探测脉冲,并检测返回脉冲(若有返回脉冲,RECVNUMBER计数值加1)
;====================================================================
SENDONEWAVE:
BC FLAG, RCVWAVE_F
CALL DELAY45US ;等待接收电路输出稳态(1.接收电路刚通电2.前一次发射后)
CALL DELAY45US
JBS P6,RCVDATA
RET ;在发射前,若收到反射信号,则是干扰退出
BC P6OUT,SENDDATA ;开始发送
MOV A,P6OUT
MOV P6,A
CALL DELAY45US
JBS P6,RCVDATA ;第一次检测是否收到反射信号(适用与强反射信号)
BS FLAG, RCVWAVE_F
CALL DELAY10US
JBS P6,RCVDATA ;第二次检测是否收到反射信号(适用与中等反射信号)
BS FLAG, RCVWAVE_F
CALL DELAY10US
JBS P6,RCVDATA ;第三次检测是否收到反射信号(适用与中等反射信号)
BS FLAG, RCVWAVE_F
CALL DELAY10US
JBS P6,RCVDATA ;第四次检测是否收到反射信号(适用与中等反射信号)
BS FLAG, RCVWAVE_F
BS P6OUT,SENDDATA
MOV A,P6OUT
MOV P6,A ;停止发送
CALL DELAY10US
JBS P6,RCVDATA ;第三次检测是否收到反射信号(适用与弱反射信号)
BS FLAG, RCVWAVE_F
RET
;************************************************************************************
;*****************************电磁阀驱动程序*****************************************
;************************************************************************************
;====================================================================
;开启脉冲阀 在睡眠前后均保持为输出状态
;====================================================================
OPEN:
BS P5OUT,OPENCOIL
BC P5OUT,CLOSECOIL
MOV A,P5OUT
MOV P5,A
CALL DELAY50MS
BC P5OUT,OPENCOIL
MOV A,P5OUT
MOV P5,A
RET
;====================================================================
;关闭脉冲阀
;====================================================================
CLOSE:
BC P5OUT,OPENCOIL
BS P5OUT,CLOSECOIL
MOV A,P5OUT
MOV P5,A
CALL DELAY50MS
BS P5OUT,CLOSECOIL
MOV A,P5OUT
MOV P5,A
RET
;************************************************************************************
;*****************************指示灯驱动程序*****************************************
;************************************************************************************
;====================================================================
;指示灯 点亮
;====================================================================
LIGHTON:
BS P5OUT,LEDA
BC P5OUT,LEDK
MOV A,P5OUT
MOV P5,A
RET
;====================================================================
;低水压指示灯 点亮
;====================================================================
LIGHTONYELLOW:
BC P5OUT,LEDA
BS P5OUT,LEDK
MOV A,P5OUT
MOV P5,A
RET
;====================================================================
;指示灯 熄灭
;====================================================================
LIGHTOFF:
BC P5OUT,LEDA
BC P5OUT,LEDK
MOV A,P5OUT
MOV P5,A
RET
;====================================================================
;指示灯 长亮1秒
;====================================================================
LIGHTON1S:
CALL LIGHTON
CALL DELAY50MS
CALL DELAY50MS
CALL DELAY50MS
CALL DELAY50MS
CALL DELAY50MS
CALL DELAY50MS
CALL DELAY50MS
CALL DELAY50MS
CALL LIGHTOFF
CALL DELAY50MS
RET
;====================================================================
;指示灯 闪烁一下
;====================================================================
LIGHTFLASH:
JBC FLAG,HVWATER_F
CALL LIGHTON
JBS FLAG,HVWATER_F
CALL LIGHTONYELLOW ;无水时闪烁黄灯
CALL DELAY1MS
CALL DELAY1MS
CALL DELAY1MS
CALL DELAY1MS
CALL DELAY1MS
CALL DELAY1MS
CALL DELAY1MS
CALL DELAY1MS
CALL DELAY1MS
CALL LIGHTOFF
CALL DELAY1MS
CALL DELAY1MS
CALL DELAY1MS
RET
;************************************************************************************
;*****************************延时驱动程序*******************************************
;************************************************************************************
/*
;====================================================================
;基本延时:45uS(455KHz 1 Cycle, 2 Clock)
;====================================================================
DELAY45US:
MOV A, @22
MOV LP_CNT1, A
D10_LP:
NOP
NOP
NOP
DJZ LP_CNT1
JMP D10_LP
RET
;====================================================================
;基本延时:100uS(455KHz 1 Cycle, 2 Clock)
;====================================================================
P0_DLY:
MOV A, @46
MOV LP_CNT1, A
P0_LP:
NOP
NOP
NOP
DJZ LP_CNT1
JMP P0_LP
DJZ LP_CNT0
JMP P0_DLY
RET
;====================================================================
;1ms延时程序
;====================================================================
DELAY1MS:
MOV A, @10
MOV LP_CNT0, A
CALL P0_DLY
RET
;====================================================================
;50MS延时程序
;====================================================================
DELAY50MS:
MOV A, @50
MOV LP_CNT0, A
CALL P0_DLY
RET
*/
;====================================================================
;10US延时程序(4MHz 1 Cycle, 2 Clock)
;====================================================================
DELAY10US:
NOP
MOV A, @3
MOV LP_CNT1, A
D10P0_LP:
NOP
NOP
NOP
DJZ LP_CNT1
JMP D45P0_LP
RET
;====================================================================
;60US延时程序(4MHz 1 Cycle, 2 Clock)
;====================================================================
DELAY45US:
NOP
MOV A, @20
MOV LP_CNT1, A
D45P0_LP:
NOP
NOP
NOP
DJZ LP_CNT1
JMP D45P0_LP
RET
;====================================================================
;0.25MS延时程序(4MHz 1 Cycle, 2 Clock)
;====================================================================
P0_DLY: ;4MHz 1 Cycle, 2 Clock下延时0.125mS
;WDTC
NOP
NOP
MOV A, @50
MOV LP_CNT1, A
P0_LP:
NOP
;WDTC
NOP
NOP
DJZ LP_CNT1
JMP P0_LP
DJZ LP_CNT0
JMP P0_DLY
RET
;====================================================================
;1ms延时程序
;====================================================================
DELAY1MS:
MOV A, @8
MOV LP_CNT0, A
CALL P0_DLY
RET
;====================================================================
;50MS延时程序
;====================================================================
DELAY50MS:
MOV A, @200
MOV LP_CNT0, A
CALL P0_DLY
MOV A, @200
MOV LP_CNT0, A
CALL P0_DLY
RET
;************************************************************************************
;*****************************中断驱动程序*******************************************
;************************************************************************************
;====================================================================
;外部中断程序
;====================================================================
INT_EXT:
BC INTF,EXIF ;Clear TCC interrupt flag
JMP INT_RET
;--------------------------------------------------------------------
;====================================================================
;TCC中断程序
;====================================================================
INT_TCC:
BC INTF,TCIF ;Clear TCC interrupt flag
MOV A,@0
MOV RTCC,A
;TCC Period : Ftcc=Fosc/2/(Prescaler*(256-RTCC)+D)
JMP INT_RET
;--------------------------------------------------------------------
;中断返回
INT_RET:
SWAPA STACK_S ;Restore the SAVED value of STATUS
MOV STAT,A
SWAPA STACK_A ;Restore the SAVED value of A
RETI
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -