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?*/
/************* *********** **************************************** ********/ p>
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;
}
}