




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、1,第七章 89C51串行口及串行通信技术,7.1 串行通信基本知识 7.2 串行口及应用 7.3 RS-232C标准接口总线及串行通信硬件设计 7.4 89C51与89C51点对点异步通信 7.5 89C51与PC机间通信软件的设计 7.6 PC机与多个单片机间的通信,2,7.0 绪,如 89C51与存储器, 存储器与存储器, 89C51与并行打印机之间的通信。 89C51处理8位数据,至少需要8条数据线。 计算机之间、计算机与其终端之间的距离有时 非常远,此时,电缆线过多是不经济的,数据传送:并行方式,3,串行通信只用一位数据线传送数据的位信号,即使加上几条通信联络控制线,也用不了很多电缆
2、线。 串行通信适合远距离数据传送,如大型主机与其远程终端之间、处于两地的计算机之间采用串行通信就非常经济。 串行通信要求有转换数据格式、时间控制等逻辑电路,这些电路目前已被集成在大规模集成电路中(称为可编程串行通信控制器),使用很方便。,7.0 绪,数据传送:串行方式,4,本章将介绍89C51串行口的结构及应用, 一台PC机控制多台89C51前沿机的分布式系统, 通信接口电路和软件设计,并给出设计实例,包括接口电路、程序框图、主程序和接收/发送子程序。,7.0 绪,5,7.1 串行通信基本知识,7.1.1 数据通信 7.1.2 串行通信的传输方式 7.1.3 异步通信和同步通信 7.1.4 串
3、行通信的过程及通信协议,6,7.1.1 数据通信,通信 CPU与外设之间进行信息交换, 多台计算机之间也往往要交换信息, 所有这些信息交换均可称为通信。 通信方式有两种-并行通信和串行通信。,7,7.1.1 数据通信,通常根据信息传送的距离决定采用哪种通信方式。 例如,PC机与外部设备(如打印机等)通信时,如果距离小于30m,可采用并行通信方式;当距离大于30m时,则要采用串行通信方式。 89C51单片机具有并行和串行二种基本通信方式。,8,并行通信 数据的各位同时进行传送(发送或接收)的通信方式。 优点 传送速度快; 缺点 数据有多少位,就需要多少根传送线。 并行通信在位数多、传送距离又远时
4、不合适,7.1.1 数据通信,9,串行通信 数据是一位一位按顺序传送的通信方式。 优点 只需一对传输线(利用电话线就可作为传输线),大大降低了传送成本,适用远距离通信; 缺点 传送速度较低。 设并行传送N位数据所需时间位T,那么串行传送的时间至少为NT,实际上总是大于NT的。,7.1.1 数据通信,10,11,7.1.2 串行通信的传输方式,串行通信的传送方式通常有三种: 单向(或单工) 半双向(或半双工) 全双向(全双工),12,7.1.2 串行通信的传输方式,单向(或单工): 只允许数据向一个方向传送 半双向(或半双工): 允许数据向两个方向中的任一方向传送,但每次只能有一个站点发送 全双
5、向(全双工): 允许同时双向传送数据,因此,全双工配置是一对单向配置,它要求两端的通信设备都具有完整和独立的发送和接受能力。,13,串行通信中的数据传送方式,14,7.1.3 异步通信和同步通信,串行通信两种基本方式:异步通信和同步通信 1、异步通信 数据是一帧一帧(包括一个字符代码或一字节数据)传送的,每一帧的数据格式如图所示,15,图 异步通信数据格式,16,1、异步通信,在帧格式中,一个字符由四个部分组成: 起始位、数据位、奇偶校验位、停止位 首先是一个起始位(0), 然后是5位-8位数据(规定低位在前,高位在后), 接下来是奇偶校验位(可省略), 最后是停止位(1)。,17,1、异步通
6、信,起始位(0):信号只占用一位,用来通知接收设备一个待接收的字符开始到达。线路上在不传送字符时应保持为1。接收端不断检测线路的状态,若连续为1以后又测到一个0,就知道发来一个新字符, 应马上准备接收。字符的起始位还被用作同步接收端的时钟,以保证以后的接收能正确进行。 数据位:起始位后面紧接着是数据位,它可以是5位、6位、7位或8位。,18,1、异步通信,奇偶校验(D8):只占一位,但在字符中也可以规定不用奇偶校验位,则这一位就可省去。也可用这一位(1/0)来确定这一帧中的字符所代表信息的性质(地址/数据等)。 停止位:用来表征字符的结束,它一定是高电位(逻辑1)。停止位可以是1位、1.5位或
7、2位。接收端收到停止位后,知道上一字符已传送完毕,同时,也为接收下一个字符做好准备-只要再接收到0,就是新的字符的起始位。若停止位以后不是紧接着传送下一个字符,则使线路电平保持为高电平(逻辑1)。,19,例如,规定用ASCII编码,字符为七位,加一个奇偶校验位、一个起始位、一个停止位,则一帧共十位。,1、异步通信,20,2、同步通信,在数据开始传送前用同步字符来指示(常约定1个-2个),并由时钟来实现发送端和接收端同步,即检测到规定的同步字符后,下面就连续按顺序传送数据,直到通信告一段落。 同步传送时,字符与字符之间没有间隙,也不用起始位和停止位,仅在数据块开始时用同步字符SYNC来指示,其数
8、据格式如图所示。,21,图 同步通信数据格式,22,2、同步通信,同步字符的插入可以是单同步字符方式或双同步字符方式,如图所示,然后是连续的数据块。同步字符可由用户约定。按同步方式通信时,先发送同步字符,接收方检测到同步字符后,即准备接收数据。 在同步传送时,要求用时钟来实现发送端与接收端之间的同步。为了保证接收正确无误,发送方除了传送数据外,还要同时传送时钟信号。 同步传送可以提高传输速率(达56kb/s或更高),但硬件比较复杂。,23,3、波特率(Baud rate),波特率,即数据传送速率,表示每秒钟传送二进制代码的位数,它的单位是b/s。 波特率对于CPU与外界的通信是很重要的。 假设
9、数据传送速率是120字符/s,而每个字符格式包含10个代码位(1个起始位、1个终止位、8个数据位)。这时,传送的波特率为: 10b字符120字符s1200bs,24,3、波特率(Baud rate),每一位代码的传送时间Td为波特率的倒数。 Td1b(1200bs-1)0.833ms 异步通信的传送速率在50b/s-19200b/s之间,常用于计算机到终端机和打印机之间的通信、直通电报以及无线电通信的数据发送等。,25,7.1.4 串行通信的过程及通信协议,1、串并转换与设备同步 两个通信设备在串行线路上成功地实现通信必须解决两个问题: 一是串并转换, 即如何把要发送的并行数据串行化,把接收的
10、 串行数据并行化; 二是设备同步, 即同步发送设备与接收设备的工作节拍,以 确保发送数据在接收端被正确读出。,26,(1)串并转换 串行通信是将计算机内部的并行数据转换成串行数据,将其通过一根通信线传送;并将接收的串行数据再转换成并行数据送到计算机中。,27,在计算机串行发送数据之前,计算机内部的并行数据被送入移位寄存器并一位一位地输出,将并行数据转换成串行数据。如图所示。 在接收数据时,来自通信线路的串行数据被压入移位寄存器,满8位后并行送到计算机内部。 如图所示。 在串行通信控制电路中,串-并、并-串转换逻辑被集成在串行异步通信控制器芯片中。,28,29,30,(2)设备同步,进行串行通信
11、的两台设备必须同步工作才能有效地检测通信线路上的信号变化,从而采样传送数据脉冲。 设备同步对通信双方有两个共同要求: 一是通信双方必须采用统一的编码方法; 二是通信双方必须能产生相同的传送速率。,31,采用统一的编码方法确定了一个字符二进制表示值的位发送顺序和位串长度,当然还包括统一的逻辑电平规定,即电平信号高低与逻辑1和逻辑0的固定对应关系。 通信双方只有产生相同的传送速率,才能确保设备同步,这就要求发送设备和接收设备采用相同频率的时钟。发送设备在统一的时钟脉冲上发出数据,接收设备才能正确检测出与时钟脉冲同步的数据信息。,32,2、串行通信协议,通信协议是对数据传送方式的规定,包括数据格式定
12、义和数据位定义等。 通信双方必须遵守统一的通信协议。串行通信协议包括同步协议和异步协议两种。 在此只讨论异步串行通信协议和异步串行协议规定的字符数据的传送格式。,33,2、串行通信协议,(1)起始位 通信线上没有数据被传送时处于逻辑1状态。 当发送设备要发送一个字符数据时,首先发出一个逻辑0信号,这个逻辑低电平就是起始位。 起始位通过通信线传向接收设备,接收设备检测到这个逻辑低电平后,就开始准备接收数据位信号。 起始位所起的作用就是设备同步,通信双方必须在传送数据位前协调同步。,34,2、串行通信协议,(2)数据位 当接收设备收到起始位后,紧接着就会收到数据位。 数据位的个数可以是5、6、7或
13、8。 89C51串行口采用8位或9位数据传送。这些数据位被接收到移位寄存器中,构成传送数据字符。在字符数据传送过程中,数据位从最低有效位开始发送,依次顺序在接收设备中被转换为并行数据。,35,2、串行通信协议,(3)奇偶校验位 数据位发送完之后,可以发送奇偶校验位。 奇偶校验用于有限差错检测,通信双方需约定已知的奇偶校验方式。如果选择偶校验,那么组成数据位和奇偶位的逻辑1的个数必须是偶数;如果选择奇校验,那么逻辑1的个数必须是奇数。,36,2、串行通信协议,(4)停止位 在奇偶位或数据位(当无奇偶校验时)之后发送的是停止位。 停止位是一个字符数据的结束标志,可以是1位,1.5位或2位的高电平。
14、接收设备收到停止位之后,通信线路上便又恢复逻辑1状态,直至下一个字符数据的起始位到来。,37,2、串行通信协议,(5)波特率设置 通信线上传送的所有位信号都保持一致的信号持续时间,每一位的信号持续时间都由数据传送速度确定,而传送速度是以每秒多少个二进制位来衡量的,这个速度叫波特率。 如果数据以300个二进制位每秒在通信线上传送,那么传送速度为300波特,通常记为300b/s。,38,2、串行通信协议,(6)挂钩(握手)信号约定 (见本章7.4节实例),39,7.2 串行口及应用,7.2.1 89C51串行口 7.2.2 89C51串行口的工作方式及应用,40,7.2.1 89C51串行口,1、
15、结 构 2、串行口控制字及控制寄存器 3、串行通信工作方式 4、波特率设计,41,1、结 构,引脚RXD(P3.0,串行数据接收端) 引脚TXD(P3.1,串行数据发送端) 内部有两个物理独立的接收、发送缓冲器SBUF,占用同一地址99H,可同时发送、接收数据。发送缓冲器只能写入,不能读出;接收缓冲器只能读出,不能写入。 串行发送与接收的速率与移位时钟同步。 89C51用定时器T1作为串行通信的波特率发生器,T1溢出率经2分频(或不分频)后又经16分频作为串行发送或接收的移位脉冲。移位脉冲的速率即是波特率。,42,图串行口内部结构示意简图,43,1、结 构,接收器是双缓冲结构,在前一个字节被从
16、接收缓冲器SBUF读出之前,第二个字节即开始被接收(串行输入至移位寄存器),但是,在第二个字节接收完毕而前一个字节CPU未读取时,会丢失移位寄存器的字节数据。 串行口的发送和接收都是以特殊功能寄存器SBUF的名义进行读或写的。当向SBUF发“写”命令时: MOV SBUF,A即是向发送缓冲器SBUF装载并开始由TXD引脚向外发送一帧数据,发送完便使发送中断标志位TI=1。,44,1、结 构,在满足串行口接收中断标志位RI(SCON.0)=0的条件下,置允许接收位REN(SCON.4)=1就会接收一帧数据进入移位寄存器,并装载到接收SBUF中,同时使RI=1。当发读SBUF命令时: MOV A,
17、SBUF便由接收缓冲器(SBUF)取出信息通过89C51内部总线送CPU。 对于发送缓冲器,因为发送时CPU是主动的,不会产生重叠错误,一般不需要用双缓冲器结构来保持最大传送速率。,45,2、串行口控制字及控制寄存器,89C51串行口是可编程接口,用到两个特殊功能寄存器: SCON(98H) PCON(87H)(电源控制寄存器)。 (1)SCON(98H) 89C51串行通信的方式选择、接收和发送控制以及串行口的状态标志等均由特殊功能寄存器SCON控制和指示,其控制字格式如图所示:,46,图 串行口控制寄存器SCON,47,2、串行口控制字及控制寄存器,SM0和SM1(SCON.7,SCON.
18、6)串行口工作方式选择位。两个选择位对应4种通信方式,如表7-1所示。其中,fosc是振荡频率。,48,2、串行口控制字及控制寄存器,SM2(SCON.5)多机通信控制位, 主要用于方式2和 方式3。 若置SM2=1,则允许多机通信。当一片89C51(主机)与多片89C51(从机)通信时,所有从机的SM2位都置1。主机首先发送的一帧数据为地址,即从机机号,其中第9位为1,所有的从机接收到数据后,将其中第9位装入RB8中。 各个从机根据收到的第9位数据(RB8中)的值来决定从机可否再接收主机的信息。若(RB8)0,说明是数据帧,则使接收中断标志位RI0,信息丢失;若(RB8)1,说明是地址帧,数
19、据装入SBUF并置RI1,中断所有从机,被寻址的目标从机清除SM2以接收主机发来的一帧数据。其他从机仍然保持SM21。,49,2、串行口控制字及控制寄存器,SM2(SCON.5)多机通信控制位, 主要用于方式2和方式3。 若SM2=0,即不属于多机通信情况,则接收一帧数据后,不管第九位数据是0还是1,都制RI=1,接收到的数据装SBUF。 根据SM2这个功能,可实现多个89C51应用系统的串行通信。 在方式1时,若SM2=1,则只有接收到有效停止位时,RI才置1,以便接收下一帧数据。在方式0时,SM2必须是0。,50,2、串行口控制字及控制寄存器,REN(SCON.4)允许接收控制位。 由软件
20、置1或清0,只有当REN1时才允许接收,相当于串行接收的开关; 若REN0,则禁止接收。 在串行通信接收控制过程中,如果满足RI0和REN1(允许接收)的条件,就允许接收,一帧数据就装载入接收SBUF中。,51,2、串行口控制字及控制寄存器,TB8(SCON.3)发送数据的第9位(D8)装入TB8中。 在方式2或方式3中,根据发送数据的需要由软件置位或复位。在许多通信协议中可用作奇偶校验位,也可在多机通信中作为发送地址帧或数据帧的标志位。 对于后者, TB81,说明该帧数据为地址; TB80,说明该帧数据为数据字节。 在方式0或方式1中,该位未用。,52,2、串行口控制字及控制寄存器,RB8(
21、SCON.2)接收数据的第9位。 在方式2或方式3中,接收到的第9位数据放在RB8位。 或是约定的奇/偶校验位, 或是约定的地址/数据标识位。 在方式2和方式3多机通信中,若SM21,如果RB8 1,说明收到的数据为地址帧。 在方式1中,若SM20(即不是多机通信情况),RB8中 存放的是已接收到的停止位。 在方式0中,该位未用。,53,2、串行口控制字及控制寄存器,TI(SCON.1)发送中断标志。 在一帧数据发送完时被置位。在方式0串行发送第8位结束或其他方式串行发送到停止位的开始时由硬件置位,可用软件查询。它同时也申请中断, TI置位意味着向CPU提供“发送缓冲器SBUF已空”的信息,C
22、PU可以准备发送下一帧数据。,串行口发送中断被响应后, TI不会自动清0,必须由软件清0。,54,2、串行口控制字及控制寄存器,RI(SCON.0)接收中断标志。 在接收到一帧有效数据后由硬件置位。在方式0中,第8位数据发送结束时,由硬件置位;在其他三种方式中,当接收到停止位中间时由硬件置位。RI1,申请中断,表示一帧数据接收结束,并已装入接收SBUF中,要求CPU取走数据。CPU响应中断,取走数据。RI也必须由软件清0,清除中断申请,并准备接收下一帧数据。,55,2、串行口控制字及控制寄存器,(2)PCON(87H) 电源控制寄存器PCON中只有SMOD位与串行口工作有关,如图所示,图 电源
23、控制寄存器PCON,56,2、串行口控制字及控制寄存器,SMOD(PCON.7)波特率倍增位。 在串行口方式1、方式2和方式3时,波特率和SMOD成正比,亦即当SMOD1时,波特率提高一倍。 复位时,SMOD0。,57,3、串行通信工作方式,根据实际需要,89C51串行口可设置4种工作方式,可有8位、10位或11位帧格式。 方式0以8位数据为一帧,不设起始位和停止位,先发送或接收最低位。其帧格式如下:,58,方式1以10位为一帧传输,设有1个起始位(0),8个数据位和1个停止位(1)。其帧格式为:,3、串行通信工作方式,59,3、串行通信工作方式,方式2和方式3以11位为1帧传输,设有1个起始
24、位(0),8个数据位,1个附加第9位和1个停止位(1)。其帧格式为: 附加第9位(D8)由软件置1或清0。发送时在TB8中,接收时送RB8中。,60,同步移位寄存器输入/输出方式,常用于扩展I/O口 RXD: 数据输入或输出端, TXD:输出移位时钟,作为外接部件的同步信号 这种方式不适用于两个89C51之间的直接数据通信,但可以通过外接移位寄存器来实现单片机的接口扩展。,(1)串行口方式0,61,图 方式0发送电路及时序,62,图 方式0接收电路及时序,63,74LS164可用于扩展并行输出口, 74LS165可用于扩展输入口。 在这种方式下,收/发的数据为8位,低位在前,无起始位、奇偶校验
25、位及停止位,波特率是固定的。,64,发送过程中,当执行一条将数据写入发送缓冲器SBUF(99H)的指令时,串行口把SBUF中8位数据以fosc/12的波特率从RXD(P3.0)端输出,发送完毕置中断标志TI=1。 方式0发送时序如图所示。写SBUF指令在S6P1处产生一个正脉冲,在下一个机器周期的S6P2处数据的最低位输出到RXD(P3.0)脚上;再在下一个机器周期的S3,S4,S5输出移位时钟为低电平,而在S6及下一个机器周期的S1,S2为高电平,就这样将8位数据由低位至高位一位一位顺序通过RXD线输出,并在TXD脚上输出fosc/12的移位时钟, 在“写SBUF”有效后的第10个机器周期的
26、S1P1将发送中断标志TI置位。,65,接收时,用软件置REN=1(同时,RI=0),即开始接收。 接收时序如图所示。 当使SCON中的REN=1(RI=0)时,产生一个正脉冲,在下一个机器周期的S3P1S5P2,从TXD(P3.1)脚上输出低电平的移位时钟,在此机器周期的S5P2对P3.0脚采样,并在本机器周期的S6P2通过串行口内的输入移位寄存器将采样值移位接收; 在同一个机器的S6P1到下一个机器周期的S2P2,输出移位时钟为高电平。于是,将数据字节从低位至高位一位一位地接收下来并装入SBUF中。在启动接收过程(即写SCON,清RI位)将SCON中的RI清0之后的第10个机器周期的S1P
27、1,RI被置位。这一帧数据接收完毕,可进行下一帧接收。,66,3、串行通信工作方式,(2)串行口方式1 真正用于串行发送或接收,为10位通用异步接口。TXD与RXD分别用于发送与接收数据。 收发一帧数据的格式为1位起始位、8位数据位、1位停止位,共10位。 (低位在前) 在接收时,停止位进入SCON的RB8,此方式的传送波特率可调。 串行口方式1的发送和接收时序如图所示,67,图 方式1发送和接收时序,68,数据从引脚TXD(P3.1)端输出。当执行数据写入发送缓冲器SBUF的命令时,就启动了发送器开始发送。 发送时的定时信号,也就是发送移位时钟(TX时钟),是由定时器T1送来的溢出信号经过1
28、6分频或32分频(取决于SMOD的值)而得到的,TX时钟就是发送波特率 方式1的波特率是可变的。发送开始的同时,SEND变为有效,将起始位向TXD输出;此后每经过一个TX时钟周期产生一个移位脉冲,并由TXD输出一个数据位; 8位数据位全部发送完后,置为位TI,并申请中断置TXD为1作为停止位,再经一个时钟周期,SEND失效。,方式1发送时:,69,数据从引脚RXD(P3.0)端输入。接收是在SCON寄存器中REN位置1的前提下,并检测到起始位(RXD上检测到10的跳变,即起始位)而开始的。 接收时,定时信号有两种(如图(b)所示): 一种是接收移位时钟(RX时钟),它的频率和传送波特率相同,也
29、是由定时器T1的溢出信号经过16或32分频而得到的; 另一种是位检测器采样脉冲,它的频率是RX时钟的16倍,即在一位数据期间有16位检测器采样脉冲,为完成检测,以16倍于波特率的速率对RXD进行采样。,方式1接收时:,70,为了接受准确无误,在正式接受数据之前,还必须判定这个10跳变是否是干扰引起的。为此,在这位中间(即一位时间分成16等份,在第7,第8及第9等份)连续对RXD采样三次,取其中两次相同的值进行判断。这样能较好地消除干扰的影响。当确认是真正的起始位(0)后,就开始接受一帧数据。当一帧数据接受完毕后,必须同时满足以下两个条件,这次接受才真正有效。,71,RI=0,即上一帧数据接收完
30、成时,RI=1发出的中断请求已被响应,SBUF中数据已被取走。由软件使RI=0,以便提供“接收SBUF已空”的信息。 SM2=0或收到的停止位为1(方式1时,停止位进入RB8),则将接收到的数据装入串行口的SBUF和RB8(RB8装入停止位),并置位RI;如果不满足,接收到的数据不能装入SBUF,这意味着该帧信息将会丢失。 值得注意的是,在整个接收过程中,保证REN=1是一个先决条件。只有当REN=1时,才能对RXD进行检测。,72,3、串行通信工作方式,(3)串行口方式2和方式3 两种方式操作是一样的,所不同的只是波特率。 每帧11位异步通信格式,即1位起始位,8位数据位(低位在前),1位可
31、编程的第9数据位和1位停止位。 发送时,第9数据位(TB8)可以设置为1或0,也可将奇偶位装入TB8,从而进行奇偶校验; 接收时,第9数据位进入SCON的RB8。 发送、接收时序如图所示。,73,图 方式2、方式3发送和接收时序,74,发送前,先根据通信协议由软件设置TB8(如作奇偶校验位或地址/数据标志位),然后将要发送的数据写入SBUF,即可启动发送过程。串行口能自动把TB8取出,并装入到第9位数据位的位置,再逐一发送出去。发送完毕,使TI=1。 接收时,使SCON中的REN=1,允许接收。当检测到RXD(P3.0)端有10的跳变(起始位)时,开始接收9位数据,送入移位寄存器(9位)。当满
32、足RI=0且SM2=0,或接收到的第9位数据为1时,前8位数据送入SBUF,附加的第9位数据送入SCON中的RB8,置RI为1;否则,这次接收无效,也不置位RI。,75,4、波特率设计,串行口的四种工作方式对应着三种波特率。 由于输入的移位时钟来源不同,因此,各种方式的波特率计算公式也不同。,76,方式0时,发送或接收一位数据的移位时钟脉冲由S6(即第6个状态周期,第12个节拍)给出,即每个机器周期产生一个移位时钟,发送或接收一位数据。因此,波特率固定为振荡频率的1/12,并不受PCON寄存器中SMOD位的影响。,图 串行口方式0波特率的产生,(1)方式0的波特率,77,方式0波特率 fosc
33、 / 12 注意,符号“”表示左面的表达式只是引拥右面表达式的数值,即右面的表达式是提供了一种计算的方法。,78,(2)方式2的波特率,SMOD=0时,波特率为fosc的1/64; SMOD=1时,波特率为fosc的1/32。 方式2波特率取决于PCON中SMOD位的值 波特率2SMOD/64fosc,图 串行口方式2波特率的产生,79,(3)方式1和方式3的波特率,方式1和方式3的移位时钟脉冲由定时器T1的溢出率决定 波特率由定时器T1的溢出率与SMOD值同时决定。 方式1、方式3波特率T1溢出率/n,图 串行口方式1、方式3波特率的产生,80,SMOD=0时,n=32 SMOD=1时,n=
34、16。 所以,可用下式确定方式1和方式3的波特率: 波特率 (T1溢出速率) 2SMOD/32 其中,T1溢出速率取决于T1的计数速率(计数速率fosc/12)和T1预置的处置。 若定时器T1采用模式1时,波特率公式如下:,波特率2SMOD/32(fosc/12)/(216-初值),81,表7-2 常用波特率与其他参数选取关系,表7-2列出了串行口方式1、方式3常用波特率及其初值。,82,定时器T1用作波特率发生器时,通常选用定时器模式2(自动重装初值定时器)比较实用。 要设置定时器T1为定时方式,计数速率为fosc/12 注意应禁止T1中断,以免溢出而产生不必要的中断。 先设定TH1和TL1
35、定时即输初值为X,那么每过“28-X”个机器周期,定时器T1就会产生一次溢出。,83,因此,T1溢出速率为 T1溢出速率(fosc/12)/(28-X) 于是,可得出定时器T1模式2的初始值X:,84,例7-1:89C51单片机时钟振荡频率为11.0592MHz,选用定时器T1工作模式2作为波特率发生器,波特率为2400b/s,求初值。 解:设置波特率控制为(SMOD)=0 所以,(TH1)=(TL1)=F4H。,85,系统晶体振荡频率选为11.0592MHz就是为了使初值为整数,从而产生精确的波特率。 如果串行通信选用很低的波特率,可将定时器T1置于模式0或模式1,即13位或16位定时方式;
36、但在这种情况下,T1溢出时,需要中断服务程序重装初值。中断响应时间和执行指令时间会使波特率产生一定的误差,可用改变初值的办法加以调整。,86,7.2.2 89C51串行口的应用,89C51串行口的四种工作方式传送的数据位数叙述如下: 方式0: 移位寄存器输入/输出方式。 串行数据通过RXD线输入或输出, TXD线专用于输出时钟脉冲给外部移位寄存器。 方式0可用来同步输出或接收8位数据(最低位首先输出),波特率固定为fosc/12,87,方式1:10位异步接收/发送方式。一帧数据包括1位起始位(0),8位数据位和1位停止位(1)。串行接口电路在发送时能自动插入起始位和停止位;在接收时,停止位进入
37、特殊功能寄存器SCON的RB8位。方式1的传送波特率是可变的,可通过改变内部定时器的定时值来改变波特率。 方式2:11位异步接收/发送方式。除了1位起始位、8位数据位、1位停止位之外,还可以插入第9位数据位。 方式3:同方式2,只是波特率可变。,7.2.2 89C51串行口的应用,88,1、串行口方式0的应用,方式0时是同步操作。外接串入并出或并入串出器件,可实现I/O的扩展。 数据传送可以采用中断方式,也可以采用查询方式。无论哪种方式,都要借助于TI或RI标志。 在串行口发送时,或者靠TI置位后引起中断申请,在中断服务程序中发送下一组数据;或者通过查询TI的值,只要TI为0就继续查询,直到T
38、I为1后结束查询,进入下一个字符的发送。 在串行口接收时,由RI引起中断或对RI查询来决定何时接收下一个字符。无论采用什么方式,在开始串行通信前,都要先对SCON寄存器初始化,进行工作方式的设置。,89,1、串行口方式0的应用,例7-2:用89C51串行口外接164串入并出移位寄存器扩展8位并行口;8位并行口的每位都接一个发光二极管,要求发光二极管从左到右以一定延迟轮流显示,并不断循环。设发光二极管为共阴极接法,如图所示。 解:设数据串行发送采用中断方式,显示的延迟通过调用延迟程序DELAY来实现。,90,程序清单: ORG 0023H ;串行口中断入口 AJMP SBR ;转入串行口中断服务
39、程序 ORG 2000H ;主程序起始地址 MOV SCON ,#00H ;串行口方式0初始化 MOV A ,#80H ;最左一位发光二极管先亮 CLR P1.0 ;关闭并行输出 MOV SBUF,A ;开始串行输出 LOOP : SJMP $ ;等待中断 SBR : SETB P1.0 ;启动并行输出 ACALL DELAY ;显示延迟一段时间 CLR TI ;清发送中断标志 RR A ;准备右边一位显示 CLR P1.0 ;关闭并行输出 MOV SBUF , A ;再一次串行输出 RETI ;中断返回,91,用方式0外加移位寄存器来扩展8位输出口时,要求移位寄存器带有输出控制,否则串行移位
40、过程也会反映到并行输出口;另外,输出口最好再接一个寄存器或锁存器,以免在输出门关闭使(STB=0)输出又发生变化。 用方式0加上并入串出移位寄存器可扩展一个8位并行输入口。移位寄存器必须带有预置/移位的控制端,由单片机的一个输出端子加以控制,以实现先由8位输入口置数到移位寄存器,然后再串行移位从单片机的串行口输入到接收缓冲器,最后再读入到CPU中。,92,例7-3: 用89C51串行口外加移位寄存器165或166扩展8位输入口,输入数据由8个开关提供,另有一个开关K提供联络信号。当K=0时,表示要求输入数据,输入的8位为开关量,提供逻辑模拟子程序的输入信号。如图所示。,74HC165并入串出寄
41、存器的shift端口,shift为1,允许把外部的数据置入到74hc165中,shift为0开始串行移位到单片机sbuf中,93,START: MOV SCON ,#10H ;串行口方式0初始化 JB P1.1 ,$ ;开关K未闭合,等待 SETB P1.0 ;并行置入数据? CLR P1.0 ;开始串行移位? JNB RI ,$ ;查询RI,完全移到sbuf后ri自动为1 CLR RI ;查询结束,清RI MOV A ,SBUF ;读数据到累加器 ACALL LOGSIM ;进行逻辑模拟 SJMP START ;准备下一次模拟,94,2、串行口方式1的发送和接收,例7-4:89C51串行口按
42、双工方式收发ASCII字符,最高位用来作奇偶校验位,采用奇校验方式,要求传送的波特率为1200b/s。编写有关的通信程序。 解: 7位ASCII码加1位奇校验共8位数据,采用串行口方式1。 奇偶校验位P是当累加器A中1的数目为奇数时,P=1。如果直接把P的值放入ASCII码的最高位,恰好成了偶校验,与要求不符。因此,要把P的值取反以后放入ASCII码最高位,才是要求的奇校验。,95,2、串行口方式1的发送和接收,设发送数据区的首地址为20H,接收数据区的首地址为40H,fosc为6MHz,通过查波特率初值(表7-2)可知定时器的初装值为F3H。定时器T1采用工作模式2,可以避免计数溢出后用软件
43、重装定时初值的工作。,96,主程序 MOV TMOD ,#20H ;定时器1设为模式2 MOV TL1 , #0F3H ;定时器初值 MOV TH1 ,#0F3H ;8位重装值 SETB TR1 ;启动定时器1 MOV SCON ,#50H ;设置为方式1, ;REN=1 MOV R0 ,#20H ;发送数据区首址 MOV R1 ,#40H ;接收数据区首址 ACALL SOUT ;先输出一个字符 SETB ES SETB EA SJMP $ ;等待中断,97,中断 ORG 0023H ;串行口中断入口 AJMP SBR1 ;转至中断服务程序 . ORG 0100H SBR1: JNB RI
44、,SEND ;TI=1,为发送中断 ACALL SIN ;RI=1,为接收中断 SJMP NEXT ;转至统一的出口 SEND: ACALL SOUT ;调用发送子程序 NEXT: RETI ;中断返回,98,发送子程序 SOUT: CLR TI MOV A ,R0 ;取发送数据到A MOV C ,P ;奇偶标识赋予C CPL C ;奇校验 MOV ACC.7, C INC R0 ;修改发送数据指针 MOV SBUF ,A ;发送ASCII码 RET ;返回,99,接收子程序 SIN: CLR RI MOV A ,SBUF ;读出接收缓冲区内容 MOV C ,P ;取出校验位 CPL C ;奇
45、校验 ANL A ,#7FH ;删去校验位 MOV R1 ,A ;读入接收缓冲区 INC R1 ;修改接收数据指针 RET ;返回,100,在主程序中已初始化REN=1,则允许接收。 以上程序基本上具备了全双工通信的能力,但不能说很完善。例如,在接收子程序中,虽然检验了奇偶校验位,但没有进行出错处理;另外,发送和接收数据区的范围都很有限,也不能满足实际需要。但有了一个基本的框架之后,逐渐完善还是可以做到的。,101,2、串行口方式1的发送和接收,例7-5: 采用查询方式由串行口发送带奇偶校验位的数据块。 由内部RAM单元20H-3FH取出ASCII码数据,在最高位上加奇偶校验位后由串行口发出。
46、 采用8位异步通信方式,波特率为1200b/s,fosc=11.059MHz。 由要求可知,应把串行口设置为方式1,采用定时器1模式2作为波特率发生器,预置值(TH1)=0E8H。,102,主程序; MOV TMOD ,#20H ;设置定时器1为模式2 MOV TL1 ,#0E8H ;初值,波特率为1200b/s MOV TH1 ,#0E8H SETB TR1 ;启动T1运行 MOV SCON ,#01000000B ;设置串行口为方式1 MOV R0 ,#20H MOV R7 ,#32 ;数据块长度 LOOP: MOV A ,R0 ACALL SP-OUT JNB P ,ERROR ;传输出
47、错处理,由SP-OUT中“CPL C”结果决定 INC R0 DJNZ R7 ,LOOP ,103,串行口发送子程序(奇校验) SP-OUT: MOV C ,PSW.0 ;设置奇校验位,校验位P=1为奇校验 CPL C ;奇校验(无此指令位偶校验) MOV ACC.7 ,C ;ACC.7补0或1 MOV SBUF ,A ;启动串行口发送过程 JNB TI, $ CLR TI ;清TI标志,允许在发送 RET ERROR: (略),104,例7-6:由串行口接收带奇偶校验位的数据块。 解:采用查询方式,本例与上例相呼应,接收器把接收到的32B数据存放在20H-3FH单元内,波特率同上,若奇校验出
48、错,则置进位位为1。 程序清单:,105,主程序; MOV SCON ,#01010000B ;设串口方式1,允许接收 MOV TMOD ,#20H ;设置定时器T1为模式2 MOV TL1 ,#0E8H ;初值,波特率为1200b/s MOV TH1 ,#0E8H SETB TR1 ;启动T1运行 MOV R0 ,#20H MOV R7 ,#32 ;数据块长度 LOOP: ACALL SP-IN ;调接收一帧子程序 JC ERROR ;由SP-IN中“CPL C”结果决定 MOV R0 ,A ;存放接收的数据 INC R0 DJNZ R7 ,LOOP ,106,接收一帧子程序; SP-IN:
49、 JNB RI ,$ ;RI由硬件置位 CLR RI ;软件清除RI MOV A ,SBUF MOV C ,P ;检查奇校验位 CPL C ;置C为主程序“JC ERROR”用 ANL A ,#7FH ;去掉奇校验位 RET ERROR: (略),107,例7-7:利用串行口和堆栈技术发送字符串常量。 解: 上面两个例子中,发送和接收的都是一些变量数据,且存放在内部RAM单元中。现说明如何利用堆栈技术发送存放在程序存储器内的字符串常量。 下面的例子中,这些字符串是发送给CRT终端的,以回车符(CR)和换行符(LF)开始,以换码符(ESC)为结尾。下面是程序片断:,108,CR EQU 0DH
50、;ASCII回车符 LF EQU 0AH ;ASCII换行符 ESC EQU 1BH ;ASCII换码符 MOV TMOD ,#20H ;设置定时器T1为模式2 MOV TL1 ,#0FDH ;设波特率位9600b/s ;(fosc=11.059MHz) MOV TH1 ,#0FDH SETB TR1 ;启动T1运行 MOV SCON ,#01000000B ;设置串行口方式1 ACALL XSTRING DB CR ,LF DB NU字符串常量 DB ESC ,109,XSTRING: POP DPH ;把第1个字符的地址装入DPTR POP DPL XSTR-1: CLR A ;设偏移量为
51、零 MOVC A ,A+DPTR ;取第1个字符 XSTR-2: MOV SBUF ,A ;启动一帧发送过程 JNB TI ,$ ;等待发送一帧完 CLR TI INC DPTR ;指向下一字符 CLR A ;偏移量为0 MOVC A ,A+DPTR ;取下一字符 CJNE A ,#ESC ,XSTR-2 ;读到ESC符时, 停止发送 MOV A ,#1 JMP A+DPTR ;返回执行ESC符后 ;的一条指令,即接着 ;执行背景程序,110,说明:程序中采用了“ACALL XSTRING”指令,而实际上由XSTRING开始的程序段形式上并不构成一个子程序,因为子程序应由RET作为结尾。 采用
52、ACALL指令的目的在于利用子程序调用协议,即执行调用指令后,把一个单元(存放常量CR)的地址压入了堆栈。 这样,XSTRING段的第1,2条指令执行后,就把放置字符常量CR的单元地址置入DPTR了。 ESC后一个单元应是背景程序中送完字符串后要执行的那条指令,故执行完XSTRING程序段的最后2条指令,将继续执行背景程序。,111,3、串行口方式2、方式3的发送和接收,串行口方式 2与方式 3基本一样(只是波特率设置不同), 接收发送 11位信息:开始为1位起始位(0),中间8位数据位,数据位之后为1位程控位(由用户置SCON的TB8决定),最后是1位停止位(1)。只比方式1多了一位程控位。
53、,112,例7-8:用第9个数据位作奇偶校验位,编制串行口方式2的发送程序。 解:设计一个发送程序,将片内RAM 50H5FH中的数据串行发送;串行口设定为方式2状态,TB8作奇偶校验位。在数据写入发送缓冲器之前,先将数据的奇偶位P写入TB8,这时,第9位数据作奇偶校验用。 方式2发送程序流程图如图所示。,113,程序清单如下: TRT: MOV SCON ,#80H ;方式2设定 MOV PCON ,#80H ;取波特率为fosc/32 MOV R0 ,#50H MOV R7 ,#10H ;数据长度10HR7 LOOP: MOV A ,R0 ;取数据A MOV C ,PSW.0 ;PTB8
54、MOV TB8 ,C MOV SBUF ,A ;数据SBUF,启动发送 WAIT: JBC TI ,CONT ;判断发送中断标志 SJMP WAIT CONT: INC R0 DJNZ R7 ,LOOP RET,114,例7-9 编制一个串行口方式2接收程序,并核对奇偶校验位。 解: 根据上面介绍的特点,在方式2、方式3的发送过程中,将数据和附加在TB8中的奇偶位一块发向对方。因此,作为接收的一方应设法取出该奇偶位进行核对,相应的接收程序段为:,115,RRR: MOV SCON ,#90H ;选方式2,并允许接收(REN=1) LOOP: JBC RI ,RECEIV ;等待接收数据并清RI
55、 SJMP LOOP RECEIV: MOV A ,SBUF ;将接收到的字符取出后,送到ACC。注意, ;传送指令影响PSW, 产生接收端的奇偶值 JB PSW.0 ,ONE ;判断接收端的奇偶值 JB RB8 ,ERR ;判断发送端的奇偶值 SJMP RIGHT ONE: JNB RB8 ,ERR RIGHT: ;接收正确 ERR: ;接收有错,116,当接收到一个字符时,从SBUF转移到ACC中时会产生接收端的奇偶值,而保存在RB8中的值为发送端的奇偶值,两个奇偶值应相等,否则接收字符有错。发现错误要及时通知对方重发。,117,例7-10:编制一个发送程序,将片内RAM中50H5FH的数
56、据串行发送。串行口设定为工作方式2,TB8作奇偶校验位。 解:在数据写入发送SBUF之前,先将数据的奇偶标志P写入TB8,此时,第9位数据便可作奇偶校验用。可采用查询和中断两种方式发送。,118,(1)采用查询方式的程序段 ORG 0000H AJMP MAIN ;上电,转向主程序 ORG 0100H ;主程序 MAIN: MOV SCON ,#80H ;设工作方式2 MOV PCON ,#80H ;取波特率为fosc/32 MOV R0 ,#50H ;首址50H送R0 MOV R7 ,#10H ;数值长度送R7 LOOP: MOV A ,R0 ;取数据 MOV C ,PSW.0 ;PC MO
57、V TB8 ,C ;奇偶标志送TB8 MOV SBUF ,A ;发送数据 WAIT: JBC TI ,CONT AJMP WAIT ;等待中断标志TI=1 CONT: INC R0 DJNZ R7 ,LOOP ;数值尚未发送完, 继续发送下一个数据 SJMP $ END,119,(2)采用中断方式的程序段 ORG 0000H AJMP MAIN ;上电,转向主程序 ORG 0023H ;串行口的中断入口地址 AJMP SERVE ;转向中断服务程序 ORG 0100H ;主程序 MAIN: MOV SCON ,#80H MOV PCON ,#80H MOV R0 ,#50H MOV R7 ,#0FH ;中断方式中因为是先传一个数据,再进入中断 SETB ES ;允许串行口中断 SETB EA ;CPU允许中断 MOV A ,R0 MOV C ,PSW.0 ;PC MOV TB8 ,C MOV SBUF ,A ;发送第一个数据 SJMP $,120,SERVE: CLR TI ;清除发送中断标志 INC R0 ;修改数据地址 MOV A ,R0 MOV C ,PSW.0 ;PC MOV TB8 ,C MOV SBUF ,A ;发送
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 公司管理办法回复模板
- 公司作风效能管理办法
- 健康银行资产管理办法
- 医院感染管理体系职责
- 企业内训集体备课工作计划
- 债券分类评级管理办法
- 出差期间工作管理办法
- 农药废弃收购管理办法
- 关于道教寺庙管理办法
- 偏差电量考核管理办法
- 小号独奏名曲100首
- 电厂安全知识培训
- 中国冠心病康复循证实践指南(2024版)解读
- 火电工程达标投产考核标准(2024版)
- DB32T 4081-2021 沥青路面用熔融固化体集料通 用技术规范
- 知识产权承诺函模板
- 《区域分析与区域规划》教案
- 停车场数据分析与优化方案
- 2023年L1L2产数工程师产品经理认证考试题库
- 护理安全管理课件
- 能源中国学习通超星期末考试答案章节答案2024年
评论
0/150
提交评论