微机原理教学课件MCS51串行通信.ppt_第1页
微机原理教学课件MCS51串行通信.ppt_第2页
微机原理教学课件MCS51串行通信.ppt_第3页
微机原理教学课件MCS51串行通信.ppt_第4页
微机原理教学课件MCS51串行通信.ppt_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1,第10章 mcs-51的串行通信,微机系统原理及应用,2,内容提要,通信的概念 mcs-51的串行通信控制器 通信及其应用,3,一、基本概念,mcs-51内部集成有一个功能强大的全双工异步串行口。 它的两个端口均采用ttl电平方式。,4,串行与并行,单片机与外界进行信息交换,统称为通信。mcs-51单片机的通信方式有两种:并行通信和串行通信。 并行通信:字符各位同时传输; 串行通信:同一字符的各位依次传输。,串行通信时将要构成数据或字符的每个二进制码位,按照一定的顺序逐位传输。按照传输期间对各位信息的控制方式,串行通信可分为同步通信方式和异步通信方式。,5,同步串行通信方式,同步通信:在同步通信方式下,在传送数据的同时还要传送时钟信号,以使接收双方可以用时钟信号来确定每个信息位。,1,1,0,0,0,6,同步串行通信方式,同步通信:在同步通信方式下,在传送数据的同时还要传送时钟信号,以使接收双方可以用时钟信号来确定每个信息位。,1,1,0,0,0,0,1,0,1,0,同步通信的缺点是要求发送时钟和接收时钟保持严格同步。,7,同步方式通信的数据格式,同步字符(syn1),同步字符(syn2),数据(data),同步通信是按数据块传送的。把传送的字符顺序地连接起来,组成数据块,在数据块前面加上特殊的同步字符,作为数据块的起始符号,由收/发一致的同步时钟在发送端发出,接收端接收到同步字符后,开始接收数据块。 同步通信的优点是传输速率快。,8,异步串行通信方式,异步通信是指通信的发送与接收设备使位用各自的时钟控制数据的发送和接收过程,发送和接收设备的时钟尽可能一致即可。,异步通信方式是以字符为单位进行传送的。,9,异步串行通信方式, 起始位:发送器是通过发送起始位而开始一个字符的传送,占1位。 数据位:起始位之后就传送数据位,在数据位中,低位在前(左),高位在后(右)。由于字符编码方式的不同,数据位占58位。,10,异步串行通信方式,奇偶校验位:用于对字符传送作正确性检查,共有3种方式可供选择,即奇校验、偶校验和无校验,由用户根据需要选定,占0或1位。 停止位:停正位在最后,用以标志一个字符传送的结束,占1位、1.5位或2位,在应用中根据需要确定。,11,无论以上何种通信方式,按照数据传输方向均可分为:单工、半双工和全双工三种方式,如图所示。,12,单工方式,单工(simplex)方式:数据的传输方式是单向的,即发送端和接收端的身份是固定的,发送端只能发送信息,不能接收信息;接收端只能接收信息,不能发送信息。,13,半双工通信,半双工(half duplex):数据可以在两个方向上进行传送,但是这种传送绝不能同时进行。,特点:双向,但不同时。,14,全双工通信,全双工(full duplex):能够在两个方向同时进行数据传送。一般实现方法是采用两个信道完成。,15,通信速率,比特率每秒传输的二进制位数,单位为bps(bit per second )。 波特率每秒钟调制信号变化的次数。,数据的传输速率可以用比特率表示。,不考虑实际通信中的调制和解调,计算机直接传输的信号只有高、低电平(逻辑0或逻辑1),那么比特率就等于波特率。,16,例10-1,某异步通信的波特率为4800,8个数据位,无校验位,一个停止位。试估算每个字符传输所需要的时间。 解:起始位1位,8位数据位,无校验位,一个停止位,则一个字符的编码为1+8+0+1=10位。波特率为4800,即4800位/秒,传输10位所需要的时间是10/48000.002083秒,即2.083毫秒。,17,二、mcs-51的串行通信控制器,单片机在进行串行数据通信时要完成两个任务:一个是数据传送,另一个是数据转换。 数据转换是指数据的串/并转换或并/串转换,因为在单片机内部使用的数据都是并行数据,因此在发送时,要把并行数据转换成串行数据;而在接收时,却要把接收到的串行数据转换成并行数据。,18,串行口的结构,内部总线,接收、发送缓冲器sbuf在物理上是独立的,因此可以进行全双工通信。虽然它们使用同一地址99h,但发送缓冲器只能写入,不能读出,而接收缓冲器只能读出,不能写入。,19,串行口的结构,内部总线,在接收时,串行数据通过引脚rxd(p3.0)进入。经移位寄存器进入接收缓冲器sbuf,再由sbuf把数据输出到片内数据总线上,构成了串行接收的双缓冲结构,以免在数据接收过程中出现下一帧数据到来时,前一帧数据还没有读走而丢失,即帧重叠错误。,20,串行口的结构,内部总线,在发送时,cpu通过片内总线向发送缓冲器sbuf写入数据,串行数据再通过引脚txd(p3.1)送出。与接收数据的情况不同,发送数据时,由于cpu是主动的,不会发生帧重叠错误,因此发送电路就不需双重缓冲结构,这样可以提高数据发送速度。,21,sm0,sm1,sm2,ren,tb8,rb8,ti,ri,串行接口的控制寄存器,与串行通信有关的控制寄存器共有3个:一是串行控制寄存器scon;二是电源控制寄存器pcon;三是中断允许寄存器ie。,串行控制寄存器scon scon是一个可位寻址的专用寄存器,单元地址为98h,位地址为9fh98h,用于串行数据通信的控制。其各位的分配及位地址如下:,22,sm0,sm1,sm2,ren,tb8,rb8,ti,ri,(1)sm0、sml:串行口工作方式选择位,可有4种工作方式选择,如下表所示。,单片机复位后,scon被清零,单片机的缺省工作方式为方式0。,23,(3)ren:允许接收控制位。renl/0时,允许/禁止接收数据。 (4)ti是发送缓冲器空标志位,也可作中断标志。硬件自动置1后,必须由软件清0。 ri是接收就绪标志位,也可作中断标志。硬件自动置1后,必须由软件清0。,sm0,sm1,sm2,ren,tb8,rb8,ti,ri,(2)sm2、tb8、rb8:多机通信控制位,一般可简单地置0。,24,电源控制寄存器pcon(87h):没有位寻址功能。,pcon中只有最高位smod与串行接口工作有关,smod是串行口波特率的倍增位。在串行接口方式1、方式2或方式3下,波特率与smod有关,当smod1时,串行口波特率提高一倍。系统复位时,smod0。,25,方式0移位寄存器输入输出方式,当sm0、sm1两位为00时,串行口工作在方式0状态下。方式0为8位同步移位寄存器输入/输出方式,实质上就是在串行口的基础上,外接移位寄存器,将串行口扩展成并行口。方式0中8位数据为1帧,不设起始位和停止位,先发送和接收最低位,波特率是固定的: 方式0的波特率=fosc/12 这种方式不适用于两个mcs-51单片机间的通讯。,串行口的工作方式,26,方式0输出(发送),rxd作串行数据输出端;txd作串行时钟输出端。 8位数据输出的顺序是低位在前,高位在后。,串行口作为并行输出口使用时,要有“串入并出”的移位寄存器(例如cd4094或74lsl64、74hcl64等)配合,其电路连接如下所示。,27,串行口的结构,内部总线,28,在发送过程中,当cpu执行一条将数据写入发送缓冲器sbuf的指令(mov sbuf,#_),机器产生一个写sbuf的正脉冲,正脉冲触发串行口开始把sbuf中的8位数据以fosc/12的固定波特率从rxd(p3.0)引脚串行输出,低位在前,高位在后;同时txd(p3.1)引脚输出同步移位脉冲。当单片机发送完8位数据后,使发送中断标志位t1置1。,29,方式0输入(接收),rxd作串行数据输入端;txd作串行时钟输出端。 8位数据输入的顺序是低位在前,高位在后。,串行口作为并行输入口使用时,要有“并入串出”的移位寄存器(例如cd4014或74lsl65、74hcl65等)配合,其电路连接如下所示。,30,方式0接收时,串行控制寄存器scon中的ren位为串行口允许接收控制位。ren=1且接收中断标志位ri=0时,单片机内部产生一个正脉冲,单片机开始接收数据。数据通过rxd(p3.0)引脚输入数据,同时txd(p3.1)为同步移位脉冲输出端。接收器也以fosc/12的固定频率采样rxd引脚的数据信息,当单片机接收完8位数据信息后,接收中断标志位ri置1,向cpu申请中断,表示已经接收完一帧数据,开始准备接收下一组数据。,31,例:静态数码显示技术,p3.7,32,m_data segment data rseg m_data dispbuf: ds 4 disp segment code rseg disp display: mov scon,#00h ;串行方式0 clr p3.7 setb p3.7 mov b,#4 ;数据位数 mov r0,#dispbuf ;取显示缓冲区首址 l1: mov a,r0 ;取数 mov dptr,#table;加一个偏移量 movc a,a+dptr ;查表 x: mov sbuf,a ;标号用于地址计算 jnb ti, $ ;等待送数结束 clr ti ;清除发送就绪标志 inc r0 ;调整数据指针 djnz b , l1 ;循环显示4个数据 ret table: db 12h,0f6h,4ah,0c2h,0a6h,83h,03h,0f2h db 02h,82h,22h,07h,1bh,16h,0bh,2bh,33,数码管动态显示,34,方式18位异步串行通信方式,当sm0、sm1为01时,串行口工作在方式1下。方式1是10位为一帧的异步通信方式。txd为数据发送引脚,rxd为数据接收引脚,其帧的格式如下图所示,包括1位起始位、8位数据位和1位停止位,先发送或接收最低位。,35,方式18位异步串行通信方式,方式1发送(输出) 由一条写发送sbuf的指令开始。随后在串行口由硬件自动加入起始位和停止位,构成一个完整的帧格式,然后在设定波特率的作用下,由txd端串行输出。一个字符帧发送完后,使txd输出线维持在“1”的状态下,并将scon寄存器中的ti置“1”,通知cpu可以接着发送下一个字符。,36,方式18位异步串行通信方式,方式1接收(输入) 接收数据时,scon的ren位应处于允许接收状态(软件置ren=1)。在此前提下,串行口以16倍波特率的速率采样rxd端,当采样到从“1”向“0”状态跳变时,就认定是接收到起始位。随后在移位脉冲的控制下,把接收到的数据位移入接收寄存器中。直到停止位到来之后置位中断标志ri,通知cpu从sbuf中取走接收到的一个字符。,37,方式1波特率的设定,方式1的波特率是可变的,因为其由定时器t1的溢出率来确定 波特率=,t1的溢出率就是定时器每秒钟溢出的次数。在串行口工作时,t1常设置为定时器工作方式2,因为这种方式由硬件自动重装初值,精度较高,避免了因软件频繁重装初值而带来的定时误差。,t1的溢出率=,38,例10-4 t1作为波特率发送器,取常用波特率为9600,cpu时钟为11.0592mhz,分别在smod=0和smod=1的情况下,初始化t1。,smod=0,波特率=,x=253=0fdh,smod=1,波特率,x=250=0fah,39,两种初始化程序,;smod=0的初始化语句 mov a,tmod anl a,#0fh orl a,#20h mov tmod,a mov th1,#(-3) mov tl1,#(-3) mov a,pcon anl a,#7fh mov pcon,a setb tr1,;smod=1的初始化语句 mov a,tmod anl a,# 0fh orl a,#20h mov tmod,a mov th1,#(-6) mov tl1,#(-6) mov a,pcon orl a,#80h mov pcon,a setb tr1,40,查询方式数据通信举例,串行通信的初始化 查询方式的发送 查询方式的接收,41,初始化子程序,public init_sport public _send_char public get_char sio_group segment code rseg sio_group ;串行口初始化子程序,无参数,无返回值 init_sport:mov scon,# 50h ;串行口通信方式1 mov a,tmod anl a,#0fh orl a,#20h mov tmod,a mov th1,#(-3) mov tl1,#(-3) mov a,pcon anl a,#7fh mov pcon,a setb tr1 ret,42,发送数据,;发送子程序,参数在r7中,为待发字符,无返回值 _send_char: mov a,r7 mov sbuf,a jnb ti,$ ;等待直到ti=1 clr ti ;清除ti ret,43,接收数据,;接收子程序,无参数,有返回值在r7 get_char: jnb ri,$ clr ri mov a,sbuf mov r7,a ret end,44,简单应用主程序(首部),extrn code(init_sport,_send_char,get_char) ?stack segment idata rseg ?stack ;相对的段 ds 1 ;保留一个字节占位 cseg at 0000h ljmp start m_job segment code rseg m_job start: mov sp,#?stack-1;设置堆栈 call init_sport ;初始化串行口 ;在间接寻址段定义堆栈,该说明必须放在主模块,45,续,mov b,#19 ;字符串长度 mov dptr,#message;字符串首地址 print: clr a ;偏移量恒定,修改dptr取数,变通用法 movc a,a+dptr ;查表指令读字符串 mov r7,a ;传递参数 call _send_char ;调用发送子程序 inc dptr ;修改dptr djnz b,print ;字符串结束判断 always: ;无限循环 call get_char ;取读串行口数据,返回值在r7 inc r7 ;对收到的数变化一下 call _send_char ;再发送出去 sjmp always message: db “hello,mcs-51 world!” ;字符串定义 end,46,中断方式数据通信举例,串行口工作之前,应对其进行初始化,主要是设置产生波特率的定时器t1、串行口控制和中断控制。具体步骤如下: (1)确定t1的工作方式(编程tmod寄存器); (2)计算t1的初值,装载th1、tll; (3)启动t1(编程tconn中的trl位); (4)确定串行口控制(编程scon寄存器); (5)串行口在中断方式工作时,要进行中断设置(编程ie、ip寄存器)。,47,数据段定义,public init_sport public send_len public send_buf public recdata public xflag sio_buf segment data ;内部ram的数据段 rseg sio_buf ;说明为可移动段 send_len: ds 1 ;发送数据长度 send_addr: ds 1 ;发送地址 send_buf: ds 16 ;发送数据缓冲区 recdata: ds 1 ;接收1字节缓冲区 sio_flag segment bit ;定义一个位寻址段 rseg sio_flag ;说明为相对的段 xflag dbit 1 ;接收到新数据标志,48,中断向量及串口初始化代码,cseg at 4*8+3 ;串行通信的中断向量地址 ljmp sport_

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论