使用Proteus快速实现简易上位机

本文介绍了如何利用Proteus软件创建arduinoMega2560工程,通过串口通信与VIRTUALTERMINAL和DS1302时钟等元器件进行数据交互。在SourceCode中编写程序,包括设置串口、发送和接收数据的函数,以及CRC校验。通过这种方式,可以在没有开发板的情况下快速实现模块数据的读取和验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

很多的成品模块,在使用时往往需要通过串口进行数据的读取,所以笔者为了快速实现模块数据的读取,便使用Proteus软件仿真一块arduino,再编程实现数据交互。

创建Proteus工程

创建2560工程在这里插入图片描述
首先新建一个arduino Mega 2560的工程,并按照自己的需求绘制原理图。上图中的左边开发板部分为成功创建工程后就存在,右边第一个元器件为VIRTUAL TERMINAL,相当于串口助手,第二个元件为串口连接组件,第三个元器件为DS1302时钟,笔者是为了显示时间,这个元器件非必要。前两个在哪里找到可以看下面的图片。
在这里插入图片描述
在这里插入图片描述
这两个元器件的具体的使用方法就不在赘述了(需注意的是COMPIM的电路连接方式与平常串口通信的连线方式不同),使用时双击进入属性界面,参数一目了然。

接下来就是在Source Code界面编写程序即可。
在这里插入图片描述

编写程序

如果打开工程时,没有Source Code界面,可点击上图中红色箭头处打开。
然后编写几个必要函数即可,具体代码如下。

void setup()
 { 
    Serial.begin(9600);  //与COMPIM元器件连接
    Serial1.begin(9600); //与VIRTUAL TERMINAL元器件连接
    delay(200);
	Serial1.println("Start!!!");
 }
 
void loop()
 { 
	Send_Data(0x0055, 0x000C);//发送函数
	delay(100);
	Receive_Data();//接收函数
	delay(2000);
 }

void Send_Data(uint16_t function0, uint16_t adrr0)//根据模块协议自行编写
{
  data[0] = 0x01;
  data[1] = 0x03;
  data[2] = function0>>8;
  data[3] = (uint8_t)function0;
  data[4] = adrr0>>8;
  data[5] = (uint8_t)adrr0;
  uint16_t crc_data = crcx::crc16(data, len-2);//计算数据CRC数据
  data[6] = (uint8_t)crc_data;
  data[7] = crc_data>>8; //计算CRC校验
  Serial.write(data, len);//发送消息
}

void Receive_Data()
{
  if(Serial.available()&&(rx_flag==0)) //判断串口缓存区 
   {
     Serial.readBytes(serialBuffer, bufferLength); //读取一帧数据
     uint16_t crc_data = (uint16_t)serialBuffer[28]<<8 | serialBuffer[27];//读取消息中CRC数据
     uint16_t crc_cal = crcx::crc16(serialBuffer, bufferLength-2);//计算数据CRC校验
     if(crc_data == crc_cal) 
     { 
       rx_flag=1;
     }  
	else  Serial1.println("rec err!!");
   }
   if(rx_flag==1)
   {
     Data_Deal();//调用数据处理函数,根据模块协议自行编写即可
     Serial1.println("rec ok!!");
     rx_flag=0;
  }
}

上述代码中用到了CRCx库,可以在Arduino IDE中搜索添加。
根据模块编写完程序之后,可以自己安装虚拟串口软件后,再使用串口助手验证数据是否正确。
在这过程中,还有一点可以说的。可以使用以下代码将四字节十六进制数转换为单精度浮点数据。

uint32_t  x=0;
float *Rec_data = (float *)(&x);
Data=*Rec_data;

原理图和程序都弄好之后,仿真运行效果如下图(如果没有Virtual Terminal窗口,可以在菜单栏的Debug中找到):
在这里插入图片描述
总之,实现方法很简单。在手上没有开发板,又不是很会用C#写上位机时,作为快速开发还是蛮有用的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值