;二、 工作模式:
;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