如上图,是串行发送8位数据的时序图
下图的程序是利用51单片机的IO口模拟UART串行通信
红色箭头所指的程序,是表示判断数据是否接收完毕
结合时序图来看,while(!RxdEnd);语句是判断数据是否接收完毕,
若接收完毕,则代表RxdEnd这个标志位等于1,即检测到停止位
如果8位数据中出现1,会不会使得程序误以为接受到的1是停止位的1,从而误以为接收完成了?
RxdEnd不可能是直接检测高电平的来设置的。
是根据波特率来的。比如起始位触发RxdEnd=0接收,然后是8bit数据,然后是停止位。这个要
靠定时器来同步的。也就是说至少要过了10位时间才能触发RxdEnd=1
那应该是个位变量,是由其它代码在控制,结束时置1结束位是高电平,不代表高电平就是结束
不管怎么样的模拟串口程序,其有一个共同的特征就是得有一个精确控制的检测周期来进行数
据的读入,这必须匹配输入波特率。
离开这个概念,所以的串口包括硬件串口都不能正常工作。
对于有精确时钟控制的软串口程序,其判断停止位时间,不可能落在数据位上面。
不管怎么样的模拟串口程序,其有一个共同的特征就是得有一个精确控制的检测周期来进行数ru .
最近我在DIY一个光纤串口,主要实现隔离信号和保护电脑免受高压、静电等损坏,喜欢的朋友,可以多关注我或直接联系哦
市场整合,情理之中的事情吧!