Proteus仿真串行通信和虚拟终端的连接测试
说明:
1.我用了四款软件(下面提供下载链接,以下都是破解版软件,无需序列号)
Proteus 7.5 sp3(电子仿真软件)
虚拟串口程序
串口调试助手
keil2编译软件
正文
目前我会的有3种
1.单片机+虚拟终端(作为串口输入设备)+串口
2.单片机+虚拟终端(作为串口输入设备)+MAX232+串口
3.单片机+串口+虚拟串口程序(virtual serial port)+串口调试助手
4.单片机+MAX232+串口+虚拟串口程序(virtual serial port)+串口调试助手(这个不会,主要是不知道该怎么在Proteus中连线,理论上方法4和3的连线方法是没有太大
差别的,我也不知道哪里设置不对,一直没弄成功,问题出在加入了MAX232后)
方法1和2的区别不大,只是在串口和单片机中间多接个MAX232,因为是仿真软件,所以串口有和没有MAX232的仿真结果是一样的,就是细节上的设置不同
方法1连线如下:
方法2连线图如下:
方法1和方法2的区别在PCT(虚拟终端输入串口的PCT计算机发送端)的一个设置参数不同,(当波特率改变的时候虚拟终端里面的波特率设置也要改变)
方法1设置如下
方法2设置如下
不同的地方在PCT,串口这边的虚拟终端的RX/TX Polarity的设置不同,当在单片机和串口间
没接入MAX232,该项设置为normal,当在其间接入了MAX232该项设置为inverted。
综上所述:方法1和方法2其实是1类方法,共同点是单片机的发送端(TXD)与串口接收端(RXD)相连,单片机接收端(RXD)与串口发送端(TXD)相连。(这种连接是交叉连接)
方法3和方法4区别不大,只是在串口和单片机之间多加入了MAX232,其实实物连接时是要加入MAX232的,但是加入MAX232的方法4用Proteus仿真不出来,就仿真
效果而言方法3和方法4是一样的。
方法3连线图如下:
方法4连线图如下:
Proteus串口设置如下图:
串口调试助手设置如下:
虚拟串口程序界面如下:
单片机虚拟终端的选项作用如下:
如果输入的是ASCII码,那么就不要勾选Hex Display mode
如果输入的是16进制,那么就要勾选Hex Display mode
clear screen 是清屏
echo typed characters 是当你在虚拟终端窗口输入字符时,输入的字符显示在虚拟中断窗口内。
综上所述:方法3和方法4是一类,串口接线是单片机的RXD接串口的RXD,单片机的TXD接串口的TXD。
是一一对应的接线方式。
注意:单片机晶振频率的设置,Proteus串口接COM2,调试程序接COM3
方法1和方法2这类与 方法3和方法4这类的区别在哪呢?
区别就在与串口的接线方式不同,方法1和方法2是单片机和串口是交叉接线
方法3和方法4是单片机和串口是非交叉接线(一一对应)
AVR单片机硬件I2C接口驱动程序 基于AVR单片机的128液晶(ks0108)驱动程序及仿真 基于Proteus仿真的AVR单片机串口程序
2010-11-30 14:37:42| 分类: 单片机 | 标签: |字号大中小 订阅 以前在Proteus上做过51的串口仿真没有成功,昨天再次尝试atmega16的串口仿真居然成功了;当然仿真是最简单的,实际做事的时候需要加上max232芯片,但仿真时就不需要了, 程序功能:由串口助手向单片机发送一组数据“I LOVE YOU-----SBILY1988”,单片机收到数据后发送回串口助手, 数据传输方向:计算机——>单片机; 单片机——>计算机; 现送上仿真图和程序: #include #include void init(); void send(unsigned char); unsigned char receive(); void main() {unsigned char i=0,a=300; init(); while(1) { i=receive(); send(i); } } void init() //初始化函数
{ UCSRB=BIT(4)|BIT(3); //使能发送和接收器 UCSRC=BIT(7)|(3<<1); //设置数据帧格式(8数据位) UBRRH=0; //设置波特率为8MHZ晶振下 9600bps UBRRL=51; } void send(unsigned char data) //数据发送 { while(!(UCSRA&BIT(5))); //等待发送缓冲器准备完毕 UDR=data; while(!(UCSRA&BIT(6))); //等待发送结束 UCSRA&=BIT(6); }
unsigned char receive() //数据接收 {unsigned char data=0; while(!(UCSRA&BIT(7))); //等待数据接收完毕 data=UDR; return data; }