当前位置: 代码迷 >> 单片机 >> 串口有关问题,请高手帮忙解答(尽量详细啊初学)
  详细解决方案

串口有关问题,请高手帮忙解答(尽量详细啊初学)

热度:426   发布时间:2016-04-28 16:35:39.0
串口问题,请高手帮忙解答(尽量详细啊,初学)
1 串口是接收到一个字符就产生中断吗?如要接受“ABC”是否要产生3次中断。
2 串口怎样判断字符串接收完毕?

------解决方案--------------------
3次中断 查询寄存器标志
------解决方案--------------------
有中断 或者查询事件。
有的可以设置threshold, 但硬件层面上只能自己判断了
------解决方案--------------------
以51单片机为例:
 如果你允许了接收中断,那么每收到1个字符,就会产生一次中断,中断标志位是RI;如果同时允许了发送中断(TI),每次进入中断后,还需要判断是什么引起的中断,并作相应的处理;
 串口硬件无法判断字符串接收完毕,这项工作需要软件来实现;
 做法就是,双方事先约定,例如约定发送的字节数;或者发送特定的结束标志(可以是两字节结束标志);
------解决方案--------------------
探讨

以51单片机为例:
如果你允许了接收中断,那么每收到1个字符,就会产生一次中断,中断标志位是RI;如果同时允许了发送中断(TI),每次进入中断后,还需要判断是什么引起的中断,并作相应的处理;
串口硬件无法判断字符串接收完毕,这项工作需要软件来实现;
做法就是,双方事先约定,例如约定发送的字节数;或者发送特定的结束标志(可以是两字节结束标志);

------解决方案--------------------
对于单片机来说:
1 是产生3次硬件中断
2 硬件上无法判断某个字符串是否接收完毕,可以自己定义一个简单的数据协议。

比如:
协议头 + 数据长度 + 数据 + 校验 + 协议尾

比如“协议头”数据有两个字节:f0 5a。
你在接收到f0 5a之后,读取到的下一个字节就是“数据长度”。
“数据长度”可以包含“数据长度 + 数据 + 校验”的总长度。
读取完这些数据之后,再判断“协议尾”。
比如协议尾为两个字节:5a f0。
读取“协议头 + 数据长度 + 数据 + 校验 ”之后,再继续读两个字节,如果正好是5a f0。
那证明你的一帧数据包算是接收完毕了。
  相关解决方案