英锐恩单片机论坛,Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流

标题: 旋转式编码开关程序 [打印本页]

作者: star    时间: 2012-8-21 16:33
标题: 旋转式编码开关程序
旋转式编码开关用了104的电容做防抖,也可以用延时做防抖,还是用RB4口电平变化中断功能,RB4判高电平,RB1判方向,RB2和RB3作指示,编码开关的用途非常广泛,用作数调很方便,程序很简单就不解释了,后面有个小延时,改一改可做实验用,谢谢! ;=============================
LIST   P=16F72
INCLUDE"P16F72.INC"
;=================================
W_TEMP      EQU  0X21
STATUS_TEMP EQU  0X22
PCLATH_TEMP EQU  0X23
N0         EQU  0X24
N1         EQU  0X25
;=================================
        ORG     0000H
        NOP
        GOTO    MAIN
        ORG     0004H
        GOTO    ZD
;===========中断返回==================
RETFIE_IN
        RETFIE
;=======================================
MAIN
        BSF    STATUS,RP0
        MOVLW  B'11110011'
        MOVWF  TRISB
        BCF    OPTION_REG,NOT_RBPU      ;启动上拉
        MOVLW  B'10001001'              ;启动总中断、RBIE中断
        MOVWF  INTCON                 
        BCF    STATUS,RP0
        CLRF   PORTB
        BCF    INTCON,RBIF
LOP     
        GOTO   LOP
;==============现场保护子程序==================
ZD
        MOVWF  W_TEMP
        SWAPF  STATUS,W
        MOVWF  STATUS_TEMP
        MOVF   PCLATH,W
        MOVWF  PCLATH_TEMP
;================================================
ZD1     BCF    INTCON,RBIF
        NOP
        BTFSC  INTCON,RBIF
        CALL   KKK
        CLRF   INTCON
        BSF    INTCON,RBIE
;===============现场恢复子程序===================
POP   
        MOVF   PCLATH_TEMP,W
        MOVWF  PCLATH
        SWAPF  STATUS_TEMP,W
        MOVWF  STATUS
        SWAPF  W_TEMP,F
        SWAPF  W_TEMP,W
        GOTO   RETFIE_IN  
;=====================================================
KKK
        MOVF   PORTB,F       ;读RB口,锁定状态
        NOP
        BTFSS  PORTB,4       ;检测RB4口,为0则继续检测,为1则检另一侧RB2
        GOTO   $-1         
        BTFSS  PORTB,1
        GOTO   KK
        BTFSS  PORTB,1
        GOTO   KK
        BSF    PORTB,2
        MOVF   PORTB,F
        RETURN
;===================================================
KK      BTFSC  PORTB,1
        GOTO   RETFIE_IN
        BSF    PORTB,3
        MOVF   PORTB,F
        RETURN
;=======================20MS=========================
DELAY2MS
      MOVLW 0x9D ;外层
     MOVWF N1
     MOVLW 0xBE ;内层
     MOVWF N0
     INCFSZ N0
     GOTO  $-1
     INCFSZ N1
     GOTO  $-5
     RETURN
            END





欢迎光临 英锐恩单片机论坛,Microchip单片机,模拟器件,接口电路,麦肯单片机,单片机应用交流 (http://www.enroobbs.com/) Powered by Discuz! X3.2