接着冲哥演示了从串口助手给单片机发数据:
再看如何从单片机给PC串口助手发数据?
用下面这个函数发字符串:
void Uart2_SendStr( u8 *puts ) //串口数据发送函数
{
for (; *puts != 0;puts++) //遇到停止符0结束
{
S2BUF = *puts;
B_TX2_Busy = 1;
while(B_TX2_Busy);
}
}
有了上面的发送字符串给PC串口助手函数,我们可以打印提示信息给PC的串口助手:
void Usart2_RunTask(void)//串口任务函数
{
if( Rec_Num >= 6 ) //是否接收到了6位以上的数据
{
if(( Rec_Dat == '\n' ) && ( Rec_Dat == '\r' ) ) //末尾判断
{
if( ( Rec_Dat == 'O' ) && ( Rec_Dat == 'P' ) && ( Rec_Dat == 'E' ) && ( Rec_Dat == 'N' ))
{
passward = 16;
passward = 16;
passward = 16;
passward = 16;
Uart2_SendStr( "打开成功!\r\n" );
}
else if( ( Rec_Dat == 'C' ) && ( Rec_Dat == 'L' ) && ( Rec_Dat == 'O' ) && ( Rec_Dat == 'S' ) && ( Rec_Dat == 'E' ))
{
passward = 17;
passward = 17;
passward = 17;
passward = 17;
Uart2_SendStr( "关闭成功!\r\n" );
}
Rec_Num = 0;//这个一定要清零,否则下次接收数据会混乱
}
}
}
今天的第十七课程就完成了,下次我们学习第十八课!
今天我们开始学习第十八集 串口高级应用
上节课我们是8位数据,灭有校验
今天看看串口通信的奇偶校验
虽然常用的是8位:
但也会用到校验位的:
串口通信的奇偶校验
偶校验(eveh parity):让传输的数据(包含校验位)中1的个数为偶数。
即:如果传输字节中1的个数是偶数,则校验位为“0”,奇数相反。
奇校验(odd parity):让传输的数据(包含校验位)中1的个数为奇数。
即:如果传输字节中1的个数是偶数,则校验位为“1”,奇数相反。
为什么需要加校验呢?
传输过程是单向的,可能存在出错的可能!
奇偶校验的优缺点?
优点1:可以减少数据出错的可能优点2:使用简单便捷
缺点1:奇偶校验的检错率只有50%。因为只有奇数个数据位发生变化能检测到,如果偶数个数据位发生变化则无能为力了
缺点2:奇偶校验每传输一个字节都需要加一位校验位,对传输效率影响很大
·程序如何实现?使用9位数据位(8位数据+1位校验)
2个方案,一般是用方案2: