La Red de Conocimientos Pedagógicos - Currículum vitae - Lenguaje C de comunicación multicomputadora de un solo chip C51

Lenguaje C de comunicación multicomputadora de un solo chip C51

¿Microcontrolador a, b, c? a es el maestro y bc es el esclavo. Hay una entrada de interrupción externa 0 en A. Presione los dos LED de A durante 500 ms por primera vez, luego presione el LED de la máquina B durante 500 ms y presione el LED de la máquina C por tercera vez durante 500 ms. y luego repetir el proceso. Los dos tubos digitales muestran 0/1/2 respectivamente. y abc (bc es retroalimentado por el esclavo)

/*

Los pasos básicos de la comunicación maestro-esclavo:

1.? El maestro y el esclavo se inicializan en el modo 2 o 3, y ambos esclavos se configuran en SM2=1, lo que permite interrupciones.

2.? El maestro establece TB8=1 y envía la dirección del esclavo.

3.? Todos los esclavos reciben la dirección del esclavo a ser direccionada enviada por el maestro.

4.? Después de que el esclavo direccionado confirma la dirección, establece SM2 = 0 local y devuelve la dirección al host para que el host la verifique.

5.? Después de la verificación, el maestro envía un comando al esclavo direccionado para notificarle que acepte o envíe datos.

6.? Después de la comunicación, el maestro y el esclavo restablecen SM2=1 y el maestro puede direccionar otros esclavos.

*/

************************************ ** **********************************

Moderador a:

************************************************* *******************

¿#Contiene? & ltreg 51 . h & gt;

#¿Definición? ¿Uchar? ¿No firmado? Té

#Definición? uint? ¿No firmado? (Igual que las organizaciones internacionales) Organizaciones internacionales

Uchar? leddata[]={0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F, 0x77, 0x7C, 0x39, 0x5E, 0x79, 0x71, 0x40, 0x 00};

¿Uchar? Modo;

sbit? ¿P10? =?p1^0;

bit? ¿P13? =?p1^3;

un poco? ¿P17? =?p1^7;

un poco? ¿P20? =?p2^0;

bit? ¿P21? =?p2^1;

¿No válido? UART_init()

{

¿TMOD? =?0x20

TH1? =?0xfd

TL1? =?0xfd

TR1? =?1;

SCON? =?0xd0

ES? =?1;

EX0? =?1;

IT0? =?1;? //Activador de salto INT0

EA? =?1;

TI? =?0;

}

¿Anulado? DelayMs(int? milisegundos)

{

Uchar? Yo;

mientras(ms -)?

for(I = 0;?i<120;?i++);

}

¿No es válido? putc_to_SerialPort(uchar?c)

{

SBUF? =?c;

Y (TI?==?0);

TI? =?0;

}

¿Anulado? MasterControl(¿Sin firmar? ¿Comarca? ¿Dirección? ¿Sin firmar? ¿Comarca? Comd)

{

TB8? =?1;

putc _ a _ puerto serie(Addr);

Daremus(50);

TB8? =?0;

putc _ a _ puerto serie(Comd);

Daremus(50);

}

Ex0_int( vacío)? ¿interrumpir? 0

{

P0? =?datos led[modo];

P20? =?0;

Si (modo?==?0)

{

P2? =?datos led[10];

P10? =?0;

P13? =?0;

Daremus(500);

P10? =?1;

P13? =?1;

//MasterControl('b','C');

//MasterControl('c','C');

}

¿Y si? if(modo?==?1)

{

P10? =?1;

P13? =?1;

Control principal(' b ', ' O ');?

/

/MasterControl('c ', ' C ');

}

¿Y si? if(modo?==?2)

{

P10? =?1;

P13? =?1;

//MasterControl('b','C');

MasterControl('c','O');

}

¿Modo? =?(Modo?+?1)?%?3;

}?

com_int(void)? ¿interrumpir? Cuatro

