1 / 64

本章学习目标 : 了解并行通信与串行通信的含义 理解波特率的概念,学会波特率的计算方法 能按要求正确设置特殊功能寄存器 SCON 和 PCON 的 SMOD 位

第 5 章 串行口与通信. 本章学习目标 : 了解并行通信与串行通信的含义 理解波特率的概念,学会波特率的计算方法 能按要求正确设置特殊功能寄存器 SCON 和 PCON 的 SMOD 位 能区分串行口的 4 种工作方式, 熟悉方式 1 、方式 2 、方式 3 程序的编制方法 知道 RS-232C 、 RS-422A 和 RS485 基本性能 理解双机通信和多机通信的基本过程 能读懂教材中的控制实例,学会编写同等难度的控制程序. 5.1串行通信的基础知识.

osgood
Télécharger la présentation

本章学习目标 : 了解并行通信与串行通信的含义 理解波特率的概念,学会波特率的计算方法 能按要求正确设置特殊功能寄存器 SCON 和 PCON 的 SMOD 位

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第5章 串行口与通信 • 本章学习目标 : • 了解并行通信与串行通信的含义 • 理解波特率的概念,学会波特率的计算方法 • 能按要求正确设置特殊功能寄存器SCON和PCON的SMOD位 • 能区分串行口的4种工作方式, 熟悉方式1、方式2、方式3 程序的编制方法 • 知道RS-232C、RS-422A和RS485 基本性能 • 理解双机通信和多机通信的基本过程 • 能读懂教材中的控制实例,学会编写同等难度的控制程序

  2. 5.1串行通信的基础知识 在实际应用中,80C51单片机经常要与外设进行信息交换;单片机与单片机之间或单片机与计算机之间往往也要交换信息,这些信息交换都可以称为通信。 数据通信的传输方式:并行通信和串行通信 并行通信:数据的各位同时送出。占用I/O多,速度快。 串行通信:数据的各位逐位送出。线路简单,速度慢。 传送数据1101 0010B时并行通信和串行通信的示意图。

  3. 5.1.1串行通信的制式 按照信息传送的方向,串行通信可分为3种制式。 1.单工制式 2.半双工制式 3.全双工制式

  4. 5.1.2串行通信的方式 串行通信有两种基本的通信方式:同步通信与异步通信。 1.异步通信(Asynchronous Communication) 在异步通信中,数据通常是以字符(或字节)为单位组成字符帧传送的。字符帧由发送端逐帧发送,接收端逐帧接收。发送端和接收端由各自的时钟来控制。这两个时钟源可以彼此独立、互不同步。 在帧格式中,一个字符由4个部分组成:起始位、二进制数据位、奇偶校验位和停止位。下图给出了典型的异步帧格式。

  5. 5.1.2串行通信的方式 2.同步通信(Synchronous Communication) 同步通信在发送一组数据时,只在开始用1~2个同步字符作为双方取得同步的号令,然后连续发送整组数据。不像异步通信那样将字符一个一个地分开来传送。格式下图所示。

  6. 5.1.3串行通信的传输速率 所谓传输速率就是指每秒传输多少位,传输速率也称波特率(bps)。 如果数据传送的速率是120帧/秒,每个帧包含10位,则波特率为 10×120=1200 bps,于是每位传送的时间 T=1/1200=0.833ms 标准波特率系列为110、300、600、1200、1800、2400、4800、9600和19200bps。

  7. 5.1.4调制解调器(MODEM 又称猫) 在进行远程异步串行数据通信时,二进制的数据位在传输时会出现畸变,可以利用调制解调器解决这个问题。 利用调制解调器进行数据远距离串行通信的过程如下图所示。

  8. 5.2串行口的基本结构和工作方式 5.2.1串行口的基本组成 发送缓冲器SBUF只能写入不能读出。 全双工的串行通信口,可同时接收和发送。 接收和发送缓冲器SBUF在物理上共用一个地址99H。 接收缓冲器SBUF只能读出不能写入。

  9. 5.2.2串行口的特殊功能控制寄存器 与串行口有关的特殊功能寄存器有SBUF、SCON、PCON,与串行口中断有关的特殊功能寄存器有IE、IP. 1.串行口发送/接收缓冲器SBUF(99H) 2.串行口控制寄存器SCON SCON的各位的定义和功能如下:

  10. SM0、SM1: 串行口工作方式选择位(内容见5.2.3节)。 • SM2: 多机通信控制位。具体用法见5.3.3节。 • REN: 串行接收允许位。由软件置1或清0。软件置1时,串行口允许接收,清0后禁止接收。 • TB8: 在方式2和方式3中是发送的第9位数据。 • RB8: 在方式2和方式3中是接收的第9位数据。 • TI: 发送中断标志位。发送结束时由硬件置位。该位必须用软件清零。 • RI: 接收中断标志位。结束接收时由硬件置位。该位必须用软件清零。

  11. 3.电源控制寄存器PCON 串行口借用了电源控制寄存器PCON的最高位。PCON是8位寄存器,字节地址为87H,不可进行位寻址。它的低4位全部用于80C51/80C31子系列单片机的电源控制。只有最高位SMOD位用于串行口波特率系数的控制。当SMOD=l时,方式1、2、3的波特率加倍,否则不加倍。PCON的格式如下:

  12. 5.2.3串行口的四种工作方式 80C51单片机串行口有4种工作方式,用特殊功能寄存器SCON中的SM0、 SM1两位进行设定,见表5-1。

  13. 1.方式0 (1)特点 用于串行I/O口扩展,有固定的波特率,为fOSC/12。 同步发送/接收功能,由TXD提供移位脉冲,RXD用作数据输入/输出通道。 发送接收8位数据,低位在前,高位在后。(2)发送操作由指令MOV SBUF,A 启动发送操作,发送时由TXD输出移位脉冲,RXD发送SBUF中的数据。发送完8位数据后,TI自动置1,请求中断。要继续发送时,TI必须由指令清0(CLR TI)。(3)接收操作在RI=0的前提下,用指令置REN=1,可以启动一帧数据的接收。同样由TXD输出移位脉冲,由RXD接收串行数据。接收完一帧RI自动置1,请求中断。想继续接收时要用指令清除RI。

  14. 2.方式1 (1)特点 8位异步串行通信UART接口。 帧结构为10位,包括起始位0,8位数据位,1位停止位。 波特率由软件设置,由T1的溢出率决定。 (2)发送操作 由指令MOV SBUF,A 启动A中的数据从TXD端异步发送。发送完一帧数据后,TI自动置1,请求中断。要继续发送时,TI必须由指令清0(CLR TI)。 (3)接收操作 在RI=0的前提下,用指令置REN=1,启动一帧数据的接收。串行口采样RXD,当采样到1至0的跳变时,表明接到串行数据的起始位,开始接收一帧数据,直到停止位到来时,把停止位送到RB8中,此时RI自动置1,请求中断并通知CPU从SBUF中取走已接收到的数据 。想继续接收时要用指令清除RI。

  15. 3.方式2和方式3 方式2和方式3具有多机通信功能,两种方式除了波特率设置不同外,其余功能完全相同。 (1)特点 8位异步串行通信UART接口。帧结构为11位,包括起始位0,8位数据位,1位可编程位TB8/RB8,1位停止位。 方式2的波特率固定,由PCON中的SMOD位选择,当SMOD=0时,波特率为fOSC/64;当SMOD=1时,波特率为fOSC/32;SMOD位状态用软件设置。见表5-1。

  16. 3.方式2和方式3 (2)发送操作 发送操作前,用指令定义TB8(如作为奇偶校验位或地址/数据标志位),由指令MOV SBUF,A 将A中的数据送入SBUF后启动发送操作;在发送操作中,已定义的TB8位能自动加入待发送的8位数据之后构成第9位,这样组成的一帧完整数据自动从TXD端异步发送;发送完成后,TI自动置1,请求中断。要继续发送时,TI必须由指令清0(CLR TI)。 在多机通信的发送操作中,用TB8作地址/数据标志位。TB8=1,地址帧;TB8=0,数据帧。

  17. 3.方式2和方式3 • (3)接收操作 • 在RI=0的前提下,用指令置REN=1,启动一帧数据的接收,将接收数据的第9位送入RB8。该数据能否接收,要由SM2和RB8的状态决定: • SM2=0时,串行口不看RB8状态,无条件接收。 • SM2=1是多机通信方式,接收到的RB8是地址/数据标志位: • 若RB8=1,接收的信息是地址,此时RI自动置1,串行口接收发送来的数据。 • 若RB8=0,接收的信息是数据。对于SM2=1的从机,RI不置1,此数据丢失;对于SM2=0的从机,SBUF自动接收发来的数据。

  18. 5.3串行通信的常用标准接口 80C51单片机常与其它51单片机或PC机进行串行通信。 80C51单片机串行接口的信号电平为TTL类型,抗干扰能力差,传输距离短。为了提高串行通信的可靠性,延长通信距离,工程设计人员一般采用标准串行接口,如RS-232C、RS-422A和RS-485等。这三种接口最初都是由美国电子工业协会(EIA)制订并发布的。

  19. 5.3.1 RS-232C接口 RS-232C(又称 EIA RS-232-C)是目前PC机与通信工业中应用最广泛的一种串行接口。图5-7是利用RS-232C通过电话网实现远程通信的示意图。 图5-7 RS-232C通过电话网实现远程通信的示意图

  20. 1.接口信号 RS-232C是EIA在1969年推出的。全名是“数据终端设备DTE(如计算机和各种终端机)和数据通讯设备DCE(如调制解调器MODEM)之间串行二进制数据交换接口技术标准”。它适合于数据传输速率在0~20 000bps范围内的通信。 图5-8 RS-232C串口结构

  21. 目前较为常用的RS-232C有9针串口(DB9)和25针串口(DB25),结构分别如图5-8所示。在保证通信准确性的前提下,如果通信距离较近 (小于12米),可以用电缆线直接连接,图5-9是这种连接方式的示意图;若距离较远,需附加调制解调器(MODEM),见图5-7。 图5-9 近程通信示意图

  22. 实际上DB25中有许多引脚很少使用,在计算机与终端通讯中一般只使用3-9条引线。最常用的9条引线的信号内容见表5-2所示。最为简单且常用的是三线制接法,即地、接收数据和发送数据三脚相连。传输线采用屏蔽双绞线。如图5-10 所示。 图5-10 RS-232C串口结构

  23. 表5-2 DB9和DB25的常用信号脚说明

  24. 2.逻辑电平 • RS-232C是早期为促进公用电话网络进行数据通信而制定的标准。它采用负逻辑,即 • -3V~-15V规定为“1”; • +3V~+15V规定为“0”; • -3V~+3V为过渡区,不做定义。

  25. 3.电平转换芯片与接口电路 RS-232C信号的电平和单片机串口信号的电平不一致,必须进行二者之间的电平转换。常用芯片有MC1488(TTL转换成RS-232C信号)、MC1489(RS-232C信号转换成TTL)等。另一种常用的集成电平转换芯片MAX232可以实现RS-232C/TTL电平的双向转换,它只使用单一的+5V电源供电,配接4个1μF电解电容即可完成RS-232电平与TTL电平之间的转换。其原理图如图5-11所示。转换完毕的串口信号TXD、RXD直接和80C51的串行口连接。

  26. 图5-11 电平匹配原理图 注:1.为提高电路抗干扰能力,C1~C4要用钽电容1.0μF/16V,且尽 量靠近MAX232; 2. MAX232对噪声很敏感,在VCC与GND之间加C5=0.1μF,起去耦作用

  27. 5.3.2 RS-485接口 1.性能特点 RS-485以良好的抗噪声干扰性,长距离传输特性和多站能力等优点成为首选的串行接口。表现为: 接口信号电平比RS-232C低(±1.5V~±6V),不易损坏接口电路芯片,且该电平与TTL电平兼容,可方便与TTL 电路连接。 RS-485传输数据的速度较快,最高速率达到10Mbps 。 采用平衡驱动器和差分接收器的组合,抗共模干扰能力增强,即抗噪声干扰性能好。 最大传输距离标准值为4000英尺,折合1219米,实际上可达 3000米。 RS-485接口允许在总线上同时连接32个发送器和32个接收器,即具有多站能力,这样用户可以利用单一的RS-485接口方便地建立起设备网络。 因RS-485接口组成的半双工网络一般只需二根连线,所以RS-485接口均采用屏蔽双绞线传输。RS-485接口连接器采用DB9的9芯插头座。与智能终端RS-485接口采用DB9(孔);与键盘连接的键盘接口RS-485采用DB9(针)。

  28. 2、与其它标准接口的对照 表5-3 列出了RS-485与其它标准接口的对照表

  29. 5.4串行口应用与训练 5.4.1应用指导 1.串行通信中的常用波特率 80C51的四种工作方式中,方式0和方式2的波特率固定,见表5-1和方式0、方式2的特点。方式1和方式3的波特率可变,其具体数值由定时器T1的溢出率和SMOD位共同决定,公式见表5-1。 定时器T1作波特率发生器时,为了防止溢出中断,应保持T1为中断禁止状态。表5-4列出了T1的常用波特率。

  30. 表5- 4 T1的常用波特率

  31. 2.利用串行口扩展I/O口 80C51单片机串行口方式0为同步移位寄存器方式,可进行8位并行I/O口的扩展。当串行口别无它用时,可通过使用串行输入并行输出移位寄存器(如74LS164)扩展并行输出口;或使用并行输入串行输出移位寄存器(如74LS165)扩展并行输入口。这种方法不占用片外RAM地址,而且还能简化单片机系统的硬件结构。但缺点是操作速度较慢,且扩展芯片越多,速度越慢。 图5-12是利用一片74LS165扩展8位并行输入口的实用电路。当移位/置入端S/由“1”变为“0”时,并行输入端的数据被置入寄存器。当S/=1,且时钟禁止端(15脚)接地时,在时钟脉冲的作用下,数据由QA向QH方向(即D7→D0)移动。

  32. 图5-12 利用一片74LS165扩展8位并行输入口电路 图中RXD(P3.0)作为80C51的串行输入端与74LS165的串行输出端相连,TXD(P3.1)为移位脉冲输出端,与74LS165芯片的移位脉冲输入端连接,用一根I/O口线P1.0与74LS165芯片的S/相连来控制移位与置位过程。 注:图中74LS165的SIN引脚为串行输入端,用于两片74LS165的串行扩展连接。

  33. 3.串行通信编程基础 (1)串行口初始化编程 串行口初始化应该包括对SCON、PCON和T1的初始化。对T1的初始化又包含TMOD寄存器初始化(将T1设置为波特率发生器)、根据波特率求时间常数并对TH1和TL1赋值、启动T1等过程,串口初始化格式如下,其中加括号的指令可根据情况选择使用: SIO:MOV SCON,#控制状态字 ;写方式字且TI=RI=0 (MOV PCON,#80H) ;波特率加倍 (MOV TMOD,#20H ) ;T1作波特率发生器 ( MOV TH1,#X ) ;选定波特率 ( MOV TH1,#X ) ( SETB TR1) ;启动T1 ( SETB EA) ;开串行口中断 ( SETB ES)

  34. (2)发送程序 发送程序可以采用中断和查询两种方式设计。 查询方式: TRAM: MOV A,@R0 ;取数据 MOV SBUF,A ;发送一个字符 WAIT: JBC TI,NEXT ;等待发送结束 SJMP WAIT NEXT: INC R0 ;准备下一次发送 SJMP TRAM

  35. 中断方式: ORG 0023H ;串行口中断入口 AJMP SINT MAIN: … ;初始化编程 TRAM: MOV A,@R0 ;取数据 MOV SBUF,A ;发送第一个字符 SJMP $ ;其它工作 SINT:CLR TI ;中断服务程序 INC R0 MOV A,@R0 ;取数据 MOV SBUF,A ;发送下一个字符 RETI

  36. (3)接收程序 与发送相类似,接收也可以采用中断和查询两种方式设计。 当REN=1、RI=0时80C51处于等待接收状态;一旦检测到RI=1,80C51开始从SBUF读取数据。 查询方式: WAIT: JBC RI,NEXT ;查询等待 SJMP WAIT NEXT: MOV A,SBUF ;读取接收数据 MOV @R0,A ;保存数据 INC R0 ;准备下一次接收 SJMP WAIT

  37. 5.4.2 基本训练 1.初始化训练 要求:某80C51单片机通信系统,晶振频率为12MHz,要求串行口发送8位数据,波特率1200bmp,请编写它的初始化程序。 思路与计算:要选择串行口和定时器T1的工作方式,计算时间常数并赋值给TH1、TL1。我们可以利用表5- 1中求波特率的公式:

  38. 初始化程序: MOV SCON,#40H ;串口工作于方式1 MOV PCON,#80H ;SMOD=1 MOV TMOD,#20H ;T1 作定时器,工作于方式2 MOV TH1,#0CCH ;装入时间常数初值 MOV TL1 ,#0CCH ;自动重装时间常数 CLR ET1 ;禁止T1中断 SETB TR1 ;启动T1波特率发生器 总结:用上述公式计算出的波特率不为整数,近似取整后,波特率也就不能精确地等于1200bps。但在异步传送中,每接收一个字符实际上都要整步一次,因此这点微小误差并不影响收发。

  39. 2.串行传送训练 要求:利用80C51的串行口实现一个数据块的发送。设发送数据区首地址为58H,数据块长度(字节数)为10,串行口工作于方式1,波特率1200bps,晶振频率为11.0592MHz。 思路:串行口工作于方式1时,波特率要编程设定。通常使T1工作在方式2,当波特率取1200bps时,可以查表或计算时间常数初值,得0E8H(SMOD=0时)。 发送子程序TRAM清单: TRAM:MOV TMOD,#20H ;T1工作在方式2 MOV TH1,#0E8H ;装入时间常数初值 MOV TL1,#0E8H ;自动重装时间常数

  40. CLR ET1 ;禁止T1中断 SETB TR1 ;启动T1波特率发生器 MOV SCON,#40H ;串口工作于方式1 MOV PCON,#00H ;SMOD=0,该指令可不写 MOV R1,#58H ;数据发送区首址送R1 MOV R5,#10 ;发送长度送R5 LOOP:MOV A,@R1 ;发送一帧数据 MOV SBUF,A WAIT:JBC TI,NEXT ;发送等待,发完一帧转去NEXT SJMP WAIT NEXT:INC R1 ;准备取下一数据 DJNZ R5,LOOP ;数据块发完?未发完转LOOP RET ;发完,结束 <想一想> 发送等待时为什么不用“JB TI,NEXT”指令,而用“ JBC TI,NEXT”指令?

  41. 5.4.3 课题与实训10 串行输出控制彩灯 一.实训目的 1.熟悉74LS164的使用,掌握串行口的基本应用方法。 2.学习串行口的扩展技术,掌握串行口相关寄存器的设定方法。 3.掌握串行口扩展显示器的电路设计原理和编程方法 二.课题要求 利用一片AT89C51芯片,使之工作于方式0。在其串口扩展一片74LS164控制8个LED,要求使用建表方式,控制LED闪烁,其闪烁规律为:8个LED作左移2次,闪2次;右移2次,闪2次。闪烁间隔0.2秒。

  42. 三.背景知识 1.74LS164是串行输入并行输出移位寄存器,接在80C51的串行口,可以实现对8位并行数据的控制。 2.80C51与74LS164连接时,RXD(P3.0)作为串行输出与74LS164的数据输入端(1、2)相连,TXD(P3.1)作为移位脉冲输出与74LS164的时钟脉冲输入端(8)相连,74LS164的CLR端(9)通过电阻、电容接在电源和地上。

  43. 四.硬件电路 图5-13 串行输出控制彩灯硬件电路

  44. 五.软件设计(参考程序如下:) ORG 0000H AJMP MAIN ORG 0100H MAIN:MOV SCON,#00H;串口工作于方式0 START:MOV DPTR,#TABLE;指向TABLE表 LOOP:CLR A;清除A MOVC A,@A+DPTR;从TABLE表取数据 CJNE A,#05H,NEXT;取到结束码05H?没有跳到NEXT AJMP START;结束,重新开始 NEXT:CPL A;取到数据反相 MOV SBUF,A;向串口发送 LOOP1:JBC TI,LOOP2;发送结束?是,跳到LOOP2 AJMP LOOP1;没结束,再检测 LOOP2:ACALL DELAY;延时0.2秒 INC DPTR;指向下一地址 AJMP LOOP

  45. DELAY:MOV R7,#4 ;延时0.2S D1: MOV R6,#20 D2: MOV R5,#123 NOP DJNZ R5,$ DJNZ R6,D2 DJNZ R7,D1 RET TABLE:DB 01H,02H,04H,08H DB 10H,20H,40H,80H DB 01H,02H,04H,08H DB 10H,20H,40H,80H DB 00H,0FFH,00H,0FFH DB 80H,40H,20H,10H DB 08H,04H,02H,01H DB 80H,40H,20H,10H DB 08H,04H,02H,01H DB 00H,0FFH,00H,0FFH DB 05H END 六.总结与思考 1.74LS164无输出控制端,故串行输入过程中,输出端会不断地变化。所以一般应在74LS164和输出装置之间加接输出控制门,以保证串行输入结束后再输出数据。 2.如果不用建表方式,如何实现?

  46. 5.5 单片机串行口应用举例 5.5.1 单片机与显示器的串行通信 例:某车间拟设置一块生产进度显示板,显示当天已完成的产品数量(不超过256),所需的产量数据,要从主单片机传送到显示板,请帮助设计相应的传送程序。 分析与设计 该任务中,每当生产线上完成一台合格产品时,通过自动计数装置向主单片机外部中断输入端送出一个低电平“0”,作为请求中断信号;主单片机响应中断后,在中断服务程序中,将产量值(存放在50H中)加1,并通过串口将其送给显示板。 显示版接收主单片机送来的显示数据。显示板的CPU平时运行显示程序,显示当前的产量(产量数据存放在数据存储区50H单元中)。只有当显示板的串口接收到主单片机发来的显示数据时,才会因串口中断,转去执行中断服务程序,以便将新接收到的产量数据存放到50H单元中,再返回到主程序执行显示程序。

  47. 软件设计 1.主单片机 ⑴主程序 发送端的主程序要完成外部中断和串行口的初始化工作,然后等待外部中断。 ORG 0000H AJMP MAIN ORG 0013H AJMP SUBG ;中断入口 ORG 0100H MAIN:MOV 50H,#00H ;当天产量从0开始 MOV SP,#60H SETB IT1;采用边沿触发方式 MOV SCON,#40H;串口工作于方式1,禁止接收 MOV PCON,#00H;波特率不加倍 MOV TMOD,#20H;T1工作于方式2

  48. MOV TH1,#0E8H;波特率为1200bps MOV TL1,#0E8H SETB EX1;开中断 SETB EA;开中断 SETB TR1;打开波特率发生器 AJMP $;等待中断 ⑵中断服务子程序 当外部中断申请中断时,表示生产线上已完成一台成品,因此中断服务程序的任务就是将产量单元50H加1,并将加1后的数值从串口输出。程序如下: ORG 0200H SUBG:PUSH ACC INC 50H MOV A,50H MOV SBUF,A

  49. WAIT:JBC TI,NEXT SJMP WAIT NEXT:POP ACC RETI 2.显示板的CPU ⑴主程序 主程序的初始化部分与发送端基本相同,只是要将SCON的禁止接收改成允许接收。并且要一边执行显示程序,一边等待中断。显示程序从略,可参看第6章。 ORG 0000H AJMP MAIN ORG 0023H AJMP SUBG ;串口中断入口 ORG 0100H MAIN:MOV 50H,#00H ;当天产量从0开始 MOV SP,#60H

  50. MOV SCON,#50H;串口工作于方式1,允许接收 MOV PCON,#00H;波特率不加倍 MOV TMOD,#20H;T1工作于方式2 MOV TH1,#0E8H;波特率为1200bps MOV TL1,#0E8H SETB ES;开串口中断 SETB EA;开中断 SETB TR1;打开波特率发生器 WAIT:ACALL DISPLAY;转显示子程序 AJMP WAIT;等待中断

More Related