Red de conocimientos turísticos - Conocimientos sobre calendario chino - Al solicitar ayuda al maestro, ¿existe un programa de respuesta maestro-esclavo basado en el microcontrolador 485-51 en lenguaje C? Es decir, el host envía un código de dirección a cada máquina esclava para solicitar una respuesta.

Al solicitar ayuda al maestro, ¿existe un programa de respuesta maestro-esclavo basado en el microcontrolador 485-51 en lenguaje C? Es decir, el host envía un código de dirección a cada máquina esclava para solicitar una respuesta.

Este problema es muy simple si usa la comunicación 485, la idea es la siguiente

Idea:

Aspecto de PC: puede usar el control MSCOMM para. Primero envíe un carácter para representar la dirección de recepción después de que el retraso sea de 1 ms (tenga en cuenta que el lado de la PC debe agregar un retraso durante el proceso de envío de caracteres en la comunicación 485. Este es un resumen de mis muchas pruebas. Si usa el asistente de depuración. , su código interno ya ha agregado un retraso, por lo que no es necesario considerar esto Problema) antes de enviar instrucciones de control, se recomienda a los principiantes que utilicen el asistente de depuración directamente

En cuanto al microcontrolador: primero verifique. los datos recibidos Si no es una dirección local, abandone. Si es una dirección local, verifique si el comando es correcto, después del procesamiento, regrese a la dirección local de la PC y envíe el comando. >

Le daré un ejemplo para enseñarle cómo reproducir la comunicación multiestación. El siguiente es un programa que pasé la prueba

#include //Seleccione cristal. oscilador 11.0592MHz

#include

#define DATA51 DBYTE[0x80] //80H para almacenar datos

#define AddressID 0x31 // Dirección local 1

sbit RS485E=P3^7; //Definir el pin de habilitación de 485// RS5485E=0 es el estado de recepción RS5485E=1 es el estado de envío

sbit MAX485_DIR =P3^7;

main()

{

//************ ****Configuración de comunicación

SCON = 0xF0; //REN=1 permite el estado de aceptación de serie, modo de trabajo del puerto serie 3, SM2=1

TMOD|= 0x20 // Modo de trabajo del temporizador 2

p>

PCON|= 0x80; //Duplica la velocidad en baudios

IP=0x10; //La prioridad del puerto serie es alta

// TH1 = 0xFD; *2 /* valor de recarga 19200, bit de datos 8, bit de parada 1. Sin bit de validación (11.0592)

TH1 = 0xf4; //fa // //baudios*2 /* Velocidad de baudios 4800, bits de datos 8, bit de parada 1.

Sin bit de validación (11.0592M)

TL1 = 0xf4;

TR1 = 1; //Activar el temporizador 1

EA = 1; interrupción total

ES = 1; //Habilitar interrupción del puerto serie

RS485E=0; // RS5485E=0 está en estado de recepción RS5485E=1 está en estado de envío

while (1);

}

void counter4(void) interrupción 4 usando 2 //interrupción del puerto serie

{

mientras(RI ==0);

RI=0

if(SBUF==AddressID)

{

mientras( RI== 0);

RI=0;

if(SBUF==0x01) //Enviar comando

{

MAX485_DIR=1 ; //Desarrollar y enviar

SBUF=AddressID

while(TI==0);

TI=0;

SBUF =0x6f; //Enviar

while(TI==0);

TI=0;

SBUF=0x6b; Enviar k

MAX485_DIR=0; //Habilitar recepción

}

if(SBUF==0x00) //Recibir

{

// Cómo manejarlo aquí depende de lo que quieras hacer. No me pediste que lo hiciera y no sé cómo escribirlo, así que escríbelo tú mismo.

p>

}

}

}

El programa ha sido depurado y se puede aplicar directamente