MCS51串行通信.ppt_第1页
MCS51串行通信.ppt_第2页
MCS51串行通信.ppt_第3页
MCS51串行通信.ppt_第4页
MCS51串行通信.ppt_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

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

文档简介

1,10 mcs-51的串行通信,通信的概念 mcs-51的串行通信控制器 通信及其应用,2,基本概念,通信方式 串行与并行 单工、半双工、全双工 波特率 异步通信的字符编码 同步与异步,3,串行与并行,并行通信:字符各位同时传输 串行通信:同一字符的各位依次传输 字符与字符之间总是串行传输 优缺点比较 同等技术条件下的速度 成本(硬件成本、传输协议的兼容性),4,单工通信,单工(simplex) 特点:仅能进行一个方向的数据传送,5,半双工通信,半双工(half duplex) 特点:数据可以在两个方向上进行传送,但是这种传送绝不能同时进行。 【双向,但不同时】,6,全双工通信,全双工(full duplex) 特点:能够在两个方向同时进行数据传送。,7,通信速率,比特率每秒传输的二进制位数,单位为bps(bit per second )。 波特率每秒传输的离散状态数(也称离散状态)。 在一个信道上,如果只有高、低电平两种离散状态(分别代表“1”和“0”),则波特率与比特率刚好一致。 如果在某个信道中可以传输多种不同的离散状态,则每个状态可以携带两位或两位以上的二进制数,此时,波特率就不等于比特率。 波特率有标准值,8,异步(asynchronous)通信字符编码,以字符为单位传输 帧的组成: “起止同步式” 效率、时钟的准确性要求,9,例10-1,某异步通信的波特率为4800,8个数据位,无校验位,一个停止位。试估算每个字符传输所需要的时间。 解:起始位1位,8位数据位,无校验位,一个停止位,则一个字符的编码为1+8+0+1=10位。波特率为4800,即4800位/秒,传输10位所需要的时间是10/48000.002083秒,即2.083毫秒。,10,同步方式(synchronous),实现原理:数据线、时钟线 具体实现:增加导线、增加信道、锁相环提取同步时钟、数据与时钟编码(曼切斯特) 面向位的传输(相对于字符) 效率高,成本高,同步字符(syn1),同步字符(syn2),数据(data),11,异步串行通信的常用物理标准,异步串行通信控制器仍然是ttl兼容电平 逻辑“1”和逻辑“0”的电压区分度只有23v,这不适于稍长距离的传输 rs-232电平标准(eia rs-232-c) 信号线为负逻辑。即:逻 辑“1”(-3 -15v);逻辑“0”(+3+15v) 波特率9600时,可靠的通信距离15m左右,12,9针接口线的信号说明(db9),13,串行通信控制器,intel 8250 16c50 16c550 16c552 16c554 intel 8251 z80-pio mcs-51片上串行通信接口 txd rxd 引脚 sbuf scon pcon寄存器 t1(or t2)波特率发生器,14,mcs-51串行口工作方式,方式0串行移位/ 方式18位异步串行通信(波特率可变) 方式29位异步串行通信(波特率固定) 方式39位异步串行通信(波特率可变) 串行口控制字寄存器 scon(98h),可位寻址。,sm0,sm1,sm2,ren,tb8,rb8,ti,ri,15,sm2多机通信控制位,一般可简单地置0。 ren允许接收控制位。renl/0时,允许/禁止接收数据。 tb8是9位数据通信(方式2,3)发送时的第9位数据,是尾随sbuf中的8位数据。tb8作字符发送时的奇偶校验位,也可作多机通信的地址指示位。 rb8是9位数据通信(方式2,3)时接收到的第9位数据。 ti是发送缓冲器空标志位,也可作中断标志。 ti必须由软件清0。 ri是接收就绪标志位,也可作中断标志。 ri必须由软件清0。,sm0,sm1,sm2,ren,tb8,rb8,ti,ri,16,pcon(87h),没有位寻址功能。 当单片机复位时,smod位被清零。,pcon主要用于控制cmos型mcs51芯片的低功耗操作。 其中与串行口有关的只有第7位smod。 该位控制串行口方式l、2、3时的波特率。,17,方式0移位寄存器输入输出方式,串行同步方式,多作移位寄存器扩展之用。 rxd作串行数据线i/o(输入或输出)。 txd作串行时钟(输出)。 8位数据输入或输出的顺序是低位在前,高位在后。下图为方式0的时序图。,18,静态数码显示技术,19,74ls164,20,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 ;取显示缓冲区首址 l: mov a,r0 ;取数 add a,#(table-x) ;加一个偏移量 movc a,a+pc ;查表 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,21,方式18位异步串行通信方式,传送8位数据位 按异步编码格式,自动插入起始位、停止位 txd为发送引脚 rxd为接收引脚 cpu写sbuf激活一个字符的发送过程 发送完成后硬件置ti为1,需软件将ti清0 异步接收需设置ren=1。接收到的字符保存在sbuf ,并置ri=1。ri需软件清0。,22,异步串行通信的编程参考图,fosc,/12,t1 or t2,pcon.7,0,1,/2,波特率,sbuf,bus,txd,sbuf,rxd,bus,ti,ri,并/串,串/并,23,例10-4 t1作为波特率发送器,取常用波特率9600,cpu时钟为11.0592mhz,试初始化t1。 一般cpu时钟接近于其工作上限,同时兼顾标准的波特率值。允许差最大为78%, 常用11.0592mhz的时钟频率,12分频以后为0.9216mhz = 921600hz; 波特率为9600时,波特率时钟为960016=153600hz; 如果选smod=0,则中间多出一个2分频,所以t1的输出时钟频率需要达到波特率时钟的2倍,即1536002 = 307200hz。t1的分频数为 921600hz307200hz = 3; 如果选smod=1,t1的输出时钟频率就是波特率时钟,即153600hz。t1的分频数为 921600hz153600hz = 6,24,两种初始化方法,;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,25,查询方式数据通信举例,串行通信的初始化 查询方式的发送 查询方式的接收,26,初始化子程序,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,27,发送数据,;发送子程序,参数在r7中,为待发字符,无返回值 _send_char: mov a,r7 mov sbuf,a jnb ti,$ ;等待直到ti=1 clr ti ;清除ti ret,28,接收数据,;接收子程序,无参数,有返回值在r7 get_char: jnb ri,$ clr ri mov a,sbuf mov r7,a ret end,29,简单应用主程序(首部),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 ;初始化串行口 ;在间接寻址段定义堆栈,该说明必须放在主模块,30,续,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,31,中断方式数据通信举例,初始化 中断服务程序的安排 现场保护与恢复 一些技巧,32,数据段定义,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 ;接收到新数据标志,33,中断向量及串口初始化代码,cseg at 4*8+3 ;串行通信的中断向量地址 ljmp sport_srv ;跳转到中断服务程序的实际入口 sio_group segment code ;与串口通信相关的代码段 rseg sio_group ;串行口初始化子程序,无参数,无返回值,中断方式通信 init_sport: mov scon,# 50h ;串行口通信方式1 mov tmod,#20h ;t1方式2,波特率发生器 mov th1,#(-3) ;11.0592mhz时可达9600bps mov tl1,#(-3) mov pcon,#00h setb tr1 ; 启动波特率定时器 setb es ;允许串行口中断 setb ea ;允许cpu中断 ret,34,串行通信中断服务程序 现场保护与恢复部分代码,using 1 sport_srv: push acc push psw setb rs0 ; 选bank 1 clr rs1 re_enter: jbc ti,send ;重入标号 jbc ri,receive exit: pop psw pop acc reti,35,发送与接收代码,send:

温馨提示

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

评论

0/150

提交评论