Red de conocimiento informático - Conocimiento informático - Cómo hacer que C51 genere una señal de frecuencia de 38 kHz para crear un transceptor de infrarrojos

Cómo hacer que C51 genere una señal de frecuencia de 38 kHz para crear un transceptor de infrarrojos

Envíanos tu programa y déjanos analizarlo, de lo contrario será muy difícil encontrar el problema en unas pocas palabras.

Si su microcontrolador es STC89C52RC, puede usar la "Salida de reloj programable del temporizador 2" para generar una señal de frecuencia de 38 kHz. El STC89C52RC tiene tres temporizadores (temporizador 0, 1, 2), entre los cuales el temporizador 2 tiene la mayor cantidad. funciones, y la salida de reloj programable es una de ellas. La salida de reloj programable del Timer 2 es hardware independiente, el microcontrolador solo necesita controlar el encendido y apagado y no ocupa tiempo de CPU.

void TT2(uint i) // i Hz

{

TR2=0

RCAP2H=(65536-12000000/ 4/i)>>8;

RCAP2L=(65536-12000000/4/i)

}

void main(void)

{

T2MOD=0x02; //0000, 0010 permite la salida de reloj programable del temporizador/contador 2 (salida desde P1. 0)

TT2(38000); //Establece 38KHz

while(1)

{

......

}

}

En este momento, siempre que se inicie el temporizador 2 (TR2=1; ), P1.0 generará una onda cuadrada de 38 KHz con un ciclo de trabajo del 50 %

Simplemente apáguelo. Agregue 2 declaraciones:

TR2 =0;

P1^0=1; //Utilice un transistor PNP para controlar el emisor. ser alto cuando está apagado

Desventajas: El ciclo de trabajo = 50% no es ajustable, el pin del transmisor solo puede ser P1.0.

Programa de software que genera señales de frecuencia de 38khz. .

Ventajas:

①El ciclo de trabajo de la portadora de 38 kHz se puede ajustar arbitrariamente para lograr un bajo consumo de energía, una transmisión de corriente máxima alta y mejorar la distancia de transmisión y recepción.

② Los pines del transmisor se pueden definir arbitrariamente.

Por ejemplo:

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

Principio de funcionamiento: emisión infrarroja

Microcontrolador: STC89C52RC

Cristal: 12M

Entorno de compilación: Keil uVision4 V9.00

****************** * ***********************************************/< / p>

//

//Pin de emisión (conectado al transistor PNP b)

//El polo e del transistor PNP está conectado a una resistencia de 2Ω, el polo c es conectado al emisor de infrarrojos

#include

#include

#define uchar unsigned char

#define uint unsigned int

#define SBM 0x80 //identificador

#define m9 (65536-9000) //aproximadamente 9mS

#define m4_5 (65536-4500) //aproximadamente 4,5 mS

#define m1_6 (65536-1630) //Aproximadamente 1,65 mS

#define m_65 (65536-580) //Aproximadamente 0,65 mS

#define m_56 (65536-560) //Aproximadamente 0,56 mS

#define m40 (65536-40000) //Aproximadamente 40 mS

#define m30_5 ( 65536-30500) / /Aproximadamente 30,5 mS

#define m2_2 (65536-2250) //Aproximadamente 2,25 mS

sbit IR = P2^0; //definir el pin del emisor ( conectar a la base del transistor PNP)

sbit K1 = P3^2; //clave 1

sbit K2 = P3^3; //clave 2

void ZZ(uchar x);

void Z0(uchar temp);

void TT0(bit BT,uint x

/*┈┈┈); ┈┈┈┈┈ ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈

Función función: función principal

┈┈┈┈ ┈┈┈┈┈ ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/

void main(void)

{

TMOD = 0x01; //Modo de operación T0 de 16 bits

IR=1; //El puerto de envío siempre es de alto nivel

while(1)

{

si(! K1)

{

while(!K1);

ZZ(0x12); // Inicia el programa principal del transmisor de infrarrojos y envía el código de operación. 0x12

}

if(!K2)

{

while(!K2

ZZ); (0x62) ; //inicia el programa principal del transmisor IR, envía el código de operación 0x62

}<

/p>

}

}

}

/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈ ┈┈┈┈┈┈┈┈┈┈┈┈

Función:

Parámetros de entrada: código de operación

┈┈┈┈┈┈┈┈┈┈ ┈ ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/

void ZZ(uchar x)<

{

TT0(1,m9); //38KHz, retraso 9mS

TT0(0,m4_5); //No 38KHz, retraso 4.5mS

/* ┈┈ Enviar 4 cuadros de datos

Z0(SBM); // Enviar identificador

Z0(~SBM); // > while(!K1 || !K2)

{

TT0(1,m9);

TT0(0,m2_2);

TT0(1,m_56);

TT0( 0,m30_5);

}

}

/*┈┈┈┈┈┈ ┈┈┈┈┈┈┈┈┈┈┈┈ ┈┈ ┈┈┈┈┈┈┈┈┈┈

Función: Programa de envío de un solo cuadro

Parámetros de entrada: 1 cuadro de datos

┈┈┈┈ ┈┈┈ ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/

vacío Z0(uchar temp)

{ <

uchar v;

for (v=0;v<8;v++) //recorre 8 turnos

{

TT0(1 ,m_65); //nivel alto 0.65mS

if(temp&0x01) TT0(0,m1_6); //Envía el bit más bajo

else TT0(0,m_56) ; /p>

temp >>= 1; //Desplazar un bit a la derecha

}

}

/*┈┈┈┈┈ ┈┈ ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈

Función Función: Transmisor de pulsos 38KHz + programa de retardo

Parámetros de entrada: ( Ya sea para transmitir pulsos, el tiempo de retardo es aproximadamente ┈┈*/

void TT0(bit BT,uint x)

{

TH0 = x>>8 ; //Ingrese el valor inicial de T0

TL0 = x;

TF0=0; //Borrar

TR0=1 //Iniciar temporizador 0

si( BT == 0) mientras(! TF0); //BT=0 no envía pulsos de 38 KHz, solo retrasos; BT=1 envía pulsos de 38 KHz y retrasos;

else while(1) //pulsos de 38 KHz, ciclo de trabajo 5:26

p>

{

IR = 0;

si(TF0)romper;

si(TF0)romper;

IR = 1;

si(TF0)romper;

si (TF0)romper;

si(TF0)romper;

si(TF0)se rompe;

si(TF0)se rompe;

si(TF0)se rompe;

si(TF0)se rompe;

if(TF0)romper;;

si(TF0)se rompe;;

si(TF0)se rompe )

si(TF0)se rompe;

si(TF0)se rompe;

if(TF0)break;

}

TR0=0; //Cerrar temporizador 0

TF0=0 //Borrar indicador de desbordamiento 0;

IR =1; //Después de que se detiene el pulso, el modo normal del puerto de envío pasa a nivel alto

}