8th 串口通信

  简单来说,依然只是设置好几个寄存器即可。

  按步骤分别是:

  1. 设置引脚相关寄存器 GPxCON、GPxUP

  2. 设置波特率寄存器 UBRDIVx

  3. 设置传输格式 ULCONx 

  4. 设置接受发送方式以及时钟源 UCONx

  5. 设置流控和FIFO UFCONx UMCONx

  相关配置代码如下:

  

 1 void uart0_init(void)
 2 {
 3     GPHCON     |=    0xa0;        //设置TX,RX引脚
 4     GPHUP       =    0x0c;        //设置为内部上拉方式
 5 
 6     UBRDIV0     =    UART_BRD;    //设置波特率
 7 
 8     ULCON0      =    0x03;        //设置传输格式 8位 无校验 0个停止位 
 9     
10     UCON0       =    0x05;        //选择查询方式,以及时钟源选择为PCLK
11     UFCON0      =    0x00;        // 不使用FIFO
12     UMCON0      =    0x00;        // 不使用流控
13     
14 
15 }

关于接收和发送的查询方式,是通过UTRSTATx寄存器的

UTRSTATx具体如下:

主要是第0位与第2位。第0位是当接收缓存区接收到数据时,置1。第2位是当发送缓存区没有数据并且最后一个数据也发送出去时,置1.

 代码如下:

 1 void putc(unsigned char c)
 2 {
 3     /* 等待,直到发送缓冲区中的数据已经全部发送出去 */
 4     while (!(UTRSTAT0 & TXD0READY));
 5     
 6     /* 向UTXH0寄存器中写入数据,UART即自动将它发送出去 */
 7     UTXH0 = c;
 8 }
 9 
10 /*
11  * 接收字符
12  */
13 unsigned char getc(void)
14 {
15     /* 等待,直到接收缓冲区中的有数据 */
16     while (!(UTRSTAT0 & RXD0READY));
17     
18     /* 直接读取URXH0寄存器,即可获得接收到的数据 */
19     return URXH0;
20 }

 其中 RXD0READY = 1 ,TXD0READY= 0b100 

原文地址:https://www.cnblogs.com/asam/p/6379753.html