Red de conocimiento informático - Conocimiento informático - ¿Cómo programar el microcontrolador 51 para que envíe un pulso cada vez? Buscando programación detallada en lenguaje C. . .

¿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

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)

{//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

}

}