单片机之瑞萨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,然后进入一个无限循环,在循环中发送数据并接收数