📄 cj2b.lst
字号:
A51 MACRO ASSEMBLER CJ2B 09/19/2008 20:39:44 PAGE 1
MACRO ASSEMBLER A51 V7.10
OBJECT MODULE PLACED IN cj2b.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE cj2b.asm SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
1 ;********************************
2 ;4位共阴LED数码管
3 ;千位 P2.3
4 ;百位 P2.4
5 ;十位 P2.5
6 ;个位 P2.6
7 ;定时溢出指示: P1.1
8 ;定时无信号指示: P1.7
9 ;超近距离指示: P1.5
10 ;超远距离指示: P1.6
11 ;接收中断 P3.2
12 ;超声发射 P2.0
13 ;可供选择信号指示:P1.1/P1.5/P1.6/P1.7
14 ;注:此程序为方便学习者理解未进行优化
15 ;如要增大量程可增加定时器时间及发射时间
16 ;**************************
0000 17 ORG 0000H
0000 0136 18 AJMP MAIN
0003 19 ORG 0003H;定时器0外中断向量地址
0003 4129 20 AJMP TIME1
000B 21 ORG 000BH ;定时器0的溢出中断向量地址
000B 410E 22 AJMP TIME0 ;跳转到定时器程序处
0036 23 ORG 36H
24
25 ;开机初始化
0036 74FF 26 MAIN:MOV A,#0FFH
0038 F580 27 MOV P0,A
003A F590 28 MOV P1,A
003C F5A0 29 MOV P2,A
003E F5B0 30 MOV P3,A
0040 C2A0 31 clr p2.0
0042 75250A 32 mov 25h,#10;100厘米初始报警信号1,以分米为单位
0045 752614 33 mov 26h,#20;200厘米初始报警信号2,以分米为单位
0048 E525 34 main1:mov a,25h
004A 31C4 35 acall timea
36 ;插入一段判断是否有按键输入的程序段
004C 20B30A 37 C1: JB P3.3,B1
004F 5105 38 ACALL DELAY10;延时10毫秒消抖
0051 20B3F8 39 JB P3.3,C1
0054 30B3FD 40 JNB P3.3,$;等待按键松开
0057 0175 41 AJMP main2
0059 20B60A 42 B1: JB P3.6,b2
005C 5105 43 ACALL DELAY10;延时10毫秒消抖
005E 20B6F8 44 JB P3.6,B1
0061 30B6FD 45 JNB P3.6,$;等待按键松开
0064 0525 46 inc 25h
0066 20B70A 47 b2: JB P3.7,b3
0069 5105 48 ACALL DELAY10;延时10毫秒消抖
006B 20B7F8 49 JB P3.7,B2
006E 30B7FD 50 JNB P3.7,$;等待按键松开
0071 1525 51 dec 25h
0073 0148 52 b3: AJMP main1
0075 E526 53 main2:mov a,26h
0077 31C4 54 acall timea
0079 20B30A 55 c2: jb p3.3,d1
007C 5105 56 acall delay10
007E 20B3F8 57 jb p3.3,c2
0081 30B3FD 58 jnb p3.3,$
A51 MACRO ASSEMBLER CJ2B 09/19/2008 20:39:44 PAGE 2
0084 01A2 59 ajmp main3
0086 20B60A 60 D1: jb p3.6,D2
0089 5105 61 acall delay10
008B 20B6F8 62 jb p3.6,d1
008E 30B6FD 63 jnb p3.6,$
0091 0526 64 inc 26h
0093 20B70A 65 D2: JB P3.7,D3
0096 5105 66 ACALL DELAY10;延时10毫秒消抖
0098 20B7F8 67 JB P3.7,D2
009B 30B7FD 68 JNB P3.7,$;等待按键松开
009E 1526 69 dec 26h
00A0 0175 70 D3:ajmp main2
00A2 75F00A 71 main3:mov b,#10
00A5 E525 72 mov a,25h
00A7 A4 73 mul ab
00A8 F525 74 mov 25h,a
00AA 75F00A 75 mov b,#10
00AD E526 76 mov a,26h
00AF A4 77 mul ab
00B0 F527 78 mov 27h,a
00B2 85F026 79 mov 26h,b
80
81
00B5 82 START:;测距程序开始
00B5 758901 83 MOV TMOD,#00000001B ;定时/计数器0工作于方式1
00B8 D2AF 84 SETB EA ;开总中断允许
00BA 7801 85 loop: mov r0,#01h
00BC 75140A 86 mov 14h,#0ah;10h;超声波发射持续200us
00BF 758C00 87 MOV TH0,#0h
00C2 758A00 88 MOV TL0,#0h
00C5 D2A9 89 SETB ET0 ;开定时/计数器0益出中断允许
00C7 D28C 90 SETB TR0 ;定时/计数器0开始运行
00C9 B2A0 91 here: cpl p2.0;;输出40KHz方波
00CB 00 92 nop
00CC 00 93 nop
00CD 00 94 nop
00CE 00 95 nop
00CF 00 96 nop
00D0 00 97 nop
00D1 00 98 nop
00D2 00 99 nop
00D3 00 100 nop
00D4 D514F2 101 djnz 14h,here
00D7 00 102 nop
00D8 00 103 nop
00D9 7FC8 104 MOV R7,#200
00DB DFFE 105 DJNZ R7,$
00DD 7FC8 106 MOV R7,#200
00DF DFFE 107 DJNZ R7,$
00E1 7FC8 108 MOV R7,#200
00E3 DFFE 109 DJNZ R7,$
00E5 7FC8 110 MOV R7,#200
00E7 DFFE 111 DJNZ R7,$
112 ;CX20106增益电阻为4.7欧时,必留(最小测距20CM)
00E9 7F64 113 MOV R7,#100
00EB DFFE 114 DJNZ R7,$;*超声波谐振等待
00ED D2A8 115 setb ex0;开定时器0外中断
00EF E8 116 deng: mov a,r0;外中断r0为0,溢出中断r0为0
00F0 70FD 117 jnz deng;累加器非0转移
00F2 E9 118 mov a,r1;外中断r1为0,溢出中断r1为1;
00F3 7038 119 jnz stlop;累加器非0转移,超远量程显示,
00F5 7F3C 120 MOV R7,#60
00F7 00 121 NOP
00F8 7B00 122 mov r3,#0
00FA AC30 123 mov r4,30h
00FC AD31 124 mov r5,31h
A51 MACRO ASSEMBLER CJ2B 09/19/2008 20:39:44 PAGE 3
00FE 3133 125 acall DV31
0100 00 126 NOP
0101 EC 127 mov a,r4
0102 FE 128 mov r6,a
0103 ED 129 mov a,r5
0104 FF 130 mov r7,a
131 ;#########################超近距离判别(判别量255之内)
0105 ED 132 mov a,r5;测距数值低位
0106 B52502 133 cjne a,25h,l2;;累加器中的数值=25H顺序执行,否则转移*****判别测距小于等于35H内数值
0109 2111 134 ajmp l3
010B 4004 135 l2:jc l3;CY=1(累加器>35h)顺序执行,否则转移
010D D295 136 setb p1.5
010F 2113 137 ajmp l10
0111 C295 138 l3:clr p1.5;测量数值小于设定范围时点亮LED
139 ;#############超远距离判别(判别量16位二进制数)
0113 EC 140 l10: mov a,r4;测距数值高位
0114 B5260A 141 cjne a,26h,l4;;累加器=36H顺序执行,否则转移*****判别测距小于等于36H内数值
0117 ED 142 l5:mov a,r5
0118 B52702 143 cjne a,27h,l6;;累加器=37H顺序执行,否则转移*****判别测距小于等于37H内数
011B 2123 144 ajmp l7
011D 4008 145 l6:jc l8;CY=1(累加器>37h)顺序执行,否则转移
011F 2123 146 ajmp l7
0121 40F4 147 l4:jc l5;CY=1(累加器>36h)顺序执行,否则转移
0123 C296 148 l7:clr p1.6;测距值大于设定范围时点亮LED
0125 2129 149 ajmp l9
0127 D296 150 l8:setb p1.6
0129 00 151 l9:nop
152 ;##########################
012A 3162 153 ACALL HB2
012C 00 154 NOP
012D 3182 155 stlop:acall display
012F 00 156 NOP
0130 01BA 157 AJMP LOOP
0132 22 158 ret
159
160 ;除以单字节二进制数
161 ;入口条件:被除数在R3、R4、R5中,除数在R7中。
162 ;出口信息:OV=0 时,双字节商在R4、R5中,OV=1 时溢出。
163 ;影响资源:PSW、A、B、R2~R7 堆栈需求: 2字节
0133 C3 164 DV31:CLR C
0134 EB 165 MOV A,R3
0135 9F 166 SUBB A,R7
0136 4003 167 JC DV30
0138 D2D2 168 SETB OV; ;商溢出
013A 22 169 RET
013B 7A10 170 DV30:MOV R2,#10H; ;求R3R4R5/R7-→R4R5
013D C3 171 DM23:CLR C
013E ED 172 MOV A,R5
013F 33 173 RLC A
0140 FD 174 MOV R5,A
0141 EC 175 MOV A,R4
0142 33 176 RLC A
0143 FC 177 MOV R4,A
0144 EB 178 MOV A,R3
0145 33 179 RLC A
0146 FB 180 MOV R3,A
0147 92D5 181 MOV F0,C
0149 C3 182 CLR C
014A 9F 183 SUBB A,R7
014B B0D5 184 ANL C,/F0
014D 4002 185 JC DM24
014F FB 186 MOV R3,A
0150 0D 187 INC R5
0151 DAEA 188 DM24:DJNZ R2,DM23
0153 EB 189 MOV A,R3; ;四舍五入
0154 2B 190 ADD A,R3
A51 MACRO ASSEMBLER CJ2B 09/19/2008 20:39:44 PAGE 4
0155 4003 191 JC DM25
0157 9F 192 SUBB A,R7
0158 4005 193 JC DM26
015A 0D 194 DM25:INC R5
015B ED 195 MOV A,R5
015C 7001 196 JNZ DM26
015E 0C 197 INC R4
015F C2D2 198 DM26:CLR OV
0161 22 199 RET; ;商在R4R5
200
201 ;HB2 功能:双字节十六进制整数转换成双字节BCD码整数
202 ;入口条件:待转换的双字节十六进制整数在R6、R7中。
203 ;出口信息:转换后的三字节BCD码整数在R3、R4、R5中。
204 ;影响资源:PSW、A、R2~R7 堆栈需求: 2字节
0162 E4 205 HB2: CLR A; ;BCD码初始化
0163 FB 206 MOV R3,A
0164 FC 207 MOV R4,A
0165 FD 208 MOV R5,A
0166 7A10 209 MOV R2,#10H; ;转换双字节十六进制整数
0168 EF 210 HB3: MOV A,R7; ;从高端移出待转换数的一位到CY中
0169 33 211 RLC A
016A FF 212 MOV R7,A
016B EE 213 MOV A,R6
016C 33 214 RLC A
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -