单片机原理及应用(C语言版)7_第1页
单片机原理及应用(C语言版)7_第2页
单片机原理及应用(C语言版)7_第3页
单片机原理及应用(C语言版)7_第4页
单片机原理及应用(C语言版)7_第5页
已阅读5页,还剩83页未读 继续免费阅读

下载本文档

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

文档简介

1、单片机原理及应用(c语言版)第7章mcs-51单片机串行口主 编:周国运本章制作:鲁庆宾申国水利水电出版牡第7章mcs-51单片机串行口m亍通信基本知识7.2 im亍口结构及控制7.3 im亍口工作方式7.4串行口应用举例 7.5单片机与pc机通信的接口电路本章要点本章主要讲述mcs51单片机串行口的 结构工作原理以及应用。主要内容包括串行通信基本知识.mcs- 51单片机串行口结构串行口工作方式以及 单片机与pc机通信的接口电路。7.1串行通信基本知识主要内容7.1.1数据通信7.1.2异步通信和同步通信7.1.3波特率7丄4通信方向71.5串行通信接口种类7.1.1数据通信计算机与外界的信

2、息交换称为通信。基本的通信方法有并行通信和串行通信两种o1. 并行通信单位信息(通常指一个字节)的各位数据 同时传送的通信方法称为并行通信o2. 串行通信单位信息的各位数据被分时一位一位依次 顺序传送的通信方式称为串行通信。p1.0dou vntypi-r丄丄u丄ivau 1 aup1.2-d2 夕卜txdvrxd夕卜p1.3v-d3 部89c52 p1.4-d4 设p1.5v-d5 备89c52p1.6-d6p1.7v-d7gnd-gndgndgnd图71并行通信示意图图72串行通信示意图从图中可以看出:并行通信连线多,速度快,适合近距离通信;串行通信连线少,速度慢,适合远距离通信。7.1.

3、2异步通信和同步通信1.异步通信异步通信中,传送的数据可以是一个字符 代码或一个字节数据,数据以帧的形式一帧一 帧传送。0/1 0/1停止位起始位第n个字符8位数据第n+1个字符校验位00/10/10/10/10/10/10/10/10/111停止位起始位0 0/1 0/1 图73异步通信的一帧数据格式2同步通信在同步通信中,每一数据块发送开始时, 先发送一个或两个同步字符,使发送与接收 取得同步,然后再顺序发送数据。数据块的 各个字符间取消起始位和停止位,所以通信 速度得以提高o同步字符1同步字符2数据流数据数据 图74同步通信数据帧格式7.1.3波特率在串行通信中,对数据传送速度有一定 要

4、求。波特率表示每秒传送的位数,单位为 b/s (记作波特)。例如:数据传送速率为每秒钟10个字符, 若每个字符的一帧为11位,则传送波持率为:mb)字符 x10 字符/s =110b/s异步通信的传送速率一般在5019 200b/s 之i可o7.1.4通信方向单工方式:一对传输线只允许单方向传送aidl-lxzt数据;半双工方式:一对传输线允许向两个方向中的任一方向传送数据,但不能同时进行;全双工方式:用两对传输线连接在发送器和接收器上,发送和接收能同时进行。接 收 器(a)单工方式(c)全双工方式图75串行通信传输方式根据串行通信格式及约定(如同步方式 通信速率数据块格式等)不同,形成了 许

