七、玩51单片机之串口

一、串口介绍

        串口本质可以使两个设备实现互相通信,串口的使用可以使单片机连接更多的外设,扩展了单片机的应用,单片机内部带有UART(通用异步收发器),使他可以向别的设备发送、接受信息。

        下面三个图是USB转串口、陀螺仪、蓝牙模块,串口的使用给单片机带来更加的可玩性。

二、硬件电路

        下面的TXD(transmission exchange date)为发送端,RXD(transmission exchange date)为接收端。发送端和接收端需要交叉连接,上面的VCC为电源,当设备2独立供电时就不需要接电源线。GND为接地线,该位电势为0。注意:设备电平标准不一样需要加电平转换芯片,不然会烧。

三、电平标准

        TTL(Transistor-Transistor logic 晶体管-晶体管 逻辑)电平是51单片机所用电平标准。

RS232通常为电脑所用电平标准。上面都是对于GND的压差。

RS485电平是由两根线的压差构成,所以为差分信号。TTL和RS232的传输信号只能达到10几米,而RS485的传输信号能达到1000多米。

下面的是九针接口,他除了TXD、RXD,还有DTR、DSR、RTS等来数据流控制(来调整发送和接收的速率问题)。例如上课老师讲的太快了,我们听不懂,就让老师讲慢点,以确保我们能接收到老师所讲的知识。

四、常见通信接口比较

        全双工:通信双方可以同时接发数据。半双工:通信双方只能在不同时刻接发数据,像打乒乓球,只能一方发球,不能同时发球。单工:只能我打你,而你不能打我。

        异步:双方约定的接发速率不同

        同步:双方靠一根时钟线来约定通信速率,例如你和朋友分别约好并定了闹钟,5点打球,7点吃饭,这样信息就不会有误差。

        总线:相当于带多个班的班主任,你我班可以交流。

五、51单片机的UART和串口参数及时序图

        51单片机的UART有四种模式,今天我们主要使用模式1。

        波特率:发送和接收数据的速率;检验位:检验传输的数据是否正确,有奇偶校验。

我们所讲的模式一没有校验位,因为模式一为8位UART。

六、单片机串口模式图、中断及有关寄存器

        

七、写程序环节

        由上面的串口模式图知道,我们需要将波特率、中断TI、RI配置好即可,SBUF是串口缓冲区,只用读写就行。因为我们第一个程序用不到中断,所以关于中断寄存器的我们在第二个程序在继续配置。

首先我们来配置SCON寄存器,有下面解释知道当SM0为1时为帧错误,但我们使用模式1,不需要帧错误,当SM0不为1时就和SM1组合选择串口的工作方式。所以当我们用方式1应该配置SM0为0,

SM1为1。SM2是用来控制方式2或3的多机通信,我们用方式1用不到,所以将SM2配置为0。

REN为接收使能,我们第一个程序用不到接收所以将他置0。

剩下的TB8、RB8用于方式2或3,用不到置0。

RI和TI是当SBUF接收或发送数据完成后,硬件会将他们置1,后面数据传输完成需要软件置0。

        从下面可以看到PCON中有SMOD和SMOD0,当我们需要将波特率加倍时就需要将SMOD置为1(就是设置的波特率不变,置0计算时需要将波特率再除以2)。SMOD0为帧错位,我们方式1用不上,所以不需配置。将SMOD置1,后四位不变,即PCON |= 0x80。

        接下来我们需要配置定时器,我们配置波特率时需要用到定时器1,因为我们用8位自动重装,其他位学过上节定时器就知道怎么配置了,所以定时器1可以配置为0010。

        接下来就是配置波特率,关于波特率的计算会在后面说。我们可以使用STC-ISP来配置波特率,这里我们配置的波特率为4800,我的单片机晶振为11.0592MHZ,UART要配置串口1,(有些高级单片机有更高级的串口),UART选择8位数据,波特率发生器选8位自动重载,定时器时钟选择12分频,波特率倍数记得打钩。

     

          接下来就是按照下表配置定时器1的寄存器,因为与定时器0无关,关于定时器0的都可以置为0。我们先按STC-ISP中TH1和TL1给的值赋值。还需要打开定时器1,所以要将TR1置1。

        因为不需要用定时器1的中断源,所以把ET1置0。这样关于程序一的寄存器配置部分就完成了。

        程序一串口向电脑发送数据的代码如下

        接下来我们写关于程序二的代码,电脑向串口发送数据控制LED灯

刚刚我们写程序一时只写了定时器的功能,接下来我们来配置中断ES开关。还有记得将SCON的REN置1,因为程序一没使用接收使能。

        下面程序二的代码就写好了

七、波特率的计算和数据显示模式

 1、波特率的计算    

         因为我的晶振不好计算TH1和TL1的值,所以晶振我按12计算。晶振为12MHZ,TH1=0xF3, 下面SMOD置1,置0就需除以32了。这样就计算出波特率。晶振为12有少许误差。

  2、数据显示模式

        HEX模式是显示数据的原始形式,串口上一般显示16进制。

        文本模式就是输入16进制通过ASCII码表所对应的字符

        下面我发送的16进制的42,以文本模式接收就是字符B;发送字符B,以HEX接收就是42。

  • 11
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值