📄 ir-led.lst
字号:
A51 MACRO ASSEMBLER IR_LED 10/12/2006 08:55:23 PAGE 1
MACRO ASSEMBLER A51 V7.08a
OBJECT MODULE PLACED IN IR-LED.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE IR-LED.asm SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
1 ;* LED 显示, P0口为LED的数据口 *
2 ;* 上电后,将8个LED全部点亮 *
3 ;* K17键按下,继电器吸合。K19键按下,继电器关闭。 *
4 ;* *
5
6
7 ;-----------------------------------------------
0020 8 IRCOM EQU 20H ;20H-23H IR使用
9
00B2 10 IRIN EQU P3.2
00B7 11 BEEP EQU P3.7
0093 12 RELAY EQU P1.3
13 ;------------------------------------------------
0000 14 ORG 0000H
0000 8000 15 JMP MAIN
16 ;------------------------------------------------
0002 17 MAIN:
0002 758160 18 MOV SP,#60H
0005 7400 19 MOV A,#00H
0007 7820 20 MOV R0,#20H
0009 F6 21 LOOP0: MOV @R0,A ;20H-24H清零
000A 08 22 INC R0
000B B825FB 23 CJNE R0,#25H,LOOP0
000E D2B2 24 SETB IRIN
0010 D2B7 25 SETB BEEP
0012 D293 26 SETB RELAY
0014 7522FF 27 MOV 22H,#0FFH
0017 116E 28 CALL IR_SHOW ;8个LED全部亮
0019 29 LOOP1:
0019 1128 30 CALL IR_IN
001B F4 31 CPL A
001C B44002 32 CJNE A,#40H,LOOP2 ;K17键按下
001F C293 33 CLR RELAY ;继电器吸合
0021 B40402 34 LOOP2: CJNE A,#04H,LOOP3 ;K19键按下
0024 D293 35 SETB RELAY ;继电器关闭
36
0026 80F1 37 LOOP3: JMP LOOP1
38
39 ;---------------------------------------------------
40 ; IR 译码子程序
41 ;---------------------------------------------------
0028 42 IR_IN:
0028 7820 43 MOV R0,#IRCOM
002A 30B202 44 I1: JNB IRIN,I2 ;等待 IR 信号出现
002D 80FB 45 JMP I1
002F 7C14 46 I2: MOV R4,#20
0031 1197 47 I20: CALL DEL
0033 DCFC 48 DJNZ R4,I20
0035 20B2F2 49 JB IRIN,I1 ;确认IR信号出现
0038 20B204 50 I21: JB IRIN,I3 ;等 IR 变为高电平
003B 1197 51 CALL DEL
003D 80F9 52 JMP I21
003F 7B00 53 I3: MOV R3,#0 ;8位数清为0
0041 30B204 54 LL: JNB IRIN,I4 ;等 IR 变为低电平
0044 1197 55 CALL DEL
0046 80F9 56 JMP LL
0048 20B204 57 I4: JB IRIN,I5 ;等 IR 变为高电平
004B 1197 58 CALL DEL
A51 MACRO ASSEMBLER IR_LED 10/12/2006 08:55:23 PAGE 2
004D 80F9 59 JMP I4
004F 7A00 60 I5: MOV R2,#0 ;0.14ms 计数
0051 1197 61 L1: CALL DEL
0053 20B213 62 JB IRIN, N1 ;等 IR 变为高电平
63 ;IR=0,检查R2中的计数值
0056 7408 64 MOV A,#8
0058 C3 65 CLR C
0059 9A 66 SUBB A,R2 ;判断高低位
67 ;IF C=0 BIT=0
005A E6 68 MOV A,@R0
005B 13 69 RRC A
005C F6 70 MOV @R0,A ;处理完一位
005D 0B 71 INC R3
005E BB08E0 72 CJNE R3,#8,LL ;需处理完8位
0061 7B00 73 MOV R3,#0
0063 08 74 INC R0
0064 B824DA 75 CJNE R0,#24H,LL ;收集到4字节了
0067 8005 76 JMP IR_SHOW
0069 0A 77 N1: INC R2
006A BA1EE4 78 CJNE R2,#30,L1 ;0.14ms 计数过长则时间到自动离开
006D 22 79 RET
80 ;---------------------------------------------------------------
81 ;键值显示
82 ;22H存入用户编码,23H存入用户编码的反码
83 ;---------------------------------------------------------------
006E 84 IR_SHOW:
006E E522 85 MOV A,22H
0070 F4 86 CPL A ;将22H取反后和23H比较
0071 B52304 87 CJNE A,23H,IR_SHOW1 ;如果不等表示接收数据发生错误,放弃。
0074 F580 88 MOV P0,A
0076 1179 89 CALL BEEP_BL ;蜂鸣器鸣响表示解码成功
0078 22 90 IR_SHOW1: RET
91
92 ;--------------------------------------------------------
93 ;蜂鸣器响一声子程序
94 ;--------------------------------------------------------
0079 95 BEEP_BL:
0079 7E64 96 MOV R6,#100
007B 1186 97 BL1: CALL DEX1
007D B2B7 98 CPL BEEP
007F DEFA 99 DJNZ R6,BL1
0081 7D14 100 MOV R5,#20
0083 118C 101 CALL DELAY
0085 22 102 RET
0086 7FB4 103 DEX1: MOV R7,#180
0088 00 104 DEX2: NOP
0089 DFFD 105 DJNZ R7,DEX2
008B 22 106 RET
008C 107 DELAY: ;延时R5×10MS
008C 7E32 108 MOV R6,#50
008E 7F64 109 D1: MOV R7,#100
0090 DFFE 110 DJNZ R7,$
0092 DEFA 111 DJNZ R6,D1
0094 DDF6 112 DJNZ R5,DELAY
0096 22 113 RET
114 ;------------------------------------------------
115 ; DELAY R5*0.14MS
0097 116 DEL:
0097 7D01 117 MOV R5,#1 ;IR解码使用
0099 7E02 118 DEL0: MOV R6,#2
009B 7F20 119 DEL1: MOV R7,#32
009D DFFE 120 DEL2: DJNZ R7,DEL2
009F DEFA 121 DJNZ R6,DEL1
00A1 DDF6 122 DJNZ R5,DEL0
00A3 22 123 RET
124
A51 MACRO ASSEMBLER IR_LED 10/12/2006 08:55:23 PAGE 3
00A4 125 DELAY1: ;延时5MS
00A4 7E19 126 MOV R6,#25
00A6 7F64 127 DL2: MOV R7,#100
00A8 DFFE 128 DJNZ R7,$
00AA DEFA 129 DJNZ R6,DL2
00AC 22 130 RET
131 ;---------------------------------
132 END ;结束
A51 MACRO ASSEMBLER IR_LED 10/12/2006 08:55:23 PAGE 4
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
BEEP . . . . . . . B ADDR 00B0H.7 A
BEEP_BL. . . . . . C ADDR 0079H A
BL1. . . . . . . . C ADDR 007BH A
D1 . . . . . . . . C ADDR 008EH A
DEL. . . . . . . . C ADDR 0097H A
DEL0 . . . . . . . C ADDR 0099H A
DEL1 . . . . . . . C ADDR 009BH A
DEL2 . . . . . . . C ADDR 009DH A
DELAY. . . . . . . C ADDR 008CH A
DELAY1 . . . . . . C ADDR 00A4H A
DEX1 . . . . . . . C ADDR 0086H A
DEX2 . . . . . . . C ADDR 0088H A
DL2. . . . . . . . C ADDR 00A6H A
I1 . . . . . . . . C ADDR 002AH A
I2 . . . . . . . . C ADDR 002FH A
I20. . . . . . . . C ADDR 0031H A
I21. . . . . . . . C ADDR 0038H A
I3 . . . . . . . . C ADDR 003FH A
I4 . . . . . . . . C ADDR 0048H A
I5 . . . . . . . . C ADDR 004FH A
IRCOM. . . . . . . N NUMB 0020H A
IRIN . . . . . . . B ADDR 00B0H.2 A
IR_IN. . . . . . . C ADDR 0028H A
IR_SHOW. . . . . . C ADDR 006EH A
IR_SHOW1 . . . . . C ADDR 0078H A
L1 . . . . . . . . C ADDR 0051H A
LL . . . . . . . . C ADDR 0041H A
LOOP0. . . . . . . C ADDR 0009H A
LOOP1. . . . . . . C ADDR 0019H A
LOOP2. . . . . . . C ADDR 0021H A
LOOP3. . . . . . . C ADDR 0026H A
MAIN . . . . . . . C ADDR 0002H A
N1 . . . . . . . . C ADDR 0069H A
P0 . . . . . . . . D ADDR 0080H A
P1 . . . . . . . . D ADDR 0090H A
P3 . . . . . . . . D ADDR 00B0H A
RELAY. . . . . . . B ADDR 0090H.3 A
SP . . . . . . . . D ADDR 0081H A
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -