star 发表于 2012-8-21 16:33:06

旋转式编码开关程序

旋转式编码开关用了104的电容做防抖,也可以用延时做防抖,还是用RB4口电平变化中断功能,RB4判高电平,RB1判方向,RB2和RB3作指示,编码开关的用途非常广泛,用作数调很方便,程序很简单就不解释了,后面有个小延时,改一改可做实验用,谢谢! ;=============================
LIST   P=16F72
INCLUDE"P16F72.INC"
;=================================
W_TEMP      EQU0X21
STATUS_TEMP EQU0X22
PCLATH_TEMP EQU0X23
N0         EQU0X24
N1         EQU0X25
;=================================
      ORG   0000H
      NOP
      GOTO    MAIN
      ORG   0004H
      GOTO    ZD
;===========中断返回==================
RETFIE_IN
      RETFIE
;=======================================
MAIN
      BSF    STATUS,RP0
      MOVLWB'11110011'
      MOVWFTRISB
      BCF    OPTION_REG,NOT_RBPU      ;启动上拉
      MOVLWB'10001001'            ;启动总中断、RBIE中断
      MOVWFINTCON               
      BCF    STATUS,RP0
      CLRF   PORTB
      BCF    INTCON,RBIF
LOP   
      GOTO   LOP
;==============现场保护子程序==================
ZD
      MOVWFW_TEMP
      SWAPFSTATUS,W
      MOVWFSTATUS_TEMP
      MOVF   PCLATH,W
      MOVWFPCLATH_TEMP
;================================================
ZD1   BCF    INTCON,RBIF
      NOP
      BTFSCINTCON,RBIF
      CALL   KKK
      CLRF   INTCON
      BSF    INTCON,RBIE
;===============现场恢复子程序===================
POP   
      MOVF   PCLATH_TEMP,W
      MOVWFPCLATH
      SWAPFSTATUS_TEMP,W
      MOVWFSTATUS
      SWAPFW_TEMP,F
      SWAPFW_TEMP,W
      GOTO   RETFIE_IN
;=====================================================
KKK
      MOVF   PORTB,F       ;读RB口,锁定状态
      NOP
      BTFSSPORTB,4       ;检测RB4口,为0则继续检测,为1则检另一侧RB2
      GOTO   $-1         
      BTFSSPORTB,1
      GOTO   KK
      BTFSSPORTB,1
      GOTO   KK
      BSF    PORTB,2
      MOVF   PORTB,F
      RETURN
;===================================================
KK      BTFSCPORTB,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
页: [1]
查看完整版本: 旋转式编码开关程序