制作单片机之间通信系统-测试串行口的通信状态_第1页
制作单片机之间通信系统-测试串行口的通信状态_第2页
制作单片机之间通信系统-测试串行口的通信状态_第3页
制作单片机之间通信系统-测试串行口的通信状态_第4页
制作单片机之间通信系统-测试串行口的通信状态_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

任务一测试串行口的通信状态四、任务实施(一)任务描述由例5-3可知,将单片机的发送端与接收端接在一起,可以测试单片机的串口通信功能。现要求设计一个串口测试系统,测试串口工作正常,则发光二极管闪烁。设单片机主频为6MHz,测试波特率为2400b/s。(二)硬件设计可采用图5-14中的电路,将数码管看成7个发光二极管即可。任务一测试串行口的通信状态(三)软件设计程序控制代码如下:#include<reg51h>/************************************************************串口初始化子程序************************************************************/voidInitUART(void){TMOD=0x20;//定时器T1方式2SCON=0x50;//串口工作方式1,允许接收TH1=0xF3;//波特率2400b/sTL1=TH1;PCON=0x80;TR1=1;//启动定时器}/************************************************************延时200ms子程序************************************************************/voiddelay(void){unsignedchara,b,c;for(c=19;c>0;c--)for(b=20;b>0;b--)for(a=130;a>0;a--);}任务一测试串行口的通信状态/************************************************************主程序功能:串口通信功能测试************************************************************/voidmain(){ InitUART();while(1){TI=0;//清发送标志P0=0xFF;//初始状态:亮灯delay(); SBUF=0x0;//发送灭灯信号while(!TI);//等待发送while(!RI);//等待接收RI=0;//清接收标志P0=SBUF; //将灭灯信号送P0口delay();}}任务一测试串行口的通信状态(四)程序调试(1)在Keil中编辑、汇编程序,并保存为后缀为HEX的文件;(2)在PROTEUS仿真软件中设置相关参数,打开保存的后缀为.HEX的文件下载到软件单片机中;(3)按“Play”按钮仿真运行,观察运行效果,按“Stop”按钮停止运行;(4)用下载电路把程序烧录到硬件单片机中;(5)把单片机插到项目一流水灯电路中,接常用电源,即可看到LED灯的亮灭情况。任务一测试串行口的通信状态三、串行通信技术的应用【例5-1】使用74LS164的并行输出端接8只发光二极管,利用它的串入并出功能,编写程序把发光二极管从左到右依次点亮,并反复循环,如图5-13所示。任务一测试串行口的通信状态实现发光二极管从下到上轮流实现的控制代码如下:/************74LS164扩展并行口,控制8LED流水灯显示***************/#include<reg52.h>#include<intrins.h>#defineuintunsignedint#defineucharunsignedchar/***********************************************************//*延时子函数/*功能:延时1*xms/***********************************************************/voidDelay(uintx) {uchari;while(x--){for(i=0;i<120;i++);}}任务一测试串行口的通信状态/***********************************************************//*主函数/***********************************************************/voidmain(){ucharc=0x80;//显示信号初始化SCON=0x00;//串口方式0ES=0;//关闭串口中断TI=1;P1=0x80;//P1.7置高,关闭并行异步清零端while(1){c=_crol_(c,1);//循环左移1位SBUF=c; //串口发送while(TI==0);//等待串口发送完毕TI=0;Delay(400);//延时400ms}}任务一测试串行口的通信状态【例5-2】要求串行通信波特率为2400b/s,假设fosc=6MHz,SMOD=1,编写串行口的初始化程序。定时器T/C1和串行口的初始化代码如下:TMOD=0x20;//设置T1工作于定时模式方式2TH1=TL1=0xf3;//置定时初始值TR1=1;//启动T1SCON=0x50;//串口工作方式1PCON|=0x80;//SMOD=1任务一测试串行口的通信状态【例53】使用MCS-51单片机串行口按字节字符自我收发数据,并要求偶校验,传送波特率为1200b/s。任务一测试串行口的通信状态/************************************************************功能:单片机发送数据,自接收并显示时钟11.0592MHz,波特率1200bps************************************************************/#include<reg51.h>#defineucharunsignedchar;codeuchartab_cc[]={0x3f,0x6,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};sbitK0=P1^0;//定义发送按键uchardat[10]={0,1,2,3,4,5,6,7,8,9};//待发送数据uchari;voidmain(){ SCON=0xD0;//串口工作方式3,允许接收TMOD=0x20;//定时器T1方式2TL1=TH1=0xE8; //波特率1200bpsTR1=1; //启动定时器EA=1; //开串口中断ES=1;while(1){if(K0==0) //判断按键{while(K0==0); //等待按键弹出ACC=dat[i];if(P)TB8=1;//设置校验位elseTB8=0;SBUF=ACC;//发送数据i++;i%=10;} }}任务一测试串行口的通信状态/************************************************************中断服务程序************************************************************/voidint_s(void)interrupt4{if(TI)//发送中断处理{TI=0;}if(RI)//接收中断处理{RI=0;ACC=SBUF;if(P==RB8)P0=tab_cc[ACC];//校验正确,显示接收数据elseP0=0x71;//校验不正确,显示“F”}任务一测试串行口的通信状态二、串行通信接口1.串行口的结构与工作原理串行接口电路的种类和型号很多。能够完成异步通信的硬件电路称为UART,即通用异步接收/发送器UniversalAsychronousReceiver/Transmitter);能够完成同步通信的硬件电路称为USRTUniversalSychronouseceiver/Transmitter);既能完成异步通信又能完成同步通信的硬件电路称为USART(UniversalSychronousAsychronousReceiver/Transmitter)。1)串行口的结构MCS-51单片机的串行口主要由两个数据缓冲器SBUF、一个输入移位寄存器、一个串行控制寄存器SCON和一个波特率发生器T1组成,其结构如图5-8所示。任务一测试串行口的通信状态2)串行通信过程串行通信过程分为接收数据和发送数据,具体过程如下。(1)接收数据的过程。在进行通信时,当CPU允许接收时(即SCON的REN位置1时),外界数据通过引脚RXD(P3.0)串行输入,数据的最低位首先进入输入移位器,一帧接收完毕再并行送入缓冲器SBUF中,同时将接收中断标志位RI置位,向CPU发出中断请求。CPU响应中断后,用软件将RI位清除,同时读走输入的数据,接着又开始下一帧的输入过程。重复上述过程直至所有数据接收完毕。(2)发送数据的过程。CPU要发送数据时,即将数据并行写入发送缓冲器SBUF中,同时启动数据由TXD(P3.1)引脚串行发送,当一帧数据发送完即发送缓冲器空时,由硬件自动将发送中断标志位TI置位,向CPU发出中断请求。CPU响应中断后,用软件将TI位清除,同时又将下一帧数据写入SBUF中。重复上述过程直到所有数据发送完毕。任务一测试串行口的通信状态2.串行口的控制MCS-51串行口的工作方式选择、中断标志、可编程位的设置、波特率的增倍均是通过两个特殊功能寄存器SCON和PCON来控制的。1)电源和波特率控制寄存器PCON串行通信只用该位,为1时,波特率×2;为0时不变。SMOD×××GF1GF0PDIDL87H任务一测试串行口的通信状态2)串行口控制寄存器SCONSM0SM1SM2RENTB8RB8TIRI工作方式选择多机通信控制位允许串行接收位接收数据的第9位发送数据的第9位接收中断标志发送中断标志9FH9EH9DH9CH9BH9AH99H98HSM0SM1工作方式功能波特率00方式08位同步移位寄存器fosc/1201方式110位UART可变10方式211位UARTfosc/64或fosc/3211方式311位UART可变任务一测试串行口的通信状态方式的选择由SM1、SM0实现。工作方式功能说明波特率方式08位同步移位寄存器常用于扩展I/O口fosc/12方式110位UART8位数据、起始位、结束位可变(取决于定时器1溢出率)方式211位UART8位数据、起始位0、结束位1和奇偶校验位fosc/64或fosc/32方式311位UART数据、起始、校验、结束位可变(取决于定时器1溢出率)串行口四种工作方式应用比较任务一测试串行口的通信状态一、了解串行通信1.串行通信与并行通信计算机与外界的信息交换(数据传输)称为通信。通信方式有两种:并行通信与串行通信。

图5-1并行通信与串行通信。MCS51单片机的并行通信是由其并行接口实现的,同一时刻可以输入或输出8位数据;MCS51串行通信是由其串行接口实现的。串行通信中,数据在通信线上的传送方式有3种:单工方式、半双工方式和全双工方式。串行通信有两种基本方式:同步通信和异步通信。1)同步通信(SynchronousCommunication)所谓同步通信就是一种连续串行传送数据的通信方式,一次通信只传输一帧信息。任务一测试串行口的通信状态2)异步通信(AsynchronousCommunication)在异步通信中,数据通常是以字符为单位组成字符帧传送的。字符帧由发送端一帧一帧地发送,每一帧数据均是低位在前,高位在后,通过传输线被接收端一帧一帧地接收。发送端和接收端可以由各自独立的时钟来控制数据的发送和接收,这两个时钟彼此独立,互不同步。2.串行通信的传送速率在串行通信中,数据是按位进行传送的,因此传送速率用每秒传送格式位的数目表

温馨提示

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

评论

0/150

提交评论