📄 baud.lst
字号:
ASEM-51 V1.3 Copyright (c) 2002 by W.W. Heinz PAGE 1
MCS-51 Family Macro Assembler A S E M - 5 1 V 1.3
=====================================================
Source File: E:\MiCrOConTroller\Coba_M-IDE\AUTOBAUD\BAUD.asm
Object File: E:\MiCrOConTroller\Coba_M-IDE\AUTOBAUD\BAUD.hex
List File: E:\MiCrOConTroller\Coba_M-IDE\AUTOBAUD\BAUD.lst
Line I Addr Code Source
1: ;
2: ;****************************************************************************
3: ;
4: ; Purpose:
5: ; Automatically Detect The Baud Rate On The Serial Port
6: ;
7: ; Date:
8: ; 02/03/95
9: ;
10: ; Author:
11: ; John C. Wren
12: ;
13: ; Modications:
14: ; 02/04/97 - Added Description Fields For Archive
15: ;
16: ; Processor:
17: ; Generic 8031, Running At 11.0592MHz
18: ;
19: ; Assembler:
20: ; Avocet AVA51
21: ;
22: ; Dependencies:
23: ; None
24: ;
25: ; Files:
26: ; None
27: ;
28: ; Philosophic:
29: ; These Routines Make The Assumption That The Entire CPU Can Be
30: ; Dedicated To Determing The Baud Rate Of The Serial Port. This
31: ; Could Be Better Implemented By Tying The Serial Port RX Pin To
32: ; -INT0 Or -INT1. This Would Allow An Interrupt To Be Generated
33: ; On The Edge Of The Start Bit, Rather Than The Autobauder Camping
34: ; Out On The Port Pin, Waiting For The Change.
35: ;
36: ; This Routine Came From A FORTH Interpeter I Wrote. Since The System
37: ; Didn't Have To Do Anything While Waiting For The Serial Port To
38: ; Autobaud, It Was OK To Camp Out On The Serial Port Pin. This Is
39: ; Not Very Elegant.
40: ;
41:
42: ;******************************************************************************
43: ;
ASEM-51 V1.3 Copyright (c) 2002 by W.W. Heinz PAGE 2
Line I Addr Code Source
44: ; Description:
45: ; Determine Baud Rate Of Serial Port By Timing Start Bit.
46: ;
47: ; Entry Requirements:
48: ; None
49: ;
50: ; On Exit:
51: ; B/A Has Current Baud Rate (As 9600, 1900, etc For Displaying)
52: ; R0 Has Value For SMOD Bit Used
53: ; R1 Has Divisor Rate Used
54: ;
55: ; Affected:
56: ; SCON, SBUF, TMOD, TH0, TL0, R0, R1, B, A, DPTR, PSW
57: ;
58: ; Stack:
59: ; 0 Bytes, Not Including Space Used By Called Routines
60: ;
61: ; Comments:
62: ; The Tables Are Setup To Allow +-3% Variation In Timing. If Can't
63: ; Get A Good Baud Rate, Just Keep Trying. The Routine Can And Will
64: ; Be Tricked If Not Running At 8/N/1.
65: ;
66:
67: 0000 C2 AC clr es ; No Serial Interrupts
68: 0002 C2 A9 clr et0 ; No Timer 0 Interrupt
69: 0004 75 98 52 mov scon,#052h ; Mode 3 Serial Port
70: 0007 75 89 21 mov tmod,#021h ; Timer 1 Mode 2, Timer 0 Mode 1
71: 000A 75 99 00 mov sbuf,#000h ; Send A Null For First Character
72: 000D D2 8E setb tr1 ; Start Timer 1 Up
73: ;
74: ; Wait For Start Bit, Run Timer While Start Bit High
75: ;
76: 000F C2 98 l?p0: clr ri ; Ignore Any Character In SBUF
77: 0011 C2 8C clr tr0 ; Cancel Timer 0
78: 0013 75 8C 00 mov th0,#000h ; Clear Timer 0 High
79: 0016 75 8A 00 mov tl0,#000h ; Clear Timer 0 Low
80: 0019 20 B0 FD jb p3.0,$ ; Wait For Start Bit High
81: 001C D2 8C setb tr0 ; Start Timer 0 Running
82: 001E 30 B0 FD jnb p3.0,$ ; Wait For Start Bit To Go Low
83: 0021 C2 8C clr tr0 ; Cancel Timer 0
84: ;
85: ; Timer 0 Has Start Bit Period. Test Against Table.
86: ;
87: 0023 90 00 72 mov dptr,#Table ; Point To Table
88: 0026 74 00 l?p1: mov a,#0 ; Set For MOVC
89: 0028 93 movc a,@a+dptr ; Get High Byte From Table
90: 0029 B5 8C 06 cjne a,th0,l?p2 ; Compare
91: 002C 74 01 mov a,#1 ; Set For MOVC
92: 002E 93 movc a,@a+dptr ; Get Low Byte From Table
93: 002F B5 8A 00 cjne a,tl0,l?p2 ; Compare
94: 0032 40 2D l?p2: jc l?p4 ; If Greater, Try Next Entry
95: 0034 74 02 mov a,#2 ; Set For MOVC
96: 0036 93 movc a,@a+dptr ; Get High Byte From Table
97: 0037 B5 8C 07 cjne a,th0,l?p3 ; Compare
98: 003A 74 03 mov a,#3 ; Set For MOVC
99: 003C 93 movc a,@a+dptr ; Get Low Byte From Table
ASEM-51 V1.3 Copyright (c) 2002 by W.W. Heinz PAGE 3
Line I Addr Code Source
100: 003D B5 8A 01 cjne a,tl0,l?p3 ; Compare
101: 0040 D3 setb c ; Flip Status
102: 0041 50 1E l?p3: jnc l?p4 ; If Less, Try Next Entry
103: ;
104: 0043 74 04 mov a,#4 ; Point To SMOD Status Byte
105: 0045 93 movc a,@a+dptr ; Get SMOD Byte
106: 0046 F8 mov r0,a ; Move To R0 For Return
107: 0047 F5 87 mov pcon,a ; Store It Back
108: 0049 74 05 mov a,#5 ; Point To Speed Byte
109: 004B 93 movc a,@a+dptr ; Get Speed Byte
110: 004C F9 mov r1,a ; Move To R1 For Return
111: 004D F5 8D mov th1,a ; Setup Baud Rate Timer
112: 004F F5 8B mov tl1,a ; Setup Baud Rate Timer
113: 0051 30 98 FD jnb ri,$ ; Wait For Character
114: 0054 C2 98 clr ri ; Say Character Received Isn't There
115: 0056 74 06 mov a,#6 ; Offset To Baud Rate High
116: 0058 93 movc a,@a+dptr ; Get High Of Baud Rate In Binary
117: 0059 F5 F0 mov b,a ; Store In B
118: 005B 74 07 mov a,#7 ; Offset To Baud Rate Low
119: 005D 93 movc a,@a+dptr ; Get Low Of Baud Rate In Binary
120: 005E D2 AC setb es ; Allow Serial Interrupts
121: 0060 22 ret ; Return To Caller
122: ;
123: 0061 74 08 l?p4: mov a,#8 ; Number Bytes In Record
124: 0063 25 82 add a,dpl ; Add In DPL
125: 0065 F5 82 mov dpl,a ; Back To DPL
126: 0067 50 02 jnc l?p5 ; If No Carry, Skip
127: 0069 05 83 inc dph ; Increment High Of DPTR
128: 006B E4 l?p5: clr a ; Clear For MOVC
129: 006C 93 movc a,@a+dptr ; Get Byte
130: 006D B4 FF B6 cjne a,#-1,l?p1 ; While Not -1, Loop
131: 0070 80 9D sjmp l?p0 ; Try Again
132: ;
133: ; All Values Calculated For 11.059200Mhz
134: ;
135: 0072 18 B8 17 48 Table: dw 6328, 5960, 00040h, 00150; 150
0076 00 40 00 96
136: 007A 0C 5C 0B A4 dw 3164, 2980, 000a0h, 00300; 300
007E 00 A0 01 2C
137: 0082 08 3D 07 C3 dw 2109, 1987, 000c0h, 00450; 450
0086 00 C0 01 C2
138: 008A 06 2E 05 D2 dw 1582, 1490, 000d0h, 00600; 600
008E 00 D0 02 58
139: 0092 03 17 02 E9 dw 0791, 0745, 000e8h, 01200; 1200
0096 00 E8 04 B0
140: 009A 02 0F 01 F1 dw 0527, 0497, 000f0h, 01800; 1800
009E 00 F0 07 08
141: 00A2 01 8C 01 74 dw 0396, 0372, 000f4h, 02400; 2400
00A6 00 F4 09 60
142: 00AA 01 08 00 F8 dw 0264, 0248, 000f8h, 03600; 3600
00AE 00 F8 0E 10
143: 00B2 00 C6 00 BA dw 0198, 0186, 000fah, 04800; 4800
00B6 00 FA 12 C0
144: 00BA 00 84 00 7C dw 0132, 0124, 000fch, 07200; 7200
00BE 00 FC 1C 20
145: 00C2 00 63 00 5D dw 0099, 0093, 000fdh, 09600; 9600
ASEM-51 V1.3 Copyright (c) 2002 by W.W. Heinz PAGE 4
Line I Addr Code Source
00C6 00 FD 25 80
146: 00CA 00 42 00 3E dw 0066, 0062, 000feh, 14400; 14400
00CE 00 FE 38 40
147: 00D2 00 31 00 2F dw 0049, 0047, 080fdh, 19200; 19200
00D6 80 FD 4B 00
148: 00DA FF FF dw -1
149:
150: ;
151: ;****************************************************************************
152: ;
153: end
register banks used: ---
no errors
ASEM-51 V1.3 Copyright (c) 2002 by W.W. Heinz PAGE 5
L I S T O F S Y M B O L S
=============================
SYMBOL TYPE VALUE LINE
------------------------------------------------------------
??ASEM_51 NUMBER 8051
??VERSION NUMBER 0130
AC BIT D6
ACC DATA E0
B DATA F0
CY BIT D7
DPH DATA 83
DPL DATA 82
EA BIT AF
ES BIT AC
ET0 BIT A9
ET1 BIT AB
EX0 BIT A8
EX1 BIT AA
EXTI0 CODE 0003
EXTI1 CODE 0013
F0 BIT D5
IE DATA A8
IE0 BIT 89
IE1 BIT 8B
INT0 BIT B2
INT1 BIT B3
IP DATA B8
IT0 BIT 88
IT1 BIT 8A
L?P0 CODE 000F 76
L?P1 CODE 0026 88
L?P2 CODE 0032 94
L?P3 CODE 0041 102
L?P4 CODE 0061 123
L?P5 CODE 006B 128
OV BIT D2
P BIT D0
P0 DATA 80
P1 DATA 90
P2 DATA A0
P3 DATA B0
PCON DATA 87
PS BIT BC
PSW DATA D0
PT0 BIT B9
PT1 BIT BB
PX0 BIT B8
PX1 BIT BA
RB8 BIT 9A
RD BIT B7
REN BIT 9C
RESET CODE 0000
RI BIT 98
RS0 BIT D3
ASEM-51 V1.3 Copyright (c) 2002 by W.W. Heinz PAGE 6
SYMBOL TYPE VALUE LINE
------------------------------------------------------------
RS1 BIT D4
RXD BIT B0
SBUF DATA 99
SCON DATA 98
SINT CODE 0023
SM0 BIT 9F
SM1 BIT 9E
SM2 BIT 9D
SP DATA 81
T0 BIT B4
T1 BIT B5
TABLE CODE 0072 135
TB8 BIT 9B
TCON DATA 88
TF0 BIT 8D
TF1 BIT 8F
TH0 DATA 8C
TH1 DATA 8D
TI BIT 99
TIMER0 CODE 000B
TIMER1 CODE 001B
TL0 DATA 8A
TL1 DATA 8B
TMOD DATA 89
TR0 BIT 8C
TR1 BIT 8E
TXD BIT B1
WR BIT B6
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -