单片机之瑞萨RL78 串口通信的例子

瑞萨RL78 串口通信


瑞萨RL78/G1D单片机的串口收发数据的例子。在此示例中,我们将使用串口0,波特率为9600。

#include "rl78g1d.h"  
  
#define UART0_RECEIVE_BUFFER  U0RBR  
#define UART0_TRANSMIT_BUFFER  U0THR  
#define UART0_CONTROL_REGISTER  U0CR  
#define UART0_STATUS_REGISTER  U0SR  
#define UART0_BAUD_RATE_REGISTER  U0BR  
  
void uart0_init(void) {  
  // 设置串口0为模式1(8位数据,1位停止位)  
  UART0_CONTROL_REGISTER = 0x80;  
  
  // 设置串口0的波特率为9600  
  UART0_BAUD_RATE_REGISTER = 0x15;  
}  
  
void uart0_send(char data) {  
  // 等待串口0的发送缓冲区为空  
  while (!(UART0_STATUS_REGISTER & 0x80));  
  
  // 向串口0的发送缓冲区写入数据  
  UART0_TRANSMIT_BUFFER = data;  
}  
  
char uart0_receive(void) {  
  char data;  
  
  // 等待串口0的接收缓冲区有数据  
  while (!(UART0_STATUS_REGISTER & 0x01));  
  
  // 从串口0的接收缓冲区读取数据  
  data = UART0_RECEIVE_BUFFER;  
  
  return data;  
}  
  
void main(void) {  
  char receivedData;  
  
  // 初始化串口0  
  uart0_init();  
  
  while(1) {  
    // 发送数据  
    uart0_send('H');  
  
    // 接收数据  
    receivedData = uart0_receive();  
  }  
}

这段代码首先定义了串口0的相关寄存器。在uart0_init()函数中,串口0被设置为模式1(8位数据,1位停止位),波特率为9600。在uart0_send()函数中,等待串口0的发送缓冲区为空,然后向发送缓冲区写入数据。在uart0_receive()函数中,等待串口0的接收缓冲区有数据,然后从接收缓冲区读取数据。在main()函数中,初始化了串口0,然后进入一个无限循环,在循环中发送数据并接收数