单片机串行通信_第1页
单片机串行通信_第2页
单片机串行通信_第3页
单片机串行通信_第4页
单片机串行通信_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

1、1.单片机串行通信的概述在通信领域内,有两种数据通信方式:并行通信和串行通信。随着计算机网络化和微机分级分布式应用系统的发展,通信的功能越来越重要。通信是指计算机与外界的信息传输,既包括计算机与计算机之间的传输,也包括计算机与外部设备,如终端、打印机和磁盘等设备之间的传输。 串行通信是指使用一条数据线,将数据一位一位地依次传输,每一位数据占据一个固定的时间长度。其只需要少数几条线就可以在系统间交换信息,特别使用于计算机与计算机、计算机与外设之间的远距离通信。 使用串口通信时,发送和接收到的每一个字符实际上都是一次一位的传送的,每一位为1或者为0。在串行通信中,把通信接口只能发送或接收的单向传送

2、办法叫单工传送;而把数据在甲乙两机之间的双向传递,称之为双工传送。在双工传送方式中又分为半双工传送和全双工传送。半双工传送是两机之间不能同时进行发送和接收,任一时该,只能发或者只能收信息。51系列单片机有一个可编程的全双工串行通信接口,它可作异步接收发送器用,也可做同步移位寄存器用,其帧格式可有8位、10位或11位,并能设置各种波特率,给使用带来很大的灵活性。51系列单片机有两个物理上独立的接收、发送缓冲器sbuf,它们只占用同一地址99h,可同时发送、接送数据。发送缓冲器只能 写入,不能读出,接收缓冲器只能读出、不能写入。串行发送接收的速率与波特率发生器产生的移位脉冲同频。51系列单片机用定

3、时器t1或直接用cpu时钟作为通信波特率发生器的输入,在串行接口的不同工作方式中,波特率发生器从两个输入信号中选择一个分频,产生移位脉冲来同步串口的接收和发送,移位脉冲的速率即是波特率。接收器是双缓冲结构,在前一个字节被从接收缓冲器sbuf读出之前,第二字节即开始被接收 。但是,若在第二个字节接收完毕后,前一个字节还未被cpu读取的话 ,第二个字就会覆盖第一个字节,造成第一个字节的丢失。接收器是双缓冲结构,串行口的发送和接收都是以特殊功能寄存器sbuf的名义进行读或写的。8051串行口可设置四种工作方式,可有8位,10位和11位帧格式。方式0以8位数据为一帧,不设起始位和停止位,先发送最低位。

4、方式1以10位为一帧传输,设有1个起始位“0”,8个数据位和1一个停止位“1”。方式2和3以11位为1帧传输,设有1个起始“0”,8个数据位,1个附加第九位和1个停止们“1”,附加第九位由软件置1或清0。发送时在tb8中,接收时送入rb8中。2串行通信程序设计2.1程序设计流程图 设定t1和scon设定发送数据地址指针和块长度计数器开中断开关ea允许串行口中断发送等待中断清t1修改数据地址指针和块长度计数器全部数据发送完发送中断返回清ea或esyn主程序中断服务程序(a)中断方式发送程序主程序设定t1和scon置位ren允许接收开中断开关ea允许串行口中断等待中断中断服务程序清r1接收数据数据

5、送接收缓冲器数据块接收完清ea或es中断返回ny设定接收缓冲区首址置接收数据个数计数器(b)中断方式接收程序图2.1串行通信中断方式流程图2.2自发自收程序org 0000hmov tmod,#20hmov th1,#0cchmov tl1,#0cch ;设定波特率setb tr1mov scon,#50habc : clr ti mov p1,#0feh ;led灭 acall day ;延时 mov a,#0ffh mov sbuf,a ;发送数据ffh jnb ri, $ ;ri1等待 clr ri mov a,sbuf ;接收数据,a=ffh mov p1,a ;灯亮 jnb ti,

