📄 ir-dsy.lst
字号:
A51 MACRO ASSEMBLER IR_DSY 10/12/2006 08:59:00 PAGE 1
MACRO ASSEMBLER A51 V7.08a
OBJECT MODULE PLACED IN IR-DSY.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE IR-DSY.asm SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
1 ;* 数码管显示, P0口为数码管的数据口 *
2 ;* *
3 ;* K17键按下,继电器吸合。K19键按下,继电器关闭。 *
4 ;* *
5
6 ;-----------------------------------------------
0020 7 IRCOM EQU 20H ;20H-23H IR使用
8
00B2 9 IRIN EQU P3.2
00B7 10 BEEP EQU P3.7
0093 11 RELAY EQU P1.3
12 ;------------------------------------------------
0000 13 ORG 0000H
0000 8003 14 JMP MAIN
15
0003 16 ORG 0003H ;外部中断INT0入口地址
0003 802A 17 JMP IR_IN
18 ;------------------------------------------------
0005 19 MAIN:
0005 758160 20 MOV SP,#60H
0008 7400 21 MOV A,#00H
000A 7820 22 MOV R0,#20H
000C F6 23 LOOP0: MOV @R0,A ;20H-27H清零
000D 08 24 INC R0
000E B828FB 25 CJNE R0,#28H,LOOP0
0011 75A881 26 MOV IE,#81H ;允许总中断中断,使能 INT0 外部中断
0014 758801 27 MOV TCON,#01H ;触发方式为脉冲负边沿触发
28
0017 D2B2 29 SETB IRIN
0019 D2B7 30 SETB BEEP
001B D293 31 SETB RELAY
001D 11A2 32 CALL IR_SHOW
33
001F 34 LOOP1:
001F 11A2 35 CALL IR_SHOW
0021 E522 36 MOV A,22H
0023 B44002 37 CJNE A,#40H,LOOP2 ;K17键按下
0026 C293 38 CLR RELAY ;继电器吸合
0028 B40402 39 LOOP2: CJNE A,#04H,LOOP3 ;K19键按下
002B D293 40 SETB RELAY ;继电器关闭
002D 80F0 41 LOOP3: JMP LOOP1
42
43 ;---------------------------------------------------
44 ; IR 译码子程序
45 ;---------------------------------------------------
002F 46 IR_IN:
002F C2AF 47 CLR EA ;暂时关闭CPU的所有中断请求
0031 C0E0 48 PUSH ACC
0033 C0D0 49 PUSH PSW
0035 D2D3 50 SETB PSW.3 ;选择工作寄存器组1
0037 C2D4 51 CLR PSW.4
0039 7A04 52 MOV R2,#04H
003B 7820 53 MOV R0,#IRCOM
003D 30B204 54 I1: JNB IRIN,I2 ;等待 IR 信号出现
0040 DAFB 55 DJNZ R2,I1
0042 803E 56 JMP IR_OUT ;IR信号没出现,退出。
0044 7C14 57 I2: MOV R4,#20
0046 11EF 58 I20: CALL DEL
A51 MACRO ASSEMBLER IR_DSY 10/12/2006 08:59:00 PAGE 2
0048 DCFC 59 DJNZ R4,I20
004A 20B2F0 60 JB IRIN,I1 ;确认IR信号出现
004D 20B204 61 I21: JB IRIN,I3 ;等 IR 变为高电平
0050 11EF 62 CALL DEL
0052 80F9 63 JMP I21
0054 7B00 64 I3: MOV R3,#0 ;8位数清为0
0056 30B204 65 LL: JNB IRIN,I4 ;等 IR 变为低电平
0059 11EF 66 CALL DEL
005B 80F9 67 JMP LL
005D 20B204 68 I4: JB IRIN,I5 ;等 IR 变为高电平
0060 11EF 69 CALL DEL
0062 80F9 70 JMP I4
0064 7A00 71 I5: MOV R2,#0 ;0.14ms 计数
0066 11EF 72 L1: CALL DEL
0068 20B213 73 JB IRIN, N1 ;等 IR 变为高电平
74 ;IR=0,检查R2中的计数值
006B 7408 75 MOV A,#8
006D C3 76 CLR C
006E 9A 77 SUBB A,R2 ;判断高低位
78 ;IF C=0 BIT=0
006F E6 79 MOV A,@R0
0070 13 80 RRC A
0071 F6 81 MOV @R0,A ;处理完一位
0072 0B 82 INC R3
0073 BB08E0 83 CJNE R3,#8,LL ;需处理完8位
0076 7B00 84 MOV R3,#0
0078 08 85 INC R0
0079 B824DA 86 CJNE R0,#24H,LL ;收集到4字节了
007C 800B 87 JMP IR_COMP
007E 0A 88 N1: INC R2
007F BA1EE4 89 CJNE R2,#30,L1 ;0.14ms 计数过长则时间到自动离开
90
0082 D0D0 91 IR_OUT: POP PSW
0084 D0E0 92 POP ACC
0086 D2AF 93 SETB EA
0088 32 94 RETI
95 ;---------------------------------------------------------------
96 ;键值比较与键值数据处理
97 ;22H存入用户编码,23H存入用户编码的反码
98 ;---------------------------------------------------------------
0089 99 IR_COMP:
0089 E522 100 MOV A,22H
008B F4 101 CPL A ;将22H取反后和23H比较
008C B523F3 102 CJNE A,23H,IR_OUT ;如果不等表示接收数据发生错误,放弃
008F 103 IR_CHULI:
008F E522 104 MOV A,22H
0091 540F 105 ANL A,#0FH
0093 F525 106 MOV 25H,A ;送个位显示单元
0095 E522 107 MOV A,22H
0097 54F0 108 ANL A,#0F0H
0099 C4 109 SWAP A
009A F526 110 MOV 26H,A ;送十位显示单元
009C 11A2 111 CALL IR_SHOW ;显示键值
009E 11D1 112 CALL BEEP_BL ;蜂鸣器鸣响表示解码成功
00A0 80E0 113 JMP IR_OUT
114
115 ;=======================================================
116 ;键值显示
117 ;=======================================================
00A2 118 IR_SHOW:
00A2 E525 119 MOV A,25H ;取显示数据到A
00A4 9000C1 120 MOV DPTR,#TAB ;取段码表地址
00A7 93 121 MOVC A,@A+DPTR ;查显示数据对应段码
00A8 F580 122 MOV P0,A ;段码放入P0口
00AA C2A7 123 CLR P2.7
00AC D2A6 124 SETB P2.6
A51 MACRO ASSEMBLER IR_DSY 10/12/2006 08:59:00 PAGE 3
00AE 1200FC 125 LCALL DELAY1
00B1 E526 126 MOV A,26H ;取显示数据到A
00B3 9000C1 127 MOV DPTR,#TAB ;取段码表地址
00B6 93 128 MOVC A,@A+DPTR ;查显示数据对应段码
00B7 F580 129 MOV P0,A ;段码放入P0口
00B9 C2A6 130 CLR P2.6
00BB D2A7 131 SETB P2.7
00BD 1200FC 132 LCALL DELAY1
00C0 22 133 RET
134 ;-----------------------------------------------------
00C1 135 TAB:
00C1 C0F9A4B0 136 DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H
00C5 999282F8
00C9 80908883 137 DB 80H,90H,88h,83h,0c6h,0a1h,86h,8eh ;0-F
00CD C6A1868E
138 ;-----------------------------------------------------
139
140 ;--------------------------------------------------------
141 ;蜂鸣器响一声子程序
142 ;--------------------------------------------------------
00D1 143 BEEP_BL:
00D1 7E64 144 MOV R6,#100
00D3 11DE 145 BL1: CALL DEX1
00D5 B2B7 146 CPL BEEP
00D7 DEFA 147 DJNZ R6,BL1
00D9 7D14 148 MOV R5,#20
00DB 11E4 149 CALL DELAY
00DD 22 150 RET
00DE 7FB4 151 DEX1: MOV R7,#180
00E0 00 152 DEX2: NOP
00E1 DFFD 153 DJNZ R7,DEX2
00E3 22 154 RET
00E4 155 DELAY: ;延时R5×10MS
00E4 7E19 156 MOV R6,#25
00E6 7F64 157 D1: MOV R7,#100
00E8 DFFE 158 DJNZ R7,$
00EA DEFA 159 DJNZ R6,D1
00EC DDF6 160 DJNZ R5,DELAY
00EE 22 161 RET
162 ;------------------------------------------------
163 ; DELAY R5*0.14MS
00EF 164 DEL:
00EF 7D01 165 MOV R5,#1 ;IR解码使用
00F1 7E02 166 DEL0: MOV R6,#2
00F3 7F20 167 DEL1: MOV R7,#32
00F5 DFFE 168 DEL2: DJNZ R7,DEL2
00F7 DEFA 169 DJNZ R6,DEL1
00F9 DDF6 170 DJNZ R5,DEL0
00FB 22 171 RET
172 ;-------------------------------------------------
00FC 173 DELAY1: ;数码管延时4MS
174
00FC 7E14 175 MOV R6,#20
00FE 7F64 176 DL2: MOV R7,#100
0100 DFFE 177 DJNZ R7,$
0102 DEFA 178 DJNZ R6,DL2
0104 22 179 RET
180 ;-------------------------------------------------
181 END ;结束
A51 MACRO ASSEMBLER IR_DSY 10/12/2006 08:59:00 PAGE 4
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
ACC. . . . . . . . D ADDR 00E0H A
BEEP . . . . . . . B ADDR 00B0H.7 A
BEEP_BL. . . . . . C ADDR 00D1H A
BL1. . . . . . . . C ADDR 00D3H A
D1 . . . . . . . . C ADDR 00E6H A
DEL. . . . . . . . C ADDR 00EFH A
DEL0 . . . . . . . C ADDR 00F1H A
DEL1 . . . . . . . C ADDR 00F3H A
DEL2 . . . . . . . C ADDR 00F5H A
DELAY. . . . . . . C ADDR 00E4H A
DELAY1 . . . . . . C ADDR 00FCH A
DEX1 . . . . . . . C ADDR 00DEH A
DEX2 . . . . . . . C ADDR 00E0H A
DL2. . . . . . . . C ADDR 00FEH A
EA . . . . . . . . B ADDR 00A8H.7 A
I1 . . . . . . . . C ADDR 003DH A
I2 . . . . . . . . C ADDR 0044H A
I20. . . . . . . . C ADDR 0046H A
I21. . . . . . . . C ADDR 004DH A
I3 . . . . . . . . C ADDR 0054H A
I4 . . . . . . . . C ADDR 005DH A
I5 . . . . . . . . C ADDR 0064H A
IE . . . . . . . . D ADDR 00A8H A
IRCOM. . . . . . . N NUMB 0020H A
IRIN . . . . . . . B ADDR 00B0H.2 A
IR_CHULI . . . . . C ADDR 008FH A
IR_COMP. . . . . . C ADDR 0089H A
IR_IN. . . . . . . C ADDR 002FH A
IR_OUT . . . . . . C ADDR 0082H A
IR_SHOW. . . . . . C ADDR 00A2H A
L1 . . . . . . . . C ADDR 0066H A
LL . . . . . . . . C ADDR 0056H A
LOOP0. . . . . . . C ADDR 000CH A
LOOP1. . . . . . . C ADDR 001FH A
LOOP2. . . . . . . C ADDR 0028H A
LOOP3. . . . . . . C ADDR 002DH A
MAIN . . . . . . . C ADDR 0005H A
N1 . . . . . . . . C ADDR 007EH A
P0 . . . . . . . . D ADDR 0080H A
P1 . . . . . . . . D ADDR 0090H A
P2 . . . . . . . . D ADDR 00A0H A
P3 . . . . . . . . D ADDR 00B0H A
PSW. . . . . . . . D ADDR 00D0H A
RELAY. . . . . . . B ADDR 0090H.3 A
SP . . . . . . . . D ADDR 0081H A
TAB. . . . . . . . C ADDR 00C1H A
TCON . . . . . . . D ADDR 0088H A
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -