51单片机实现串口偶校验

1. STC单片机串口

在这里插入图片描述
在这里插入图片描述

2. PSW是一个8位寄存器。PSW的全称是Program Status Word,即程序状态字。

在这里插入图片描述
奇偶标志位P
每执行一条汇编指令,单片机都能根据A中1的个数的奇偶自动令P置位或清零,奇为1,偶为0。P可以填入TB8,作为偶校验。
此标志位对串行通信的数据传输非常有用,通过就校验可以检验传输的可靠性。

3. 奇偶校验

奇校验(odd parity):让传输的数据(包含校验位)中1的个数为奇数。

在这里插入图片描述

偶校验(even parity):让传输的数据(包含校验位)中1的个数为偶数。
在这里插入图片描述

4. STC单片机串口实现偶校验
//uart.c
unsigned char var0,var;		//var0一定要是全局变量

void Uart_isr( void ) interrupt 4
{
	uint8_t tmpBuf;

	RI = 0;
	tmpBuf= SBUF;

    var = tmpBuf; 
    var0= 0;
    var += var0;
	if(RB8 == P)        //偶校验OK
	{
		//数据接收处理
	}
}


void Uart1Init(void)
{
	//SCON = 0x40; //0100,0000 8 位可变波特率,无校验位, 串口1模式1
	SCON = 0xC0; //1100,0000 9 位可变波特率,偶校验位, 串口1模式3
	//其他串口初始化代码

}
void UartSend(uint8_t var)
{
	var0 = 0;
	var += var0;
	TB8 = P;
	SBUF = var;
	//其他串口发送代码
}
  • 8
    点赞
  • 62
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
实现51单片机串口通信,需要以下步骤: 1. 设置串口通信参数,包括波特率、数据位、停止位和校验位等。 2. 初始化串口模块,包括设置工作模式、中断优先级和使能串口中断等。 3. 编写发送和接收函数,通过串口发送和接收数据。 4. 在主函数中调用发送和接收函数,实现串口通信。 以下是一个简单的示例代码: ``` #include <reg52.h> #define FOSC 11059200L // 定义晶振频率 #define BAUD 9600 // 定义波特率 void init_uart(); // 初始化串口函数 void send_char(unsigned char ch); // 发送字符函数 unsigned char receive_char(); // 接收字符函数 void main() { unsigned char ch; init_uart(); // 初始化串口 while(1) { ch = receive_char(); // 接收字符 send_char(ch); // 发送字符 } } void init_uart() { TMOD = 0x20; // 设置定时器1为模式2,用于计算波特率 TH1 = 256 - FOSC / 12 / 32 / BAUD; // 计算波特率重载值 TL1 = TH1; PCON = 0x00; // 不倍频 SCON = 0x50; // 设置串口工作模式 ES = 1; // 使能串口中断 EA = 1; // 使能总中断 TR1 = 1; // 启动定时器1 } void send_char(unsigned char ch) { SBUF = ch; // 发送字符 while(!TI); // 等待发送完成 TI = 0; // 清除发送标志位 } unsigned char receive_char() { unsigned char ch; while(!RI); // 等待接收完成 ch = SBUF; // 读取接收到的字符 RI = 0; // 清除接收标志位 return ch; } void uart_isr() interrupt 4 { if(RI) // 如果接收到数据 { RI = 0; // 清除接收标志位 } if(TI) // 如果发送完成 { TI = 0; // 清除发送标志位 } } ``` 该代码实现了简单的串口通信,可以通过调用 send_char 函数发送数据,通过调用 receive_char 函数接收数据。注意,该代码仅供参考,具体实现需要根据具体的应用场景进行修改和完善。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值