本文主要是介绍如何用一个I/O引脚模拟串口发送数据,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
①了解串口工作原理,单片机想往串口发送数据,只需配置一个GPIO引脚即可,将引脚设为推挽输出,根据串口传送时序图,先拉高。
②拉低电平作为传送的起始位,下面步骤非常关键,设置波特率,比如波特率为9600,那么时间间隔应该是1/9600=104us。注意这个间隔差一点点是没问题的。串口每次是发一位的,所以从最低位开始循环发送8次,就是一个字节,最后引脚拉高作为停止位。程序如下
void send_B(u8 data)
{u8 i;TXD=0; delay_us(104);for(i=0;i<8;i++){ TXD=data&0x01;LED=TXD;delay_us(100);data=data>>1;}TXD=1;
}
③用示波器测一下发送值(0XAA),效果如下
④上述适合发送一个字节,如果发送4B或者更多怎么办?循环四次发送send_B(0XAA)是不行的,需要在函数间插入延时函数。
void send_u32(int data)
{delay_ms(1);send_B((u8)data);delay_ms(1);send_B((u8)(data>>8));delay_ms(1);send_B((u8)(data>>16));delay_ms(1);send_B((u8)(data>>24));
}
⑤最后在PC用串口助手接受一下数据试试看,如图,发送send_B(0XAA)和send_u32(0X12345678)是可以接受到的
总结:延时比较简单,但是如果再添加一个RX就不推荐用这个方法。另外可以用定时器中断的方法,方法同上。
程序下载:https://download.csdn.net/download/u011895157/14111626
这篇关于如何用一个I/O引脚模拟串口发送数据的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!