关于RS232串口发送数据的问题,前面的起始位和后面的校验位如何在中断里面加进去,是芯

2020-02-04 09:33发布

这几天在看研究串口,一般用串口设置好寄存器,对于接收只是去读接收中断发过来的数据就好,发送呢,一般性的办法就是检测 TI 标志位~~~但是今天忽然觉得觉得有一个事情没有深究过,假如两个单片机进行通讯,希望在通讯的时候加进去校验位,那么这个校验位由谁来发送呢?程序内编写还是硬件设置好了会自动在数据后面加上,另外要是由人编写程序发送,怎么加进去呢,写在哪里,写在检测 TI 标志位的前面吗?那软件什么时候会置位 TI 电平呢,发送完数据后,然后加一个校验,再然后停止位,最后置位 TI吗? 那我接收呢,RI置位后进入中断,理论上应该是是把所有的都收完了以后进入的吧,那这个校验位放在哪里了呢,放在接收寄存器里面了吗?那这样岂不是我的数据丢失了,不完整了,真的不是很清楚,查了些资料好像说的也是云里雾里,希望各位大虾 指点指点,在此先谢过各位!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
11条回答
125591656
2020-02-05 05:00
关于校验位: 单片机工作在  8—bit 异步传输模式时,校验位是无效的,停止位有效
             单片机工作在  9—bit 异步传输模式时,校验位才是有效的,此时的校验位也是上面所提到的那个第9位数据
            
             单片机的数据缓冲器 SBUF 为 9bits 结构,
             在8—bit 异步传输模式时,是把停止位放入第9位中,判断一帧数据接收完毕,此时就可以对前面的8位数据进行操作
             在9—bit 异步传输模式时,数据接收处理过程和以上描述一致,然后是把 "校验位"  放入 SBUF  的第9位
                      这个“校验位”就是SCON(串口控制寄存器)中的TB8 ,
                      这一位是可以通过软件置位或者清零的,也可以将其设置为PSW 寄存器中的P值(奇偶校验值)
                     
             如上所述,数据接收后,校验位保存到SBUF的第9位中, 此时可以对前面的8位数据进行操作,
                       然后这个校验位的数值自动保存到  SCON  中的 RB8  中

由上可知,如果要在程序中对校验位进行比对操作,那么在 收、发模块中分别 添加读取  和 设置SCON 中相应位的语句即可


个人理解,未经过验证,请高手拍砖指正~~~~

一周热门 更多>