📄 hw_test.lst
字号:
A51 MACRO ASSEMBLER HW_TEST 01/19/2008 02:39:47 PAGE 1
MACRO ASSEMBLER A51 V7.10
OBJECT MODULE PLACED IN hw_test.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE hw_test.a51 SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
1
2
3
4
5
6
7
8
9
10
11
12
13
0000 14 ORG 0000H
15
0000 16 MAIN:
0000 30A603 17 JNB P2.6,IR ;遥控扫描
0003 020000 18 LJMP MAIN ;在正常无遥控信号时,一体化红外接收头输出是高电平,程序一直在循环
。
19
20 ;=================================================
21 ; 解码程序
0006 22 IR:
23 ;以下对遥控信号的9000微秒的初始低电平信号的识别
0006 7E0A 24 MOV R6,#10
0008 25 IR_SB:
0008 1160 26 ACALL DELAY882 ;调用882微秒延时子程序
000A 20A62B 27 JB P2.6,IR_ERROR ;延时882微秒后判断P2.2脚是否出现高电平如果有就退出解码程序
000D DEF9 28 DJNZ R6,IR_SB ;重复10次,目的是检测在8820微秒内如果出现高电平就退出解码程序
29
30 ;识别连发码,和跳过4.5ma的高电平。
000F 30A6FD 31 JNB P2.6, $ ;等待高电平避开9毫秒低电平引导脉冲
0012 116E 32 ACALL DELAY2400
0014 30A61F 33 JNB P2.6,IR_Rp ;这里为低电平,认为是连发码信号,见图6。
0017 116E 34 ACALL DELAY2400 ;延时4.74毫秒避开4.5毫秒的结果码
35
36 ;以下32数据码的读取 ,0和1的识别 请看图2
0019 791A 37 MOV R1,#1AH ;设定1AH为起始RAM区
001B 7A04 38 MOV R2,#4
001D 39 IR_4BYTE:
001D 7B08 40 MOV R3,#8
001F 41 IR_8BIT:
001F 30A6FD 42 JNB P2.6,$ ;等待地址码第一位的高电平信号
0022 120060 43 LCALL DELAY882 ;高电平开始后用882微秒的时间尺去判断信号此时的高低电平状态
0025 A2A6 44 MOV C,P2.6 ;将P2.2引脚此时的电平状态0或1存入C中
0027 5003 45 JNC IR_8BIT_0 ;如果为0就跳转到IR_8BIT_0
0029 120067 46 LCALL DELAY1000
002C 47 IR_8BIT_0:
002C E7 48 MOV A,@R1 ;将R1中地址的给A
002D 13 49 RRC A ;将C中的值0或1移入A中的最低位
002E F7 50 MOV @R1,A ;将A中的数暂时存放在R1中
002F DBEE 51 DJNZ R3,IR_8BIT ;接收地址码的高8位
0031 09 52 INC R1 ;对R1中的值加1,换下一个RAM
0032 DAE9 53 DJNZ R2,IR_4BYTE ;接收完16位地址码和8位数据码和8位数据,
54 ;存放在1AH/1BH/1CH/1DH的RAM中
55 ;解码成功
0034 8005 56 JMP IR_GOTO
57
A51 MACRO ASSEMBLER HW_TEST 01/19/2008 02:39:47 PAGE 2
0036 58 IR_Rp:
59 ;这里为重复码执行处
60 ;按住遥控按键时,每过108ms就到这里来
0036 8003 61 JMP IR_GOTO
62
0038 63 IR_ERROR:
64 ;错语退出
0038 020000 65 LJMP MAIN ;退出解码子程序
66
67 ;=================================================
68 ;遥控执行部份
003B 69 IR_GOTO:
70 ;这里还要判断1AH和1BH 两个系统码或用户码,用于识别不同的遥控器
71 ;MOV A,1AH
72 ;CJNE A,#xxH,IR_ERROR ;用户码1不对则退出
73 ;MOV A,1BH
74 ;CJNE A,#xxH,IR_ERROR ;用户码2不对则退出
75
76
77
78 ;判断两个数据码是否相反
003B E51C 79 MOV A,1CH
003D F4 80 CPL A
003E B51DF7 81 CJNE A,1DH,IR_ERROR ;两个数据码不相反则退出
82 ;遥控执行部份
83 ;MOV A,1DH ;判断对应按键
84 ;CJNE A,#xxH,$+6
85 ;LJMP -à跳到对应按键执行处
86 ;CJNE A,#xxH,$+6
87 ;LJMP -à跳到对应按键执行处
88 ;.
0041 851D90 89 MOV P1,1DH ;将按键的键值通过P1口的8个LED显示出来!
0044 C2A4 90 CLR P2.4 ;蜂鸣器鸣响-嘀嘀嘀-的声音,表示解码成功
0046 12006E 91 LCALL DELAY2400
0049 12006E 92 LCALL DELAY2400
004C 12006E 93 LCALL DELAY2400
004F D2A4 94 SETB P2.4 ;蜂鸣器停止
95
96 ;清除遥控值使连按失效
0051 751A00 97 MOV 1AH,#00H
0054 751B00 98 MOV 1BH,#00H
0057 751C00 99 MOV 1CH,#00H
005A 751D00 100 MOV 1DH,#00H
005D 020000 101 LJMP MAIN
102 ;=================================================
103 ; 延时子程序
104 ;=============================882
105 ;1.085x ((202x4)+5)=882
0060 106 DELAY882:
0060 7FCA 107 MOV R7,#202
0062 108 DELAY882_A:
0062 00 109 NOP
0063 00 110 NOP
0064 DFFC 111 DJNZ R7,DELAY882_A
0066 22 112 RET
113
114 ;=============================1000
115 ;1.085x ((229x4)+5)=999.285
0067 116 DELAY1000:
0067 7FE5 117 MOV R7,#229
0069 118 DELAY1000_A:
0069 00 119 NOP
006A 00 120 NOP
006B DFFC 121 DJNZ R7,DELAY1000_A
006D 22 122 RET
123 ;=============================2400
A51 MACRO ASSEMBLER HW_TEST 01/19/2008 02:39:47 PAGE 3
124 ;1.085x ((245x9)+5)=2397.85
006E 125 DELAY2400:
006E 7FF5 126 MOV R7,#245
0070 127 DELAY2400_A:
0070 00 128 NOP
0071 00 129 NOP
0072 00 130 NOP
0073 00 131 NOP
0074 00 132 NOP
0075 00 133 NOP
0076 00 134 NOP
0077 DFF7 135 DJNZ R7,DELAY2400_A
0079 22 136 RET
137 END
A51 MACRO ASSEMBLER HW_TEST 01/19/2008 02:39:47 PAGE 4
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
DELAY1000. . . . . C ADDR 0067H A
DELAY1000_A. . . . C ADDR 0069H A
DELAY2400. . . . . C ADDR 006EH A
DELAY2400_A. . . . C ADDR 0070H A
DELAY882 . . . . . C ADDR 0060H A
DELAY882_A . . . . C ADDR 0062H A
IR . . . . . . . . C ADDR 0006H A
IR_4BYTE . . . . . C ADDR 001DH A
IR_8BIT. . . . . . C ADDR 001FH A
IR_8BIT_0. . . . . C ADDR 002CH A
IR_ERROR . . . . . C ADDR 0038H A
IR_GOTO. . . . . . C ADDR 003BH A
IR_RP. . . . . . . C ADDR 0036H A
IR_SB. . . . . . . C ADDR 0008H A
MAIN . . . . . . . C ADDR 0000H A
P1 . . . . . . . . D ADDR 0090H A
P2 . . . . . . . . D ADDR 00A0H A
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -