⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gy1.asm

📁 pic508红外线反射冲水,自动冲水功能,电路简单
💻 ASM
字号:
;二、 工作模式:
;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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -