周国运单片机原理及应用(C语言版)7

上传人:Tomo****.明天 文档编号:240445763 上传时间:2024-04-11 格式:PPT 页数:89 大小:1.29MB
返回 下载 相关 举报
周国运单片机原理及应用(C语言版)7_第1页
第1页 / 共89页
周国运单片机原理及应用(C语言版)7_第2页
第2页 / 共89页
周国运单片机原理及应用(C语言版)7_第3页
第3页 / 共89页
点击查看更多>>
资源描述
单片机原理及应用单片机原理及应用(C语言版)语言版)第第7章章 MCS-51单片机串行口单片机串行口主主 编:编:周国运周国运本章本章制作:制作:鲁庆宾鲁庆宾中国水利水电出版社中国水利水电出版社第第7章章 MCS-51单片机串行口单片机串行口 目目 录录7.1 串行通信基本知识串行通信基本知识7.2 串行口结构及控制串行口结构及控制7.3 串行口工作方式串行口工作方式7.4 串行口应用举例串行口应用举例7.5 单片机与单片机与PC机通信的接口电路机通信的接口电路本章要点本章要点 本章主要讲述本章主要讲述MCS-51单片机串行口的单片机串行口的结构、工作原理以及应用结构、工作原理以及应用。主要内容包括串行通信基本知识、主要内容包括串行通信基本知识、MCS-51单片机串行口结构、串行口工作方式以及单片机串行口结构、串行口工作方式以及单片机与单片机与PC机通信的接口电路。机通信的接口电路。7.1 串行通信基本知识串行通信基本知识主要内容主要内容7.1.1 数据通信数据通信7.1.2 异步通信和同步通信异步通信和同步通信7.1.3 波特率波特率7.1.4 通信方向通信方向7.1.5 串行通信接口种类串行通信接口种类7.1.1 数据通信数据通信 计算机与外界的信息交换称为通信计算机与外界的信息交换称为通信。基本的通信。基本的通信方式有并行通信和串行通信两种。方式有并行通信和串行通信两种。1并行通信并行通信单位信息(通常指一个字节)的各位数据单位信息(通常指一个字节)的各位数据同时传同时传送送的通信方法称为并行通信。的通信方法称为并行通信。2串行通信串行通信单位信息的各位数据被分时单位信息的各位数据被分时一位一位依次顺序传一位一位依次顺序传送送的通信方式称为串行通信。的通信方式称为串行通信。7.1.1 数据通信数据通信图图7-1 并行通信示意图并行通信示意图两种通信特点两种通信特点:并行通信连线多,速度快,适合并行通信连线多,速度快,适合近距离近距离通信;通信;串行通信连线少,速度慢,适合串行通信连线少,速度慢,适合远距离远距离通信。通信。图图7-1 并行通信示意图并行通信示意图图图7-2 串行通信示意图串行通信示意图RXDTXD89C52GNDTXDRXDGND外外部部设设备备1异步通信异步通信异步通信中,传送的数据可以是一个异步通信中,传送的数据可以是一个字符字符代码或代码或一个一个字节字节数据,数据以数据,数据以帧帧的形式一帧一帧传送。的形式一帧一帧传送。7.1.2 异步通信和同步通信异步通信和同步通信图图7-3 异步通信的一帧数据格式异步通信的一帧数据格式0/1 0/10/10/1 0/1100/10/1 0/1 0/10/1 0/11停停止止位位起起始始位位8位数据位数据校校验验位位停停止止位位第第n个字符个字符00/1.始始位位0/1数据数据第第n+1个字符个字符空空闲闲位位2同步通信同步通信在同步通信中,每一数据块发送开始时,先发送在同步通信中,每一数据块发送开始时,先发送一个或两个同步字符一个或两个同步字符,使发送与接收取得同步,然,使发送与接收取得同步,然后再顺序发送数据。数据块的各个字符间后再顺序发送数据。数据块的各个字符间取消起始取消起始位和停止位位和停止位,所以通信速度得以提高,所以通信速度得以提高。7.1.2 异步通信和同步通信异步通信和同步通信图图7-4 同步通信数据帧格式同步通信数据帧格式7.1.3 波特率波特率在串行通信中,对数据传送速度有一定要求。在串行通信中,对数据传送速度有一定要求。波特率表示每秒传送的位数波特率表示每秒传送的位数,单位为,单位为b/s(记作波(记作波特)。特)。例如:数据传送速率为每秒钟例如:数据传送速率为每秒钟10个字符,若每个字符,若每个字符的一帧为个字符的一帧为11位,则传送波持率为:位,则传送波持率为:11b/字符字符10字符字符/s110b/s异步通信的传送速率一般在异步通信的传送速率一般在5019 200b/s之间之间。7.1.4 通信方向通信方向单工方式:单工方式:一对传输线只允许一对传输线只允许单方向单方向传送传送数据;数据;半双工方式:半双工方式:一对传输线允许向两个方向一对传输线允许向两个方向中的任一方向传送数据,但中的任一方向传送数据,但不能同时不能同时进行;进行;全双工方式:全双工方式:用两对传输线连接在发送器用两对传输线连接在发送器和接收器上,发送和接收和接收器上,发送和接收能同时能同时进行。进行。7.1.4 通信方向通信方向图图7-5 串行通信传输方式串行通信传输方式7.1.5 串行通信接口种类串行通信接口种类根据串行通信格式及约定(如同步方式、通根据串行通信格式及约定(如同步方式、通信速率、数据块格式等)不同,形成了许多串行信速率、数据块格式等)不同,形成了许多串行通信接口标准,如常见的:通信接口标准,如常见的:UART(通用异步串行通信接口)(通用异步串行通信接口)USB(通用串行总线接口)(通用串行总线接口)I2C(集成电路间的串行总线)(集成电路间的串行总线)SPI(同步串行外设总线)(同步串行外设总线)485总线、总线、CAN总线接口等总线接口等7.2 串行口串行口结构及控制结构及控制主要内容主要内容7.2.1 MCS-51串行口结构串行口结构7.2.2 与串行口有关的特与串行口有关的特殊功能寄存器殊功能寄存器7.2.3 波特率设计波特率设计7.2.1 MCS-51串行口结构串行口结构图图7-6 串行口方式串行口方式1、3内部结构示意简图内部结构示意简图12TH1TL1fosc216发送发送SBUF(99H)16输入移位寄存器输入移位寄存器TXD写写SBUF:MOV SBUF,A发送发送读读SBUF:MOV A,SBUF;读入读入RITI移位时钟移位时钟SMOD=1SMOD=0RXDT1溢出率溢出率装载装载SBUF接收接收SBUF(99H)(P3.0)(P3.1)7.2.2 与串行口有关的特殊功能寄存器与串行口有关的特殊功能寄存器1控制状态寄存器控制状态寄存器SCON功能:功能:设置串行口的工作方式和标识串行口状设置串行口的工作方式和标识串行口状态态。字节地址:字节地址:98H,可位寻址可位寻址。复位值:复位值:0000 0000B。格式如下:。格式如下:D7D6D5D4D3D2D1D0SM0 SM1 SM2 REN TB8 RB8TIRIlSM0和和SM1(SCON.7、SCON.6):串行口工作):串行口工作方式选择位。方式选择位。7.2.2 与串行口有关的特殊功能寄存器与串行口有关的特殊功能寄存器SM0 SM1 工作方式工作方式功能说明功能说明波特率波特率00方式方式0同步移位寄存器同步移位寄存器fosc/1201方式方式110位异步通信位异步通信可变,可变,T1或或T2提供提供10方式方式211位位UART、可多机、可多机fosc/64或或 fosc/3211方式方式311位位UART、可多机、可多机可变,可变,T1或或T2提供提供lSM2(SCON.5):):多机通信控制位,多机通信控制位,在方式在方式2或或3中使用。中使用。lREN(SCON.4):允许接收控制位。):允许接收控制位。设置设置1,允许接收;清,允许接收;清0:禁止接收。:禁止接收。lTB8(SCON.3):发送数据的第):发送数据的第9位。位。lRB8(SCON.2):接收数据的第):接收数据的第9位。位。lTI(SCON.1):发送中断标志。):发送中断标志。lRI(SCON.0):接收中断标志。):接收中断标志。7.2.2 与串行口有关的特殊功能寄存器与串行口有关的特殊功能寄存器关于关于TI和和RI:串行发送中断标志串行发送中断标志TI和接收中和接收中断断RI是同一个中断源,是同一个中断源,CPU不知道是发送中断标志不知道是发送中断标志TI还是接收中断标志还是接收中断标志RI产生的中断请求,所以,在产生的中断请求,所以,在全双工通信时,必须由全双工通信时,必须由软件来判别软件来判别。多机通信实现的原理:多机通信实现的原理:SM2设置为设置为1,TB8发送发送1表明是地址,选择接收表明是地址,选择接收机;机;TB8发送发送0为数据。为数据。(1)实现的条件:)实现的条件:各个从机的各个从机的SM2设置为设置为1。当当SM2=1时:时:RB8=1,则保留接收到的数据;,则保留接收到的数据;RB8=0则丢弃。则丢弃。(2)实现的方法)实现的方法主机先发送从机地址,并且主机先发送从机地址,并且TB8为为1。这时各个从机均可接收此地址,目标从机,则对这时各个从机均可接收此地址,目标从机,则对自己的自己的SM2清清0;其它从机保留其它从机保留SM2=1。主机再发送数据,并且主机再发送数据,并且TB8为为0 这时目标从机正常接收数据,其它从机均丢弃。这时目标从机正常接收数据,其它从机均丢弃。7.2.2 与串行口有关的特殊功能寄存器与串行口有关的特殊功能寄存器2电源控制寄存器电源控制寄存器PCON电源控制寄存器电源控制寄存器PCON(地址为地址为87H)中中只有只有SMOD位与串行口工作有关位与串行口工作有关。D7D6D5D4D3D2D1D0SMOD-GF1GF0PDIDL7.2.2 与串行口有关的特殊功能寄存器与串行口有关的特殊功能寄存器SMOD(PCON.7):):波特率倍增位。波特率倍增位。串行口工作于方式串行口工作于方式1、方式、方式2和方式和方式3时,时,SMOD1,串行口波特率加倍,串行口波特率加倍。复位值:复位值:0000 0000B。不能进行位寻址不能进行位寻址。7.2.3 波特率设计波特率设计方式方式0和方式和方式2的波特率是的波特率是固定的固定的,方式,方式1和方和方式式3的波特率是由定时器的波特率是由定时器T1的溢出率的溢出率来决定的。在来决定的。在增强型单片机中,也可以使用增强型单片机中,也可以使用T2作波特率发生器作波特率发生器。1方式方式0的波特率的波特率方式方式0为为同步移位寄存器同步移位寄存器方式。方式。固定为振荡频率的固定为振荡频率的1/12。并不受。并不受PCON寄存器寄存器中中SMOD位的影响。位的影响。方式方式0的波特率的波特率=fosc/122方式方式2的波特率的波特率方式方式2是是波特率只有两种波特率只有两种(fosc/64或或 fosc/32)、)、11位的异步通信位的异步通信,可多机通信。,可多机通信。时钟:时钟:接收与发送的时钟直接来自振荡频率接收与发送的时钟直接来自振荡频率fosc,是,是fosc/2,并且还与,并且还与PCON中中SMOD位有关。位有关。其波特率为:其波特率为:当当SMOD=0时,波特率为时,波特率为fosc的的1/64;若;若SMOD=1,则波特率为,则波特率为fosc的的1/32。即。即方式方式2的波特率的波特率=2SMODfosc/647.2.3 波特率设计波特率设计3方式方式1和方式和方式3的波特率的波特率(1)T1作波特率发生器作波特率发生器在最典型应用中,定时器在最典型应用中,定时器T1选用模式选用模式2定时,定时,此时此时n=8,设定时器的初值为,设定时器的初值为X:于是,于是,X=256-方式方式1、3的波特率的波特率=(T1溢出速率)溢出速率)即波特率即波特率=/(2n-初值)初值)7.2.3 波特率设计波特率设计(2)T2作波特率发生器作波特率发生器设寄存器设寄存器T2CON的位的位TCLK=1和(或)和(或)RCLK=1时,允许串行口从时,允许串行口从T2获得发送和(或)获得发送和(或)接收的波特率。接收的波特率。串行口方式串行口方式1、3的波特率的波特率=T2溢出率溢出率/16定时器定时器2作波特率发生器时,计数在每个作波特率发生器时,计数在每个状态状态周期周期递增。这样:递增。这样:方式方式1、3的波特率的波特率=(RCAP2H、RCAP2L)=65536-fosc/fB/32控制字、模式字:控制字、模式字:T2CON=0011 0100B=34HT2MOD=00H7.2.3 波特率设计波特率设计主要内容主要内容7.3.1 串行口方式串行口方式07.3.2 串行口方式串行口方式17.3.3 串行口方式串行口方式2和方式和方式37.3 串行口工作方式串行口工作方式7.3.1 串行口方式串行口方式0方式方式0为为同步移位寄存器输入同步移位寄存器输入/输出方式,常输出方式,常用于扩展用于扩展I/O口口。RXD为数据输入或输出为数据输入或输出,TXD输出移位输出移位时钟时钟,作为外接部件的同步信号。,作为外接部件的同步信号。方式方式0不适用于两个不适用于两个89C52之间之间的数据通信,的数据通信,主要用于外接移位寄存器来实现单片机的主要用于外接移位寄存器来实现单片机的接口扩展接口扩展。在这种方式下,收在这种方式下,收/发的数据为发的数据为8位位,低位在,低位在前高位在后,无起始位、奇偶校验位及停止位,前高位在后,无起始位、奇偶校验位及停止位,波波特率是固定的,为特率是固定的,为fosc/12,即机器周期频率,即机器周期频率。启动发送:写启动发送:写SBUF启动接收:允许接收位启动接收:允许接收位REN置置17.3.1 串行口方式串行口方式0发送电路发送电路接收电路接收电路7SH/LD7.3.1 串行口方式串行口方式0串串 A入入 BQAQBQCQDGNDVCCQHQGQFQECLRCLK1 142 133 124 115 106 97 874LS1641 162 153 144 135 126 117 108 9SH/LDCLKE并并 F入入 GH串出串出 QGND74LS165VCC时钟禁止时钟禁止DC 并并B 入入A串入串入QH串出串出并并出出并入并入/串出串出串入串入/并出并出7.3.2 串行口方式串行口方式1方式方式1真正用于串行发送或接收真正用于串行发送或接收。TXD与与RXD分别用于发送、接收数据。分别用于发送、接收数据。帧格式:帧格式:1位起始位位起始位、8位数据位位数据位(低位在前)、(低位在前)、1位停止位位停止位,共,共10位。位。在接收时,停止位进入在接收时,停止位进入SCON的的RB8此方式的此方式的波特率可调,由波特率可调,由T1控制控制。SCON=0101 0000b=0 x50方式方式1发送发送只要写只要写SBUF就启动发送就启动发送7.3.2 串行口方式串行口方式1方式方式1接收接收1)接收条件:)接收条件:SCON中的中的REN置置12)接收过程:)接收过程:REN置置1后,串行口对接收引脚后,串行口对接收引脚RXD检测,当检测,当RXD由高变低时开始移位接收;接收由高变低时开始移位接收;接收完后将完后将停止位装入停止位装入RB8中中。3)接收的数据有效的条件:)接收的数据有效的条件:a、RI=0;b、SM2=0,或者,或者SM2=1并且并且RB8=1 满足以上满足以上2条,条,则将则将8位数据装入位数据装入SBUF,且,且RI置置1。有以下情况之一则数据无效:有以下情况之一则数据无效:a)RI=1;b)SM2=1并且并且RB8=0 注意:除了方式注意:除了方式2、3的多机通信之外,的多机通信之外,SM2应清应清07.3.3 串行口方式串行口方式2和方式和方式3串行口工作在方式串行口工作在方式2和方式和方式3均为均为每帧每帧11位异步位异步通信格式通信格式,由,由TXD和和RXD发送与接收。发送与接收。方式方式2和和3的操作是完全一样的,不同的只是特的操作是完全一样的,不同的只是特波率。波率。每帧每帧11位:位:即即1位起始位位起始位、8位数据位位数据位(低位在(低位在前)、前)、1位可编程的第位可编程的第9数据位数据位和和1位停止位位停止位。发送时,发送时,第第9数据位(数据位(TB8)可以设置为)可以设置为1或或0,在校验时可将奇偶位装入,在校验时可将奇偶位装入TB8;接收时,接收时,第第9数据位进入数据位进入SCON的的RB8。SCON=1001 0000b=0 x90方式方式2接收接收SCON=1101 0000b=0 xD0方式方式3接收接收7.4 串行口应用举例串行口应用举例 主要内容主要内容 7.4.1 同步方式应用同步方式应用 7.4.2 异步方式应用异步方式应用7.4.1 同步方式应用同步方式应用MSC-51单片机的串行口在方式单片机的串行口在方式0时,以时,以同步方同步方式操作式操作。外接串入。外接串入/并出或并入并出或并入/串出器件,可串出器件,可实现实现I/O口的扩展口的扩展。例例7-2 用用89C52串行口外接串行口外接164串入串入/并出移位寄并出移位寄存器存器扩展扩展8位并行输出口,外接位并行输出口,外接165并入并入/串出移位串出移位寄存器扩展寄存器扩展8位并行输入口。位并行输入口。8位并行输出口的每位都接一个发光二极管,要位并行输出口的每位都接一个发光二极管,要求从求从8位并行输入口读入开关的状态值,位并行输入口读入开关的状态值,使闭合开使闭合开关对应的发光二极管点亮关对应的发光二极管点亮。如下页图所示。如下页图所示。7.4.1 同步方式应用同步方式应用图图7-13 方式方式0扩展输入输出电路扩展输入输出电路SH/LD89C52RXDTXDAB CLK CLRQ74HC165CLK 74HC164P1.0+5v解:解:数据的输入输出通过数据的输入输出通过RXD接收和发送,接收和发送,移位时钟通过移位时钟通过TXD送出,送出,74HC164用于串用于串/并转换,并转换,74HC165用于并用于并/串转换。串转换。C语言程序清单:语言程序清单:#includesbit P1_0=P10;unsigned char cc;void main()P1_0=0;P1_0=1;/165装载数据装载数据 SCON=0 x10;/串口方式串口方式0,启动,启动/165发送、发送、164和单片机接收和单片机接收ES=1;/允许串行口中断允许串行口中断EA=1;7.4.1 同步方式应用同步方式应用while(1);/等待中断等待中断void s_srv()interrupt 4/中断服务程序中断服务程序 if(TI)/发送中断发送中断TI=0;else/接收中断接收中断cc=SBUF;/读取接收的数据读取接收的数据P1_0=0;/165装载数据装载数据P1_0=1;/准备移位准备移位SCON=0X10;/启动启动165发送、发送、/164与单片机接收与单片机接收 7.4.1 同步方式应用同步方式应用汇编语言程序清单:汇编语言程序清单:ORG 0000HSJMP MAINORG 0023HSJMP S_SRV;串行口中断服务程序串行口中断服务程序MAIN:MOV SP,#0DFH ;串行口方式串行口方式0初始化初始化CLR P1.0;装载装载165数据数据SETB P1.0 MOV SCON,#10H ;串行口方式串行口方式0、启动接收、启动接收SETB ESSETB EASJMP$;等待中断等待中断7.4.1 同步方式应用同步方式应用S_SRV:JBC TI,EXITMOV A,SBUFCLR P1.0;装载装载165SETB P1.0;允许允许165时钟时钟MOVSCON,#10H;启动接收启动接收EXIT:RETI7.4.1 同步方式应用同步方式应用7.4.1 同步方式应用同步方式应用MSC-51单片机的串行口在方式单片机的串行口在方式0时,以时,以同步方同步方式操作式操作。外接串入。外接串入/并出或并入并出或并入/串出器件,可串出器件,可实现实现I/O口的扩展口的扩展。例例7-2 用用89C52串行口外接串行口外接164串入串入/并出移位寄并出移位寄存器存器扩展扩展8位并行输出口,外接位并行输出口,外接165并入并入/串出移位串出移位寄存器扩展寄存器扩展8位并行输入口。位并行输入口。8位并行输出口的每位都接一个发光二极管,要位并行输出口的每位都接一个发光二极管,要求从求从8位并行输入口读入开关的状态值,使闭合开位并行输入口读入开关的状态值,使闭合开关对应的发光二极管点亮。如下页图所示。关对应的发光二极管点亮。如下页图所示。74LS327.4.1 同步方式应用同步方式应用89C52RXDTXDP1.1AB 74HC164CLK CLR74HC165CLK +P1.0P1.2SH/LD时钟禁止时钟禁止高禁止高禁止时钟作用时钟作用正确电路正确电路+5vQ7.4.1 同步方式应用同步方式应用分析:分析:(1)对)对74HC164:P1.0=0,TXD时钟起作用,数据移入时钟起作用,数据移入164(2)对)对74HC165:P1.1=0,TXD时钟起作用时钟起作用P1.2=0,74HC165装载;装载;P1.2=1,74HC165移位输出移位输出(3)单片机收发作用)单片机收发作用启动接收:启动接收:1)使)使74HC165移位输出移位输出2)若若P1.0=0,使,使164同时移位输入同时移位输入启动发送:使启动发送:使74HC164移位输入移位输入(4)发光二极管:)发光二极管:对应对应165键按下的亮键按下的亮C语言程序清单:语言程序清单:#includesbit P1_0=P10;sbit P1_1=P11;sbit P1_2=P12;unsigned char cc;void main()P1_0=1;P1_1=0;/禁止禁止164,允许,允许165工作工作P1_2=0;P1_2=1;/165并行装载并行装载 SCON=0 x10;/串口方式串口方式0,启动接收,启动接收,ES=1;/165发,单片机接收发,单片机接收EA=1;/允许串行口中断允许串行口中断while(1);/等待中断等待中断7.4.1 同步方式应用同步方式应用void s_srv()interrupt 4/中断服务程序中断服务程序 if(RI)RI=0;cc=SBUF;/读取接收的数据读取接收的数据P1_0=0;/允许允许164时钟时钟P1_1=1;/禁止禁止165时钟时钟SBUF=cc;/串口发送,串口发送,164接收接收else/接收中断接收中断TI=0;/发送中断发送中断P1_0=1;/禁止禁止164时钟时钟P1_1=0;/允许允许165时钟时钟P1_2=0;/165并行装载并行装载P1_2=1;REN=1;/启动接收,启动接收,165发送发送 7.4.1 同步方式应用同步方式应用汇编语言程序清单:汇编语言程序清单:ORG 0000HSJMP MAINORG 0023HSJMP S_SRV;串行口中断服务程序串行口中断服务程序MAIN:MOV SP,#0DFH ;设置堆栈指针设置堆栈指针SETB P1.0;禁止禁止164CLR P1.1;运行运行165CLR P1.2;并行装载并行装载165SETB P1.2MOV SCON,#10H ;串口方式串口方式0,允许接收,允许接收SETB ES;串口开中断串口开中断SETB EASJMP$;等待中断等待中断7.4.1 同步方式应用同步方式应用S_SRV:JNB RI,SENDCLRRIMOV A,SBUFCLR P1.0;允许允许164SETB P1.1;禁止禁止165MOV SBUF,A;发送给发送给164RETISEND:CLRTISETB P1.0;禁止禁止164CLR P1.1;允许允许165CLR P1.2;并行装载并行装载165SETB P1.2SETBREN;启动,启动,165发发RETI;单片机接收单片机接收7.4.1 同步方式应用同步方式应用7.4.2 异步方式应用异步方式应用串行口方式串行口方式1与方式与方式3很近似很近似,波特率设置一样波特率设置一样,不同之处在于方式不同之处在于方式3比方式比方式1多了一个数据附加位,多了一个数据附加位,即特征位,也叫程控位即特征位,也叫程控位。方式方式2与方式与方式3基本一样基本一样(只是(只是波特率不同波特率不同),),接收接收/发送发送11位信息:开始为位信息:开始为1位低电平的起始位,位低电平的起始位,中间中间8位数据位,之后为位数据位,之后为1位程控位(由发送的位程控位(由发送的TB8决定),最后是决定),最后是1高电平的停止位。高电平的停止位。例例7-3 将片内将片内RAM 50H5FH中的数据串行中的数据串行发送,发送,用第用第9个数据位作奇偶校验位个数据位作奇偶校验位,设晶振为,设晶振为11.0592MHz,波特率为,波特率为2400b/s,编写串行口以,编写串行口以方式方式3的发送程序。的发送程序。解:解:用用TB8作奇偶校验位作奇偶校验位,在数据写入发送,在数据写入发送缓冲器之前,先将数据的奇偶位缓冲器之前,先将数据的奇偶位P写入写入TB8,这,这时,第时,第9位数据作奇偶校验用,发送位数据作奇偶校验用,发送采用中断方采用中断方式式。用用T1做波特率发生器,做波特率发生器,T1模式模式2定时定时初值初值X=256-=2447.4.2 异步方式应用异步方式应用C语言程序清单:语言程序清单:#includeunsigned char i=0,array16 _at_ 0 x50;/数据区数据区void main()SCON=0 xc0;/置串口方式置串口方式3,只发,只发TMOD=0 x20;/定时器初始化定时器初始化TL1=0 xf4;TH1=0 xf4;TR1=1;ES=1;EA=1;/中断初始化中断初始化ACC=arrayi;/发送第一个数据送发送第一个数据送TB8=P;/累加器累加器,目的取目的取P位位SBUF=ACC;/发送一个数据发送一个数据while(1);/等待中断等待中断7.4.2 异步方式应用异步方式应用void serial_int()interrupt 4/串口中断服务程序串口中断服务程序if(RI)return;TI=0;/清发送中断标志清发送中断标志ACC=array+i;/取下一个数据取下一个数据TB8=P;SBUF=ACC;if(i14)/发送完毕,发送完毕,ES=0;/禁止串口中断禁止串口中断7.4.2 异步方式应用异步方式应用汇编语言程序清单:汇编语言程序清单:ORG0000HSJMPMAIN ;上电,转主程序上电,转主程序ORG0023HSJMPSERVER ;转中断服务程序转中断服务程序MAIN:MOVSP,#0DFH;设置堆栈指针设置堆栈指针MOVSCON,#0C0H;设置串口方式设置串口方式3发送发送MOVTMOD,#20H;T1以模式以模式2定时定时MOVTL1,#0F4HMOVTH1,#0F4HSETBTR1SETBES;允许串行口中断允许串行口中断SETBEA;CPU开中断开中断MOVR0,#50HMOVR7,#157.4.2 异步方式应用异步方式应用MOVA,R0MOVC,PMOVTB8,C ;送奇偶标志位到送奇偶标志位到TB8MOVSBUF,A ;发送第一个数据发送第一个数据SJMP$SERVER:JBCRI,ENDT ;清除发送中断标志清除发送中断标志CLRTIINCR0 ;修改数据地址修改数据地址MOVA,R0MOVC,PMOVTB8,CMOVSBUF,A ;发送下一个数据发送下一个数据DJNZR7,ENDT ;判断数据块是否发送完判断数据块是否发送完CLRES ;否则,禁止串行口中断否则,禁止串行口中断ENDT:RETI ;中断返回中断返回7.4.2 异步方式应用异步方式应用例例7-4 编写一单片机程序,将从串行口接收的编写一单片机程序,将从串行口接收的16字节数据送入片内字节数据送入片内RAM的的50H5FH单元中。要单元中。要求求波特率为波特率为2400b/s,作奇偶校验,设单片机的晶振,作奇偶校验,设单片机的晶振频率为频率为11.0592 MHz。解:解:RB8作奇偶校验位作奇偶校验位,接收时,将接收到的,接收时,将接收到的数据的奇偶校验位与数据的奇偶校验位与RB8对比,以判断正确与否。对比,以判断正确与否。将串行口设置为将串行口设置为方式方式3工作工作。采用查询方式接收。采用查询方式接收。7.4.2 异步方式应用异步方式应用C语言程序清单:语言程序清单:#includeunsigned char i;unsigned char array16 _at_ 0 x50;/接收缓冲区接收缓冲区void main()SCON=0 xd0;/设置串口方式设置串口方式3,允许接收,允许接收TMOD=0 x20;/T1模式模式2定时定时TH1=0 xf4;TL1=0 xf4;TR1=1;7.4.2 异步方式应用异步方式应用for(i=0;i16;i+)/循环接收循环接收16个数据个数据while(!RI);/等待一次接收完成等待一次接收完成RI=0;ACC=SBUF;if(RB8=P)/校验正确校验正确arrayi=ACC;else /校验不正确校验不正确F0=1;break;while(1);7.4.2 异步方式应用异步方式应用汇编语言程序清单:汇编语言程序清单:MAIN:MOV SCON,#0D0H;串口方式串口方式3,允许接收,允许接收MOV TMOD,#20H;T1以方式以方式2定时定时MOV TL1,#0F4HMOV TH1,#0F4HSETB TR1MOV R0,#50H;首地址送首地址送R0MOV R7,#10H;数据长度送数据长度送R7WAIT:JNB RI,$;等待接收完成等待接收完成 CLR RI;清中断接收标志清中断接收标志RI MOV A,SBUF;从串口读数送累加器从串口读数送累加器7.4.2 异步方式应用异步方式应用JNB P,PNP;P=0,转,转PNPJNB RB8,ERROR;P=1、RB8=0,转出错,转出错SJMP RIGHTPNP:JBRB8,ERROR;P=0、RB8=1,转出错,转出错RIGHT:MOV R0,A;存数存数INC R0;修改地址指针修改地址指针DJNZ R7,WAIT;未接收完,继续未接收完,继续CLR F0;置正确接收标志置正确接收标志F0=0SJMP$ERROR:SETB F0;置错误接收标志置错误接收标志F0=1SJMP$7.4.2 异步方式应用异步方式应用例例7-5 用第用第9个数据位作奇偶校验位,个数据位作奇偶校验位,编写串行编写串行口方式口方式3的全双工通信程序的全双工通信程序,设双机将各自键盘的按,设双机将各自键盘的按键键值发送给对方,接收正确后放入缓冲区(显示键键值发送给对方,接收正确后放入缓冲区(显示及做其它处理),设晶振为及做其它处理),设晶振为11.059 2 MHz,波特率,波特率为为9 600b/s。解:解:因为是全双工方式,通信双方的程序一样。因为是全双工方式,通信双方的程序一样。发送和接收都采用中断方式。发送和接收都采用中断方式。7.4.2 异步方式应用异步方式应用C语言程序清单:语言程序清单:#includeunsigned char buffer,k;void main()SCON=0 xd0;/置串口方式置串口方式3,允许接允许接收收TMOD=0 x20;/T1以模式以模式2定时定时TL1=0 xfd;TH1=0 xfd;TR1=1;ES=1;/开串行口中断开串行口中断EA=1;/开总中断开总中断7.4.2 异步方式应用异步方式应用while(1)k=key();/读取按键按下键值读取按键按下键值if(k!=0 xff)/无键按下返回无键按下返回0 xffACC=k;/将键值送累加器,取将键值送累加器,取P位位TB8=P;/送送TB8SBUF=ACC;/发送发送display();/显示程序显示程序7.4.2 异步方式应用异步方式应用void serial_server()interrupt 4if(TI)/发送引起,清发送引起,清TITI=0;else /否则,接收引起否则,接收引起RI=0;ACC=SBUF;/读取接收数据读取接收数据if(RB8=P)/校验正确,校验正确,buffer=ACC;/存入缓冲区存入缓冲区7.4.2 异步方式应用异步方式应用汇编语言程序清单:汇编语言程序清单:ORG 0000HSJMP MAIN ;跳转到主程序跳转到主程序ORG 23HLJMP S_SERV ;跳转到串口中断服务程序跳转到串口中断服务程序MAIN:MOV SP,#0DFH ;设置堆栈指针设置堆栈指针MOV SCON,#0D0H ;串口初始化串口初始化MOV TMOD,#20H ;T1以模式以模式2定时定时MOV TL1,#0FDHMOV TH1,#0FDH ;定时器定时器1赋初值赋初值7.4.2 异步方式应用异步方式应用SETB TR1 ;启动定时器启动定时器1SETB ES ;开中断开中断SETB EALOOP:LCALL KEY;读取按键读取按键(存于存于A中中),;有键按下返回键值,有键按下返回键值,CJNE A,#0FFH,SEND;无键按下返回无键按下返回0FFH,;有键按下转发送有键按下转发送NEXT:LCALL DISPLAY ;调用显示调用显示SJMP LOOP ;主程序循环主程序循环7.4.2 异步方式应用异步方式应用SEND:MOV C,PMOV TB8,CMOV SBUF,A;带校验位发送带校验位发送LJMP NEXT;循环循环S_SERV:;中断服务程序;中断服务程序JBC RI,RECV ;是接收中断转接收处理是接收中断转接收处理CLR TI;是发送中断,清是发送中断,清TIRETI 7.4.2 异步方式应用异步方式应用RECV:;接收处理程序接收处理程序MOV A,SBUF;取接收值送取接收值送AJB P,ONE;校验位为校验位为1,转,转JB RB8,I_END;校验错,转中校验错,转中断返回断返回SJMP RIGHT;校验正确,正确处理校验正确,正确处理ONE:JNB RB8,I_END;校验错,转中校验错,转中断返回断返回RIGHT:MOV BUFFER,A;接收数据送缓冲区接收数据送缓冲区I_END:RETI;中断返回中断返回7.4.2 异步方式应用异步方式应用7.5 C51的输入的输入/输出输出主要内容主要内容7.5.1 基本输入基本输入/输出函数输出函数7.5.2 格式输出函数格式输出函数printf7.5.3 格式输入函数格式输入函数scanf7.5 C51的输入的输入/输出输出概概 述述C51的输入和输出函数的形式虽然与的输入和输出函数的形式虽然与ANSI C的一样,但实际意义和使用方法却大不一样的一样,但实际意义和使用方法却大不一样,因,因此,有必要专门介绍一下此,有必要专门介绍一下C51的输入的输入/输出函数。输出函数。1、C51的的I/O函数主要包括函数主要包括字符输入字符输入/输出函数输出函数getchar和和putchar,字符,字符串输入串输入/输出函数输出函数gets和和puts,格式输入,格式输入/输出函输出函数数printf和和scanf等。等。在在C51的的I/O函数库中定义的函数库中定义的I/O函数,都是函数,都是以以_getkey和和putchar函数为基础函数为基础。7.5 C51的输入的输入/输出输出2、C51的输入的输入/输出函数的功能输出函数的功能C51的输入的输入/输出函数,都是通过单片机的串输出函数,都是通过单片机的串行接口实现的。因此,行接口实现的。因此,其功能是实现串行口输入其功能是实现串行口输入/输出输出。在使用这些在使用这些I/O函数之前函数之前,必须先对单片机的必须先对单片机的串行口串行口、定时器定时器/计数器计数器T1进行初始化进行初始化。假设单片。假设单片机的晶振为机的晶振为11.0592MHz,波特率为,波特率为9600bps,则,则初始化程序段为:初始化程序段为:SCON=0 x52;/设置串口方式设置串口方式1收、发收、发TMOD=0 x20;/设置设置T1以模式以模式2工作工作TL1=0 xfd;/设置设置T1低低8位初值位初值TH1=0 xfd;/设置设置T1自动重装初值自动重装初值TR1=1;/开开T1 7.5.1 基本输入基本输入/输出函数输出函数1、基本字符输入函数、基本字符输入函数_getkey_getkey函数的原型为:函数的原型为:char _getkey(void)函数功能:函数功能:从单片机串行口读入一个字符,如从单片机串行口读入一个字符,如果没有字符输入则等待,返回值为读入的字符,果没有字符输入则等待,返回值为读入的字符,不显示不显示。可重入函数。可重入函数。字符输入函数字符输入函数getchar()功能:功能:与与_getkey基本相同基本相同唯一的区别:唯一的区别:还要从串行口返回字符还要从串行口返回字符7.5.1 基本输入基本输入/输出函数输出函数2基本输出函数基本输出函数putcharputchar函数函数是基本的字符输出函数是基本的字符输出函数,其原型为:,其原型为:char putchar(char)函数功能:函数功能:是从单片机的串行口输出一个字符,是从单片机的串行口输出一个字符,返回值为输出的字符。返回值为输出的字符。putchar为可重入函数。为可重入函数。如:如:putchar(a);/从串行口输出从串行口输出a7.5.2 格式输出函数格式输出函数printf函数功能:函数功能:通过单片机的串行口输出若干任意通过单片机的串行口输出若干任意类型的数据类型的数据。格式如下:。格式如下:printf(格式控制,输出参数表)(格式控制,输出参数表)格式控制格式控制是用双引号括起来的字符串,也是用双引号括起来的字符串,也称为转换控制称为转换控制字符串字符串,它包括三种信息:它包括三种信息:格式说明符格式说明符 如如%d、%c、%s等等普通字符普通字符 如如i=等等转义字符转义字符 如如n、t等等7.5.2 格式输出函数格式输出函数printf1)格式说明符:)格式说明符:由百分号由百分号“%”和格式字符组和格式字符组成成,其作用是指明输出数据的格式,其作用是指明输出数据的格式,如如%d、%c、%s等,详细情况见表等,详细情况见表4-3。2)普通字符:)普通字符:这些字符按原样输出这些字符按原样输出,主要用,主要用来输出一些提示信息。如来输出一些提示信息。如x=3)转义字符:)转义字符:由由“”和字母或字符组成,它和字母或字符组成,它的作用是输出特定的控制符的作用是输出特定的控制符,如转义字符,如转义字符n的含的含义是输出换行,详细情况见表义是输出换行,详细情况见表4-4。7.5.2 格式输出函数格式输出函数printf表表7-4 printf函数的格式字符函数的格式字符表表7-5 常用的转义字符常用的转义字符格式字格式字符符数据类数据类型型输输 出出 格格 式式转义字转义字符符含含 义义ASCII码码dint有符号十进制数有符号十进制数0空字符空字符0 x00uint无符号十进制数无符号十进制数n换行符换行符0 x0aoint无符号八进制数无符号八进制数r回车符回车符0 x0dx,Xint无符号十六进制数无符号十六进制数t水平制表水平制表0 x09ffloat十进制浮点数十进制浮点数b退格符退格符0 x08e,Efloat科学计数法的十进科学计数法的十进制浮点数制浮点数f换页符换页符0 x0cg,Gfloat自动选择自动选择e或或f格式格式单引号单引号0 x27cchar单个字符单个字符”双引号双引号0 x22s指针指针带结束符的字符串带结束符的字符串反斜杠反斜杠0 x5c7.5.2 格式输出函数格式输出函数printf用用printf函数输出例子函数输出例子(假设(假设y已定义过,也赋已定义过,也赋值过):值过):printf(“x=%d”,36);/从串行口输出从串行口输出x=36printf(“y=%d”,y);/从串行口输出从串行口输出y=y的值的值printf(“c1=%c,c2=%c”,A,B);/从串行口输出从串行口输出c1=A,c2=Bprintf(“%sn”,“OK,Send data begin!”);/从串行口输出从串行口输出OK,Send data begin!和和n 7.5.3 格式输入函数格式输入函数scanfscanf函数的功能:函数的功能:通过单片机串行口实现各通过单片机串行口实现各种数据输入种数据输入。函数格式如下:。函数格式如下:scanf(格式控制,地址列表)(格式控制,地址列表)格式控制格式控制格式控制与格式控制与printf函数的类似,也是用双引号函数的类似,也是用双引号括起来的一些字符,括起来的一些字符,包括三种信息:包括三种信息:格式说明符、格式说明符、普通字符和空白字符普通字符和空白字符。1)格式说明符:)格式说明符:由百分号由百分号“%”和格式字符组和格式字符组成,其作用是指明输入数据的格式,见表成,其作用是指明输入数据的格式,见表4-5。7.5.3 格式输入函数格式输入函数scanf2)普通字符:)普通字符:在输入时,要求这些字符按原在输入时,要求这些字符按原样输入。样输入。3)空白字符:)空白字符:包括空格、制表符和换行符等,包括空格、制表符和换行符等,这些字符在输入时被忽略。这些字符在输入时被忽略。地址列表:地址列表:是由若干个地址组成,它可以是是由若干个地址组成,它可以是指指针变量针变量、变量地址变量地址(取地址运算符(取地址运算符“&”加变量)、加变量)、数组地址(数组地址(数组名数组名)或字符串地址()或字符串地址(字符串名字符串名)等。)等。7.5.3 格式输入函数格式输入函数scanf用用scanf函数输入例子函数输入例子(假设(假设x、y、z、c1、c2是定义过的变量,是定义过的变量,str1是定义过的指针):是定义过的指针):scanf(“%d”,&x););scanf(“%d%d”,&y,&z););scanf(“%c%c”,&c1,&c2););scanf(“%s”,str1););在实际的串行通信中,传输的数据多数是字符在实际的串行通信中,传输的数据多数是字符型和字符串,以字符串居多,往往把数字型数据型和字符串,以字符串居多,往往把数字型数据转换成字符串传输。转换成字符串传输。7.5.3 格式输入函数格式输入函数scanf例例4-3 有一单片机时钟系统,为了演示输出函有一单片机时钟系统,为了演示输出函数数putchar和和输入函数输入函数getkey的应用,的应用,编写程序,编写程序,用串行口方式用串行口方式1自发自收,每一秒钟从串行口发送自发自收,每一秒钟从串行口发送一次时间数据的时、分、秒,从串行口接收到数一次时间数据的时、分、秒,从串行口接收到数据后,送给据后,送给6位数码管显示位数码管显示。设晶振频率为设晶振频率为11.0592MHz,波特率为,波特率为9600bps。不用编写时钟计时函数和数码管显示函数不用编写时钟计时函数和数码管显示函数display();。7.5.3 格式输入函数格式输入函数scanf#include/包含头文件包含头文件#include/包含包含I/O函数库函数库unsigned char data t13;/存放原始的时分秒存放原始的时分秒unsigned char data dis_buf6;/数码管显示数码管显示void main(void)unsigned char data t23;/放接收的时间放接收的时间unsigned char data sec0=61;/秒备份秒备份unsigned char data i;SCON=0 x52;/串行口初始化串行口初始化TMOD=0 x20;/设置定时器工作模式设置定时器工作模式TH1=0 xfd;/设置设置T1重装的初值重装的初值TR1=1;/开开T1运行运行7.5.3 格式输入函数格式输入函数scanfwhile(1)if(sec0!=t12)/判断秒是否已经改变判断秒是否已经改变 putchar(t1i);delay1ms(1);t2i+=_getkey();if(i2)dis_buf0=t20/10;dis_buf1=t20%10;dis_buf2=t21/10;dis_buf3=t21%10;dis_buf4=t22/10;dis_buf5=t22%10;i=0;sec0=t12;/更新秒备份更新秒备份 display();/调用数码管扫描显示函数调用数码管扫描显示函数 7.6 单片机与单片机与PC机通信的接口电路机通信的接口电路主要内容主要内容7.6.1 MAX232芯片简介芯片简介7.6.2 PC机与机与89C52串行通信的接口电路串行通信的接口电路利用利用PC机配置的异步通信适配器,可以机配置的异步通信适配器,可以很方便地完成很方便地完成PC机与单片机的数据通信。机与单片机的数据通信。PC机与机与89C52单片机最简单的连接是单片机最简单的连接是零调零调制制3线经济型线经济型,这是进行全双工通信所必须的,这是进行全双工通信所必须的最少数目的线路。最少数目的线路。7.6 单片机与单片机与PC机通信的接口电路机通信的接口电路串行通信电平:串行通信电平:89C52单片机为单片机为TTL电平电平PC机串行接口是机串行接口是RS-232C标准标准数字值:数字值:1 0TTL电平:电平:+5V 0V232电平:电平:-5V-15V +5V+15V串行通信电平转换:串行通信电平转换:用用MAX232等等芯片芯片7.6 单片机与单片机与PC机通信的接口电路机通信的接口电路7.6.1 MAX232芯片简介芯片简介MAX232芯片:芯片:是是MAXIM公司产品、包含两路接收器和两路公司产品、包含两路接收器和两路驱动发送器,适用于各种驱动发送器,适用于各种EIA-232C和和V.28/V.24 的的通信接口。通信接口。MAX232功能:功能:内部有电源电压变换器,可以把输入的内部有电源电压变换器,可以把输入的+5V电电源电压变换成为源电压变换成为RS-232C输出电平所需的输出电平所需的10V电压。电压。MAX232芯片适用于数字电路的芯片适用于数字电路的单一单一+5V电源电源。7.6.1 MAX232芯片简介芯片简介图图7-15 MAX232芯片引脚芯片引脚7.6.1 MAX232芯片简介芯片简介MAX232原原理理结结构构路路图图C1C4:1FC5:0.1F7.6.2 PC机与机与89C52串行通信的接口电路串行通信的接口电路图图7-17 采用采用MAX232接口的串行通信电路接口的串行通信电路PC机机串口串口MAX23212346578916151413121110C1+V+C1+V+C1-C2+C2-V-T2OUTR2INR2OUTT2INT1INR1OUTT1OUTR1INGNDVCC89C52TXDRXD+VCCC2C1C3C4C55432198769876543217.6.2 PC机与机与89C52串行通信的接口电路串行通信的接口电路图图7-17 采用采用MAX232接口的串行通信电路接口的串行通信电路本章小结本章小结本章介绍了数据通信的本章介绍了数据通信的一般概念一般概念和单片机串行和单片机串行口口基本组成基本组成与与应用应用。通信是计算机与外设之间的数据传送通信是计算机与外设之间的数据传送。通信方。通信方式有式有串行通信串行通信和和并行通信并行通信,串行通信又分为,串行通信又分为同步同步通信通信和和异步通信异步通信。MCS-51单片机有一个全双工单片机有一个全双工UART,工作方,工作方式有式有4中,中,方式方式0为移位寄存器方式,主要用来进为移位寄存器方式,主要用来进行行串行与并行数据的转换串行与并行数据的转换,方式方式1、2、3为通用的为通用的异步传送异步传送方式。方式。作作 业业4、5、7、8、12本章完本章完
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 活动策划


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!