实验一:用串口助手发送数据给单片机,后续用串口助手显示:
学习视频:21.14-串口通信实验--软件编程_哔哩哔哩_bilibili
#include "reg52.h"
typedef unsigned int u16;
typedef unsigned char u8;
void uart_init(u8 baud) // 串口初始化
{
TMOD |= 0x20;
SCON = 0x50;
PCON = 0x80;
TH1 = baud;
TL1 = baud;
ES = 1;
EA = 1;
TR1 = 1;
}
void main()
{
uart_init(0xFA);
while(1)
{
}
}
void uart() interrupt 4
{
u8 rec_data = 0;
RI = 0;
rec_data = SBUF;
SBUF = rec_data;
while(!TI);
TI = 0;
}
实验二:用串口助手发送数据给单片机,on 来控制电机运行,off 控制电机关闭:
#include "reg52.h"
#include "string.h" // strncmp()比较函数要用到
typedef unsigned int u16;
typedef unsigned char u8;
sbit Motor=P1^0; // 电机引脚
u16 i=0;
void uart_init(u8 baud) // 串口初始化,输入波特率
{
TMOD |= 0x20;
SCON = 0x50;
PCON = 0x80;
TH1 = baud;
TL1 = baud;
ES = 1;
EA = 1;
TR1 = 1;
}
u8 rec_data[6]; // 保存串口收发数据
void main()
{
uart_init(0xFA); // 串口初始化
while(1)
{
if(strncmp(rec_data,"on",2)==0) // 比较前两位串口数据是否相同
{
Motor=1; // 打开电机
i = 0;
}
else if(strncmp(rec_data,"off",3)==0) // 比较前三位串口数据是否相同
{
Motor=0; // 关闭电机
i = 0;
}
}
}
void uart() interrupt 4
{
RI = 0; // 接收标志位清零
if(SBUF!='\n')
{
rec_data[i] = SBUF; // 将接收到的SBUF数据保存到数组中
SBUF = rec_data[i]; // 将数组中
while(!TI);
TI = 0; // 发送标志位清零
i++;
}
else
i=0;
}
以上内容,学习参考所用。如有侵权,Call我必删。