旋转式编码开关程序
旋转式编码开关用了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]