📄 uart.lst
字号:
C51 COMPILER V8.15 UART 08/11/2009 15:07:52 PAGE 1
C51 COMPILER V8.15, COMPILATION OF MODULE UART
OBJECT MODULE PLACED IN .\debug\uart.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE uart.c LARGE BROWSE DEBUG OBJECTEXTEND PRINT(.\debug\uart.lst) OBJECT(.\deb
-ug\uart.obj)
line level source
1 #include "reg52.h"
2 #include "uart.h"
3
4 extern u8_t xdata mydata[MYLEN];
5
6 extern u8_t xdata ComRxdBuf[COM_RXD_BUFF_SIZE]; //串口的接收缓冲区
7 extern u8_t xdata ComTxdBuf[COM_TXD_BUFF_SIZE]; //串口的发送缓冲区
8
9 u16_t idata ComTxdRead; //串口接收读指针
10 u16_t idata ComRxdRead; //串口发送读指针
11 u16_t idata ComRxdWrite; //串口接收写指针
12 u16_t idata ComTxdWrite; //串口发送写指针
13 bit ComTxdBufempty; //发送结束
14
15
16 xdata unsigned char IpStr[4];
17
18 /******************************************************************************
19 **UART_Init
20 **Value:
21 **Return Value:
22 **Parameters::T1 产生波特率 9600 8/N/1
23 ******************************************************************************/
24
25 void UART_Init()
26 {
27 1 SCON = 0x50; /*SCON0:模式1,8位UART,时能RX*/
28 1 TMOD |= 0x20; /*TMOD: 定时器工作再模式2, 8位重载*/
29 1 TH1 = 0xfa; /*设置定时1用作波特率的重载值*/
30 1 TL1 = 0xfa;
31 1 TR1 = 1; /*开定时器1*/
32 1 PCON |= 0x00; /*SMOD00 = 1*/
33 1 EA=1;
34 1 ES=1;
35 1 ComTxdBufempty=1;
36 1 }
37
38 /******************************************************************************
39 **serial(void) interrupt 4
40 **Value:
41 **Return Value:
42 **Parameters:
43 ******************************************************************************/
44
45 void serial(void) interrupt 4
46 {
47 1 u8_t temp;
48 1
49 1 if(TI)
50 1 {
51 2 TI=0;
52 2 if(ComTxdRead!=ComTxdWrite)
53 2 {
54 3 SBUF=ComTxdBuf[ComTxdRead];
C51 COMPILER V8.15 UART 08/11/2009 15:07:52 PAGE 2
55 3 ComTxdRead++;
56 3 if(ComTxdRead==COM_TXD_BUFF_SIZE)
57 3 {
58 4 ComTxdRead=0;
59 4 }
60 3 ComTxdBufempty=0;
61 3 }
62 2 else
63 2 {
64 3 ComTxdBufempty=1;
65 3 }
66 2 }
67 1
68 1
69 1 if (RI)
70 1 {
71 2 RI=0;
72 2 temp=SBUF;
73 2 ComRxdBuf[ComRxdWrite]=temp;
74 2
75 2 ComRxdWrite++;
76 2 if(ComRxdWrite==COM_TXD_BUFF_SIZE)
77 2 {
78 3 ComRxdWrite=0;
79 3 }
80 2
81 2 }
82 1
83 1
84 1 }
85
86 /**********************************************************************
87 **函数原型: void Printf_Char(u8_t ascii)
88 **参数说明: ascii: 发送到串口的ASCII
89 **返 回 值: 无
90 **说 明: 往串口发送一个字符
91 ************************************************************************/
92
93 void Printf_Char(u8_t ascii)
94 {
95 1 u16_t i;
96 1 EA=0;
97 1 ComTxdBuf[ComTxdWrite]=ascii;
98 1 ComTxdWrite++;
99 1 if(ComTxdWrite==COM_TXD_BUFF_SIZE)
100 1 {
101 2 ComTxdWrite=0;
102 2 }
103 1
104 1 if(ComTxdBufempty)
105 1 {
106 2 ComTxdBufempty=0;
107 2 TI=1;
108 2 }
109 1 for(i=0;i<200;i++); //登记的数据包数度要比它取走溢出慢
110 1
111 1 EA=1;
112 1 }
113
114 /**********************************************************************
115 **函数原型: void Printf_String(u8_t code *string)
116 **参数说明: string: 字符串的起始地址
C51 COMPILER V8.15 UART 08/11/2009 15:07:52 PAGE 3
117 **返 回 值: 无
118 **说 明: 向串口发送字符串,碰到0x00结束
119 ************************************************************************/
120 void Printf_String(u8_t *string)
121 {
122 1 while(*string!=0)
123 1 {
124 2 Printf_Char(*string);
125 2 string++;
126 2 }
127 1 }
128
129
130
131 /**********************************************************************
132 **函数原型: void Hex2Str(u8_t mychar)
133 **出口参数: 无
134 **返 回 值: 无
135 **说 明: 实现16进制IP值到字符串的转换
136 ************************************************************************/
137 void Hex2Str(u8_t wchar)
138 {
139 1
140 1 unsigned char x,y;
141 1 unsigned char *Str;
142 1 Str = IpStr;
143 1
144 1 x=wchar;
145 1 if(x>99)
146 1 {
147 2 y=x/100;*Str++=y+'0';
148 2 x=x-100*y;y=x/10;*Str++=y+'0';
149 2 x=x-10*y;*Str++=x+'0';
150 2
151 2 *Str++='\0';
152 2
153 2 }
154 1 else if(x>9)
155 1 {
156 2 y=x/10;*Str++=y+'0';
157 2 x=x-10*y;*Str++=x+'0';
158 2
159 2 *Str++='\0';
160 2
161 2 }
162 1 else
163 1 {
164 2 *Str++=x+'0';
165 2
166 2 *Str++='\0';
167 2
168 2 }
169 1
170 1
171 1 }
172
173
174
175 /**********************************************************************
176 **函数原型: void Printf_IPStr(union Ip_Address_Type ip)
177 **参数说明: union Ip_Address_Type ip
178 **返 回 值: 无
C51 COMPILER V8.15 UART 08/11/2009 15:07:52 PAGE 4
179 **说 明: 向串口发送字符串,碰到0x00结束
180 ************************************************************************/
181 void Printf_Str(u8_t mystr)
182 {
183 1 Hex2Str(mystr);
184 1 Printf_String(IpStr);
185 1 }
186 /**********************************************************************
187 **函数原型: u8_t Get_Char()
188 **参数说明: 无
189 **返 回 值: 无
190 **说 明: 从串口接收一个字符
191 ************************************************************************/
192 unsigned char Get_Char()
193 {unsigned char temp;
194 1 temp = ComRxdBuf[ComRxdRead];
195 1 ComRxdRead++;
196 1 if(ComRxdRead == COM_RXD_BUFF_SIZE){ComRxdRead=0;}
197 1 return(temp);
198 1 }
199
200
201 /**********************************************************************
202 **函数原型: void Copy_Send_Data( )
203 **入口参数: 无
204 **出口参数: u16_t ii
205 **返 回 值: 返回0或返回从串口接收到数据的长度
206 **功能说明: 检查重发缓冲区是否为空,将串口输入的数据发到发送缓冲区
207 ***********************************************************************/
208 u16_t Copy_Send_Data()
209 {
210 1 u16_t ii;
211 1
212 1 for(ii=0;ii<1500;ii++)
213 1 {
214 2 if(ComRxdRead!=ComRxdWrite)
215 2 {
216 3 mydata[ii]=Get_Char();
217 3
218 3 }
219 2
220 2 else{ break; };
221 2 }
222 1 return(ii);
223 1 }
224
225 /*just end*/
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 534 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = 4 3
PDATA SIZE = ---- ----
DATA SIZE = ---- ----
IDATA SIZE = 8 ----
BIT SIZE = 1 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -