您好,欢迎来电子发烧友网! ,新用户?[免费注册]

当前位置:电子发烧友网 > 图书频道 > 电子 > 《单片机原理与应用》 > 第5章 MCS-51单片机内部资源

第3节 两台单片机数据互传

       5.3.1 硬件电路与工作原理

  1. 硬件电路

  图 5.12

  2. 工作原理

  单片机扫描到S1(P3.2)键合上后,即启动串行发送,将01H这个数发送给对方单片机,对方单片机收到数据后,再从P1口送出来显示。

  5.3.2 控制程序

  1. 程序流程图

图 5.13 串行发送程序流程                                        图 5.14 串行接收程序流程

  2. 控制程序

  ;发送程序段

  ORG 0000H

  LJMP MAIN

  ORG 0030H

  MAIN: MOV SCON,#40H ;串口初始化,设置工作方式1

  MOV PCON,#80H ;波特率加倍

  MOV TMOD,#20H ;定时器1工作在方式2

  MOV TH1,#0FDH ;设置波特率为9600

  SETB TR1

  LOOP: JB P3.2,$ ;判键是否合上?

  LCALL DELAY ;延时10MS去抖

  JB P3.2,LOOP

  MOV SBUF,#01H ;启动串行发送

  JNB TI,$ ;判断是否发送完毕?

  CLR TI

  SJMP $

  DELAY: MOV R3,#100

  DEL: MOV R4,#50

  DJNZ R4,$

  DJNZ R3,DEL

  RET

  END

  ;接收程序段

  ORG 0000H

  LJMP MAIN

  ORG 0030H

  MAIN: MOV SCON,#40H ;串口初始化,设置工作方式1

  MOV PCON,#80H ;波特率加倍

  MOV TMOD,#20H ;定时器1工作在方式2

  MOV TH1,#0FDH ;设置波特率为9600

  SETB TR1

  SETB REN ;允许接收

  LOOP: JB RI,$ ;判键是否合上?

  CLR RI ;延时10MS去抖

  MOV P1,SBUF

  SJMP $

  END

  5.3.3 源程序的编辑、编译、下载

  5.3.4 相关知识

  1. 单片机如何能收、发数据?

  MCS-51单片机内部有一个全双工的串行通信口,即串行接收和发送缓冲器(SBUF),这两个在物理上独立的接收发送器,既可以接收数据也可以发送数据。但接收缓冲器只能读出不能写入,而发送缓冲器则只能写入不能读出,它们的地址为99H。这个通信口既可以用于网络通信,亦可实现串行异步通信,还可以构成同步移位寄存器使用。如果在传行口的输入输出引脚上加上电平转换器,就可方便地构成标准的RS-232接口。下面我们分别介绍。

  (1) 基本概念

  1) 数据通信的传输方式

  常用于数据通信的传输方式有单工、半双工、全双工和多工方式。

  【单工方式】 : 数据仅按一个固定方向传送。因而这种传输方式的用途有限,常用于串行口的打印数据传输与简单系统间的数据采集。

  【半双工方式】:数据可实现双向传送,但不能同时进行,实际的应用采用某种协议实现收/发开关转换。

  【全双工方式】:允许双方同时进行数据双向传送,但一般全双工传输方式的线路和设备较复杂。

  【多工方式】: 以上三种传输方式都是用同一线路传输一种频率信号,为了充分地利用线路资源,可通过使用多路复用器或多路集线器,采用频分、时分或码分复用技术,即可实现在同一线路上资源共享功能,我们盛之为多工传输方式。

  2) 串行数据通信两种形式

  【异步通信】

  在这种通信方式中,接收器和发送器有各自的时钟,它们的工作是非同步的,异步通信用一帧来表示一个字符,其内容如下:一个起始位,仅接着是若干个数据位,见图5.15。

  【同步通信】

  同步通信格式中,发送器和接收器由同一个时钟源控制,为了克服在异步通信中,每传输一帧字符都必须加上起始位和停止位,占用了传输时间,在要求传送数据量较大的场合,速度就慢得多。同步传输方式去掉了这些起始位和停止位,只在传输数据块时先送出一个同步头(字符)标志即可。

  同步传输方式比异步传输方式速度快,这是它的优势。但同步传输方式也有其缺点,即它必须要用一个时钟来协调收发器的工作,所以它的设备也较复杂。

  图5.15

  3) 串行数据通信的传输速率

  串行数据传输速率有两个概念,即每秒转送的位数bps(Bit per second)和每秒符号数—波特率(Band rate),在具有调制解调器的通信中,波特率与调制速率有关。

  (2) MCS-51的串行口和控制寄存器

  1) 串行口控制寄存器

  MCS-51单片机串行口寄存器结构如图5.16所示。SBUF为串行口的收发缓冲器,它是一个可寻址的专用寄存器,其中包含了接收器和发送器寄存器,可以实现全双工通信。但这两个寄存器具有同一地址(99H)。MCS-51的串行数据传输很简单,只要向发送缓冲器写入数据即可发送数据。而从接收缓冲器读出数据即可接收数据。

  此外,从图中可看出,接收缓冲器前还加上一级输入移位寄存器,MCS-51这种结构目的在于接收数据时避免发生数据帧重叠现象,以免出错,部分文献称这种结构为双缓冲器结构。而发送数据时就不需要这样设置,因为发送时,CPU是主动的,不可能出现这种现象。

  图5.16串行口寄存器结构

  2) 串行通信控制寄存器

  在上一节我们已经分析了SCON控制寄存器,它是一个可寻址的专用寄存器,用于串行数据的通信控制,单元地址是98H,其结构格式如下:

  

  表5.6 SCON寄存器结构

  下面我们对各控制位功能介绍如下:

  ① SM0、SM1:串行口工作方式控制位。

  SM0,SM1 工作方式

  00 方式0

  01 方式1

  10 方式2

  11 方式3

  ② SM2:多机通信控制位。

  多机通信是工作于方式2和方式3,SM2位主要用于方式2和方式3。接收状态,当串行口工作于方式2或3,以及SM2=1时,只有当接收到第9位数据(RB8)为1时,才把接收到的前8位数据送入SBUF,且置位RI发出中断申请,否则会将接受到的数据放弃。当SM2=0时,就不管第位数据是0还是1,都难得数据送入SBUF,并发出中断申请。

  工作于方式0时,SM2必须为0。

  ③ REN:允许接收位。

  REN用于控制数据接收的允许和禁止,REN=1时,允许接收,REN=0时,禁止接收。

  ④ TB8:发送接收数据位8。

  在方式2和方式3中,TB8是要发送的——即第9位数据位。在多机通信中同样亦要传输这一位,并且它代表传输的地址还是数据,TB8=0为数据,TB8=1时为地址。

  ⑤ RB8:接收数据位8。

  在方式2和方式3中,RB8存放接收到的第9位数据,用以识别接收到的数据特征。

  ⑥ TI:发送中断标志位。

  可寻址标志位。方式0时,发送完第8位数据后,由硬件置位,其它方式下,在发送或停止位之前由硬件置位,因此,TI=1表示帧发送结束,TI可由软件清“0”。

  ⑦ RI:接收中断标志位。

  可寻址标志位。接收完第8位数据后,该位由硬件置位,在其他工作方式下,该位由硬件置位,RI=1表示帧接收完成。

  3) 电源管理寄存器PCON

  PCON主要是为CHMOS型单片机的电源控制而设置的专用寄存器,单元地址是87H,其结构格式如下:

  

  表5.7 PCON电源管理寄存器结构

  在CHMOS型单片机中,除SMOD位外,其他位均为虚设的,SMOD是串行口波特率倍增位,当SMOD=1时,串行口波特率加倍。系统复位默认为SMOD=0。

  4) 中断允许寄存器IE

  中断允许寄存器在前一节中已阐述,这里重述一下对串行口有影响的位ES。ES为串行中断允许控制位,ES=1允许串行中断,ES=0,禁止串行中断。

  表5.8 IE中断允许控制寄存器结构

  2. 单片机怎样通过程序控制收发数据?

  串口程序的编制和定时、计数器以及中断程序编制一样,首先也应该初始化,

  (1) 先设定SCON,设定好串口工作方式

  如:任务程序中的 MOV SCON,#40H 设定串口工作方式一。

  (2) 如果用到中断的,还必须设定IE或IP。

  如:任务中的接收程序可以改成:

  ……

  ORG 0023H

  LJMP P_JS

  ORG 0030H

  ……

  SETB EA

  SETB ES

  P_JS: CLR RI

  ……

  RETI

  (3) 然后设定波特率,即根据工作方式设置定时计数器T1、以及PCON寄存器。

  如任务中的 MOV PCON,#80H ;波特率加倍

  MOV TMOD,#20H ;定时器1工作在方式2

  MOV TH1,#0FDH ;设置波特率为9600

  值得注意的是,由于串行发送、接收标志不能硬件自动清除,所以,不管是中断方式还是查询方式编程时都必须用软件方式清除TI、RI。