📄 chao.lst
字号:
A51 MACRO ASSEMBLER CHAO 02/18/2008 17:00:17 PAGE 1
MACRO ASSEMBLER A51 V7.07
OBJECT MODULE PLACED IN chao.OBJ
ASSEMBLER INVOKED BY: D:\Keil\C51\BIN\A51.EXE chao.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 ;超声发射 P2.0
10 ;可供选择信号指示:P1.1/P1.5/P1.6/P1.7
11 ;注:此程序为方便学习者理解未进行优化
12 ;如要增大量程可增加定时器时间及发射时间
13 ;**************************
0000 14 ORG 0000H
0000 0136 15 AJMP START
0003 16 ORG 0003H;定时器0外中断向量地址
0003 218A 17 AJMP TIME1
000B 18 ORG 000BH ;定时器0的溢出中断向量地址
000B 216F 19 AJMP TIME0 ;跳转到定时器程序处
0036 20 ORG 36H
21
0036 22 START:
0036 758901 23 MOV TMOD,#00000001B ;定时/计数器0工作于方式1
0039 D2AF 24 SETB EA ;开总中断允许
003B 7801 25 loop: mov r0,#01h
003D 75140A 26 mov 14h,#0ah;超声波发射持续200us
0040 758CB1 27 MOV TH0,#0b1h
0043 758AE0 28 MOV TL0,#0e0h;赋值定时器定时20毫秒
0046 D2A9 29 SETB ET0 ;开定时/计数器0益出中断允许
0048 D28C 30 SETB TR0 ;定时/计数器0开始运行
004A B2A0 31 here: cpl p2.0;;输出40KHz方波
004C 00 32 nop
004D 00 33 nop
004E 00 34 nop
004F 00 35 nop
0050 00 36 nop
0051 00 37 nop
0052 00 38 nop
0053 00 39 nop
0054 00 40 nop
0055 D514F2 41 djnz 14h,here
0058 00 42 nop
0059 00 43 nop
005A 7FC8 44 MOV R7,#200
005C DFFE 45 DJNZ R7,$
005E 7FC8 46 MOV R7,#200
0060 DFFE 47 DJNZ R7,$
0062 7FC8 48 MOV R7,#200
0064 DFFE 49 DJNZ R7,$
0066 7FC8 50 MOV R7,#200
0068 DFFE 51 DJNZ R7,$
006A 7FC8 52 MOV R7,#200
006C DFFE 53 DJNZ R7,$
006E 7FC8 54 MOV R7,#200
0070 DFFE 55 DJNZ R7,$
0072 7F64 56 MOV R7,#100
0074 DFFE 57 DJNZ R7,$;*超声波谐振等待
0076 AC30 58 mov r4,0030h
A51 MACRO ASSEMBLER CHAO 02/18/2008 17:00:17 PAGE 2
0078 AD31 59 mov r5,0031h
007A D2A8 60 setb ex0;开定时器0外中断
007C E8 61 deng: mov a,r0;外中断r0为0,溢出中断r0为0
007D 70FD 62 jnz deng;累加器非0转移
007F E9 63 mov a,r1;外中断r1为0,溢出中断r1为1;
0080 702A 64 jnz stlop;累加器非0转移,超量程显示,
0082 7E01 65 mov r6,#1h
0084 7F54 66 mov r7,#54h;R6/R7 154H,即340米/秒
0086 AA30 67 mov r2,30h
0088 AB31 68 mov r3,31h
008A 11F4 69 acall muld
008C 7E4E 70 mov r6,#4eh
008E 7F20 71 mov r7,#20h;除以20000
0090 311C 72 acall divd
0092 EB 73 mov a,r3
0093 FF 74 mov r7,a
0094 EA 75 mov a,r2
0095 FE 76 mov r6,a
77 ;****************
0096 7012 78 jnz aaa1;非0转移
0098 EF 79 mov a,r7
0099 B42802 80 cjne a,#28h,l2;累加器=28h顺序执行,否则转移*****判别测距小于等于40CM;
009C 01A2 81 ajmp l3
009E 4002 82 l2:jc l3;CY=1(累加器>28h)顺序执行,否则转移
00A0 01AA 83 ajmp aaa1
00A2 74BB 84 l3:mov a,#0bbh
00A4 F533 85 mov 33h,a
00A6 F534 86 mov 34h,a
00A8 01AC 87 ajmp l4
88 ;****************超近距离判别
89
00AA 90 aaa1:
00AA 314F 91 acall hb2
00AC 92 l4:
00AC 11B1 93 stlop:acall display
00AE 013B 94 AJMP LOOP ;程序结束返回
00B0 22 95 ret
96
97 ;显示子程序
00B1 9001AB 98 display:mov dptr,#tab ;指定查表启始地址
00B4 7EFF 99 mov r6,#255;显示255次
00B6 100 dplop: ;************千位显示
00B6 E533 101 mov a,33h
00B8 C4 102 swap a
00B9 540F 103 anl a,#0fh;
00BB 93 104 movc a,@a+dptr
00BC F580 105 mov p0,a
00BE C2A3 106 clr p2.3
00C0 11EF 107 acall d1ms
108 ;***********如不需要千位显示可删掉
00C2 E533 109 mov a,33h
00C4 540F 110 anl a,#0fh;屏蔽A中的高四位
00C6 93 111 MOVC A,@A+DPTR;查代码
00C7 D2A3 112 setb p2.3
00C9 F580 113 mov p0,a;送出百位的7段代码
00CB C2A4 114 clr p2.4;开百位显示
00CD 11EF 115 acall d1ms;显示1ms
00CF E534 116 mov a,34h
00D1 C4 117 swap a
00D2 540F 118 anl a,#0fh
00D4 93 119 movc a,@a+dptr
00D5 D2A4 120 setb p2.4
00D7 F580 121 mov p0,a
00D9 C2A5 122 clr p2.5;开十位显示
00DB 11EF 123 acall d1ms
00DD E534 124 mov a,34h
A51 MACRO ASSEMBLER CHAO 02/18/2008 17:00:17 PAGE 3
00DF 540F 125 anl a,#0fh;屏蔽A中的高四位
00E1 93 126 MOVC A,@A+DPTR;查个位数的7段代码
00E2 D2A5 127 setb p2.5
00E4 F580 128 mov p0,a;送出个位的7段代码
00E6 C2A6 129 clr p2.6;开个位显示
00E8 11EF 130 acall d1ms;显示1ms
00EA D2A6 131 setb p2.6
00EC DEC8 132 djnz r6,dplop;循环
00EE 22 133 ret
134
00EF 7F50 135 D1MS: MOV R7,#80;(按12MHZ算)
00F1 DFFE 136 DJNZ R7,$
00F3 22 137 RET
138
139 ;MULD 功能:双字节二进制无符号数乘法
140 ;入口条件:被乘数在R2、R3中,乘数在R6、R7中。
141 ;出口信息:乘积在R2、R3、R4、R5中。
142 ;影响资源:PSW、A、B、R2~R7 堆栈需求: 2字节
00F4 EB 143 MULD: MOV A,R3; ;计算R3乘R7
00F5 8FF0 144 MOV B,R7
00F7 A4 145 MUL AB
00F8 ACF0 146 MOV R4,B; ;暂存部分积
00FA FD 147 MOV R5,A
00FB EB 148 MOV A,R3; ;计算R3乘R6
00FC 8EF0 149 MOV B,R6
00FE A4 150 MUL AB
00FF 2C 151 ADD A,R4; ;累加部分积
0100 FC 152 MOV R4,A
0101 E4 153 CLR A
0102 35F0 154 ADDC A,B
0104 FB 155 MOV R3,A
0105 EA 156 MOV A,R2; ;计算R2乘R7
0106 8FF0 157 MOV B,R7
0108 A4 158 MUL AB
0109 2C 159 ADD A,R4; ;累加部分积
010A FC 160 MOV R4,A
010B EB 161 MOV A,R3
010C 35F0 162 ADDC A,B
010E FB 163 MOV R3,A
010F E4 164 CLR A
0110 33 165 RLC A
0111 CA 166 XCH A,R2; ;计算R2乘R6
0112 8EF0 167 MOV B,R6
0114 A4 168 MUL AB
0115 2B 169 ADD A,R3; ;累加部分积
0116 FB 170 MOV R3,A
0117 EA 171 MOV A,R2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -