串口通信

http://www.go-gddq.com/html/2009-03/454713.htm

MCS-51系列单片机上有一个通用异步接收/发送器UART,通过引脚RXD[P3.O]和TXD[P3.1]可与外音B电路进行全双工的串行异步通信,发送数据时由TXD端送出,接收时数据由RXD端输入。本文将具体介绍单片机串口的特点和编程方法,并且在最后给出一个实用的单片机与计算机通过串口通信的程序。
   
    串行接口的基本特点


   
    MCS-51单片机的串行端口有4种基本工作方式,通过编程设置,可以使其工作在任一方式,以满足不同场合的需要。其中方式0主要用于外接移位寄存器,以扩展单片机的I/O电路;工作方式1多用于双机之间或与外设电路的通信;方式2、3除有方式1的功能外,还可以作多机通信,以构成分布式多微机系统。

    串行端口有两个控制寄存器SCON、PCON,用于设置工作方式、发送或接收的状态、特征位、数据传送波特率[每秒传送的位数]以及作为中断标志等。

    串行端口有一个数据寄存器SBUF[在特殊功能寄存器中的字节地址为99H],该寄存器为发送和接收所共用。发送时,只写不读;接收时,只读不写。在一定条件下,向SBuF写入数据就启动了发送过程;读SBuF就启动了接收过程。

    串行端口的波特率可以用程序来控制。在不同工作方式中,由时钟振荡频率分频值或由定时器T1的定时溢出时间确定,使用十分方便灵活。
   
    串口控制寄存器
   
    1. 特殊功能寄存器SCON

    它用于定义串行口的工作方式及实施接收和发送控制。字节地址为98H,其各位定义如下表:

 
    SM0、SM1:串行口工作方式选择位,其定义如下:

 
    SM2:多机通讯控制位,仅用于方式2和方式3。当发送数据时SM2必须有软件设置为1;接收数据时,如果SM2=1只有接收到的第9位数据为1时,RI才置位;如果SM2=0只要接收第9位数据,RI就置位。

    REN:接收允许控制位。由软件置位(REN=1)才允许接收,又由软件清O(REN=0)来禁止接收。

    TB8:是要发送数据的第9位。在方式2或方式3中,要发送的第9位数据,根据需要由软件置1或清0。例如。可约定作为奇偶校验位,或在多机通讯中作为区别地址帧或数据帧的标志位。

    RB8:接收到的数据的第9位。在方式0中不使用RB8。在方式1中,若(SM2)=O,RB8为接收到的停止位。在方式2或方式3中,RB8为接收到的第9位数据。

    TI:发送中断标志。发送数据前必须软件清0,发送过程中TI一直为0,当发送完一帧数据后,由硬件自动置1。如果要再发送,必须用软件再清0。在编写串行通信程序的时候,可以使用软件查询TI的方法获得数据是否已发送完毕。

    RI:接收中断标志位。接收数据前必须软件清0,接收过程中RI一直为0,当接收完一帧数据后,由硬件自动置1。如果要再接收,必须用软件再清0。在编写串行通信程序的时候,可以使用软件查询RI的方法获得数据是否已接收完毕。

    2. 特殊功能寄存器PCON

    PCON的字节地址为87H,它的第7位SMOD是与串口的波特率设置有关的选择位。

 
    SMOD:波特率加倍位。在计算串行方式1、2、3的波特率时SMOD=0波特率不加倍;SMOD=1波特率加倍。
   
    MCS-51单片机的串行的工作方式
   
    MCS-51单片机的全双工串行口可编程为4种工作方式,现分述如下:

    1方式O

    方式0为移位寄存器输入/输出方式。可外接移位寄存器以扩展I/O口,也可以外接同步输入/输出设备。波特率固定为fosc/12,其中fosc为时钟频率

    8位串行数据是从RXD输入或输出,TXD用来输出同步脉冲。

    输出:串行数据从RXD引脚输出,TXD引脚输出移位脉冲。CPU将数据写入发送寄存器SBUF时,立即启动发送,将8位数据以fos/12的固定波特率从RXD输出,低位在前,高位在后。发送完一帧数据后,发送中断标志TI由硬件置位。

    输入:RXD为串行数据输入端,TXD仍为同步脉冲移位输出端。当(R1)=0且(REN)=1时,开始接收。当接收到第8位数据时,将数据移入接收寄存器,并由硬件置位RI。

 
    左面两图分别是方式0扩展输出和输入的接线图,74LS164/74LS165是移位寄存器,将单片机输出的串行数据变为8位并行数据,将外部输入的8位并行数据变成串行数据。

    2方式1

    方式1为波特率可变的10位异步通讯接口方式。发送或接收一帧信息,包括1个起始位0,8个数据位和1个停止位1。其中的起始位和停止位在发送时自动插入的。

    输出:当CPU执行一条指令将数据写入发送缓冲SBUF且TI=0时,就启动发送。串行数据从TXD引脚输出,发送完一帧数据后,就由硬件置位TI。

    输入:在(REN)=1时,串行口采样RXD引脚,当采样到1至O的跳变时,确认是串行发送来的一帧数据的开始位0,从而开始接收一帧数据。只有当8位数据接收完,并检测到高电平停止位后,只有满足①(R1)=0;②(SM2)=0或接收到的第9位数据为1时,停止位才进入RB8,8位数据才能进入接收寄存器,并由硬件置位中断标志RI;否则信息丢失。所以在方式1接收时,应先用软件清零RI和SM2标志。

    3. 方式2

    方式2为固定波特率的11位uART方式。它比方式1增加了一位可程控为1或0的第9位数据。

    输出:发送的串行数据由TXD端输出一帧信息为11位,附加的第9位来自SCON寄存器的TB8位,用软件置位或复位。它可作为多机通讯中地址/数据信息的标志位,也可以作为数据的奇偶校验位。当CPu执行一条数据写入SuBF的指令且TI=0时,就启动发送器发送。发送一帧信息后,置位中断标志TI。

    输入:在(REN)=1时,串行口采样RXD引脚,当采样到1至O的跳变时,确认是串行发送来的一帧数据的开始位0,从而开始接收一帧数据。在接收到附加的第9位数据后,当满足①(RI):0;②(SM2)=0或接收到的第9位数据为1时,第9位数据才进入RB8,8位数据才能进入接收寄存器,并由硬件置位中断标志Ri;否则信息丢失。且不置位RI。

    4. 工作方式3

    方式3为波特率可变的11位UART方式。除波特率外,其余与方式2相同。
   
    波特率的选择
   
    如前所述,在串行通讯中,收发双方的数据传送率(波特率)要有一定的约定。在MCS-51串行口的四种工作方式中,方式0和2的波特率是固定的,而方式1和3的波特率是可变的,由定时器T1的溢出率控制。

    1.方式O

    方式0的波特率固定为主振频率  的1/12。

    2.方式2

    方式2的波特率由PCON中的选择位SMOD来决定,可表示为:波特率=2sMoD×fosc/64也就是当SMOD=1时,波特率为1/32×fosc,当SMOD=0时,波特率为1/64×fosc。

    3.方式1和方式3

    定时器T1作为波特率发生器,其公式如下:

    波特率=2SMOD/32×定时器T1溢出率

    T1溢出率=T1计数率/产生溢出所需的周期

    式中T1计数率取决于它工作在定时器状态还是计数器状态。当工作于定时器状态时,T1计数率为fOSC门2:当工作于计数器状态时,T1计数率为外部输入频率,此频率应小于fOSC/24。产生溢出所需周期与定时器T1的工作方式、T1的预置值(×]有关。

    定时器T1工作于方式O:溢出所需周期数=8192-×

    定时器T1工作于方式1:溢出所需周期数=65536-X

    定时器T1工作于方式2:溢出所需周期数=256-X

    因为方式2为自动重装入初值的8位定时器/计数器模式,所以用它来做波特率发生器最恰当。这种方式下,T1的溢出率[次/秒]计算式可以表示为:

    T1溢出率=fsoc/12[256-X]

    于是波特率(位/秒)表达式为:

 
    当时钟频率选用11.0592MHz时,取易获得标准的波特率,所以很多单片机系统选用这个看起来“怪”的晶振就是这个道理。
 
   
