專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

紅外反射自動(dòng)沖水程序

作者:佚名   來(lái)源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2009年12月26日   【字體:

;二、 工作模式:
;1、間隙工作,即:每5秒電路工作一次,發(fā)16mS紅外線脈沖,同時(shí)對(duì)接收電路供電,
;    延時(shí)5mS等待接收電路工作穩(wěn)定,詢問(wèn)接收到反射信號(hào),如沒(méi)有,返回延時(shí)5秒繼續(xù)。
;    如有反射信號(hào)便改為1秒詢問(wèn)1次,連續(xù)5次收到反射信號(hào)便認(rèn)為是有人在,
;    反之,認(rèn)為是有人走過(guò),有人在時(shí),就開(kāi)始詢問(wèn)反射信號(hào)沒(méi)有了嗎?
;    連續(xù)2次沒(méi)有接收到反射信號(hào),便認(rèn)為此沒(méi)人在用,開(kāi)始沖水。
;2、感應(yīng)后立即沖水,直到檢測(cè)到人離去時(shí),停止沖水,如果感應(yīng)時(shí)間超過(guò)15秒,
;    啟動(dòng)長(zhǎng)流水模式,長(zhǎng)流水在啟動(dòng)3分鐘后自動(dòng)結(jié)束。
;3、 2秒鐘預(yù)沖水,即每隔15分鐘預(yù)沖水一次,15分鐘內(nèi)無(wú)人使用過(guò),不沖水,
;    使能在使用人多時(shí),不再每人使用前都預(yù)沖水,達(dá)到節(jié)水目地。
;4、感應(yīng)距離5~80CM可調(diào)
;5、 以上工作模式可通過(guò)電路板跳線手動(dòng)選擇。
;pb,0接收;pb,1發(fā)射;pb,2輸出
;
;
;
       LIST    P=12C508 ,F=INHX8M
  INCLUDE "P16C5X.INC"
;***********************
PSW     EQU     03H     ;狀態(tài)寄存器
;PA      EQU     05H      ;PA口
PB      EQU     06H     ;PB口
FSR EQU 04H
RTCC    EQU     01H     ;定時(shí)計(jì)數(shù)器
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的發(fā)射間隔定時(shí)
R2 EQU 13H ;發(fā)射次數(shù)計(jì)數(shù)器
R3 EQU 14H
FLAG EQU 1FH

;**********
  ORG     0
  GOTO    START     ;開(kāi)始
;***********************
;  ORG     000H
DISP    CLRWDT
  INCF    COUNT1,1
  MOVLW   0FH  ;15X16.32MS
  SUBWF   COUNT1,0
  BTFSS   PSW,0
  GOTO    DISP_OUT
  CLRF    COUNT1
;****定時(shí)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的內(nèi)容為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  ;結(jié)果全0跳下   
  GOTO     DZJC      
  GOTO     HSZCL       ;整分處理16.32MS
;******************
DZJC    CLRWDT
  CALL KEYREM
  GOTO    DSK
;*******************
HSZCL   CLRWDT
  CALL    DISP
; CALL CL_OUT
  GOTO    MAIN
;********************
;*******************發(fā)射接收子程序
KEYREM    
 MOVFW R1 ;一秒定時(shí)是否到
 SKPZ 
 GOTO KEYREM_OUT
KEYREM_1
 MOVLW D'100'
 MOVWF R1 ;定時(shí)5MS,可以借R1用
;***開(kāi)始發(fā)射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定時(shí)時(shí)間
 BSF PB,1 ;繼續(xù)40KHZ的發(fā)射
;****發(fā)射標(biāo)志是否開(kāi)
 BTFSS FLAG,2 ;是進(jìn)入還是離開(kāi)狀態(tài) 
 GOTO KCL_1   ;進(jìn)入測(cè)試有沒(méi)有進(jìn)入狀態(tài)
;***** 測(cè)試有沒(méi)有人離開(kāi)狀態(tài)
 NOP
 BTFSS PB,0
 GOTO KEYREM_OUT ;有反射,繼續(xù)保持
 NOP
 INCF R2,1  ;發(fā)射次數(shù)記數(shù)
 MOVLW 3
 SUBWF R2,0
 BTFSS PSW,0
 GOTO KEYREM_OUT ;次數(shù)未到,還得繼續(xù)測(cè)
 CLRF R2
 BCF PB,2  ;是沒(méi)人,關(guān)輸出
 BCF FLAG,2 ;置無(wú)人標(biāo)志
 GOTO KEYREM_OUT
;***
KCL_1
 NOP  ;測(cè)試有沒(méi)有人進(jìn)入狀態(tài)
 BTFSC PB,0
 GOTO KEYREM_OUT ;無(wú)反射,繼續(xù)保持
 NOP
 INCF R2,1  ;發(fā)射次數(shù)記數(shù)
 MOVLW 3
 SUBWF R2,0
 BTFSS PSW,0
 GOTO KEYREM_OUT ;次數(shù)未到,還得繼續(xù)測(cè)
 CLRF R2
 BSF PB,2  ;是有人,開(kāi)輸出
 BSF FLAG,2 ;置有人標(biāo)志
 GOTO KEYREM_OUT
;**************
KEYREM_OUT
 NOP
 BCF PB,1
 NOP
 RETLW 0


;**********
  END

 

關(guān)閉窗口

相關(guān)文章