📄 hongwai.lst
字号:
A51 MACRO ASSEMBLER HONGWAI 04/15/2007 09:26:16 PAGE 1
MACRO ASSEMBLER A51 V7.07
OBJECT MODULE PLACED IN hongwai.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE hongwai.asm SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
1
2 ;接收代码格式:
3 ;1.位代码:0 低电平0.56ms 高电平0.56ms 周期为1.12ms
4 ;1 低电平1.56ms 高电平1.68ms 周期为2.24ms
5 ;2.单发代码格式:起始码(低电平 9ms) 结果码(高电平 4.5ms) 接下来是低8位地址码,高8位地址码
6 ;8位数据码,8位数据反码
7 ;3.连发代码格式:在发完32位地址数据码以后发送起始码(低电平 9ms) 结果码(高电平 2.5ms) 接下
;来重复起始码,结果码
8 ;引起连发代码的原因是一直按键不放
9
10
0000 11 ORG 0000H
0000 12 MAIN:
0000 30B203 13 JNB P3.2,IR ;遥控扫描
0003 020000 14 LJMP MAIN ;主循环
0006 15 IR: ;解码开始
0006 7E0A 16 MOV R6,#10
0008 17 IR_SB:
18 ;检验10次共8.8ms,即这8.8ms里P3.2都是低电平
0008 1153 19 ACALL DELAY882;延时882微秒
000A 20B22B 20 JB P3.2,IR_ERROR;数据错误退出解码
000D DEF9 21 DJNZ R6,IR_SB;重复10次检测
22 ;识别连发码
000F 30B2FD 23 JNB P3.2,$;等待高电平,证明之前有9ms的低电平起始码
0012 1161 24 ACALL DELAY2400
0014 30B21F 25 JNB P3.2,IR_RP;这时为低电平,表明这是连发码(一直按着按键发送),即9ms低电平,2.5ms
高电平,否则为结果码
0017 1161 26 ACALL DELAY2400 ;延时4.74MS避开4.5MS的结果码
27 ;读取32位数据码
0019 791A 28 MOV R1,#1AH;存放数据的起始地址
001B 7A04 29 MOV R2,#4
001D 30 IR_4BYTE:
001D 7B08 31 MOV R3,#8
001F 32 IR_8BIT:
001F 30B2FD 33 JNB P3.2,$;等待第一位的高电平信号
0022 120053 34 LCALL DELAY882;高电平来后开始延时0.88ms,大于0.56ms小于1.12ms
0025 A2B2 35 MOV C,P3.2;这时读P3.2电平值并送C
0027 5003 36 JNC IR_8BIT_0;这一位为低电平则直接存这一位数据并读下一位数据,否则延时1ms再存数据并
读下一位数据
0029 12005A 37 LCALL DELAY1000
38 ;接收4个字节,32位数据并分别放入RAM中1AH,1BH,1CH,1DH中
002C 39 IR_8BIT_0:
002C E7 40 MOV A,@R1;将R1中的值给累加器A
002D 13 41 RRC A;将C移入A的最低位
002E F7 42 MOV @R1,A;保存A中的值到RAM中
002F DBEE 43 DJNZ R3,IR_8BIT;跳转去接收下一位数据,直到接收完8位数据则接收下一字节
0031 09 44 INC R1;下一地址
0032 DAE9 45 DJNZ R2,IR_4BYTE;接收下一字节数据,直到接收完4个字节数据
0034 8005 46 JMP IR_GOTO ;解码结束
0036 47 IR_RP:
0036 8003 48 JMP IR_GOTO
0038 49 IR_ERROR:
0038 020000 50 LJMP MAIN
003B 51 IR_GOTO: ;执行部分
52 ;接收的第一,二,三,四字节分别为地址的低八位,地址的高八位,一字节数据,一字节数据
反码
003B E51C 53 MOV A,1CH ;将接收到的第三字节,即一字节数据
003D F4 54 CPL A
A51 MACRO ASSEMBLER HONGWAI 04/15/2007 09:26:16 PAGE 2
003E B51DF7 55 CJNE A,1DH,IR_ERROR;将接收的一字节数据取反并与第四字节数据比较,不相等则说明接收出
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -