📄 uart0.lst
字号:
C51 COMPILER V7.06 UART0 11/08/2006 19:37:34 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE UART0
OBJECT MODULE PLACED IN uart0.OBJ
COMPILER INVOKED BY: C:\Program Files\Keil\C51\BIN\C51.EXE uart0.c LARGE BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include <C8051F120.h>
2 #include <stdlib.h>
3 #include <string.h>
4 #include <uart0.h>
5
6 #define MAXLEN 10
7
8
9 u8 trdata[MAXLEN]; //要接收/发送的字符所存放的缓冲区
10 u8 txCounts = 0; //已发送的字符个数
11 u8 lxCounts = 0; //剩余未发送的字节个数
12 u8 len = 0; //要发送的数据的长度
13 u8 rpointer = 0; //读指针位置,指向要读的位
14 u8 wpointer = 0; //写指针位置,指向要写的位
15
16
17 //将要发送的数据放到缓冲区中
18 void SendBuf(u8 *tx)
19 {
20 1 u8 m = 0;
21 1 u8 i;
22 1 len = strlen(tx);
23 1 while(m < len)
24 1 {
25 2 i = 0;
26 2 lxCounts = len - m;
27 2 while ((m < len)&&(i < MAXLEN))
28 2 {
29 3 trdata[i] = *(tx + m);
30 3 i++;
31 3 m++;
32 3 }
33 2 TI0 = 1;
34 2 }
35 1 }
36
37
38 //发送单个字符
39 void Send_Char(u8 txch)
40 {
41 1 SBUF0 = txch;
42 1 while (TI0 == 0); //等待发送完毕
43 1 TI0 = 0; //软件清零
44 1 }
45
46
47 //发送字符串,调用Send_Char() len字符串长度
48 void Send_String(u8 *str)
49 {
50 1 u8 temp;
51 1 txCounts = 0;
52 1 while ((txCounts < len)&&(txCounts < MAXLEN)&&(txCounts < lxCounts))
53 1 {
54 2 temp = *(str + txCounts);
55 2 Send_Char(temp);
C51 COMPILER V7.06 UART0 11/08/2006 19:37:34 PAGE 2
56 2 txCounts++;
57 2 }
58 1 }
59 /*
60 //--------------------------------------------------------------------------------------
61 //监听串口是否收到数据,读写指针不相等的话,缓冲区里有数据
62 u8 Listen(void)
63 {
64 if (rpointer != wpointer) return 1;
65 }
66
67
68 //返回缓冲区中数据长度
69 u8 SizeOfBuf(void)
70 {
71 return (wpointer - rpointer);
72 }
73 */
74
75 //实现从循环数组中读取数据
76 //实现原理:由rpointer追赶wpointer,两者相等后都进行求模
77 //参数:'size'指要读取的数据的个数,receive[]指读出的数据所存放的地方
78 /*u8 ReadBuf(u8 size, u8 receive[])
79 {
80 u8 i = 0;
81 while ((i < size)&&(rpointer < wpointer))
82 {
83 receive[i] = trdata[rpointer % MAXLEN];
84 rpointer++;
85 i++;
86 if (rpointer == wpointer)
87 {
88 rpointer = rpointer % MAXLEN;
89 wpointer = rpointer;
90 }
91 }
92 return i;
93
94 }*/
95
96 //将从串口中读到的数据写到缓冲区中
97 //实现原理:如果(wpointer - rpointer) < MAXLEN,就说明缓冲区中还有空间存放数据
98 //返回'1'则说明写入一个数据,返回'0'则说明没有空间,写数据失败
99 u8 WriteBuf(u8 rxch)
100 {
101 1 if ((wpointer - rpointer) < MAXLEN)
102 1 {
103 2 trdata[wpointer % MAXLEN] = rxch; //存入缓冲区
104 2 wpointer++;
105 2 return 1;
106 2 } else return 0;
107 1 }
108
109 void inter() interrupt 4
110 {
111 1 if (TI0)
112 1 {
113 2 TI0 = 0;
114 2 Send_String(trdata);
115 2 }
116 1 if (RI0)
117 1 {
C51 COMPILER V7.06 UART0 11/08/2006 19:37:34 PAGE 3
118 2 u8 rxch;
119 2 RI0 = 0; //软件清零
120 2 rxch = SBUF0; //读缓冲
121 2 WriteBuf(rxch);
122 2 }
123 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 329 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 15 8
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = ---- ----
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 + -