左表列出了定时器T1工作于方式2常用波特率及初值。

 

 

 

 

 

 

 

 

 

  IBM PC是国内目前应用最广泛的微机,在与单片机串行接口后,可以方便地构成主从分布式多微机系统。从机作数据采集或实时控制,主机作数据处理和中央管理等。这种多微机系统在过程控制、仪器仪表、生产自动化和企业管理等方面都有广泛应用。此外,微机与单片机串行接口后,可以大大方便单片机的开发过程。

    1. 串行通信的接口电路

    微机与单片机通信时,两者一般都有一定的距离,为了克服线路上的电损耗,避免信息出错,常用RS232C电平实现信号之间的传输,RS232C电平的最大传输信息的长度为15m(采用150PF的多芯电缆),若希望有更远距离的传送,可用RS-422,RS-485等标准。

    由于RS232C电平采用负逻辑,即逻辑“1”:-5V—15V;逻辑“O”:+5V—+15V。而TTL的“1”和“0”分别为+2.4V—+5V和+0.4V—OV,因此单片机与微机之间必须外接电路实现电平转换。这种转换常用传输驱动器MAX232。 MAX232的工作电源为5V,外围电路简单,仅需外接几个电容即可完成从TTL电平到RS—232电平的转换。

    另外MCS—51单片机的串行线为RXD和TXD,分别从芯片的P3.0和P3.1两个端口线引出,而IBM PC的串行I/O信号插座有25脚和9脚两种,常用9脚插座。9脚插座的主要信号如下:1保护地;2接收数据SIN;3发送数据SOUT;4数据终端准备DTR;5信号地;6数据装置准备DSR;7请求发送CTS;8清除发送CTS;9响铃指示RI在最简单的直接传送串行通信系统中,仅用9脚插座中的发送数据、接收数据和信号地3条线即可,具体电路如下图所示。

    2. 串行通信程序设计

    串行通信程序设计主要有微机发送接收程序和单片机发送接收程序,微机上的发送和接收程序主要采用计算机高级语言编写如:C/C++、VB等,在单片机上主要用汇编或C编写,在使用串口之前,必须先对串口进行初始化,主要是设置产生波特率的定时器1、串口控制和中断控制。具体步骤如下:

    ①确定定时器1的工作方式——编程TMOD寄存器;

    ②确定串口的控制一编程SCON;

    ③串口的中断方式,必须开CPU和源中断一编程IE寄存器;

    ④计算定时器1的初值一装载TH1,TL1;

    ⑤启动定时器1—编程TCON中的TR1位。

    下面给出一个由单片机汇编语言编写的串行通信程序,单片机的晶振频率为11.0592MHz,程序中设置串口波特率为1200位/秒,串行工作方式1,把16进制数55H发送出去。

    串口工作方式1的波特率为:BR=

 
