您当前的位置:五五电子网电子知识电子学习基础知识电脑-单片机-自动控制用MCS-51单片机实现带奇偶校验的串行通信 正文
用MCS-51单片机实现带奇偶校验的串行通信

用MCS-51单片机实现带奇偶校验的串行通信

点击数:7602 次   录入时间:03-04 11:59:53   整理:http://www.55dianzi.com   电脑-单片机-自动控制
  MCS-51系列单片机的串行口有4种工作方式。方式o为移位寄存器方式,用于外接同步I/O设备或扩展I/O口,不算起始位和停止位。方式l为8位异步串行通讯,方式2和方式3为9位异步串行通讯。方式2和方式3中的第9位是可程控位,即可由软件来确定笫9位是“O”还是“1”。也就是说,MCS-51系列单片机不像某些专用串行芯片,如INTEL8051、8050、TLC16C550等那样,可根据初始化条件自动加入串行通讯中的奇偶校验位发送出去,而是需要软件参与产生奇偶校验位。用软件产生奇偶校验位是根据MCS-51系列单片机的状态寄存器PSW的定义:当累加器A中为1的个数为奇数时,P=1,否则P=0,来编程的。假定待发送的数据已放人累加器A中,可用如下汇编语言来实现(串行口工作于方式2):
  
  MOVC,P;把奇偶标志送给进位位
  
  MOVTB8.C;把进位位送给TB8
  
  MOVSBUF,A;把待发送的数据放人串行口用C语言来编写时,因累加器A对编程者不透明,则会带来问题。例如,假定待发送的数据已放入变量VARIABLE中,若要从串行口发送出去,想当然地认为使用如下语句即可:
  
  TB8=P;/*语句1*/
  
  SBUF=VARIABLE;/*语句2*/
  
  实际上.2条语句并不能可靠地产生奇偶校验位。因为在语句1前面的语句所对应的汇编语言中的累加器A中为1的个数是不确定的,而语句2又是不可分割的。语句1和2对应的汇编语言程序为:
  
  MOVC,P:语句3
  
  MOVTB8,C;语句4
  
  MOVA.VARIABLE;语句5
  
  MOVSBUF,A;语句6
  
  可以看出,只有将语句3、4放到语句5和语句6之间时,才能正确地产生奇偶校验位。为了达到这一目的,可引入全局变量VARIABLE1,相应的C语言程序如下:
  
  VARIABLEl=0;/*语句7*/
  
  VARIABLE+=VARIABLEl;/*语句8*/
  
  TB8=P;/*语句9*/
  
  SBUF=VARIABLE;/*语句IO*/
  
  需要强调的是:
  
  1.在串行中断服务程序中.VARIABLE1一定要设置为全局变量,若设置为局部变量,则可能引起意想不到的后果。
  
  2.语句7和语句8尽量不要缩写成:
  
  VARIABLE+=O;/*语句10*/而把全局变量VARIABLEI省掉。这主要是为了防止编译程序在某种可能的编译优化条件下将语句10也省略掉。


本文关键字:单片机  通信  电脑-单片机-自动控制电子学习 - 基础知识 - 电脑-单片机-自动控制