📄 uart.lst
字号:
C51 COMPILER V8.02 UART 05/25/2007 19:23:10 PAGE 1
C51 COMPILER V8.02, COMPILATION OF MODULE UART
OBJECT MODULE PLACED IN uart.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE uart.c ROM(COMPACT) OPTIMIZE(9,SIZE) BROWSE DEBUG OBJECTEXTEND
line level source
1 /* file: uart.c
2 * author: xuhuashan@gmail.com
3 * create date: 2006/04/15
4 */
5
6 #include <STC12C2052AD.H>
7
8 #include "uart.h"
9
10 #define XTAL 22118400L
11 //#define XTAL 11059200L
12 #define BAUDRATE 38400
13
14
15 #define RX_BUF_LEN 16
16 #define TX_BUF_LEN 16
17
18 //receive buffer
19 uchar idata rxBuf[RX_BUF_LEN];
20 ubyte rxPos = 0;
21 ubyte rxCnt = 0;
22
23 uchar idata txBuf[TX_BUF_LEN];
24 ubyte txPos = 0;
25 ubyte txCnt = 0;
26 uchar txDone = true;
27
28 static void UartInterruptRoutine(void) interrupt 4 using 3
29 {
30 1 uchar c;
31 1 if(RI)
32 1 {
33 2 RI = 0;
34 2 c = SBUF;
35 2 if(rxCnt < RX_BUF_LEN)
36 2 {
37 3 rxBuf[(rxPos + rxCnt) % RX_BUF_LEN] = c;
38 3 rxCnt++;
39 3 }
40 2 }
41 1 if(TI)
42 1 {
43 2 TI = 0;
44 2 if(txCnt)
45 2 {
46 3 SBUF = txBuf[txPos];
47 3 txCnt--;
48 3 txPos = (txPos + 1) % TX_BUF_LEN;
49 3 }
50 2 else
51 2 txDone = 1;
52 2 }
53 1 }
54
55 void InitUart(void)
C51 COMPILER V8.02 UART 05/25/2007 19:23:10 PAGE 2
56 {
57 1 PCON |= 0x80; // 0x80=SMOD: set serial baudrate doubler
58 1 TMOD = (TMOD & 0x0F ) | 0x20; // put timer 1 into MODE 2
59 1 TH1 = TL1 = (uchar)(256 - (XTAL / (16L * 12L * BAUDRATE)));
60 1 TR1 = 1; // start timer 1
61 1 SCON = 0x50; // serial port MODE 1, enable serial receiver
62 1 PS = 0; // serial interrupt low level
63 1 ES = 1; // enable serial interrupts
64 1 }
65
66 ubyte UartGetChar(uchar *c)
67 {
68 1 ES = 0;
69 1 if(rxCnt > 0)
70 1 {
71 2 *c = rxBuf[rxPos];
72 2 rxPos = (rxPos + 1) % RX_BUF_LEN;
73 2 rxCnt --;
74 2 ES = 1;
75 2 return 1;
76 2 }
77 1 ES = 1;
78 1 return 0;
79 1 }
80
81 ubyte UartPutChar(const uchar c)
82 {
83 1 ubyte result = 0;
84 1 ES = 0;
85 1 if(txCnt < TX_BUF_LEN)
86 1 {
87 2 txBuf[(txPos + txCnt) % TX_BUF_LEN] = c;
88 2 txCnt++;
89 2 if (txDone)
90 2 {
91 3 txDone = 0;
92 3 TI = 1;
93 3 }
94 2 result = 1;
95 2 }
96 1 ES = 1;
97 1 return result;
98 1 }
99
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 174 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 5 ----
IDATA SIZE = 32 ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -