带校验位的单片机串口接收数程序
时间: 2023-08-15 16:08:03 浏览: 49
好的,以下是一个带校验位的单片机串口接收数据的程序:
```c
#include<reg51.h> //使用STC51单片机时需要包含的头文件
#define BUF_LEN 10 //定义缓冲区长度为10
unsigned char buf[BUF_LEN]; //定义缓冲区
unsigned char index = 0; //定义数据索引
unsigned char check = 0; //定义校验和
void UART_ISR(void) interrupt 4 //串口中断服务函数
{
unsigned char data;
if(RI) //接收到数据
{
RI = 0; //清除接收中断标志位
data = SBUF; //读取数据
if(index < BUF_LEN) //数据未超出缓冲区长度
{
buf[index++] = data; //将数据存入缓冲区
check ^= data; //计算校验和
}
}
if(TI) //发送完毕
{
TI = 0; //清除发送中断标志位
}
}
void main()
{
unsigned char i;
TMOD = 0x20; //设置定时器1为模式2
TH1 = 0xfd; //设置波特率为9600
TL1 = 0xfd;
TR1 = 1; //启动定时器1
SCON = 0x50; //设置串口为模式1,允许接收数据
EA = 1; //开启总中断
ES = 1; //开启串口中断
while(1)
{
if(index >= BUF_LEN) //接收完毕
{
if(check == buf[BUF_LEN-1]) //校验通过
{
for(i=0; i<BUF_LEN-1; i++) //输出接收到的数据
{
SBUF = buf[i];
while(!TI); //等待发送完毕
TI = 0; //清除发送中断标志位
}
}
index = 0; //重置数据索引
check = 0; //重置校验和
}
}
}
```
该程序通过串口接收数据,并在接收完毕后计算校验和,如果校验通过则将数据发送回去。其中,缓冲区长度为10,最后一个字节为校验位,校验和计算方法为将所有数据异或起来。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)