NT1
KEY_A
BTFSC PORTA,3
INCF CNT0,1
BTFSS PORTA,3
CLRF CNT0
BTFSC CNT0,3
GOTO LOOP
DECFSZ CNT1,1
GOTO KEY_A
INCF COUNTER,1 ;按键计数加一
MOVFW COUNTER
MOVWF CNT1
DECFSZ CNT1,1 ;是否是第一次按下按键
GOTO KEY_B ;不是则转
SWAPF CSR3,W ;用户码低8位 高低位交换,先处理高位
ANDLW 0FH ;屏蔽掉高位
MOVWF DISPBUF_H ;存入寄存器
MOVFW CSR3 ;用户码低8位 低位处理
ANDLW 0FH ;屏蔽掉高位
MOVWF DISPBUF_L ;存入寄存器
GOTO KEY_END
KEY_B
DECFSZ CNT1,1 ;第二次按下按键否
GOTO KEY_C ;不是第二次按下按键则是第三次转相应
程序
SWAPF CSR2,W ;显示值高低位交换,先处理高位
ANDLW 0FH ;屏蔽掉高位
MOVWF DISPBUF_H ;存入寄存器
MOVFW CSR2 ;显示值低位处理
ANDLW 0FH ;屏蔽掉高位
MOVWF DISPBUF_L ;存入寄存器
GOTO KEY_END
KEY_C
CLRF COUNTER ;该次循环结束,按键计数送初值
SWAPF CSR1,W ;键码值高低位交换,先处理高位
ANDLW 0FH ;屏蔽掉高位
MOVWF DISPBUF_H ;存入寄存器
MOVFW CSR1 ;键码值低位处理
ANDLW 0FH ;屏蔽掉高位
MOVWF DISPBUF_L ;存入寄存器
KEY_END
BTFSS PORTA,3 ;等待键释放
GOTO $-1
GOTO LOOP
;--------------------------------------------------
RCV
BTFSC PORTA,RMT
GOTO LOOP ;是干扰退出
MOVLW 4
MOVWF CNT1 ;4*256*10us
CLRF CNT2
CLRF CNT0
RCV1 ;先检测引导码的9MS低电平
GOTO content1 ;每一个循环10US
NOP
BTFSC PORTA,RMT
INCF CNT2,1
BTFSS PORTA,RMT
CLRF CNT2
BTFSC CNT2,3 ;高电平大于8*10US=80US则为有效高电平,否则是一些干扰信号
GOTO RCV2
DECFSZ CNT0,1
GOTO RCV1
DECFSZ CNT1,1
GOTO RCV1
GOTO LOOP ;低电平大于4*256*10US=10.24MS则是错误脉冲
RCV2
MOVLW 3
SUBWF CNT1,0 ;低电平小于2*256*10US=5.12MS则是错误脉冲
SKPNC
GOTO LOOP
MOVLW 3
MOVWF CNT1 ;3*256*10us
CLRF CNT2
CLRF CNT0
RCV3
GOTO content1 ;每一个循环10US
NOP
BTFSS PORTA,RMT
INCF CNT2,1
BTFSC PORTA,RMT
CLRF CNT2
BTFSC CNT2,3 ; 低电平大于8*10US=80US则为有效低电平,否则是一些干扰信号
GOTO RCV4
DECFSZ CNT0,1
GOTO RCV3
DECFSZ CNT1,1
GOTO RCV3
GOTO LOOP ;高电平大于3*256*10US=7.68MS则是错误的
RCV4
MOVLW 3
SUBWF CNT1,0 ;高电平小于1*256*10US=2.56MS则