您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 实验单片机与PC机串口通信
1实验单片机与PC机串口通信(C51编程)实验要求:1、掌握串行口的控制与状态寄存器SCON2、掌握特殊功能寄存器PCON3、掌握串行口的工作方式及其设置4、掌握串行口的波特率(bondrate)选择任务:1、实现PC机发送一个字符给单片机,单片机接收到后即在个位、十位数码管上进行显示,同时将其回发给PC机。要求:单片机收到PC机发来的信号后用串口中断方式处理,而单片机回发给PC机时用查询方式。采用软件仿真的方式完成,用串口调试助手和KEILC,或串口调试助手和PROTEUS分别仿真。需要用到以下软件:KEIL,VSPDXP5(virtualserialportsdriverxp5.1虚拟串口软件),串口调试助手,Proteus。(1)虚拟串口软件、串口调试助手和KEILC的联调首先在KEIL里编译写好的程序。#includereg51.h#defineucharunsignedchar#defineuintunsignedintucharcodeSEG7[10]={0X3F,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//数码管位值ucharcodeACT[4]={0XFE,0xfd,0xfb,0xf7};%数码管位选信号ucharcodeas[]=Recevingdata:\0;%回送预置数据uchara=0x30,b;//initiate,串口设置为波特率9600,voidinit(void){TMOD=0X20;TH1=0XFD;TL1=0XFD;SCON=0X50;TR1=1;ES=1;EA=1;}//DELAY,为数据管交替显示voiddelay(uintk){uintdatai,j;for(i=0;ik;i++){for(j=0;j121;j++){;}2}}//mainvoidmain(void){uchari;init();while(1){//用数码管显示PC发给单片机的数据,并回送给PCP1=SEG7[(a-0x30)/10];P2=ACT[1];delay(500);P1=SEG7[(a-0x30)%10];P2=ACT[0];delay(500);if(RI){RI=0;i=0;while(as[i]!='\0'){SBUF=as[i];while(!TI){;}TI=0;i++;}SBUF=b;while(!TI){;}TI=0;EA=1;}}}//INTERRUPT4,将收到的信息进行转存voidserial_serve(void)interrupt4{a=SBUF;b=a;EA=0;}3打开VSPD,界面如下图所示:(注明:这个软件用来进行串口的虚拟实现。在其网站上可以下载,但使用期为2周)。左边栏最上面的是电脑自带的物理串口。点右边的addpair,可以添加成对的串口。一对串口已经虚拟互联了,如果添加的是COM3、COM4,用COM3发送数据,COM4就可以接收数据,反过来也可以。接下来的一步很关键。把KEIL和虚拟出来的串口绑定。现在把COM3和KEIL绑定。在KEIL中进入DEBUG模式。在最下面的COMMAND命令行,输入modecom39600,0,8,1%分别设置com3的波特率、奇偶校验位、数据位、停止位assigncom3sinsout%把单片机的串口和COM3绑定到一起。因为所用的单片机是%AT89C51,只有一个串口,所以用SIN,SOUT,如果单片机有%几个串口,可以选择S0OIN,S0OUT,S1IN,S1OUT。(以上参数设置注意要和所编程序中设置一致!)打开串口调试助手4可以看到虚拟出来的串口COM3、COM4,选择COM4,设置为波特率9600,无校验位、8位数据位,1位停止位(和COM3、程序里的设置一样)。打开COM4。现在就可以开始调试串口发送接收程序了。可以通过KEIL发送数据,在串口调试助手中就可以显示出来。也可以通过串口调试助手发送数据,在KEIL中接收。实验实现PC机发送一个字符给单片机,单片机接收到后将其回发给PC机。在调试助手上(模拟PC)发送数据,单片机收到后将收到的结果回送到调试助手上。2、以下在Proteus和串口调试助手实现的结果:将编译好的HEX程序加载到Proteus中,注意这里需要加上串口模块,用来进行串行通信参数的设置。5XTAL218XTAL119ALE30EA31PSEN29RST9P0.0/AD039P0.1/AD138P0.2/AD237P0.3/AD336P0.4/AD435P0.5/AD534P0.6/AD633P0.7/AD732P1.01P1.12P1.23P1.34P1.45P1.56P1.67P1.78P3.0/RXD10P3.1/TXD11P3.2/INT012P3.3/INT113P3.4/T014P3.7/RD17P3.6/WR16P3.5/T115P2.7/A1528P2.0/A821P2.1/A922P2.2/A1023P2.3/A1124P2.4/A1225P2.5/A1326P2.6/A1427U2AT89C51ERRORTXD3RXD2CTS8RTS7DSR6DTR4DCD1RI9P1COMPIM点击串口,可以对串口进行设置:用串口调试助手发送数据,即可看到仿真结果。6实验参考程序源文件在exp2-comm文件夹中。#includereg52.h#defineucharunsignedchar#defineuintunsignedintsbitduan=P2^2;sbitwei=P2^3;ucharcodeSEG7[10]={0X3F,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//数码管位值ucharcodeACT[4]={0XFE,0xfd,0xfb,0xf7};//%数码管位选信号ucharcodeas[]=Recevingdata:\0;//%回送预置数据uchara=0x30,b;//initiate,串口设置为波特率9600,voidinit(void){TMOD=0X20;TH1=0XFD;TL1=0XFD;SCON=0X50;TR1=1;ES=1;EA=1;}//DELAY,为数据管交替显示voiddelay(uintk){uintdatai,j;for(i=0;ik;i++){for(j=0;j121;j++){;}}7}//mainvoidmain(void){uchari;init();while(1){//用数码管显示PC发给单片机的数据,并回送给PCP1=0;duan=1;duan=0;P1=ACT[1];wei=1;wei=0;P1=SEG7[(a)/10];duan=1;duan=0;delay(2);P1=0;duan=1;duan=0;P1=ACT[0];wei=1;wei=0;P1=SEG7[(a)%10];duan=1;duan=0;P1=0;delay(2);if(RI){RI=0;i=0;while(as[i]!='\0'){SBUF=as[i];while(!TI){;}TI=0;i++;}SBUF=b;while(!TI){;}TI=0;8EA=1;}}}//INTERRUPT4,将收到的信息进行转存voidserial_serve(void)interrupt4{a=SBUF;b=a;EA=0;}
本文标题:实验单片机与PC机串口通信
链接地址:https://www.777doc.com/doc-2070988 .html