{

Frecuencia intermedia (RI)

{

¿RI? =?0;

Si (SBUF?==?b’)

{

P2? =?datos led[11];

}

Si (SBUF?==?c’)

{

P2? =?datos LED[12];

}

}

}

¿No válido? Principal (no válido)

{

¿P0? =?0x00

P1? =?0xff

P2? =?0x00

UART _ init();

¿Modo? =?0;

mientras(1);

}

********************* ***** ********************************************** ****

Esclavo b:

****************************** ************ **********************************

#¿Incluir? & ltreg 51 . h & gt;

#¿Definición? ¿Uchar? ¿No firmado? Té

Uchar? RecData

sbit? ¿P10? =?p1^0;

bit? ¿P13? =?p1^3;

¿No válido? UART_init()

{

¿TMOD? =?0x 21;

TH1? =?0xfd

TL1? =?0xfd

TR1? =?1;

SCON? =?0xf0

ES? =?1;

¿PD? =?1;

EA? =?1;

}

¿Anulado? DelayMs(int? milisegundos)

{

Uchar? Yo;

mientras(ms -)?

for(I = 0;?i<120;?i++);

}

¿No es válido? putc_to_SerialPort(uchar?c)

{

SBUF? =?c;

Y (TI?==?0);

TI? =?0;

}

com_int(void)? ¿interrumpir? Cuatro

{

IF (RI)

{

RecData? =?SBUF

RI? =?0;

if (RB8?==?1)//dirección

{

if(RecData?==?b')// Es su propia dirección, configure SM2=0 y prepárese para recibir datos.

{

¿SM2? =?0;?

putc_a_puerto serie('b');?

}

Else//no es tu propia dirección.

{

¿SM2? =?1;

}?

}?

Si (RB8?==?0)//datos

{?

if(RecData=='O ')

{

P10? =?0;

P13? =?0;

Daremus(500);

P10? =?1;

P13? =?1;

}

if(RecData=='C ')

{

P10? =?1;

P13? =?1;

}

SM2? =?1;

}?

}?

}

¿No válido? Principal (no válido)

{

¿P0? =?0xff

P1? =?0xff

UART _ init();

mientras(1);

}

******* ************************************************** * *********

Esclavo c:

************************ ***** *******************************************

#¿Incluir? & ltreg 51 . h & gt;

#¿Definición? ¿Uchar? ¿No firmado? Té

Uchar? RecData

sbit? ¿P10? =?p1^0;

bit? ¿P13? =?p1^3;

¿No válido? UART_init()

{

¿TMOD? =?0x 21;

TH1? =?0xfd

TL1? =?0xfd

TR1? =?1;

SCON? =?0xf0

ES? =?1;

¿PD? =?1;

EA? =?1;

}

¿Anulado? DelayMs(int? milisegundos)

{

Uchar? Yo;

mientras(ms -)?

for(I = 0;?i<120;?i++);

}

¿No es válido? putc_to_SerialPort(uchar?c)

{

SBUF? =?c;

Y (TI?==?0);

TI? =?0;

}

com_int(void)? ¿interrumpir? Cuatro

{

IF (RI)

{

RecData? =?SBUF

RI? =?0;

if (RB8?==?1)//dirección

{

if(RecData?==?c')// Es su propia dirección, configure SM2=0 y prepárese para recibir datos.

{

¿SM2? =?0;?

putc _ to _ serial port(' c ');

}

Else//no es su propia dirección.

{

¿SM2? =?1;

}?

}?

Si (RB8?==?0)//datos

{?

if(RecData=='O ')

{

P10? =?0;

P13? =?0;

Daremus(500);

P10? =?1;

P13? =?1;

SM2? =?1;

}

if(RecData=='C ')

{

P10? =?1;

P13? =?1;

SM2? =?1;

}?

}?

}

}

¿Anulado? Principal (no válido)

{

¿P0? =?0xff

P1? =?0xff

UART _ init();

mientras(1);