📄 ev1527的解码程序.txt
字号:
;-------------------
RMT_SS1
BCF STATUS,C
RETLW 0 ;W返回"0"
RMT_0
RMT_SS2
BSF STATUS,C
RETLW 1 ;W返回"1"
;解码子程序---------------------
RECEIVE
BTFSS RFIN;遥控信号输入端为"1"间跳
GOTO RMT_0
CLRF CNT0 ;CNT0为同步头脉冲宽度计数器
RCV1
CLRWDT
BTFSS RFIN
GOTO RCV1_2
INCF CNT0,1 ;RFIN上同步头为高电平,计数器加1
BTFSS STATUS,Z
GOTO RCV1
GOTO RMT_0
RCV1_2
MOVLW 30
SUBWF CNT0,0
BNC RMT_0 ;对同步头高电平大于420US或小于180US的都丢弃并退出解码程序
CLRF CNT1
RCV2
GOTO $+1
GOTO $+1
GOTO $+1
GOTO $+1
GOTO $+1
GOTO $+1
CLRWDT
BTFSC RFIN ;检测RFIN上的同步头低电平的宽度
GOTO RMT_0
DECFSZ CNT1,1 ;对小于256*18=4.5ms的同步头低电平滤除
GOTO RCV2
RCV2_1
CLRWDT
BTFSS RFIN
GOTO RCV2_1 ;同步头中低电平的等待
MOVLW 24;
MOVWF CNT2 ;CNT2为脉冲周期计数器,8位数据码加4位键码共24个脉冲
RCV3
CLRF CNT0
CLRF CNT4
RCV3_1 ;周期低电平时等待并计数
CLRWDT
GOTO $+1
BTFSC RFIN
GOTO RCV4
INCFSZ CNT0,1
GOTO RCV3_1
GOTO RMT_0 ;溢出退出
RCV4 ;高电平计数
CLRWDT
BTFSS RFIN
GOTO RCV5 ;等待低电平时对数据作处理
INCFSZ CNT4,1
GOTO RCV4
GOTO RMT_0 ;1.2ms溢出退出
RCV5
MOVLW 20
SUBWF CNT4,0
BNC RMT_0 ;对小于100us的滤除
MOVLW 80
SUBWF CNT4,0
BNC RCV5_0
BSF FLAGS,BITIN ;对大于300us的标为"1"
GOTO RCV6
RCV5_0
BCF FLAGS,BITIN ;对小于300us的标为"0"
RCV6
RLF CSR0,1 ;CSR0-CSR2连进位左循环
RLF CSR1,1
RLF CSR2,1
BCF CSR0,0
BTFSC FLAGS,BITIN
BSF CSR0,0
DECFSZ CNT2,1
GOTO RCV3 ;至此CSR1-2为地址码值,CSR0的高4位为地址码值,CSR0低4位为键
码值
MOVFW CSR0
MOVWF CSR3 ;将键码值放在CSR3中
MOVLW 0FH
ANDWF CSR3,1 ;屏蔽高4位,保留键码值
MOVLW 0F0H
ANDWF CSR0,1 ;屏蔽低4位,保留地址码值
GOTO RMT_SS1 ;返回"0"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -