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
#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 p>
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>}
} p>
}
El programa ha sido depurado y se puede aplicar directamente