原创 7

2007-11-21 21:12 2351 3 3 分类: MCU/ 嵌入式
摘自“中原孔海洋”
MCS-51系列单片机内部有一个可编程全双工串行通信接口,具有UART(Universal Asynchronous Receiver/Transmitter,通用异步收发器)功能。它有四种工作方式,可由软件设定;它的波特率也可由软件设置片内的定时器/计数器来进行控制。
 
与串口相关的特殊功能寄存器主要有串口控制寄存器SCON和电源控制寄存器PCON。其中需要注意的是PCON不可位寻址。 
51系列单片机的串口主要用来进行串口数据通信,除此以外,它还可以用来非常方便地扩展并行IO口,可以扩充输入或者输出。本节我们主要通过实例来说明其在串行数据通信的应用及其在扩展IO口上的应用,考虑到篇幅,我们只举以下二例。 
例1.两个AT89C51的双机通信。其中一个单片机P1口外接8个按键(事实上可以用拨码开关来代替,但Proteus中没有这个器件的仿真模型),第二个单片机P2口外接8个LED灯,使用双机串口通信将第一个单片机的拨码开关的状态发送到第二个,并在第二个单片机的LED灯上显示出相应状态。 
我们取两机串口都工作于方式1,由定时器T1和SMOD控制其波特率,设T1工作于定时模式方式2,SMOD取0,取波特率为4800bit/s。则因为计算波特率公式 

波特率=2SMOD/32×f/(12×(28-X))
其中,f为单片机时钟频率,X为定时器初值。 
所以,我们可以得到T1计数初值为:FAH(此处为了精确,我们取f=11.0592MHz)。 
源文件如下所示: 
发送程序如下图: 

点击看大图
接收程序如下图: 

源文件编辑结束以后,将源文件保存为汇编文件,然后进行编译/汇编,并产生相应的源代码,准备用于仿真。 
下面我们来设计电路。首先在电路图中放置两片AT89C51芯片,并将它们的P3.0(RXD)和P3.1(TXD)引脚交叉相连。然后在片一的P1口连接8个按键;片二的P2口连接上8个LED。最终结果如下图所示: 

在进行仿真以前,我们需要来再熟悉一下Proteus的按键。 

802098453a82b23887947351.jpg
如上图所示,仿真时我们可以点击键帽,但当我们松开鼠标时,按键就弹开了;我们还可以点击键帽右侧的标有上下箭头的红黑色小圆圈,此时当我们松开鼠标时,键帽不会弹开,按键一直保持着按下的状态,只有当我们再次点击小圆圈时,键帽才会弹开,按键才会改变状态。此例我们就需要这种属性来根据要求进行我们的仿真。 
设计好电路图以后,我们就可以装入相应的程序了。注意装入程序时不要发生错误,要将相应的源代码装入相应的单片机。然后进行仿真,可以通过点击相应的按键来改变状态,进而观察到LED的状态。可以看到,串口通信得到了实现。仿真中的一个画面如上面电路图中的效果所示。 
例2.串口扩充并行IO口输出。单片机的串口扩充的8位并行IO口上外接8个LED,然后从串口输出数据实现8个LED左移2次,闪烁2次的循环。 
串口扩充并行口时,串口工作于方式0:同步移位寄存器方式,波特率固定,数据由RXD端输出,移位时钟由TXD送出。使用74LS164串入并出移位寄存器。 
本例源文件如下图: 

源文件编辑结束以后,将其保存为汇编文件,然后进行编译/汇编,并产生相应的源代码,准备用于仿真。 
然后我们来绘制电路图。电路图比较简单,如下图所示,此处不再详述。但有一点需要注意:此前的排阻不能使用了,因为那些都是多输入单输出,不能符合此例要求。 

此处我们换作另外一种8输入8输出的排阻(见上图中RN1),你可以在Proteus中用关键词“RX8”进行查找。设计好的电路图如上图所示。 
电路图设计好以后,我们就可以将上面产生的代码装入单片机了。装入以后进行仿真,仿真中的一个画面也可以从上图看到。 
  • 上一篇: 8
  • 下一篇: 6

文章评论0条评论)

登录后参与讨论
我要评论
0
3
1
2
3
4
5
6
7
8
9
0
关闭 站长推荐上一条 /4 下一条