学习情景五AT89S52串行通信学习情景五AT89S52串行通信学习情景五AT89S52串行通信学习目标:•了解串行通信的基本知识•掌握串行口的工作方式•掌握波特率的设计•掌握串行口工作方式的应用•掌握程序调试的基本方法和技巧。技能目标:•会对串行口进行初始化。•会计算串行口通信波特率。•能够实现单片机与单片机之间、单片机和PC机之间的通信。学习情景五AT89S52串行通信项目一单片机点对点通信第一部分项目要求利用AT89S52实现单片机点对点通信。要求将存放在甲机的数据存储器20H—27H单元中数据,首先在甲机上显示,然后发送到PC机,进而再发送到乙机,以实现单片机与PC机和单片机与单片机之间的通信。学习情景五AT89S52串行通信第二部分相关知识一、串行通信基本知识(一)串行通信的基本概念单工形式:数据只能单方向从一端向另一端传送;如:有线电视节目。发送端接收端数据线地线半双工形式:数据可以双向传送,但任一时刻只能向一个方向传送。既可分时双向传送数据。如:某些对讲机单工发送端接收端接收端发送端数据线地线半双工学习情景五AT89S52串行通信全双工形式:同时双向传送数据,因此,全双工配置是一对单向配置,它要求两端的通信设备都具有完整和独立的发送和接收能力。通信效率最高,适合于计算机之间的通信。发送端接收端接收端发送端数据线地线全双工数据线学习情景五AT89S52串行通信(二)串行通信基本通信方式通信双方要正确的进行数据传输,需要解决何时开始传输、何时结束传输,以及数据传输速率等问题,这就是数据传输中的同步问题。通常,实现数据同步有两种方式:异步通信和同步通信。1.异步通信:数据一帧一帧地传送。发送端和接收端可以由各自的时钟控制数据的发送和接收,两个时钟源彼此独立,互不同步。数据的一帧:由一个字符代码组成。学习情景五AT89S52串行通信学习情景五AT89S52串行通信帧格式:一个字符由四部分组成:起始位、数据位、奇偶校验位和停止位。•起始位(0):位于字符帧的开头,占用一位,用来通知接收设备一个待接收的字符开始到达。•数据位:紧跟起始位后,5~8位数据(规定低位在前,高位在后)•奇偶校验位(可省略),占一位,用于对字符传送作正确性检查,因此奇偶校验位是可选择的,共有三种可能,即奇偶校验、偶校验和无校验,由用户根据需要选定。•停止位(1)停止位用来表征字符的结束。停止位可以是1位、1.5位或2位。接收端收到停止位后,知道上一字符已传送完毕学习情景五AT89S52串行通信2.同步通信在一个数据块的开头使用同步字符。数据传送时使用同一频率的脉冲来实现发送端与接收端的严格时间同步。学习情景五AT89S52串行通信二、串行通信总线标准及其接口传输距离不同,可以选择不同的总线标准。89S5289S5289S5289S52如果是长距离传送,可采用RS-485标准。短距离传送,只需要TX、RX和GND三根线。距离在15米左右,采用RS-232标准接口。学习情景五AT89S52串行通信(一)RS-232标准RS-232C标准是美国EIA(电子工业联合会)与BELL等公司一起开发的于1969年公布的通信协议。1.RS-232C的电气特性(1)数据线上的信号电平mark(逻辑1)=-3~-15Vspace(逻辑0)=+3~+15V(2)控制和状态线上的信号电平ON(逻辑0)=+3~+15V(接通)OFF(逻辑1)=-3~-15V(断开)学习情景五AT89S52串行通信电平转换RS-232C接口采用双极性信号、公共地线和负逻辑;不能和TTL电平直接相连,使用时必须进行电平转换,否则将使TTL电路烧坏,实际应用时必须注意!在实际应用时,必须通过专用电平转换芯片进行电平转换。电平转换芯片MC1488、MC1489、MAX232MC1488可实现TTL→RS-232的电平转换;MC1489可实现RS-232→TTL的电平转换。MAX232芯片可完成TTL到EIA双向电平的转换学习情景五AT89S52串行通信89S5289S52通过MAX232实现RS-232C电平转换学习情景五AT89S52串行通信TTL到EIA电平的转换学习情景五AT89S52串行通信MAX232管脚说明如下:①C1+、C1-、C2+、C2-是外接电容端;②R1IN、R2IN则是2路RS-232C电平信号接收输入端;③R1OUT、R2OUT是2路转换后的TTL电平接收信号输出端,送80S52的RxD接收端;④T1IN、T2IN是2路TTL电平发送输入端,接80S52的TxD发送端;⑤T1OUT、T2OUT是2路转换后的发送RS-232C电平信号输出端,接传输线;⑥V+经电容接电源十5V;⑦V-经电容接地。学习情景五AT89S52串行通信PC机与AT89S52单片机串行通信电路图中外接电解电容C1、C2、C3、C4用于电源电压变换,提高抗干扰能力,它们可以取相同数值电容1.0μF/16V。电容C5用于对+5V电源的噪声干扰进行滤波,其值一般为0.1μFAT89S52TXDRXDGNDC1+C1-C2+C2-++C1C2T1inT1outR1inR1outVGNDVCCV+MAX232++C3C5C4+5VGNDTXDRS232RXDIBM-PC学习情景五AT89S52串行通信2.信号接口引脚信号名功能1DCD载波检测2RXD接收数据3TXD发送数据4DTR数据终端准备就绪5GND信号地线6DSR数据准备完成7RTS发送请求8CTS发送清除9RI振铃指示学习情景五AT89S52串行通信(二)AT89S52串行口结构与控制1.串行口的结构学习情景五AT89S52串行通信SM0、SM1:串行口工作方式控制位,两位对应四种工作方式,如下表所示(fosc是晶振频率)。2.串行口控制(1)串行口控制寄存器SCON(98H)学习情景五AT89S52串行通信SM2:多机通信控制位,主要用于方式2和方式3当串行口以方式2或方式3接收时,如SM2=1,则只有当接收到的第9位数据(RB8)为1,才将接收到的前8位数据送入SBUF,并置位RI产生中断请求,否则将接收到的前8位数据丢弃。SM2=0,不论第9位数据为0还是为1,都将前8位数据装入SBUF中,并产生中断申请。在方式0时,SM2=0。REN:允许接收控制位REN=1,允许接收;REN=0,禁止接收。学习情景五AT89S52串行通信TB8:发送数据第9位方式0,此位未使用方式1,此位未使用方式2和方式3:TB8=1,说明该发送帧为地址帧。TB8=0,说明该发送帧为数据帧RB8:接收数据第9位方式2和方式3:RB8存放接收到的第9位数据,代表接收数据的某种特征。若SM2=1,RB8=1,说明收到帧为地址帧。学习情景五AT89S52串行通信TI:发送中断标志在一帧数据发送完时置位。TI=1,申请中断,中断被响应后,TI不能自动清零,必须由软件清零。RI:接收中断标志在接收到一帧有效数据后,由硬件置位。RI=1,申请中断。RI不能自动清零,必须由软件清零。学习情景五AT89S52串行通信(2)电源控制寄存器PCONPCON不能位寻址。SMOD—串行口波特率的倍增位当SMOD=1时,串行口波特率加倍。系统复位时,SMOD=0。学习情景五AT89S52串行通信三、AT89S52串行口工作方式(一)串行口波特率设计1.波特率波特率的定义是每秒钟传送二进制数码的位数(亦称比特数),单位是b/s。假设数据传送速率是120字符/s,而每个字符格式包含10个代码(1个起始位、1个终止位、8个数据位)。这时,传送的波特率为(10b/字符)×120字符/s=1200b/s每一位代码的传送时间Td为波特率的倒数。学习情景五AT89S52串行通信2.波特率设计方式0波特率方式0波特率=fosc/12方式2波特率方式2波特率=(2SMOD/64)×foscSMOD为0时,波特率等于振荡器频率的1/64SMOD为1时,波特率等于振荡器频率的1/32。方式1和方式3的波特率串行口方式1和方式3的波特率由定时器T1或T2的溢出率和SMOD所确定。波特率=2smod/32×(定时器1溢出率)学习情景五AT89S52串行通信例如振荡频率fosc=11.0596MHZ,若SMOD=0,通信波特率为9600波特,则X=256-[11.0596×106×(1+0)]/(9600×384)=253=FDH初始化程序如下:MOVTMOD,#20H;设T1为定时方式2MOVTHl,#0FDH;设定波特率为9600bit/sMOVTLl,#0FDHSETBTRl;启动定时器MOVPCON,#00H;SMOD=0MOVSCON,#50H;串行口工作在方式1学习情景五AT89S52串行通信(二)串行口工作方式1.工作方式0当SM0SMl=00时,串行接口选择工作方式0,为同步移位寄存器输入/输出方式,常用于扩展I/O口。串行数据从RXD(P3.0)端输入或输出,同步移位脉冲由TXD(P3.1)送出,作为外接部件的同步信号。发送或接收的是8位数据(低位在前,高位在后)。其波特率固定为fosc/12。发送完置中断标志TI为1,请求中断。在再次发送数据之前,必须由软件清TI为0。学习情景五AT89S52串行通信接收前置REN=1和RI=0,当8位数据接收结束,RI被置“1”,可通过指令MOVA,SBUF将数据读入。下图采用一个串入并出移位寄存器,TXD连接串行口输出移位寄存器164的时钟端,RXD连接164的输入端,P1.0连接164的CLR选通端。89S5274LS164学习情景五AT89S52串行通信根据硬件连接,方式0发送数据程序如下:SETBP1.0;选通74LS164MOVSCON,#00H;串口工作在方式0MOVA,#DATAMOVSBUF,A;发送数据JNBTI,$;等待发送完?CLRTI;清除TI中断标志CLRP1.0;关闭74LS164学习情景五AT89S52串行通信2.工作方式1工作方式1,SM0SMl=01,为可变波特率的8位异步通信方式。发送数据由TXD端输出,接收数据由RXD端输入。方式1以10位为一帧传输,设有1个起始位(0),8个数据位和1个停止位(1)。其帧格式起始位(0),8个数据位和1个停止位(1)。起始D0D1D2D3D4D5D6D7停止01学习情景五AT89S52串行通信发送时,数据从TXD端输出,当数据写入发送缓冲器SBUF后,启动发送器发送。当发送完一帧数据后,置中断标志TI为1。方式1所传送的波特率取决于定时器1的溢出率和PCON中的SMOD位。接收时,由REN置1,允许接收,串行口采样RXD,当采样由1到0跳变时,确认是起始位“0”,开始接收一帧数据。当RI=0,且停止位为1或SM2=0时,停止位进入RB8位,同时置中断标志RI;否则信息将丢失。所以,方式1接收时,应先用软件清除RI或SM2标志。学习情景五AT89S52串行通信【例5.1】89S52串行口按双工方式收发ASCII字符,甲机发送的字符从外部RAM的1000H开始,检测到结束字符0AH就结束发送,乙机将接收的字符放在内部RAM的30H开始的空间。要求通信的波特率为9600波特,用中断方式编写通信程序。主程序:MOVTMOD,#20H;定时器1设为工作方式2MOVTLl,#0FDH;定时器初值MOVTHl,#0FDH;8位重装值学习情景五AT89S52串行通信SETBTRl;启动定时器1MOVSCON,#50H;将串行口设置为方式1,REN=lMOVDPTR,#1000H;发送数据区首址送DPTRMOVR0,#30H;接收数据区首址送R0SETBESSETBEA;开中断ACALLSEND;先发送一个字符L00P:SJMP$;等待中断学习情景五AT89S52串行通信发送子程序SEND:CLRTIMOVA,@DPTR;取发送数据到AINCDPTR;修改发送数据指针MOVSBUF,A;发送ASCII码CJNEA,#0AH,SEN1;是否是结束字符CLRES;关闭串口中断SE