Red de conocimiento informático - Material del sitio web - ¡Dios mío, feliz año nuevo! Por favor, hazme una pregunta para la entrevista sobre microcontroladores, ¡gracias!

¡Dios mío, feliz año nuevo! Por favor, hazme una pregunta para la entrevista sobre microcontroladores, ¡gracias!

#include lt;reg52.hgt;

//----Tres pines de entrada------

sbit X0 = P1 ^0 ;

sbit X1 = P1^1;

sbit X2 = P1^2;

//----Tres pines de salida- ---- -

bit Y0 = P1^0;

bit Y1 = P1^1;

sbit Y2 = P1^2;

bit Reg_X0 = 1;

bit Reg_X1 = 1;

bit Reg_X2 = 1;

//----Conteo de pulsos de entrada- ---- ---------

carácter sin firmar de datos X0_Cnt = 0

carácter sin firmar de datos X1_Cnt = 0

carácter sin firmar de datos X2_Cnt = 0;

//----Establece el número de pulsos de salida----------

data unsigned char Y0_Num = 0

p>;

datos sin signo char Y1_Num = 0;

datos sin signo char Y2_Num = 0;

//----Conmutador de salida de pulsos y conteo------ -

datos sin firmar char Y0_Cnt = 0;

datos sin firmar char Y1_Cnt = 0;

datos sin firmar char Y2_Cnt = 0

// ----Parámetro de división de frecuencia-----------------

datos sin signo char Y1_Pre = 0;

datos sin signo char Y2_Pre = 0;

//---Función macro de pulso de salida-----------

#define PULSE_OUT_Y0(X) {X0_Cnt = 0; 0; Y0_Num = (Xlt; lt; 1); }

#define PULSE_OUT_Y1(X) {X1_Cnt = 0; Y1_Cnt = 0;

p>

#define PULSE_OUT_Y2(X) {X2_Cnt = 0; Y2_Cnt = 0; Y2_Num = (Xlt; lt; 1);}

//----interrupción del temporizador de MCU tiempo, modificar dependiendo del reloj específico-------

#define TH0_RELOAD 0xF4//---Valor inicial del temporizador 1, tiempo 50us

#define TL0_RELOAD 0x48 // ---Valor inicial del temporizador 1, tiempo 50us

void main(void)

{

TMOD = 0x01

TH0 = TH0_RELOAD;

TL0 = TL0_RELOAD;

ET0 = 0;

EA = 0;

TR0 = 1;

para(;;)

{

>

//----Contar--------------

if(Reg_X0 != X0)

{

Reg_X0 = X0;

si(Reg_X0 == 0)

{

X0_Cnt;

si(X0_Cnt gt ; = 10)

{

PULSE_OUT_Y0(Y0_Num);

}

}

} p>

//----Contar--------------

if(Reg_X1 != X1)

{

Reg_X1 = X1;

si(Reg_X1 == 0)

{

X1_Cnt;

si (X1_Cnt gt; = 20)

{

PULSE_OUT_Y1(Y1_Num);

}

}

}

//----Contar--------------

if(Reg_X2 != X2)

{

Reg_X2 = X2;

si(Reg_X2 == 0)

{

X2_Cnt;

if( X2_Cnt gt;= 50)

{

PULSE_OUT_Y2(Y2_Num);

}

}

}

}

}

void ISR_Timer0(void) interrupción 1

{

TH0 = TH0_RELOAD ;

TL0 = TL0_RELOAD;

if(Y0_Cnt lt; Y0_Num)

{

Y0_Cnt;

Y0 = ~Y0;

}

Y1_Pre; //---2 división de frecuencia, salida 5KHz

if(Y1_Pre gt; = 2)

{

Y1_Pre = 0;

if(Y1_Cnt lt; Y1_Num)

{

Y1_Cnt;

Y1 = ~Y1;

}

}

Y2_Pre; //---5 división de frecuencia, salida 2KHz

if(Y2_Pre gt; = 5)

{

Y2_Pre = 0;

if(Y2_Cnt lt; Y2_Num)

{

Y2_Cnt;

Y2 = ~Y2

}

}

}