5、多串行通信接口标准,如常见的:uart (串行异步通信接口八usb (通用串行总线接口). i2c (集成电路间的串行总线)spi (串行外设总线八 485总线.can总线接口等。7.2串行口结构及控制主要内容7.2.1 mcs-51串行口结构 722与串行口有关的特殊功能寄存器723波特率设计图76串行口方式1、3内部结构示意简图722与串行口有关的特殊功能寄存器1.控制状态寄存器scon用于定义串行通信口的工作方式和反映串 行口状态,其字节地址为98h,复位值为 0000 0000b,可位寻址格式为:d7 d6 d5 d4 d3 d2 di d0smo smi sm2 ren tb8 rb

6、8 ti ri smo和smi (scon.7> scon.6):串行 口工作方式选择位。sm0sm1工作方式功能说明波特率00方式0同步移位寄存器fosc/1201方式18位数据uart可变(t1溢岀率/32或/16)10方式29位数据uartfosc/64 或 fosc/3211方式39位数据uart可变(t1溢岀率732或/16)sm2 (scon.5):多机通信控制位,在 方式2或3中使用。ren (scon.4):允许接收控制位,由 软件置1或清0。 tb8 (scon.3):发送数据的第9位。 rb8 (scon.2):接收数据的第9位。 ti (scon.1):发送中断标志

7、。 ri (scon.o):接收中断标志。关于ti和ri:串行发送中断标志ti和接收中断ri是同一个中断源,cpu事先不知道是发送中断标志ti还是接收中断标志ri产生 的中断请求,所以,在全双工通信时,必须 由软件来判别。2.电源控制寄存器pcon电源控制寄存器pcon (地址为87h)中只 有smod位与串行口工作有关。d7 d6 d5 d4 d3 d2 di dosmodgf1gf0pdidlsmod (pcon.7):波特率倍增位。串行口工作于方式4方式2和方式3时,当smod = 1时,串行口波特率加倍。复位值为0000 oooobo pcon寄存器不能进行位寻址。723波特率设计方式

8、0和方式2的波特率是固定的,方式1和方式3的波特率是由定时器t1的溢出率来 决定的。在增强型单片机中,也可以使用t2 作波特率发生器。1.方式0的波特率固定为振荡频率的1/12。并不受pcon寄存器中smod位的影响。方式0的波特率二fosc/122.方式2的波特率接收与发送的移位时钟由振荡频率fosc的 第二节拍p2时钟(fosc/2)给出,所以,方 式2波特率取决于pco n中smod位的值: 当smod=0时,波特率为fosc的1/64;若 smod=1,则波特率为fosc的1/32。即方式2的波特率二2smod x fosc/643. 方式1和方式3的波特率(1) t1作波特率发生器爪

9、mod方式x 3的波特率二*x (t1溢出速率)爪mod即波特率=飞一xx/初值)在最典型应用中,定时器t1选用定时器模式2,此时n=8,设定时器的初值为x:于是,x=256 -foscx(smod+l)384x波特率(2) t2作波特率发生器在增强型单片机中,还可以使用t2作为 波特率发生器。当寄存器t2con的位 tclk=1和(或)rclk=1时,允许串行口 从t2获得发送和(或)接收的波特率。串行口方式x 3的波特率二t2溢出率/16定时器2作波特率发生器时,计数在每个状态周期递增。这样:方式4 3的波特率二振荡频率32x (65536-(rcap2h, rcap2l)7.3串行口工作

10、方式主要内容7.3.1串行口方式07.3.2串行口方式17.3.3串行口方式2和方式3方式0为同步移位寄存器输入/输出方式, 常用于扩展i/o 口。rxd为数据输入或输出, txd为移位时钟,作为外接部件的同步信号。方式0不适用于两个89c52之间的数据通 信,可以通过外接移位寄存器来实现单片机 的接口扩展。在这种方式下,收/发的数据为8位,低 位在前,无起始位.奇偶校验位及停止位, 波特率是固定的。7.3.1串行口方式03 4 5 6 10 11 12 1311 12 13 14 3 4 5方式1真正用于串行发送或接收,为10位通用异步接口。txd与rxd分别用于发送与 接收数据。收发一帧数

11、据的格式为1位起始位.8位数 据位(低位在前)1位停止位,共10位。在 接收时,停止位进入scon的rb8,此方式 的传送波特率可调。串行口工作在方式2和方式3均为每帧11 位异步通信格式,由txd和rxd发送与接 收(两种方式操作是完全一样的,不同的 只是特波率)。每帧11位:即1位起始位、8位数据位 (低位在前).1位可编程的第9数据位和1 位命止位。发送时,第9数据位(tb8)可以设置为 1或0,也可将奇偶位装入tb8;接收时,第9数据位进入scon的rb8。主要内容7.4.1同步方式应用7.4.2异步方式应用7.4.1同步方式应用msc-51单片机的串行口在方式0时,以 同步方式操作。

12、外接串入併出或并入/串出 器件,可实现i/o 口的扩展。例72用89c52串行口外接164串入併出 移位寄存器扩展8位并行输出口,外接165并 入/串出移位寄存器扩展8位并行输入口。8位 并行输出口的每位都接一个发光二极管,要 求从8位并行输入口读入开关的状态值,使 闭合开关对应的发光二极管点亮。如图713 所示。图7-13方式0扩展输入输出电路,74hc164用于串/并转换,解:数据的输朋岀通过rxd接收和发送, 移位时钟通过txd逵吐 74hc165用于并/串转換。=1c语言程序清单: #include<reg52.h> sbit p1_o=p1ao; sbit p1_1=p1

13、a1;unsigned char datal; void main()scon=oxlo;串行口方式0,允许接收es=1;允许串行口中断ea=1;p1_o=o;pl_l=l;pl_l=o;sbuf=o;while(l);void s_srv() interrupt 4if(ti)ti=0;pl_0=l;关闭并行输出 并行置入数据 开始串行移位 送入串行数据等待中断 中断服务程序发送中断打开并行输岀else ri=o; datal=sbuf; p1_o=o; sbuf=datal; pl_l=l; p1_1=o;汇编语言程序清单:org 0000hsjmp mainorg 23hsjmp s_s

14、rv接收中断读取接收的数据关闭并行输出送入串行数据为接收下一次数据做准备;串行口中断服务程序7.4.1同步方式应用main:movscon,#10hsetbessetbeamova,#0clrp1.0movsbuf,asetbpl.lclrpl.lsjmp$;串行口方式0初始化;关闭并行输出;开始串行输出;等待中断s_srv:jbcclrmovclrcplmovsetbclrretisend:setbretiti,send ri a,sbuf p1.0a sbuf,apl.lpl.lp1.07.4.2异步方式应用串行口方式1与方式3很近似,波特率设置一样,不同之处在于方式3比方式1多了一个 数

15、据附加位。方式2与方式3基本一样(只是波特率设置不同),接收/发送11位信息:开始为1位起 始位(0),中间8位数据位.数据位之后为1 位程控位(由用户置scon的tb8决定),最 后是1位停止位(1) o只比方式1多了一位程控位。例73将片内ram 50h5fh中的数据串行发送,用第9个数据位作奇偶校验位,设晶 振为11.059 2mh®波特率为2 400b/s,编制串行口方式3的发送程序。解:用tb8作奇偶校验位,在数据写入发 送缓冲器之前.先将数据的奇偶位p写入tb8, 这时,第9位数据作奇偶校验用,发送采用中 断方式。c语言程序清单:#include<reg52.h&g

16、t;unsigned char i=0;unsigned char an*町16 _at_ 0x50; 发送缓冲区 void main() scon=oxco;串行口初始化tmod=0x20;定时器初始化thl=0xf4; tll=0xf4;tr1=1;es=1;ea=1;acc=arrayi;tb8=p;sbuf=acc; while(l);中断初始化发送第_个数据送累加器,目的取p位void server() interrupt 4 ti=0;acc=arr 町+i;tb8=p;sbuf=acc; if(i=16)es=0;串行口中断服务程序清发送中断标志取下_个数据发送完毕,禁止串口中断

17、汇编语言程序清单:orgsjmporgsjmpmain:0000hmain 23h servermov mov mov mov setb setb setb mov movscon,#ocoh tmod,#20h th1,#of4h tl1,#of4h triesear0,#50hr7,#0fh;上电,转主程序;转中断服务程序;串行口方式3初始化 淀时器1工作在方式2;允许串行口中断;cpu开中断movmovmovmovsjmpserver:clrincmovmovmovmovdjnzclrendt:retia,r0c,ptb&csbuf,a$tiroa,r0c,ptb&csb

18、uf,ar7,endtes濫豔臨标志;发送下一个数据;判断数据块是否发送完 ;否则,禁止串行口中断例74编写一个接收程序,将接收的16字节数据送入片内ram 50h5fh单元中。设第9个数据位作奇偶校验位,晶振为11.059 2 mhz,波特率为2 400b/s o解:rb8作奇偶校验位,接收时,取出该位 进行核对,接收采用查询方式。c语言程序清单:#include<reg52.h>unsigned char i;unsigned char array16 _at_ 0x50;接收缓冲区串行口初始化,允许接收void main()scon=oxdo; tmod=0x20; thl=

19、0xf4;tll=0xf4;tr1=1;for(i=0;i<16;i+) while(iri);ri=o;acc=sbuf;if(rb8=p) arrayi=acc;elsefo=1;break;while(l);循环接收16个数据 等待一次接收完成校验正确 校验不正确movmovmovwait:jnbclr汇编语言程序清单:main:mov tmod,#20hmov th1,#of4hmov tl1,#of4hsetb triscon,#odohr0,#50hr7,#10hri,$rimov a,sbuf;定时器初始化;串口初始化,允许接收;首地址送r0 澈据长度送r7;等待接收完成

20、;清中断标志 ;读数到累加器jnb p,pnpjnb rb&error sjmp rightpnp: jb rb&errorright:mov r0,a inc ro djnz r7,wait clr fo reterror:setb foret;p=0,转pnp;p=1, rb8=0,转岀错;p=0, rb8=1,转出错;存数;修改地址指针;未接收完,继续;置正确接收标志f0=0f错误接收标志fo=1例75用第9个数据位作奇偶校验位,编 制串行口方式3的全双工通信程序,设双机将 各自键盘的按键键值发送给对方,接收正确 后放入缓冲区(可用于显示或其它处理), 晶振为11.059

21、 2 mhz,波特率为9 600b/so解:因为是全双工方式,通信双方的程序一样。发送和接收都采用中断方式。c语言程序清单:#include<reg52.h> char k;unsigned char buffer; void main()scon=oxdo;tmod=0x20;thl=0xfd;tll=0xfd;tr1=1;es=1;ea=1;串行口初始化,允许接收定时器初始化开串行口中断开总中断while(l)k=key();if(k!=-l)acc=k;tb8=p; sbuf=acc; display ();读取按键按下键值 无键按下返回 将键值送累加器,取p位送 tb8发送

22、 显示程序发送引起,清ti/否则,接收引起/读取接收数据校验正确,存入缓冲区void serial_server() interrupt 4if(ti)ti=0;elseri=0;acc=sbuf;if(rb8=p) buffer=acc;汇编语言程序清单:org 0000hsjmp mainorg 23hljmp s_servmain:mov sp,#0dfhmov scon,#odohmov tmod,#20hmov th1,#ofdhmov tl1,#ofdh;跳转到主程序;跳转到串口中断服务程序;设置堆栈指针;串口初始化;定时器初始化,t1方式2淀时器1赋初值setbtr1setbes

23、setbea;启动定时器1;开中断loop:lcall key;读取按键(参看第9章),;有键按下返回键值,cjne a,#offh,send;无键按下返回0ffh,;有键按下转发送next:lcall display;调用显示;主程序循环ljmp loopsend:movmovmovljmps_serv:jbcclrretic,ptb&csbufaloopri,recvti滞校验位发送;循环;是接收中断转接收处理;是发送中断,清ti7.4.2异步方式应用recv:movjbjbsjmpone:jnbright:movi_end:a,sbufp,onerb&lendrightr

24、b&lendbuffersreti;接收处理程序;取接收值送a;校验位为1,转;校验错,转中断返回;校验正确,正确处理;校验错,转中断返回;接收数据送缓冲区7.5单片机与pc机通信的接口电路主要内容7.5.1 max232芯片简介7.5.2 pc机与89c52串行通信的接口电路利用pc机配置的异步通信适配器,可以 很方便地完成pc机与单片机的数据通信。pc机与89c52单片机最简单的连接是零调制3线经济型,这是进行全双工通信所必须的 最少数目的线路。串行通信电平:由于89c52单片机输入 输出电平为ttl电平,而pc机配置的是rs 232c标准串行接口,二者的电气规范不一致。数字值:1 0ttl电平:+5v0v232 电平:-3v -15v +3v

温馨提示

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

评论

0/150

提交评论