?? main.lst
字號(hào):
A51 MACRO ASSEMBLER MAIN 07/01/2006 11:27:56 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.c
3 ; 串行口通信方式1例程
4 ;*************************************************************************
5
6
7 ;*************************************************************************
8 ;定義全局變量
9 ;*************************************************************************
0028 10 SIZE EQU 40 ;定義接收緩沖區(qū)大小
0030 11 UartBuf DATA 0x30 ;定時(shí)接收緩沖區(qū)
0058 12 BufP1 DATA 0x30+SIZE ;定義接收緩沖區(qū)下標(biāo)變量
0059 13 BufP2 DATA 0x30+SIZE+1
0000 14 _TI_ BIT 0x20.0 ;定義發(fā)送輔助標(biāo)志
15
16
17 ;*************************************************************************
18 ;復(fù)位入口
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 ;進(jìn)入主程序之前的初始化
33 ;*************************************************************************
0026 34 PreMain:
0026 758159 35 MOV SP, #(0x2F+SIZE+2) ;設(shè)置堆棧起始位置
0029 02009B 36 LJMP main
37
38
39 ;*************************************************************************
40 ;函數(shù):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 07/01/2006 11:27:56 PAGE 2
0044 D200 59 SETB _TI_
0046 759850 60 MOV SCON, #0x50 ;串行口方式1(8位Uart),允許接收
0049 438780 61 ORL PCON, #0x80 ;波特率加倍
004C 53890F 62 ANL TMOD, #0x0F
004F 438920 63 ORL TMOD, #0x20 ;設(shè)置T1為8位自動(dòng)重裝定時(shí)器
0052 74FA 64 MOV A, #0xFA
0054 F58D 65 MOV TH1, A
0056 F58B 66 MOV TL1, A ;設(shè)置波特率為9600
0058 D28E 67 SETB TR1 ;啟動(dòng)定時(shí)器T1
005A D2AC 68 SETB ES ;使能串行口中斷
005C D2AF 69 SETB EA
005E D002 70 POP 0x02
0060 22 71 RET
72
73
74 ;*************************************************************************
75 ;函數(shù):void UartINTSVC() interrupt 4
76 ;功能:串行口中斷服務(wù)函數(shù)
77 ;*************************************************************************
0061 78 UartINTSVC:
79 ;保護(hù)寄存器
0061 C0E0 80 PUSH ACC
0063 C0D0 81 PUSH PSW
0065 C000 82 PUSH 0x00
0067 C002 83 PUSH 0x02
84 ;處理接收中斷
0069 309817 85 JNB RI, UartINTSVC_TI
006C AA99 86 MOV R2, SBUF
006E C298 87 CLR RI
0070 7430 88 MOV A, #UartBuf
0072 2558 89 ADD A, BufP1
0074 0558 90 INC BufP1
0076 F8 91 MOV R0, A
0077 EA 92 MOV A, R2
0078 F6 93 MOV @R0, A
0079 E558 94 MOV A, BufP1
007B C3 95 CLR C
007C 9428 96 SUBB A, #SIZE
007E 4003 97 JC UartINTSVC_TI
0080 755800 98 MOV BufP1, #0
99 ;處理發(fā)送中斷
0083 100 UartINTSVC_TI:
0083 309904 101 JNB TI, UartINTSVC_end
0086 C299 102 CLR TI
0088 D200 103 SETB _TI_
104 ;恢復(fù)寄存器
008A 105 UartINTSVC_end:
008A D002 106 POP 0x02
008C D000 107 POP 0x00
008E D0D0 108 POP PSW
0090 D0E0 109 POP ACC
110 ;中斷返回
0092 32 111 RETI
112
113
114 ;*************************************************************************
115 ;函數(shù):void UartSendChar(unsigned char c)
116 ;功能:通過串行口發(fā)送單個(gè)字節(jié)
117 ;參數(shù):
118 ; c:被發(fā)送的字節(jié)數(shù)據(jù),取值0x00~0xFF
119 ;*************************************************************************
120 ;c = R7
0093 121 UartSendChar:
0093 3000FD 122 JNB _TI_, $
0096 C200 123 CLR _TI_
0098 8F99 124 MOV SBUF, R7
A51 MACRO ASSEMBLER MAIN 07/01/2006 11:27:56 PAGE 3
009A 22 125 RET
126
127
128 ;*************************************************************************
129 ;函數(shù):void main()
130 ;功能:主函數(shù)
131 ;*************************************************************************
009B 132 main:
133 ; UartInit();
009B 12002C 134 LCALL UartInit
135 ; for (;;)
009E 136 main_for:
137 ; {
138 ; if ( BufP2 != BufP1 )
009E E559 139 MOV A, BufP2
00A0 6558 140 XRL A, BufP1
00A2 6016 141 JZ main_endif
142 ; {
143 ; UartSendChar(UartBuf[BufP2++]);
00A4 7430 144 MOV A, #UartBuf
00A6 2559 145 ADD A, BufP2
00A8 0559 146 INC BufP2
00AA F8 147 MOV R0, A
00AB E6 148 MOV A, @R0
00AC FF 149 MOV R7, A
00AD 120093 150 LCALL UartSendChar
151 ; if ( BufP2 >= SIZE )
00B0 E559 152 MOV A, BufP2
00B2 C3 153 CLR C
00B3 9428 154 SUBB A, #SIZE
00B5 4003 155 JC main_endif
156 ; {
157 ; BufP2 = 0;
00B7 755900 158 MOV BufP2, #0
159 ; }
160 ; }
00BA 161 main_endif:
162 ; }
00BA 80E2 163 SJMP main_for
164
165
166 ;*************************************************************************
167 ;程序結(jié)束
168 ;*************************************************************************
169 END
A51 MACRO ASSEMBLER MAIN 07/01/2006 11:27:56 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 009BH A
MAIN_ENDIF . . . . C ADDR 00BAH A
MAIN_FOR . . . . . C ADDR 009EH A
PCON . . . . . . . D ADDR 0087H A
PREMAIN. . . . . . C ADDR 0026H A
PSW. . . . . . . . D ADDR 00D0H 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
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 008AH A
UARTINTSVC_TI. . . C ADDR 0083H A
UARTSENDCHAR . . . C ADDR 0093H A
_TI_ . . . . . . . B ADDR 0020H.0 A
REGISTER BANK(S) USED: 0
ASSEMBLY COMPLETE. 0 WARNING(S), 0 ERROR(S)
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -