单片机 > 单片机程序设计 > 详情

PIC子程序-按键唤醒

发布时间:2020-06-19 发布时间:
|

TITLE        "Key Stroke Wake Up" 
LIST  P = 16C54 
;****************************************************** 
;       Program demonstrating key stroke wake up for 

;       the PIC16CXX. Program has been implemented for 
;       two keys, but CAN be extended for more keys. 
;       When SW1 is pressed a green LED lights up. 
;       When SW2 is pressed a red LED lights up. 
;****************************************************** 

; Define equates 

        PC       EQU    2 
        PORT_B   EQU    6 
        SCAN1    EQU    2 
        SCAN2    EQU    3 
        SW1      EQU    0 
        SW2      EQU    1 
        GRN_LED  EQU    4 
        RED_LED  EQU    5 
        MSEC_20  EQU    D’20’ 
        DB1      EQU    8 
        GP       EQU    8 
        DB2      EQU    9 

;PORT_B ASSIGNMENTS: 
;       0 --> SW1       INPUT 
;       1 --> SW2       INPUT 
;       2 --> SCAN1     OUTPUT 
;       3 --> SCAN2     OUTPUT 
;       4 --> GRN_LED   OUTPUT 
;       5 --> RED_LED   OUTPUT 
;     6&7 --> ASSIGNED AS DUMMY OUTPUTS 
PAGE 


        ORG      0 

START 
        CALL    INIT_PORT_B     ;INITIALIZE PORT B 
        CALL    DELAY           ;DELAY 20 MSECS 
        CALL    SCAN_KEYS       ;GET KEY VALUES 
         MOV WF   GP              ;SAVE IN RAM 
        BTFSC   GP,SW1          ;SKIP IF SW1 NOT PRESSED 
        CALL    TURN_GREEN_ON   ;ELSE DO ROUTINE 
        BTFSC   GP,SW2          ;SKIP IF SW2 NOT PRESSED 
        CALL    TURN_RED_ON     ;ELSE DO ROUTINE 
CHK_FOR_KEY 
        CALL    DELAY           ;DELAY FOR 20 MSEC 
        CALL    SCAN_KEYS       ;GET KEY HIT 
        XORLW   0               ;EXCL. OR WITH 0 
        BNZ     CHK_FOR_KEY     ;KEY STILL PRESSED 
                                ;THEN LOOP 
NO_KEY_PRESSED 
        BCF     PORT_B,SCAN1    ;SET SCAN LINES LOW 
        BCF     PORT_B,SCAN2    ;       / 
        SLEEP                   ;SLEEP 

PAGE 

INIT_PORT_B 
         MOV LW   B’00000011’     ; config RB0, 1 as i/p’s 
        TRIS    PORT_B          ;  and RB2-7 as o/p’s 
         MOV LW   0FFh 
         MOV WF   PORT_B          ;DEFAULT VALUES FOR PORT_B 
        RETLW   0               ;RETURN WITH NO ERROR 

;This routine, scans two keys and returns the following: 
;       0 if no key is pressed 
;       1 if SW1 is pressd 
;       2 if SW2 is pressed 
;       3 if SW1 and SW2 are pressed 

SCAN_KEYS 
        BCF     PORT_B,SCAN1    ;ENABLE SCAN FOR SW1 
        BCF     PORT_B,SCAN2    ;EANBLE SCAN FOR SW2 
         MOV LW   B’00000011’     ;LOAD MASK IN W 
        ANDWF   PORT_B,0        ;AND WITH PORT 
        BSF     PORT_B,SCAN1    ;DISABLE SCAN 
        BSF     PORT_B,SCAN2    ;       / 
        ADDWF   PC,1            ;GET OFFSET TO TABLE 
        RETLW   3               ;SW1 AND SW2 PRESSED 
        RETLW   2               ;SW2 PRESSED 
        RETLW   1               ;SW1 PRESSED 
        RETLW   0               ;NO KEY PRESSED 

;DELAY, IS A APPROX. WAIT FOR 20.4mSECS, FOR A SYSTEM 
;USING A 2 MHz CRYSTAL CLOCK. 
DELAY 
         MOV LW   MSEC_20 
         MOV WF   DB1 
DLY1 
        CLRF    DB2 
        DECFSZ  DB1 
        GOTO    DLY2 
        RETLW   0 
DLY2 
        DECFSZ  DB2             ;INNER LOOP = 1.02 MSEC. 
        GOTO    DLY2            ;       / 
        GOTO    DLY1 


TURN_GREEN_ON 
        BCF     PORT_B,GRN_LED 
        RETLW   0 

TURN_RED_ON 
        BCF     PORT_B,RED_LED 
        RETLW   0 

        END 


关键字:PIC  子程序  按键唤醒 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
C8051F020的UART