Generazione di un segnale PWM con PIC16F876
#include <pic.h> void seup(void){ TRISC=0x00; // tutte uscite PR2=0xFF; // PR2 è usato per definire il periodo del PWM CCP1X=0; // 2 bit meno significativi del DUTY-CYCLE CCP1Y=0;
CCP1M3=1; // selezione modalità PWM = 11xx
CCP1M2=1;
// Periodo del PWM = PR2 x 4 x (Prescaler del Timer2) x Periodo Clock
// Frequenza Clock = 4 MHz Periodo clock = 0.25 us
T2CON=0x04; // Assegna il Prescaler al TMR2 e abilita Timer2
CCPR1L=0x00; // Assegna zero al valore del DUTY-CYCLE
}
loop()
{
unsigned char j=254;
unsigned int i;
while(j)
{
j--;
CCPR1L++; // Incrementa il valore del DUTY-CYCLE
i=2500;
while(i) i--; // pausa di circa 5 ms
}
j=254;
while(j)
{
j--;
CCPR1L--; // Decrementa il valore del DUTY-CYCLE
i=2500;
while(i) i--; // pausa di circa 5 ms
}
}
void main(void)
{
setup();
while(1) loop()
}