通常情况下都会将串口的初始化语句写进一个初始化函数Uart_Init()中:
1 void Uart_Init(int baud)
2 {
3 int i;
4 rUFCON0 = 0x0; //UART FIFO disable
5 rULCON0 = 0x3; //关闭红外传输模式而用Normal模式,No parity,1 stop,每帧8bits数据位
6 rUCON0 = 0x805; //先看[11:10]=10,UART时钟源为PCLK,那么[15:12]就没用了,置零,接收与发送的中断类型均为Pulse,禁止接收超时中断的产生,禁止接收错误中断的产生
7 //不采用loopback工作模式而采用normal模式,不发送break signal而采用normal transmit
8 rUBRDIV0=( (int)(50000000/16./baud+0.5) -1 ); //Baud rate divisior register 0
9 for(i=0;i<100;i++);//延时
10 }
串口发送字节Byte的函数Uart_SendByte():
1 void Uart_SendByte(int data)
2 {
3
4 if(data=='n')
5 {
6 while(!(rUTRSTAT0 & 0x2));
7
8 WrUTXH0('r');
9 }
10 while(!(rUTRSTAT0 & 0x2)); //Wait until THR is empty.
11
12 WrUTXH0(data);//一个宏
13 }
上面程序中的WrUTXH0()是一个宏,定义在另外一个文件中,形式为:
#define WrUTXH0(ch) (*(volatile unsigned char *)0x50000020)=(unsigned char)(ch)
所以WrUTXH0(data)的作用就相当于:
1 #define rUTXH0 (*(volatile unsigned *)0X50000020)
2 rUTXH0=data;
这两者功能是等价的。
串口发送字符串的函数Uart_SendString()实质就是不断调用Uart_SendByte()函数,将字符串一个字节一个字节的发出去:
1 void Uart_SendString(char *pt)
2 {
3 while(*pt)
4 Uart_SendByte(*pt++);
5 }
串口打印函数Uart_Printf()就是调用发送字符串的函数:
1 void Uart_Printf(char *fmt,...)
2 {
3 va_list ap;
4 char str[255];
5
6 va_start(ap,fmt);
7 vsprintf(str,fmt,ap);
8 Uart_SendString(str);
9 va_end(ap);
10 }
Uart_GetKey():
1 char Uart_GetKey(void)
2 {
3 if (rUTRSTAT0 & 0X01) //接收是否完毕 =1结束
4 return rURXH0;
5 else
6 return 0;
7 }
上一篇:Cortex-M3学习LPC1768 - 按键实验
下一篇:S3C2440串口通信基本功能的代码(注释+学习)
推荐阅读最新更新时间:2024-10-17 12:27
设计资源 培训 开发板 精华推荐
- 用于 300Khz 自举 N 沟道晶体管的 Tc110301Ect Pfm/Pwm 升压直流/直流控制器的典型应用
- LT1086CT 用于遥感的低压差正稳压器的典型应用
- LMV321SN3T1G 维恩桥振荡器典型应用电路
- 使用 MaxLinear, Inc 的 SPX5205M5-5.0 的参考设计
- Larduino LED POV
- MPC5777C-DEVB: MPC5777C发动机控制和BMS开发板
- 使用 Analog Devices 的 LT3990HMSE-3.3 的参考设计
- LTC4412/LTC4414 演示板,双路低损耗高电压 PowerPath 控制器
- 具有 EMF 反馈感应的 MC34166 可变电机速度控制的典型应用
- SIP78L05AC 三端低电流正压稳压器典型应用