好文档 - 专业文书写作范文服务资料分享网站

实验单片机与PC机串口通信

天下 分享 时间: 加入收藏 我要投稿 点赞

要求:

1、 掌握串行口的控制与状态寄存器SCON 2、 掌握特殊功能寄存器PCON

3、 掌握串行口的工作方式及其设置

4、 掌握串行口的波特率(bond rate)选择 任务:

1、实现PC机发送一个字符给单片机,单片机接收到后即在个位、十位数码管上进行显示,同时将其回发给PC机。要求:单片机收到PC机发来的信号后用串口中断方式处理,而单片机回发给PC机时用查询方式。

采用软件仿真的方式完成,用串口调试助手和KEIL C,或串口调试助手和PROTEUS分别仿真。

需要用到以下软件:KEIL,VSPD XP5(virtual serial ports driver 虚拟串口软件),串口调试助手,Proteus。

(1)虚拟串口软件、串口调试助手和KEIL C的联调 首先在KEIL里编译写好的程序。 #include <> #define uchar unsigned char #define uint unsigned int uchar code SEG7[10]={0X3F,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//数码管位值 uchar code ACT[4]={0XFE,0xfd,0xfb,0xf7};%数码管位选信号 uchar code as[]=\回送预置数据 uchar a=0x30,b; //initiate,串口设置为波特率9600, void init(void){ TMOD=0X20; TH1=0XFD; TL1=0XFD; SCON=0X50; TR1=1; ES=1; EA=1; } //DELAY,为数据管交替显示 void delay(uint k){ uint data i,j; for(i=0;i

void main(void){ uchar i; init(); while(1){ //用数码管显示PC发给单片机的数据,并回送给PC P1=SEG7[(a-0x30)/10]; P2=ACT[1]; delay(500); P1=SEG7[(a-0x30)]; 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; } } } //INTERRUPT 4,将收到的信息进行转存 void serial_serve(void) interrupt 4 { a=SBUF; b=a; EA=0; }

打开VSPD,界面如下图所示:(注明:这个软件用来进行串口的虚拟实现。在其网站上可以下载,但使用期为2周)。

左边栏最上面的是电脑自带的物理串口。点右边的add pair,可以添加成对的串口。一对串口已经虚拟互联了,如果添加的是COM3、COM4,用COM3发送数据,COM4就可以接收数据,反过来也可以。

接下来的一步很关键。把KEIL和虚拟出来的串口绑定。现在把COM3和KEIL绑定。在KEIL中进入DEBUG模式。在最下面的COMMAND命令行,输入

mode com3 9600,0,8,1 %分别设置com3的波特率、奇偶校验位、数据位、停止位 assign com3 sout %把单片机的串口和COM3绑定到一起。因为所用的单片机是 %AT89C51,只有一个串口,所以用SIN,SOUT,如果单片机有 %几个串口,可以选择S0OIN,S0OUT,S1IN,S1OUT。 (以上参数设置注意要和所编程序中设置一致!) 打开串口调试助手

可以看到虚拟出来的串口COM3、COM4,选择COM4,设置为波特率9600,无校验位、8位数据位,1位停止位(和COM3、程序里的设置一样)。打开COM4。

现在就可以开始调试串口发送接收程序了。可以通过KEIL发送数据,在串口调试助手中就可以显示出来。也可以通过串口调试助手发送数据,在KEIL中接收。

实验实现PC机发送一个字符给单片机,单片机接收到后将其回发给PC机。在调试助手上(模拟PC)发送数据,单片机收到后将收到的结果回送到调试助手上。

2、以下在Proteus和串口调试助手实现的结果:

将编译好的HEX程序加载到Proteus中,注意这里需要加上串口模块,用来进行串行通信参数的设置。

U219XTAL1P0.0/AD0P0.1/AD1P0.2/AD2P0.3/AD3P0.4/AD4P0.5/AD5P0.6/AD6P0.7/AD7P2.0/A8P2.1/A9P2.2/A10P2.3/A11P2.4/A12P2.5/A13P2.6/A14P2.7/A15P3.0/RXDP3.1/TXDP3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WRP3.7/RD39383736353433322122232425262728101112131415161718XTAL29RST293031PSENALEEA12345678P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7AT89C51P116273849DCDDSRRXDRTSTXDCTSDTRRIERRORCOMPIM 点击串口,可以对串口进行设置:

用串口调试助手发送数据,即可看到仿真结果。

实验参考程序源文件在exp2-comm文件夹中。 #include <>

#define uchar unsigned char #define uint unsigned int sbit duan=P2^2; sbit wei=P2^3;

uchar code SEG7[10]={0X3F,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//数码管位值

uchar code ACT[4]={0XFE,0xfd,0xfb,0xf7};//%数码管位选信号 uchar code as[]=\回送预置数据 uchar a=0x30,b;

//initiate,串口设置为波特率9600, void init(void){ TMOD=0X20; TH1=0XFD; TL1=0XFD; SCON=0X50; TR1=1; ES=1; EA=1; }

//DELAY,为数据管交替显示 void delay(uint k){ uint data i,j; for(i=0;i

}

//main

void main(void){ uchar i; init();

while(1){//用数码管显示PC发给单片机的数据,并回送给PC P1=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)]; 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;

EA=1; } } }

//INTERRUPT 4,将收到的信息进行转存 void serial_serve(void) interrupt 4 {

a=SBUF; b=a; EA=0; }

实验单片机与PC机串口通信

要求:1、掌握串行口的控制与状态寄存器SCON2、掌握特殊功能寄存器PCON3、掌握串行口的工作方式及其设置4、掌握串行口的波特率(bondrate)选择任务:1、实现PC机发送一个字符给单片机,单片机接收到后即在个位、十位数码管上进行显示,同时将其回发给PC机。要求:单片机收到PC机发来的信号后用
推荐度:
点击下载文档文档为doc格式
2j6ag93wez4c2db011p1797950lq6e00fb8
领取福利

微信扫码领取福利

微信扫码分享