论坛» 嵌入式开发» MCU

Help! IO口模拟UART通信遇到的问题

工程师
2019-06-27 23:02 1楼

如上图,是串行发送8位数据的时序图

下图的程序是利用51单片机的IO口模拟UART串行通信

1.jpg


红色箭头所指的程序,是表示判断数据是否接收完毕

结合时序图来看,while(!RxdEnd);语句是判断数据是否接收完毕,

若接收完毕,则代表RxdEnd这个标志位等于1,即检测到停止位

如果8位数据中出现1,会不会使得程序误以为接受到的1是停止位的1,从而误以为接收完成了?

2.jpg





工程师
2019-06-27 23:15 2楼

RxdEnd不可能是直接检测高电平的来设置的。

是根据波特率来的。比如起始位触发RxdEnd=0接收,然后是8bit数据,然后是停止位。这个要


靠定时器来同步的。也就是说至少要过了10位时间才能触发RxdEnd=1


工程师
2019-06-27 23:22 3楼

那应该是个位变量,是由其它代码在控制,结束时置1结束位是高电平,不代表高电平就是结束

工程师
2019-06-27 23:28 4楼

不管怎么样的模拟串口程序,其有一个共同的特征就是得有一个精确控制的检测周期来进行数


据的读入,这必须匹配输入波特率。

离开这个概念,所以的串口包括硬件串口都不能正常工作。

对于有精确时钟控制的软串口程序,其判断停止位时间,不可能落在数据位上面。



高工
2019-06-29 13:23 5楼

不管怎么样的模拟串口程序,其有一个共同的特征就是得有一个精确控制的检测周期来进行数ru .

院士
2019-06-29 21:00 6楼
谢谢分享,学习了。
工程师
2019-06-30 21:51 7楼

最近我在DIY一个光纤串口,主要实现隔离信号和保护电脑免受高压、静电等损坏,喜欢的朋友,可以多关注我或直接联系哦

工程师
2019-07-03 09:35 8楼

市场整合,情理之中的事情吧!

共8条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册]