51单片机串口通信模板_深入理解51单片机串口通信及通信实例
时间: 2023-08-03 08:04:09 浏览: 157
很高兴为您解答关于51单片机串口通信的问题。下面是关于51单片机串口通信模板的详细介绍以及通信实例。
1. 51单片机串口通信模板
51单片机与外部设备进行串口通信,需要设置串口的一些参数,包括波特率、数据位、校验位和停止位等。以下是51单片机串口通信模板的代码:
```c
#include <reg52.h>
#include <stdio.h>
#define FOSC 11059200L
#define BAUD 9600
typedef unsigned char BYTE;
typedef unsigned int WORD;
sbit LED = P1^0;
void UART_Init();
void SendData(BYTE dat);
void SendString(char *s);
void main()
{
UART_Init();
while(1)
{
LED = ~LED;
SendString("Hello, world!\r\n");
delay(1000);
}
}
void UART_Init()
{
TMOD &= 0x0F;
TMOD |= 0x20;
TH1 = TL1 = -(FOSC/12/32/BAUD);
TR1 = 1;
SCON = 0x50;
ES = 1;
EA = 1;
}
void SendData(BYTE dat)
{
SBUF = dat;
while(TI == 0);
TI = 0;
}
void SendString(char *s)
{
while(*s)
{
SendData(*s++);
}
}
```
在上面的代码中,我们定义了一个LED灯,在主函数中通过串口发送“Hello, world!”字符串,并控制LED灯闪烁。在UART_Init()函数中,我们设置了串口的一些参数,包括波特率、数据位、校验位和停止位等。
2. 51单片机串口通信实例
以下是一个简单的51单片机串口通信实例,它通过串口接收PC机发送的数据,并将其原封不动地发送回去:
```c
#include <reg52.h>
#include <stdio.h>
#define FOSC 11059200L
#define BAUD 9600
typedef unsigned char BYTE;
typedef unsigned int WORD;
sbit LED = P1^0;
void UART_Init();
void SendData(BYTE dat);
void SendString(char *s);
void main()
{
BYTE c;
UART_Init();
while(1)
{
if(RI)
{
c = SBUF;
RI = 0;
SendData(c);
LED = ~LED;
}
}
}
void UART_Init()
{
TMOD &= 0x0F;
TMOD |= 0x20;
TH1 = TL1 = -(FOSC/12/32/BAUD);
TR1 = 1;
SCON = 0x50;
ES = 1;
EA = 1;
}
void SendData(BYTE dat)
{
SBUF = dat;
while(TI == 0);
TI = 0;
}
void SendString(char *s)
{
while(*s)
{
SendData(*s++);
}
}
```
在上面的代码中,我们定义了一个LED灯,在主函数中通过串口接收PC机发送的数据,并将其原封不动地发送回去。同时,每当接收到数据时,LED灯会闪烁一次。
以上就是关于51单片机串口通信模板和通信实例的介绍,希望能对您有所帮助。
阅读全文