📄 uart.lst
字号:
217 * 输入参数:none;
218 *
219 * 返回数据:SBUF0: unsigned char, 一个字节;
220 *
221 * 注意: 接收完数据要清除中断标志;
222 ************************************************************************************/
223 unsigned char Uart0_ReceiveData(void)
224 {
225 1 while(!RI); // Wait receive data finished
226 1 RI=0; // Clear RI0 Flag
227 1
228 1 return SBUF;
229 1 }
230
231
232
233
234
235 /************************************************************************************
236 * Uart1 功能子程序
237 *************************************************************************************/
238
239 /***********************************************************************************
240 * 函数名称:uart1_init;
C51 COMPILER V7.50 UART 04/25/2007 16:01:14 PAGE 5
241 *
242 * 函数功能描述:uart1 初始化函数,使用定时器4作为时钟,关闭了发送和接收中断;
243 *
244 * 输入参数:BaudRate: byte, 波特率变量,可选择以下波特率:
245 * BaudRate_1200,BaudRate_2400,BaudRate_4800,BaudRate_4800,BaudRate_9600;
246 * BaudRate_19200,BaudRate_38400,BaudRate_57600,BaudRate_115200;
247 *
248 * 返回数据:none;
249 *
250 * 注意: 定时器4资源被占用,SYSCLK = 22.1184Mhz;
251 ************************************************************************************/
252 void Uart1_Init(INT32U BaudRate) // Init Uart0
253
254 {
255 1 T4CON&=~0x04; // Close Timer4
256 1 EIE2&=~0x04; // Disable Timer4 interrupt
257 1 EIP2&=~0x04; // Disable Timer4 interrupt Priority
258 1
259 1 T4CON=0x30; // Mode 2: TX,RX Raut Rate Mode
260 1
261 1 PCON|=0x10; // Power Control Registe, SMOD=1,BaudRate
262 1 SCON1=0x52; // SCON0: mode 1, 8-bit UART, enable RX, TI1=1,RI1=0
263 1
264 1 CKCON |= 0x40; // Uart1 uses SYSCLK/2 as time base
265 1
266 1 RCAP4H =(65536-(SYSCLK/(BaudRate*32)))/256;
267 1 RCAP4L =(65536-(SYSCLK/(BaudRate*32)))%256; // set Timer4 reload value for baudrate, Uart1_CLK=SYSCL
-K/2
268 1
269 1
270 1
271 1 EIE2&=~0x40; // Disable Uart1 Interrupt
272 1 EIP2&=~0x40; // Disable Uart1 Interrupt Priority
273 1
274 1 T4CON|=0x04; // Enable Uart1
275 1
276 1 }
277
278
279
280 /***********************************************************************************
281 * 函数名称:Uart1_ChangeBaudRate;
282 *
283 * 函数功能描述:重新设置uart1波特率;
284 *
285 * 输入参数:BaudRate: byte, 波特率变量,可选择以下波特率:
286 * BaudRate_1200,BaudRate_2400,BaudRate_4800,BaudRate_4800,BaudRate_9600;
287 * BaudRate_19200,BaudRate_38400,BaudRate_57600,BaudRate_115200;
288 *
289 * 返回数据:none;
290 *
291 * 注意: 定时器4资源被占用,SYSCLK = 22.1184Mhz;
292 ************************************************************************************/
293 void Uart1_ChangeBaudRate(INT32U BaudRate)
294 {
295 1
296 1 T4CON&=~0x04; // Close Timer4
297 1 RCAP4H =(65536-(SYSCLK/(BaudRate*32)))/256;
298 1 RCAP4L =(65536-(SYSCLK/(BaudRate*32)))%256; // set Timer4 reload value for baudrate, Uart1_CLK=SYSCLK/
-2
299 1
300 1
C51 COMPILER V7.50 UART 04/25/2007 16:01:14 PAGE 6
301 1 T4CON|=0x04; // Enable Uart1
302 1 }
303
304 /***********************************************************************************
305 * 函数名称:Uart1_Enable;
306 *
307 * 函数功能描述:uart1使能函数,打开或关闭uart0;
308 *
309 * 输入参数:Flag: bool, uart1使能变量;
310 * Flag: true,打开uart1; Flag: false,关闭uart1;
311 *
312 * 返回数据:none;
313 *
314 * 注意: none;
315 ************************************************************************************/
316 void Uart1_Enable(bool Flag)
317 {
318 1 if (Flag)
319 1 T4CON|=0x04; // Enable Uart1
320 1 else
321 1 T4CON&=~0x04; // Disable Uart1
322 1 }
323
324 /***********************************************************************************
325 * 函数名称:Uart1_ISR_Enable;
326 *
327 * 函数功能描述:uart1中断使能函数;
328 *
329 * 输入参数:Flag: bool, uart1中断使能变量;
330 * Flag: true,允许uart1中断; Flag: false,关闭uart1中断;
331 *
332 * 返回数据:none;
333 *
334 * 注意: none;
335 ************************************************************************************/
336 void Uart1_ISR_Enable(bool Flag)
337 {
338 1
339 1 if (Flag)
340 1 EIE2|=0x40; // Enable Uart1 Interrupt
341 1 else
342 1 EIE2&=~0x40; // Disable Uart1 Interrupt
343 1
344 1 }
345
346
347 /***********************************************************************************
348 * 函数名称:Uart1_ISR;
349 *
350 * 函数功能描述:uart1中断函数;
351 *
352 * 输入参数:none;
353 *
354 * 返回数据:none;
355 *
356 * 注意: 在中断程序内处理尽可能少的事情;
357 ************************************************************************************/
358 void Uart1_ISR(void) interrupt 20
359 {
360 1
361 1 }
362
C51 COMPILER V7.50 UART 04/25/2007 16:01:14 PAGE 7
363
364
365 /***********************************************************************************
366 * 函数名称:Uart1_SendByte;
367 *
368 * 函数功能描述:通过uart1发送一个字节数据;
369 *
370 * 输入参数:value:unsigned char, 要发送的数据变量;
371 *
372 * 返回数据:none;
373 *
374 * 注意: 发送完数据要清除中断标志;
375 ************************************************************************************/
376 void Uart1_SendByte(unsigned char value)
377 {
378 1 while(!(TI1)); // Wait send data finished
379 1 SBUF1=value; // Send the data to uart1
380 1 SCON1&=~0x02; // Clear interrupt flag
381 1 }
382
383 /***********************************************************************************
384 * 函数名称:Uart1_SendString;
385 *
386 * 函数功能描述:通过uart1发送一个字符串数据;
387 *
388 * 输入参数:pt: unsigned char xdata *, 要发送的字符串数据变量的指针;
389 *
390 * 返回数据:none;
391 *
392 * 注意: 字符串数据要以零为结束符;
393 ************************************************************************************/
394 void Uart1_SendString(unsigned char *pt)
395 {
396 1 while(*pt)
397 1 Uart1_SendByte(*pt++);
398 1 }
399
400
401 /***********************************************************************************
402 * 函数名称:Uart1_ReceiveData;
403 *
404 * 函数功能描述:通过uart1接收一个字节数据;
405 *
406 * 输入参数:none;
407 *
408 * 返回数据:SBUF1: unsigned char, 一个字节;
409 *
410 * 注意: 接收完数据要清除中断标志;
411 ************************************************************************************/
412 unsigned char Uart1_ReceiveData(void)
413 {
414 1 while(!(RI1)); // Wait receive data finished
415 1 SCON1&=~0x01; // Clear RI1 Flag
416 1
417 1 return SBUF1;
418 1 }
419
420
421 /***********************************************************************************/
422 // 文件结束
423 /***********************************************************************************/
C51 COMPILER V7.50 UART 04/25/2007 16:01:14 PAGE 8
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 656 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- 19
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 + -