Red de conocimiento informático - Consumibles informáticos - Título: Dos microcontroladores utilizan el puerto serie modo 1 para la comunicación serie símplex

Título: Dos microcontroladores utilizan el puerto serie modo 1 para la comunicación serie símplex

#include?"stc12c5a.h"

#define?uchar?unsigned?char?

#define?uint?unsigned?int?

sbit?Alm_led? =P4^4; //Luz indicadora de alarma

uchar?rec_cnt;

uchar?rec_stat;

uchar?rec_buf [32];

void?delay_1s(uint?x)? //Retraso

{ uint?y;

uint?z; el retraso no es lo suficientemente largo, puede aumentar el valor de z

while(x--)

{

for(y=0;y< 50000;y++ )

{

? z=200;;

mientras(z--);

}

}

}

void?Init_uart0(void?)

{

P4SW?|=0x70; / /p4.5 Hacer salida del puerto IO

EA=0;

TMOD&=0X0F;

TMOD|=0X20;

SCON. =?0X50 ;

TH1?=?TL1?=0xfd;? //9600

//----------------- --- -

ES=1;

TR1=1;

REN=1;

//---- --- ----------------------------------------------- --- -------------

EA=1;

}

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

/*¿Enviar datos al puerto serie?*/

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

void?Send_one_byte(uchar?dat)

{

ES?=0;

TI=0;

SBUF?=?dat; //Búfer de recepción/transmisión SUBF (también llamado registro de función especial de comunicación en serie)

while(!TI //); Espere la transmisión de datos especial (indicador de interrupción de transmisión de TI)

TI?=?0;

ES=1;

}

void?main(void)

{

delay_1s(1); Init_uart0();

Send_one_byte(0);

mientras (1)

{

}

}

¿vacío?int_uart(vacío)? ¿interrumpir?4?

{

uchar?sbuf_temp; if(RI==1)

{

?

sbuf_temp=SBUF ;

if((sbuf_temp==0x7e)?&&?(rec_cnt==0))

//Inicio del marco

{

? rec_stat=1;

rec_buf[0]=sbuf_temp;

rec_cnt=1; /p>

}

else?if(rec_stat==1)

{

? rec_buf[rec_cnt++]=sbuf_temp;

if(rec_cnt?==?(rec_buf[1]+4))

{

?SBUF?=?0X0E;

rec_cnt = 0;

}

}

}

más?if(TI==1)

{

? TI=0;

}

}