6、$ ;ti1等待 acall day ;延时 sjmp abcday: mov r0,#0dal: mov r1,#0 djnz r1, $ djnz r0,dal ret end2.3发送程序及分析org 0000h ljmp mainorg 0023hljmp sub1main:mov scon,#50h mov tmod,#20h mov tl1,#0fdh mov th1,#0fdh mov ie,#90h setb tr1ini: mov sbuf,#55h mov r1,#0ffhloop:nop djnz r1,loop jnb f0,ini mov r0,#21h mov sb

7、uf,20hsub1:jnb ri,lab0 mov a,sbuf cjne a,#55h,lab1 setb f0 clr rilab1:retilab0:mov sbuf,r0 inc r0 cjne r0,#24h,lab2 clr eslab2:clr ti reti end主程序中:指令mov scon,#50h的意义是将数据50h送入特殊功能寄存器scon中,即设置串口工作于方式1,不允许多机通信,允许接收/发送数据第9位和接收数据第9位在方式1中未用,可以为任意值,在这里我们让它为0,串口发送/接收无中断请求。指令mov tmod,#20h的意义为将数据20h送入特殊功能寄存器t

8、mod中,即定时器1的启动与引脚int1无关,定时记数器1当定时器用,工作于方式2由于定时器0在这个例子中未用,所以可以任意设置 。指令mov tl1,#ofdh的意义是给定时器1的低8位赋初值。指令mov th1,#ofddh的意义是给定时器1的高8位赋初值 ,因为定时器1工作方式2,即自动重装方式,所以定时器的高低8位都赋相同的初值,这个初值由串口工作方式1的波特率计算公式确定。指令mov ie,#90h的意义为打开中断允许总开关和串口中断允许。指令setb tr1的意义为启动定时器1,使波特率发生器开始产生移位脉冲和采样脉冲。指令mov sbuf,#55h的意义为将数据55h送入发送缓冲

9、器sbuf中并通知串口发送。指令mov r1,#offh的意义是将数据offh送入工作寄存器r1中,这条指令的意图是为下面这段循环程序设置循环次数。指令nop什么事都不做,只占用cpu的 时间。指令djnz r1,loop的意义为先将r1中的值减1,再判断r1中的值,如果不为0,则跳转到标号为loop的地方,发果为0,则顺序运行下一条指令,显然这四条指令就构成一段延时程序,这段延时程序的延时时间应大于单片机1的串口中断服务程序的处理时间与单片机2的中断服务程序处理时间之和。指令jnb f0,ini的意义是如果程序状态字psw中的f0位为0则表明接收端未准备好,所以程序跳转到标事情为ini的地方

10、去再次发送询问信号,如果f0为1则表明接收端已准备好,所以程序往下运行。指令mov r0,#21h的意义为给r0赋初值21h,r0当间址寄存器用,其内容为下次将要发送数据的地址。指令mov sbuf,20h的意义为将内部数据存储器20h中的数据送入发送缓冲器sbuf并启动串口发送装置。指令ljmp $的意义为跳转到本指令,即主程序运行到这里就进入了死循环。中断服务程序中:指令jnb ri,labo的意义为如果本次串口中断是一次接收中断 ,则表明接收缓冲器sbuf中存放的是单片机2的应答信号,程序应顺序执行下一条指令,处理单片机2的应答,如果本次串口中断为一次发送中断,则应跳转到标号为labo的

11、地方去执行发送数据程序 。指令mov a,sbuf的意义为将单片机2发送来的应答信号取入累加器中。指令cjne a,#55h,lab1的意义是如果单片机2发送来的应答信号为55h,表明单片机2已处于“准备好”状态,则程序顺序运行 ,若单片机2送来的应答信号不为55h,则程序什么都不做,跳转到标号lab1执行返回指令 。指令setb f0的意义为对用户标志位f0置1,从而告诉主程序单片机2已处于“准备好”状态指令clr ri的意义为清除接收中断申请标志,为下一次中断的发生作准备。指令reti的意义为中断返回。指令mov sbuf,ro的意义为从间址r0所指定的内部数据存储器中取一个数据发送。指令

