¿Cómo programar el microcontrolador 51 para que envíe un pulso cada vez? Buscando programación detallada en lenguaje C. . .
Le daré un marco básico y lo modificaré según sus requisitos específicos. Implementado utilizando la interrupción del tiempo 1, la precisión es relativamente alta.
#include
#define PERIODH (65536l-10000l)/0X100 //Establece el valor inicial de TH1 para que se interrumpa una vez cada 10 ms
#define PERIODL (65536l-10000l)%0X100 //Supongamos que el valor inicial de TL1 se interrumpe una vez cada 10 ms
sbit P1_1 = 0x91 //Supongamos que los pulsos salen desde P1.1 p>
unsigned int iCount; //Variable de tiempo de intervalo de retardo
unsigned int iPulseCount; //Variable de tiempo de ancho de pulso
void timer1() interrumpe 3 usando 1
{// El temporizador se interrumpe cada 0,01 segundos
TH1 = PERIODH
TL1 = PERIODL;
if(iCount)
{// El recuento no ha llegado a 0, el contador es -1
iCount--;
}
if(iPulseCount) p>
{//El recuento no ha llegado a 0, contador -1
iPulseCount--;
}
}
main()
{
TMOD = 0X10; //Modo 1
EA = 1 //Interrupción total habilitada
ET1 = 1; //Interrupción del temporizador 1 habilitada
TR1 = 1; //Iniciar temporizador 1
P1_1 = 0; preestablecido en nivel bajo
while(1)
{
iCount = 200;//Un pulso cada 200*10 ms = 2 segundos, cambia el valor t aquí
while(iCount); //Esperando 2 segundos
P1_1 = 1; //Establecido en nivel alto, genera pulso positivo
iPulseCount = 10 ; //Cada intervalo es 10 *10ms = un pulso de 100ms, el ancho del pulso cambia aquí
while(iPulseCount); //El nivel alto se mantiene durante 100ms
P1_1 = 0; //Establecido en nivel bajo, la salida del pulso positivo finaliza
}
}