Utilice Proteus para implementar rápidamente una computadora host simple

Muchos módulos terminados a menudo necesitan leer datos a través del puerto serie cuando están en uso, por lo que para leer rápidamente los datos del módulo, utilizo el software Proteus para simular un arduino y luego programo para lograr la interacción de datos.

Crea un proyecto de Proteus

Crear proyecto 2560Inserte la descripción de la imagen aquí
Primero, cree un nuevo proyecto arduino Mega 2560 y dibuje el diagrama esquemático de acuerdo con sus necesidades. La parte de la placa de desarrollo a la izquierda en la figura anterior es la existencia después de que el proyecto se haya creado con éxito. El primer componente a la derecha es el TERMINAL VIRTUAL, que es equivalente al asistente del puerto serie. El segundo componente es el puerto serie componente de conexión, y el tercer componente es el reloj DS1302. Es para mostrar la hora, este componente no es necesario. Dónde encontrar los dos primeros puede ver la imagen a continuación.
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Los métodos de uso específicos de estos dos componentes no se repetirán (tenga en cuenta que el método de conexión de circuito de COMPIM es diferente del método de conexión de comunicación en serie habitual). Haga doble clic para ingresar a la interfaz de propiedad cuando lo use, y los parámetros están claros en un vistazo.

El siguiente paso es escribir el programa en la interfaz del código fuente.
Inserte la descripción de la imagen aquí

Programación

Si no hay una interfaz de código fuente al abrir el proyecto, puede hacer clic en la flecha roja en la figura de arriba para abrirlo.
Luego escriba algunas funciones necesarias, el código específico es el siguiente.

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;
  }
}

La biblioteca CRCx se usa en el código anterior, que se puede buscar y agregar en el IDE de Arduino.
Después de escribir el programa de acuerdo con el módulo, puede instalar el software del puerto serie virtual usted mismo y luego usar el asistente del puerto serie para verificar si los datos son correctos.
En este proceso, se puede decir una cosa más. Puede utilizar el siguiente código para convertir un número hexadecimal de cuatro bytes en datos de punto flotante de precisión simple.

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

Después de configurar el diagrama esquemático y el programa, los resultados de la simulación son los siguientes (si no hay una ventana de Terminal Virtual, puede encontrarla en el menú Depurar en la barra de menú):
Inserte la descripción de la imagen aquí
En resumen, el método de implementación es muy simple. Cuando no tiene una placa de desarrollo y no sabe cómo escribir la computadora host en C #, es muy útil como desarrollo rápido.

Supongo que te gusta

Origin blog.csdn.net/weixin_44625313/article/details/112697856
Recomendado
Clasificación