📄 rf.asm
字号:
IRDA_RD_BIT BIT P3.3 ; 红外接收
RF_JS: CLR EA ; 红外接收及译码程序
MOV R0,#80H
SETB IRDA_RD_BIT
RF_1: JNB IRDA_RD_BIT,RF_2
RET
RF_2: LCALL DL1MS
LCALL DL1MS
JB IRDA_RD_BIT,RF_1 ; 消抖动,确认信号
JNB IRDA_RD_BIT,$ ; 等待高电平
MOV R3,#00H ; 8位计数初始化
RF_3: JB IRDA_RD_BIT,$ ; 开始等待低电平
JNB IRDA_RD_BIT,$ ; 再等高电平
MOV R2,#00H ; 0.1ms延时几次
RF_4: LCALL DL01MS
JNB IRDA_RD_BIT,RF_5 ; 高电平结束
INC R2 ; 次数加一
CJNE R2,#30,RF_4 ; 计数超过30次自动结束
LJMP RF_CODE
RF_5: MOV A,#08H
CLR C
SUBB A,R2 ; 用进位C判别信号是0还是1
MOV A,@R0
RRC A ; 右移入寄存器
MOV @R0,A ; 重新存入内存单元
INC R3 ; 判别下一位
CJNE R3,#08H,RF_3 ; 8位没到继续判别
MOV R3,#00H ; 8位到,清位计数器
INC R0 ; 接收下一个字节
CJNE R0,#8EH,RF_3
RF_CODE:LCALL SHOW_RFCODE
SETB EA
RET
说明:
1. DL1MS: 延时1ms 子程序, DL01MS : 延时0.1ms 子程序
2. MOV R0,#80H 红外接收的数据的地址 80H~8DH
3. SHOW_RFCODE 在LCD上显示红外接收的数据(演示用)
4. 在中断中建立红外接收数据标记,在主程序中调用RF_JS
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -