技术热线: 4007-888-234

PIC16C71单片机按键换醒CPU源程序

更新时间: 2019-03-21
阅读量:323

; p=pic16c71,xt=40000hz

LIST P=16c71

;

Z            EQU    2

RBPU         EQU    7

TEMP         EQU    10H

OPTIONREG    EQU    1H

F            EQU    1

PORT_B       EQU    06H

;

             INCLUDE 

             LIST

;

             ORG     0                  ;复位地址

             GOTO    START

;

             ORG     4                  ;中断向量

             GOTO    SERVICEINTERRUPT

;

START

             CALL    INITPORT_B         ;初始化B口

LOOP

             SLEEP                      ;省电睡眠,等待被唤醒

             NOP

             GOTO    LOOP

;

SERVICEINTERRUPT

             BTFSC   INTCON,RBIF

             GOTO    SERVICEWAKUP

             CLRF    INTCON

             BSF     INTCON,RBIE

             RETFIE

;

;检查是哪个键被按下,并点亮相应的LED直到按键释放,再返回睡眠状态

;

SERVICEWAKUP

             BCF     INTCON,RBIE

             COMF    PORT_B,W

             BCF     INTCON,RBIF

             CALL    DELAY16

             COMF    PORT_B,W

             ANDLW   B'11110000'

             MOVWF   TEMP

             SWAPF   TEMP,W

             MOVWF   PORT_B

             CALL    KEYRELEASE

             RETFIE

;

;等待所有的按键都被释放程序

;

KEYRELEASE

             CALL    DELAY16

             COMF    PORT_B,W

             BCF     INTCON,RBIF

               BCF     INTCON,RBIE

             ANDLW   B'11110000'

             BTFSC   STATUS,Z

             RETURN

             GOTO    KEYRELEASE

;

;初始化    B口子程序

;

INITPORT_B

             BSF     STATUS,RP0

             MOVLW   B'11110000'

             MOVWF   TRISB

             BCF     OPTIONREG,RBPU

             BCF     STATUS,RP0

             CLRF    PORT_B

             BCF     INTCON,RBIE

             MOVF    PORT_B,W

             BCF     INTCON,RBIF

             BSF     INTCON,RBIE

             BSF     INTCON,GIE

             RETURN

;

;延时去抖动子程序

DELAY16

             BSF     STATUS,RP0

             MOVLW   B'00000111'

             MOVWF   OPTIONREG

             BCF     STATUS,RP0

             CLRF    TMR0

             BCF     INTCON,T0IF

CHECKAGAIN

             BTFSS   INTCON,T0IF

             GOTO    CHECKAGAIN

             BCF     INTCON,T0IF

             RETURN

             END