?? 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 + -