本例用到的proteus版本为8.13,ardunio IDE版本为2.2.1,虚拟串口vspd版本为7.2,串口助手SSCOM V5.13.1。软件的下载安装有很多教程,大家可以自行搜索,本文只介绍如何利用这4种软件在proteus中实现arduino Mega 2560的串口读写功能。
要实现的功能介绍:通过串口助手和proteus 中的ardunio2560单片机进行串口收发信息,通过串口助手向单片机发送字符"1",单片机IO14口的LED灯点亮,发送字符"2",LED灯熄灭。通过单片机IO15口的带上拉电阻的按键,向串口助手发送信息,当按键按下,发送"button_down",当按键抬起,发送"button_up"。具体操作步骤如下:
目录
[二、利用ardunio IDE建立ardunio2560程序文件并生成hex文件](#二、利用ardunio IDE建立ardunio2560程序文件并生成hex文件)
三、利用protues搭建ardunio2560串口通信仿真电路
[(1)双击ardunio Mega 2560](#(1)双击ardunio Mega 2560)
一、配置vspd虚拟串口
1、添加一对虚拟串口
操作:单击"Add pair"按钮
2、添加完成
在Virtual ports下可以看到COM1和COM2,这一对串口号要记住,后边在protues和串口助手中配置串口的时候要用到。
3、虚拟串口连接示意图
为什么虚拟串口都是成对增加和删除呢?因为虚拟串口相当于一根双头交叉连接的DB9串口线,两个DB9的第5线为GND(接地线),直接连在一起,COM1的RXD(接收引脚)与COM2的TXD(发送引脚)相连,COM1的TXD与COM2的RXD相连。如下图所示。
本文Mega 2560与COM1相连,SSCOM与COM2相连,这样Mega 2560就可以通过虚拟串口和SSCOM进行通信。
二、利用ardunio IDE建立ardunio2560程序文件并生成hex文件
1、新建Sketch文件
操作步骤:菜单File->New Sketch
新建sketch文件后,默认的控制器型号为Ardunio Uno。
2、修改控制器型号
操作步骤:菜单Tools->Board:"Ardunio Uno"->Ardunio AVR Boards->Ardunio Mega or Mega 2560。
3、修改完成
4、另存文件
操作步骤:File->Save As...
在另存为对话框中选择文件存储的文件夹,这个文件夹需要自己事前建好,文件名也可以另取一个,然后点"保存"按钮。本文的文件夹名称为"sketch_001"。
5、编写程序代码
程序代码如下所示,每一句代码后边都有注释,不再另行解释。需要注意的是:程序里的引脚14对应ardunio2560里的IO14,引脚15对应IO15,后边proteus中ardunio2560单片机的引脚标签就是IO14和IO15。
cpp
char command; //声明一个字符型变量command
void setup() {
Serial.begin(9600); //设置串口波特率
pinMode(14,OUTPUT); //设置IO14引脚为输出模式,14引脚接限流电阻串联LED
pinMode(15,INPUT); //设置IO15引脚为输入模式,15引脚接上拉电阻串联按键
digitalWrite(14,LOW); //IO14引脚输出低电平
}
void loop() {
if (digitalRead(15)) //读取IO15引脚电平状态,如果是高电平(此时按键未按下)
{
Serial.println("button_up"); //串口输出"button_up"
}
else //读取IO15引脚电平状态,如果是低电平(此时按键按下)
{
Serial.println("button_down");//串口输出"button_down"
}
if(Serial.available()>0) //读取串口是否有数据输入,如果有数据输入
{
command=Serial.read(); //读取串口的数据,赋值给command变量
if(command=='1') //判断command内容,如果为字符"1"
{
digitalWrite(14,HIGH); //IO14引脚输出高电平,点亮LED灯
}
if(command=='2') //判断command内容,如果为字符"2"
{
digitalWrite(14,LOW); //IO14引脚输出低电平,熄灭LED灯
}
}
delay(1000); //延时1秒钟
}
6、检查程序有无语法错误
操作步骤:单击"√"图标,如果有语法错误,会再Output框中会有红色报错信息。
7、生成hex文件
操作步骤:菜单Sketch->Export Compiled Binary
hex文件所在位置:sketch_001\build\ardunio.avr.mega文件夹内,我们要用到的是sketch_001.ino.hex。
三、利用protues搭建ardunio2560串口通信仿真电路
1、新建工程文件
操作步骤:File->New Project
在New Projec Wizard对话框中选择"From Development Board",在Development Board列表中选择Ardunio Mega 2560,然后点"Finish"按钮。文件名和存储路径可以自己设定和选择。
新建的工程文件如下图所示,文件中默认包含了一个电路重启按键电路。
2、添加串口元器件
(1)加载串口
操作步骤:左侧器件类型选择Compoment Mode->单击DEVICES最左侧的"P"。
在弹出的Pick Devices对话框中,Keywords栏中输入"COMPIM",在中间的区域显示搜索的结果,单击选中COMPIM元器件,右上角会显示器件的预览模型。选中后单击"确定"。
在屏幕需要添加元器件的位置单击一下,即可把串口模型加载进来。
(2)设置引脚标签
操作步骤:左侧Terminals Mode图标->TERMINALS列表中选择DEFAULT->在RXD和TXD引脚处单击添加引脚端子。
双击刚刚添加进来的引脚端子,分别设置引脚标签"RXD"和"TXD",单击"OK"完成设置。
设置完如下图所示,在电路图中引脚端子标签名一样的,代表两个端子是连在一起的,经过设置COMPIM的RXD和TXD引脚标签,就把串口元器件和单片机的TXD和RXD这组串口连接起来了。
注意:mega2560一共有4组串口,如下图所示。
(3)设置COMPIM连接的虚拟串口号
操作步骤:双击COMPIM,Physical port选择COM1,Physical Boud Rate选择9600,下边的Virtual Boud Rate也选择9600,然后点"OK"按钮。
3、添加LED灯电路
添加完的效果如下图所示:
(1)添加LED
操作步骤:Component Mode->"P"->Keywords输入"LED",在列表中选择LED-RED,单击"确定"按钮。
(2)添加限流电阻
操作步骤:Component Mode->"P"->Keywords输入"RES",在列表中选择RES,单击"确定"按钮。
(3)添加接地端子
操作步骤:Terminals Mode->GROUND->在LED灯阴极单击"确定"按钮。
(4)设定限流电阻的阻值
操作步骤:双击电阻,把Resistance值改为0.3k,然后单击"OK"。
(5)添加引脚端子和标签
在限流电阻左侧引脚添加引脚端子,设置标签名称为"IO14"。
4、添加自锁型按键button电路
添加完的效果如下图所示:
(1)添加按键
操作步骤:Component Mode->"P"->Keywords输入"BUTTON",在列表中选择BUTTON,单击"确定"按钮。
(2)添加上拉电阻
操作步骤:参照LED灯限流电阻,阻值为10k。
(3)添加接地端子
操作步骤:参照LED接地端子。
(4)添加电源端子
操作步骤:Terminals Mode->POWER->在上拉电阻左侧引脚单击"确定"按钮。
(5)添加引脚端子和设置标签
在上拉电阻和按键连接处添加引脚端子,设置标签名称为"IO15"。
5、完整电路
6、Mega2560录入hex格式程序
操作步骤:
(1)双击ardunio Mega 2560
在弹出的对话框中,点Program File后边的打开文件图标。
(2)找到hex文件
找到在第二章中,刚刚用ardunio IDE生成的sketch_001.ino.hex文件所在位置,选中hex文件,单击"打开"按钮。
(3)录入程序
点击"OK"按键,录入完成。
四、利用串口助手测试proteus仿真电路
1、打开串口助手并设置
操作步骤:端口号选择COM2,波特率选择9600,然后单击"打开串口"按钮。
2、运行proteus仿真电路
单击proteus窗口右下角运行图标,进行仿真。
3、单片机向串口助手发送数据
proteus电路中,button按键处于按下状态,串口助手数据接收栏内显示"button_down"。
button是自锁型按键,点按键右侧的开关切换符号即可切换开关状态。
当在proteus点击button切换按键,使按键抬起时,串口助手接收数据栏显示"button_up"
4、串口助手向单片机发送指令
在输入框内输入"1",然后点"发送"按钮,可以看到proteus中LED灯点亮。
在输入框内输入"2",然后点"发送"按钮,可以看到proteus中LED灯熄灭。
五、结论
通过上述仿真运行,可以看到运行的状态和程序里编写的意图完全一致,说明可以通过串口助手实现和proteus中的ardunio mega 2560进行串口通信。