Red de conocimiento informático - Problemas con los teléfonos móviles - Algunos problemas relacionados con la comunicación entre la PC y el microcontrolador 51 en VB

Algunos problemas relacionados con la comunicación entre la PC y el microcontrolador 51 en VB

1. No es necesario iniciar una interrupción cada vez que se envía un cuadro de datos. También puede iniciar una interrupción, enviar varios datos de forma continua y almacenar estos datos en la memoria del microcontrolador. estos datos La longitud y la ubicación de almacenamiento son las que acordó en el microcontrolador

2. Sí, estás hablando de la situación en la que la PC está conectada a varios chips esclavos. En este caso, solo necesitas. Primero envíe una dirección al microcontrolador. Después de dejar que el microcontrolador confirme que es su propia dirección, responde a la dirección de la PC. Después de que la PC confirma que es correcta, envía comandos y transmite datos. que escribí yo mismo después de la depuración, el efecto es muy bueno. Puede consultarlo. Por supuesto, todo lo que necesita es enviar datos a la dirección especificada. Puede simplificar el siguiente programa.

#include //Selecciona oscilador de cristal 11.0592 MHz

#include

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

#define AddressID 1 //Dirección local

unsigned char Call,*p; //llamar al comando 00H (recepción esclava) 01H (transmisión esclava)

unsigned char L; //Número de palabras enviadas

void Rs485();

main()

{

EA=1;

TMOD=0x20; //El modo del temporizador T1 es 2

TH1=0xfa; //La velocidad en baudios está configurada en 9600

TL1=0xfa;

/*** *********EA debe abrirse con regularidad y no se puede abrir todo el tiempo******/

ES=1;

/****** ******************************* ***/

SCON=0xf0; // El modo del puerto serie es 3, SM2=1, REN=1 permitido para aceptar

PCON=0x80; /p>

TR1=1;

p= &DATA51;

while(1);

}

void Rs485 ()

{ unsigned int i=0;

SM2=0; //Independientemente del valor de RB8, se aceptan datos de 8 bits

SBUF =AddressID; //Respuesta a P dirección local C

while(TI= =0);

TI=0;

while(RI==0 );

RI=0;

if( RB8==0) //Aceptar datos

ir a SSC2;

SM2= 1; //Abra el control RB8, solo reciba RB8=1; los datos de 8 bits serán Give SBUF

SBUF=0x80; //Comando ilegal, se informó error

while( TI==0);

TI=0;

return;

SSC2:

if(Call==0x00|| Call==0x01) //Comando legal

goto SSC3;

SBUF=0x80; //Comando ilegal, error

while(TI==0) ;

TI=0;

return ;

SSC3:

if(Llamar=

=0x00) //El esclavo recibe el comando de datos 00H

goto SSC4;

if(F0==1) //Bit personalizado F0, que indica que el microcontrolador está listo

ir a STD;

SBUF=0x00;

while(TI==0);

TI=0;

retorno;

STD:

SBUF=0x02;

mientras(TI==0);

TI=0 ;

STD1:

SBUF=*(p+i++);

while(TI==0);

TI= 0;

if(--L>0)

ir a STD1;

SM2=1;

regresar;

SSC4:

if(F0==1)

ir a SRD;

SBUF=0x00;

while( TI= =0);

TI=0;

retorno;

SRD:

SBUF=0x01;

mientras(TI==0);

TI=0;

SRD1:

mientras(RI==0);

RI=0;

*(p+i++)=SBUF;

if(--L>0)

ir a SRD1;

return;

}

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

{

if( SBUF ==AddressID)

Rs485();

}

3.1 El envío por mensaje de texto puede resultar en una comunicación fallida. En este momento, debe enviarlo en modo binario, es decir, puede enviar cualquier carácter. Si sus datos son caracteres puramente legibles (incluidos espacios, 0x00, etc.), puede enviarlos en modo texto y aceptarlos. de esta manera, puede recibirlo sin usar la conversión de datos a datos legibles, y en modo binario, no importa qué datos envíe, debe convertirse a código BCD.

3.2 Si desea usar ensamblador, preste atención al formato de recepción y envío, cambios de recepción y envío, el software debe restablecer TI y RI

Recibiendo:

JNB TI,$

MOV A, SBUF

CLR TI

Enviar:

MOV SBUF,A

JNB RI,$

CLR RI