12、inc r0的意义为将待传送数据的地址指针r0的内容加1,使其指向下一个待发送的数据。指令cjne r0,#24h,lab2的意义为判断四个数据是否都已发送完,若已发送完则顺序执行下一条关中断,若未发送完则跳转到标号lab2。指令clr es的意义为禁止串口中断。指令clr ti的意义为清除串口接收中断申请标志。指令reti的意义为中断返回。end是一条伪指令,其意义为告诉编译系统程序到此结束。2.4接收程序及分析org 0000hljmp mainorg 0023hljmp sub1main:mov scon,#50h mov tmod,#20h mov tl1,#0fdh mov th1,

13、#0fdh mov ie,#90h mov r0,#33h setb tr1 ljmp $sub1:jb f0,lab2mov a,sbufcjne a,#55h,lab1setb f0clr rimov sbuf,#55hlab1:retilab2:mov r0,sbuf inc r0 cjne r0,#37h,lab3 clr eslab3:clr ri reti end单片机2的主程序只起初始化串口的作用,这里不再讲述。单片机2的中断服务程序 :指令jb f0,lab2的意义为如果f0为0,表明当前接收数据为单片机1送过来的查询信号,则程序顺序往下运行,执行信号处理程序 。若f0为1,表

14、明当前接收到的数据为单片机1送来的有效数据,程序跳转到标号lab2去执行程序,将接收到的数据放入r0指示的数据缓冲区中 。指令mov a,sbuf将单片机1送过来的查询信号从接收缓冲器sbuf中取出。指令cjne a,#55h,lab1的意义为若单片机1送过来的数据为55h将标志位f0置1,否则跳转到标号lab1处执行中断返回指令。指令setb f0的意义为对标志位f0置1,其意义为:下一次接收到的数据为有效数据。指令clr ri清除接收中断申请标志。指令mov sbuf,#55h的意义为发送应答信号。指令reti的意义为中断返回。指令mov r0,sbuf的意义为将串口中断接收缓冲器中的数据

15、放入间接地址指针r0指定的内部数据存储器单元中。指令inc r0将地址指针的内容加1,使其指向一个新地址,用以存放下一次接收的数据。指令cjne r0,#37h,lab3判断四个数据是否接收完,若已接收完,则顺序执行下一条指令否则跳转到标号lab3。指令clr es关闭串口中断。指令clr ri清除串口接收中断申请标志。指令reti为中断返回。end是一条伪指令,其意义为告诉编译系统程序到此结束。3.电路的设计3.1自发自收电路图3.1自发自收电路3.2串行通信电路图3.2串行通信电路4仿真及结果分析利用软件将程序编译生成 hex 文件,输入到单片机中,用proteus进行仿真。自发自收电路仿

16、真结果为发光二极管不停闪烁。双机串行通信电路仿真结果如下图:图4.1仿真结果图(1)图4.2仿真结果图(2)数码管按0,1,2,1f顺序显示,结果符合要求。5.心得体会课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程.随着科学技术发展的日新日异,单片机已经成为当今计算机应用中空前活跃的领域, 在生活中可以说得是无处不在。因此作为二十一世纪的大学来说掌握单片机的开发技术是十分重要的。回顾起此次单片机课程设计,至今我仍感慨颇多,的确,从选题到定稿,从理论到实践,在整整一星期的日子里,可以说得是苦多于甜,但是可以学到很多很多的的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。在设计的过程中遇到问题,可以说得是困难重重,这毕竟第一次做的,难免会遇到过各种各样的问题,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,比如说51系列芯片的使用,proteus软件的应用技巧,对

温馨提示

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

评论

0/150

提交评论