因此定时器的计数初值为:


 
 
    为了验证单片机上编写的串行数据发送程序是否正确可以在IBM PC上采用串口调试软件——串口调试助手来接收单片机发送的数据,此软件是一个绿色软件。无须安装。软件支持常用的300—115200bps波特率,能设置校验、数据位和停止位,能以ASCII码或十六进制接收或发送任何数据或字符(包括中文),可以任意设定自动发送周期,并能将接收数据保存成文本文件,能发送任意大小的文本文件。软件 界面如下图所示。

    此软件可以分为两个主要的区域:数据接收区和数据发送区。在数据接收区内有数据接收框,串口类型、波特率、校验位、数据位、停止位、显示方式选择区域等。在数据发送区可以选择自动发送和手动发送两种形式,自动发送时只需要在电脑内选择要发送的文件然后点击“发送文件”即可:手动发送时需要选择发送数据的类型,软件默认是以2进制发送,如果要以16进制发送必须选中“十六进制发送”,选择了发送数据类型后在发送数据区填写要发送的数据或字符然后点击“手动发送”即可,但是必须注意如果选择了十六进制发送,发送框中所填字符每两个字符之间应有一个空隔,如:01 23 00 34 45。    在界面的最下方可以观测到数据发送或者接收的状态,包括:串口类型、波特率、校验位、数据位、停止位,以及发送或接收文件的大小(bit)RX、TX。

    当将单片机与微机通过串口连接好后,打开串口调试助手,设置好串口的串口类型、波特率、校验位、数据位、停止位、显示方式,然后打开单片机电源,就可以看到串口调试助手的数据接收框内不断的有数据55H出现,这就表明单片机已经成功的与微机进行通信。但要注意的是调试串口时,插拨串 口接头应尽量关闭计算机。接收数据的窗口如下所示。

    以上给出的是一个简单的单片初串行数据发送程序,通过这个程序读名可以了解怎么对单片机的串口进行初始化以及怎么通过串口发送数据。当然根据不同的需要读者还可以编写出不同的实用程序,但是最根本的原理还是一样的。


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值