您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 基于Proteus的89C52双机通信仿真
安徽理工大学机械电子工程来自jasmine。email:zkchen@aust.edu.cn基于Proteus的AT89C52双机通信仿真在一个Proteus工程中,添加两个AT89C52单片机,一个做主机,另一作从机。现在要实现主机与从机之间的简单通信。具体功能是:主机不停扫描矩阵键盘,如果有键被按下,则把相应按键的数字发送给从机,从机通过数码管显示它接受到的数据。主机与从机之间的通信通过串行口实现。构建Proteus仿真图时,如果感觉图纸不够大,放置元器件比较拥挤,可以通过System选项SetSheetSide…选择A3图纸就合适了。Proteus中的RS-232C标准接头COMPIM不需要连接MAX232,可以直接和单片机的RXD,TXD连接,因为COMPIM已经把MAX232集成在内部。这里的串行通讯选择方式1,因为方式1的波特率与定时器T1的溢出率有关,所以可以通过设置定时器T1的初值来确定串行通信的波特率。这里选择了波特率为9600,T1选择具有自动重装功能的方式2,那么TH1和TL1的初值通过计算得到0xfd。具体的电路连接如下:主机电路:安徽理工大学机械电子工程来自jasmine。email:zkchen@aust.edu.cn从机电路:安徽理工大学机械电子工程来自jasmine。email:zkchen@aust.edu.cn要顺利实现双机通信重要的是要保持两机的波特率一致。所以,下面的一些参数设置很重要。1.利用虚拟串口软件VirtualSerialPortDriver,建立一对相连的虚拟串口。如果没有安装这个软件可以网上下载安装。这是实现仿真必须的。这里的虚拟串口为COM1和COM4,下图可以看到两个端口是相连的。安徽理工大学机械电子工程来自jasmine。email:zkchen@aust.edu.cn2.设置主机RS-232接头P1的参数。Physicalport选择端口COM1,PhysicalBaudRate选择9600,VirtualBaudRate也选择9600。其他参数默认,设置如下:3.设置从机RS-232接头P2的参数。Physicalport选择端口COM4,PhysicalBaudRate选择9600,VirtualBaudRate也选择9600。其他参数默认,设置如下:安徽理工大学机械电子工程来自jasmine。email:zkchen@aust.edu.cn4.晶振频率设置为11.0592MHz,它与上面设置波特率为9600是对应的。两个晶振设置相同,如下图。安徽理工大学机械电子工程来自jasmine。email:zkchen@aust.edu.cn5.单片机的时钟频率也要设置为11.0592MHz。两单片机参数设置一致,如下图:参数设置完成之后,Proteus的任务就完成了。接着就是编写从机与主机之间的控制程序。程序编写完成后,分别把主机程序调入U1,从机程序调入U2。主机与从机程序如下:安徽理工大学机械电子工程来自jasmine。email:zkchen@aust.edu.cn1.主机程序#includereg52.h#defineucharunsignedchar#defineuintunsignedintvoiddelay(uintx)//延时{uinti,j;for(i=0;ix;i++)for(j=0;j125;j++);}voidsent_data(uchardate)//发送数据{SBUF=date;while(!TI);TI=0;}voidmatrixkeyscan()//键盘扫描{uchartemp,key;P1=0xfe;temp=P1;temp=temp&0xf0;if(temp!=0xf0){delay(10);temp=P1;temp=temp&0xf0;if(temp!=0xf0){temp=P1;switch(temp){case0xee:key=0;break;case0xde:key=1;安徽理工大学机械电子工程来自jasmine。email:zkchen@aust.edu.cnbreak;case0xbe:key=2;break;case0x7e:key=3;break;}while(temp!=0xf0){temp=P1;temp=temp&0xf0;}sent_data(key);}}P1=0xfd;temp=P1;temp=temp&0xf0;if(temp!=0xf0){delay(10);temp=P1;if(temp!=0xf0){temp=P1;switch(temp){case0xed:key=4;break;case0xdd:key=5;break;case0xbd:key=6;break;case0x7d:安徽理工大学机械电子工程来自jasmine。email:zkchen@aust.edu.cnkey=7;break;}while(temp!=0xf0){temp=P1;temp=temp&0xf0;}sent_data(key);}}P1=0xfb;temp=P1;temp=temp&0xf0;if(temp!=0xf0){delay(10);temp=P1;temp=temp&0xf0;if(temp!=0xf0){temp=P1;switch(temp){case0xeb:key=8;break;case0xdb:key=9;break;case0xbb:key=10;break;case0x7b:key=11;break;}while(temp!=0xf0){temp=P1;安徽理工大学机械电子工程来自jasmine。email:zkchen@aust.edu.cntemp=temp&0xf0;}sent_data(key);}}P1=0xf7;temp=P1;temp=temp&0xf0;if(temp!=0xf0){delay(10);temp=P1;temp=temp&0xf0;if(temp!=0xf0){temp=P1;switch(temp){case0xe7:key=12;break;case0xd7:key=13;break;case0xb7:key=14;break;case0x77:key=15;break;}while(temp!=0xf0){temp=P1;temp=temp&0xf0;}sent_data(key);}}}安徽理工大学机械电子工程来自jasmine。email:zkchen@aust.edu.cnvoidmain()//主函数{TMOD=0x20;TH1=0xfd;TL1=0xfd;SM0=0;SM1=1;TR1=1;EA=1;ES=1;while(1){matrixkeyscan();}}2.从机程序#includereg52.h#defineucharunsignedchar#defineuintunsignedintucharcodedisp[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};voiddelay(uintx){uinti,j;for(i=0;ix;i++)for(j=0;j124;j++);}voiddisplay(uchardate)//显示{P0=disp[date];delay(500);}voidmain()//主函数{TMOD=0x20;TH1=0xfd;TL1=0xfd;安徽理工大学机械电子工程来自jasmine。email:zkchen@aust.edu.cnTR1=1;SM0=0;SM1=1;REN=1;//Notice!!!“REN=1”必须放在“SM0=0;SM1=1;”后。ES=1;EA=1;P0=0x00;while(1);}voidser()interrupt4//串行中端{uchara;RI=0;a=SBUF;display(a);}//谨供交流学习使用,如有错误欢迎指正。//2011/11/10
本文标题:基于Proteus的89C52双机通信仿真
链接地址:https://www.777doc.com/doc-5348067 .html