Programación de comunicación serie Rs485
En primer lugar, hablemos de la conexión del hardware, bloque de circuito de señal USB a 485 (solo 20 yuanes, el más caro es tuyo), MAX485 chip, oscilador de cristal 11.0592M (el error de velocidad en baudios producido por este cristal de frecuencia es bajo).
Idea: utilizar la interrupción del puerto serie para controlar el LED del puerto P0 (solo estoy dando un ejemplo y escribiendo el programa yo mismo).
El proceso es el siguiente:
# include ltreg 51. h gt; //Selecciona oscilador de cristal 11.0592MHz.
#define AddressID 0x31 //Dirección local 1
sbit rs485e=p3^7 //Definir 485 // El pin de habilitación de RS5485E=0 está en estado de recepción, RS5485E = 1 es el estado de envío.
sbit max485_dir=p3^7;
main()
{
//* * * * * * * * * *Configuración de comunicación
SCON = 0xf 0; //REN=1 permite que el puerto serie acepte el estado, modo de funcionamiento del puerto serie 3, =1.
TMOD | = 0x 20; // Modo de trabajo del temporizador 2
PCON | = 0x 80 //Duplica la velocidad en baudios
IP = 0x 10; //El puerto serie tiene alta prioridad.
th 1 = 0x F4; //FA///Baudios * 2/*Velocidad de baudios 4800, bits de datos 8, bit de parada 1. No válido (11.0592M)
TL 1 = 0x F4;
tr 1 = 1; //Iniciar temporizador 1
EA = 1; interrupción
ES = 1; //Abrir puerto serie interrupción
RS 485 e = 0; // RS5485E=0 es el estado de recepción, RS5485E=1 es el estado de envío.
while(1);
}
Contador no válido 4 (no válido) la interrupción 4 usa 2 // interrupción del puerto serie
{
while(RI = = 0);
RI = 0;
if(SBUF==0x2a) //El código ASCII de 2a es *
{
mientras(RI = = 0);
RI = 0;
If(SBUF==AddressID) //Enviar El código ASCII para la dirección local 31 es 1.
{
mientras(RI = = 0);
RI = 0;
if(SBUF==0x23) // El código ASCII de 23 es #
{
P0 = 254//P0 = 11111110. Escriba aquí el programa que desea controlar el LED.
}
}
}
}
Así de simple. Se completó la depuración y se completaron los comentarios.
PD: Suplemento después de cinco días de responder preguntas: Si resuelves el problema, no hagas preguntas y no des puntos. Este cartel no es amable, ¡se acabó la tasación!