搜索
bottom↓
回复: 10

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

[复制链接]

出0入0汤圆

发表于 2011-8-28 17:03:22 | 显示全部楼层 |阅读模式
这几天在看研究串口,一般用串口设置好寄存器,对于接收只是去读接收中断发过来的数据就好,发送呢,一般性的办法就是检测 TI 标志位~~~但是今天忽然觉得觉得有一个事情没有深究过,假如两个单片机进行通讯,希望在通讯的时候加进去校验位,那么这个校验位由谁来发送呢?程序内编写还是硬件设置好了会自动在数据后面加上,另外要是由人编写程序发送,怎么加进去呢,写在哪里,写在检测 TI 标志位的前面吗?那软件什么时候会置位 TI 电平呢,发送完数据后,然后加一个校验,再然后停止位,最后置位 TI吗? 那我接收呢,RI置位后进入中断,理论上应该是是把所有的都收完了以后进入的吧,那这个校验位放在哪里了呢,放在接收寄存器里面了吗?那这样岂不是我的数据丢失了,不完整了,真的不是很清楚,查了些资料好像说的也是云里雾里,希望各位大虾 指点指点,在此先谢过各位!

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2011-8-29 11:17:34 | 显示全部楼层
你用的是51吗?
好像有一个寄存器里有校验位的设定
一般我们都设定成不用校验位的
而且如果我没有记错的话
寄存器里还可以设定数据发送的位数,不一定是8位的哈

出0入0汤圆

发表于 2011-8-29 13:38:31 | 显示全部楼层
回复【楼主位】maomao0110 毛毛
-----------------------------------------------------------------------

要9位通讯(即有校验位)必须初始化时在SCON寄存器中设置,发送一个字节前将校验位写入TB8,然后将该字节送SBUF;接收时从RB8读取校验位.开始位,校验位,停止位的发送接收都是硬件完成,无需程序干涉.

出0入0汤圆

 楼主| 发表于 2011-8-29 15:42:17 | 显示全部楼层
自己顶一下,怎么没有人回复呢~~

出0入0汤圆

发表于 2011-8-29 15:42:46 | 显示全部楼层
起始位、停止位、校验位是硬件自动生成的

出0入0汤圆

发表于 2011-8-29 16:23:20 | 显示全部楼层
一般串口通讯会有选择8位数据或9位数据模式,加校验位的一般是9位模式。校验位的生成是由你设置成奇或偶校验后由系统产生的一个数,这个数会带在8位数据的后面,而接收时9位数据模式中第9位一般是分开到另一个寄存器中的,不会进入接收寄存器里。

出0入0汤圆

 楼主| 发表于 2011-8-29 19:47:09 | 显示全部楼层
楼上的意思是只要把串口相关的寄存器设置好以后,这些起始位、停止位、校验位是硬件自动生成,两个串口要是想通讯的话只要把协议的格式设置成一样就行,软件部分只用关心发送和接收的数据就可以了,是这个意思吗?

出0入0汤圆

发表于 2011-8-30 17:55:07 | 显示全部楼层
新手上路,说一下自己的理解吧,希望能通过审核哈~~
个人认为,起始位、停止位是由单片机的硬件设置的,不能改变,在程序中也无需关心,不必做检测

关于起始位:单片机在接收数据时,待接收的数据是逐位进入“接收移位寄存器”的,
            在接收之前,移位寄存器内有一个初始值,为1FF(即:0001 1111 1111)
            然后在有数据进入时,这个初值右移,进入的数据左边补齐,接收完8bit时的状态为:xxxx xxxx 0001
            这时间,再进入第9位时,接收移位寄存器继续右移,则会出现 从1到0 的一个负跳变,这个"负跳变"就是所谓的"起始位"
            单片机硬件就是检测这样一个信号,然后开始接收数据的

关于停止位: 前面提到的,进入移位寄存器的第9位就是 "停止位",在8位异步传输模式下,这个停止位的数值为  "1"
            它的作用是:单片机检测到上面所述的“起始位”状态后,开始接收数据,此时从数据的第一位开始逐位右移,
                        在停止位 "1"  后面不断地补0,   则数据发送完毕时,停止位移出寄存器时的数据状态为:0 0000 0001
                        这样又会出现一个 负 跳变,  这个负跳变就是所谓的  "停止位"

综上: 起始位、停止位都是由单片机硬件自动决定的,其数值都是“1”,
       注意:单片机检测的并不是 起始位、停止位自身的一个数值,
             而是要和起始位、停止位前后的数据结合,检测的是一个“负跳变”的信号

出0入0汤圆

发表于 2011-8-30 18:08:58 | 显示全部楼层
关于校验位: 单片机工作在  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 中相应位的语句即可


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

出0入0汤圆

发表于 2012-2-22 21:51:29 | 显示全部楼层

出0入0汤圆

发表于 2012-2-27 11:08:22 | 显示全部楼层
还是没有太理解。。。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-20 00:42

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表