?? main.lst
字號:
A51 MACRO ASSEMBLER MAIN 06/29/2006 13:50:34 PAGE 1
MACRO ASSEMBLER A51 V7.09
OBJECT MODULE PLACED IN main.OBJ
ASSEMBLER INVOKED BY: C:\Keil\C51\BIN\A51.EXE main.asm SET(SMALL) DEBUG EP
LOC OBJ LINE SOURCE
1 ;*************************************************************************
2 ; main.asm
3 ; 串行口通信方式3例程
4 ;*************************************************************************
5
6
7 ;*************************************************************************
8 ;定義全局變量
9 ;*************************************************************************
0028 10 SIZE EQU 40 ;定義接收緩沖區大小
0030 11 UartBuf DATA 0x30 ;定時接收緩沖區
0058 12 BufP1 DATA 0x30+SIZE ;定義接收緩沖區下標變量
0059 13 BufP2 DATA 0x30+SIZE+1
0000 14 _TI_ BIT 0x20.0 ;定義發送輔助標志
15
16
17 ;*************************************************************************
18 ;復位入口
19 ;*************************************************************************
0000 20 ORG 0x0000
0000 020026 21 LJMP PreMain
22
23
24 ;*************************************************************************
25 ;串行口中斷入口
26 ;*************************************************************************
0023 27 ORG 0x0023
0023 020061 28 LJMP UartINTSVC
29
30
31 ;*************************************************************************
32 ;進入主程序之前的初始化
33 ;*************************************************************************
0026 34 PreMain:
0026 758159 35 MOV SP, #(0x2F+SIZE+2) ;設置堆棧起始位置
0029 0200A9 36 LJMP main
37
38
39 ;*************************************************************************
40 ;函數:void UartInit()
41 ;功能:串行口初始化
42 ;*************************************************************************
002C 43 UartInit:
002C C002 44 PUSH 0x02
002E C2AF 45 CLR EA
0030 E4 46 CLR A
0031 F558 47 MOV BufP1, A
0033 F559 48 MOV BufP2, A
0035 FA 49 MOV R2, A
0036 7830 50 MOV R0, #UartBuf
0038 51 UartInit_for:
0038 F6 52 MOV @R0, A
0039 08 53 INC R0
003A 0A 54 INC R2
003B BA28FA 55 CJNE R2, #SIZE, UartInit_for
003E C28E 56 CLR TR1
0040 D2B0 57 SETB RXD
0042 D2B1 58 SETB TXD
A51 MACRO ASSEMBLER MAIN 06/29/2006 13:50:34 PAGE 2
0044 D200 59 SETB _TI_
0046 7598D0 60 MOV SCON, #0xD0 ;串行口方式3(9位Uart),允許接收
0049 438780 61 ORL PCON, #0x80 ;波特率加倍
004C 53890F 62 ANL TMOD, #0x0F
004F 438920 63 ORL TMOD, #0x20 ;設置T1為8位自動重裝定時器
0052 74FA 64 MOV A, #0xFA
0054 F58D 65 MOV TH1, A
0056 F58B 66 MOV TL1, A ;設置波特率為9600
0058 D28E 67 SETB TR1 ;啟動定時器T1
005A D2AC 68 SETB ES ;使能串行口中斷
005C D2AF 69 SETB EA
005E D002 70 POP 0x02
0060 22 71 RET
72
73
74 ;*************************************************************************
75 ;函數:void UartINTSVC() interrupt 4
76 ;功能:串行口中斷服務函數
77 ;*************************************************************************
0061 78 UartINTSVC:
79 ;保護寄存器
0061 C0E0 80 PUSH ACC
0063 C0D0 81 PUSH PSW
0065 C000 82 PUSH 0x00
0067 C002 83 PUSH 0x02
84 ;處理接收中斷
0069 309820 85 JNB RI, UartINTSVC_TI
006C AA99 86 MOV R2, SBUF
006E C298 87 CLR RI
0070 EA 88 MOV A, R2 ;開始判斷校驗位
0071 A2D0 89 MOV C, P
0073 309A01 90 JNB RB8, UartINTSVC_next
0076 B3 91 CPL C
0077 92 UartINTSVC_next:
0077 4013 93 JC UartINTSVC_TI
0079 7430 94 MOV A, #UartBuf ;校驗通過,保存數據
007B 2558 95 ADD A, BufP1
007D 0558 96 INC BufP1
007F F8 97 MOV R0, A
0080 EA 98 MOV A, R2
0081 F6 99 MOV @R0, A
0082 E558 100 MOV A, BufP1
0084 C3 101 CLR C
0085 9428 102 SUBB A, #SIZE
0087 4003 103 JC UartINTSVC_TI
0089 755800 104 MOV BufP1, #0
105 ;處理發送中斷
008C 106 UartINTSVC_TI:
008C 309904 107 JNB TI, UartINTSVC_end
008F C299 108 CLR TI
0091 D200 109 SETB _TI_
110 ;恢復寄存器
0093 111 UartINTSVC_end:
0093 D002 112 POP 0x02
0095 D000 113 POP 0x00
0097 D0D0 114 POP PSW
0099 D0E0 115 POP ACC
116 ;中斷返回
009B 32 117 RETI
118
119
120 ;*************************************************************************
121 ;函數:void UartSendChar(unsigned char c)
122 ;功能:通過串行口發送單個字節
123 ;參數:
124 ; c:被發送的字節數據,取值0x00~0xFF
A51 MACRO ASSEMBLER MAIN 06/29/2006 13:50:34 PAGE 3
125 ;*************************************************************************
126 ;c = R7
009C 127 UartSendChar:
009C 3000FD 128 JNB _TI_, $
009F C200 129 CLR _TI_
00A1 EF 130 MOV A, R7
00A2 A2D0 131 MOV C, P
00A4 929B 132 MOV TB8, C
00A6 F599 133 MOV SBUF, A
00A8 22 134 RET
135
136
137 ;*************************************************************************
138 ;函數:void main()
139 ;功能:主函數
140 ;*************************************************************************
00A9 141 main:
142 ; UartInit();
00A9 12002C 143 LCALL UartInit
144 ; for (;;)
00AC 145 main_for:
146 ; {
147 ; if ( BufP2 != BufP1 )
00AC E559 148 MOV A, BufP2
00AE 6558 149 XRL A, BufP1
00B0 6016 150 JZ main_endif
151 ; {
152 ; UartSendChar(UartBuf[BufP2++]);
00B2 7430 153 MOV A, #UartBuf
00B4 2559 154 ADD A, BufP2
00B6 0559 155 INC BufP2
00B8 F8 156 MOV R0, A
00B9 E6 157 MOV A, @R0
00BA FF 158 MOV R7, A
00BB 12009C 159 LCALL UartSendChar
160 ; if ( BufP2 >= SIZE )
00BE E559 161 MOV A, BufP2
00C0 C3 162 CLR C
00C1 9428 163 SUBB A, #SIZE
00C3 4003 164 JC main_endif
165 ; {
166 ; BufP2 = 0;
00C5 755900 167 MOV BufP2, #0
168 ; }
169 ; }
00C8 170 main_endif:
171 ; }
00C8 80E2 172 SJMP main_for
173
174
175 ;*************************************************************************
176 ;程序結束
177 ;*************************************************************************
178 END
A51 MACRO ASSEMBLER MAIN 06/29/2006 13:50:34 PAGE 4
SYMBOL TABLE LISTING
------ ----- -------
N A M E T Y P E V A L U E ATTRIBUTES
ACC. . . . . . . . D ADDR 00E0H A
BUFP1. . . . . . . D ADDR 0058H A
BUFP2. . . . . . . D ADDR 0059H A
EA . . . . . . . . B ADDR 00A8H.7 A
ES . . . . . . . . B ADDR 00A8H.4 A
MAIN . . . . . . . C ADDR 00A9H A
MAIN_ENDIF . . . . C ADDR 00C8H A
MAIN_FOR . . . . . C ADDR 00ACH A
P. . . . . . . . . B ADDR 00D0H.0 A
PCON . . . . . . . D ADDR 0087H A
PREMAIN. . . . . . C ADDR 0026H A
PSW. . . . . . . . D ADDR 00D0H A
RB8. . . . . . . . B ADDR 0098H.2 A
RI . . . . . . . . B ADDR 0098H.0 A
RXD. . . . . . . . B ADDR 00B0H.0 A
SBUF . . . . . . . D ADDR 0099H A
SCON . . . . . . . D ADDR 0098H A
SIZE . . . . . . . N NUMB 0028H A
SP . . . . . . . . D ADDR 0081H A
TB8. . . . . . . . B ADDR 0098H.3 A
TH1. . . . . . . . D ADDR 008DH A
TI . . . . . . . . B ADDR 0098H.1 A
TL1. . . . . . . . D ADDR 008BH A
TMOD . . . . . . . D ADDR 0089H A
TR1. . . . . . . . B ADDR 0088H.6 A
TXD. . . . . . . . B ADDR 00B0H.1 A
UARTBUF. . . . . . D ADDR 0030H A
UARTINIT . . . . . C ADDR 002CH A
UARTINIT_FOR . . . C ADDR 0038H A
UARTINTSVC . . . . C ADDR 0061H A
UARTINTSVC_END . . C ADDR 0093H A
UARTINTSVC_NEXT. . C ADDR 0077H A
UARTINTSVC_TI. . . C ADDR 008CH A
UARTSENDCHAR . . . C ADDR 009CH A
_TI_ . . . . . . . B ADDR 0020H.0 A
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -