51单片机串口通信代码
时间: 2023-11-09 07:08:48 浏览: 29
以下是基于51单片机的串口通信代码示例,其中使用的是UART模块:
```
#include <reg51.h>
#include <stdio.h>
#define FREQ_OSC 11059200UL
#define BAUD_RATE 9600
void init_uart();
void put_char(char c);
void put_string(char *str);
char get_char();
void main() {
char c;
init_uart();
while (1) {
c = get_char();
put_char(c);
}
}
void init_uart() {
TMOD = 0x20;
TH1 = 256 - FREQ_OSC / (32 * 12 * BAUD_RATE);
TL1 = TH1;
TR1 = 1;
SCON = 0x50;
ES = 1;
EA = 1;
}
void put_char(char c) {
SBUF = c;
while (!TI);
TI = 0;
}
void put_string(char *str) {
while (*str) {
put_char(*str++);
}
}
char get_char() {
char c;
while (!RI);
c = SBUF;
RI = 0;
return c;
}
void serial_isr() interrupt 4 {
if (TI) {
TI = 0;
}
if (RI) {
RI = 0;
}
}
```
以上代码中,`init_uart()`函数用于初始化UART模块,`put_char()`和`put_string()`函数用于发送字符和字符串,`get_char()`函数用于接收字符。其中,`serial_isr()`函数是串口中断服务程序,处理串口数据的接收和发送。