;二、 工作模式:
;1、间隙工作,即:每5秒电路工作一次,发16mS红外线脉冲,同时对接收电路供电,
; 延时5mS等待接收电路工作稳定,询问接收到反射信号,如没有,返回延时5秒继续。
; 如有反射信号便改为1秒询问1次,连续5次收到反射信号便认为是有人在,
; 反之,认为是有人走过,有人在时,就开始询问反射信号没有了吗?
; 连续2次没有接收到反射信号,便认为此没人在用,开始冲水。
;2、感应后立即冲水,直到检测到人离去时,停止冲水,如果感应时间超过15秒,
; 启动长流水模式,长流水在启动3分钟后自动结束。
;3、 2秒钟预冲水,即每隔15分钟预冲水一次,15分钟内无人使用过,不冲水,
; 使能在使用人多时,不再每人使用前都预冲水,达到节水目地。
;4、感应距离5~80CM可调
;5、 以上工作模式可通过电路板跳线手动选择。
;pb,0接收;pb,1发射;pb,2输出
;
;
;
LIST P=12C508 ,F=INHX8M
INCLUDE "P16C5X.INC"
;***********************
PSW EQU 03H ;状态寄存器
;PA EQU 05H ;PA口
PB EQU 06H ;PB口
FSR EQU 04H
RTCC EQU 01H ;定时计数器
TEMP EQU 09H
COUNT1 EQU 0AH
COUNT2 EQU 0BH
COUNT3 EQU 0CH
COUNT4 EQU 0DH
COUNT5 EQU 0EH
KEY_DEL EQU 0FH
DJ_DEL EQU 10H
R0 EQU 11H
R1 EQU 12H ;1S的发射间隔定时
R2 EQU 13H ;发射次数计数器
R3 EQU 14H
FLAG EQU 1FH
;**********
ORG 0
GOTO START ;开始
;***********************
; ORG 000H
DISP CLRWDT
INCF COUNT1,1
MOVLW 0FH ;15X16.32MS
SUBWF COUNT1,0
BTFSS PSW,0
GOTO DISP_OUT
CLRF COUNT1
;****定时3S
MOVFW R1
SKPZ
DECF R1,1
;***
DISP_1
INCF COUNT2,1 ;1秒到
MOVLW 3CH ;3C
SUBWF COUNT2,0
BTFSS PSW,0
GOTO DISP_OUT
CLRF COUNT2
INCF COUNT3,1 ;1分到
MOVLW 3CH ;3C
SUBWF COUNT3,0
BTFSS PSW,0
GOTO DISP_OUT
CLRF COUNT3 ;60分钟到
NOP
INCF COUNT4,1
NOP
DISP_OUT
RETLW 0
;****************************
START
CLRWDT
MOVLW 08H ;清F8-F1F的内容为0
MOVWF 4 ;F8送F4=@R
QL CLRF 0
INCF 4,1
CLRWDT ;清WDT
MOVFW 4 ;
ANDLW 1FH
SKPZ
GOTO QL
CLRF 4
;*********************
MOVLW B'11101001' ;PB口为输出口
TRIS PB
MOVLW B'11111001'
MOVWF PB
; MOVLW 0FFH
; TRIS PA ;定义PA口方向,为输键盘口
; MOVLW 0
; MOVWF PA
;**************************
MAIN
CLRWDT
MOVLW 01H
MOVWF 1
MOVLW 0C5H
OPTION ;64分频
DSK
CLRWDT
BTFSS 1,0
GOTO DSK
NOP
WAIT CLRWDT
BTFSC 1,0 ;
GOTO WAIT ;1/128秒检查
MOVFW 1
SKPZ ;结果全0跳下
GOTO DZJC
GOTO HSZCL ;整分处理16.32MS
;******************
DZJC CLRWDT
CALL KEYREM
GOTO DSK
;*******************
HSZCL CLRWDT
CALL DISP
; CALL CL_OUT
GOTO MAIN
;********************
;*******************发射接收子程序
KEYREM
MOVFW R1 ;一秒定时是否到
SKPZ
GOTO KEYREM_OUT
KEYREM_1
MOVLW D'100'
MOVWF R1 ;定时5MS,可以借R1用
;***开始发射40khz
KEYREM_2
BSF PB,1
NOP
NOP
NOP
NOP
NOP
NOP
NOP
; NOP
; NOP
; NOP
NOP
NOP
NOP
NOP
BCF PB,1
NOP
; NOP
; NOP
; NOP
NOP
NOP
NOP
NOP
MOVFW R1
SKPNZ
GOTO KEYREM_3
DECF R1,1
GOTO KEYREM_2
KEYREM_3
MOVLW 1
MOVWF R1 ;重装1S定时时间
BSF PB,1 ;继续40KHZ的发射
;****发射标志是否开
BTFSS FLAG,2 ;是进入还是离开状态
GOTO KCL_1 ;进入测试有没有进入状态
;***** 测试有没有人离开状态
NOP
BTFSS PB,0
GOTO KEYREM_OUT ;有反射,继续保持
NOP
INCF R2,1 ;发射次数记数
MOVLW 3
SUBWF R2,0
BTFSS PSW,0
GOTO KEYREM_OUT ;次数未到,还得继续测
CLRF R2
BCF PB,2 ;是没人,关输出
BCF FLAG,2 ;置无人标志
GOTO KEYREM_OUT
;***
KCL_1
NOP ;测试有没有人进入状态
BTFSC PB,0
GOTO KEYREM_OUT ;无反射,继续保持
NOP
INCF R2,1 ;发射次数记数
MOVLW 3
SUBWF R2,0
BTFSS PSW,0
GOTO KEYREM_OUT ;次数未到,还得继续测
CLRF R2
BSF PB,2 ;是有人,开输出
BSF FLAG,2 ;置有人标志
GOTO KEYREM_OUT
;**************
KEYREM_OUT
NOP
BCF PB,1
NOP
RETLW 0
;**********
END