ME GUSTARIA SABER SI ESTA BIEN EL CODIGO DE PWM:
#include <hidef.h> /* for EnableInterrupts macro */
#include <MC68HC908GP32.h> /* include peripheral declarations */
#define INCREMENT 0XAA; //valor de incremento del ancho del pulso
/*Cuando sucede el overflow del TIM, se complementa el valor del pin del canal,
debido a el bit TOV1 se colocó en 1.
interrupt 6 void TIM1_OV_ISR (void)
{
static unsigned char i=0;
static unsigned char sentido = 1;
static unsigned int temp = 0;
T1SC_TOF=0;
if(sentido == 1) //Va anchando el pulso hasta aprox el 100% de T
{
if (i < 60)
{
temp +=INCREMENT;
T1CH0 = temp;
i++;
}
else sentido = 0;
}
if (sentido == 0) //va disminuyendo el ancho del pulso hasta T/60
{
if ( i > 1)
{
temp -= INCREMENT;
T1CH0 = temp;
i--;
}
else
{
sentido = 1;
temp +=INCREMENT;
T1CH0 = temp;
i++;
}
}
}
/* Cuando sucede esta interrupción el pin del canal va a cero ya
que en el modo output capture se configuró así*/
interrupt 4 void TIM_CH0_ISR (void)
{
T1SC0_CH0F=0; //INTERRUPCION ATENDIDA
}
void main(void) {
CONFIG1_COPD = 1;
DisableInterrupts;
//configuración de pin para salida
PTD_PTD4=0;
DDRD_DDRD4=1;
PTD_PTD4=1;
//Programacion de PWM
T1SC=0X70; // para generar 120Hz con Fclk=4.9152 MHz
T1MOD=0x2800; //T=1/120
T1CH0=0x00AA; //Valor inicial con T1 = T/60
T1SC0 = 0X5A; /*Coloca un cero en la salida cada vez que
el contador sea igual al valor en T1CH0 */
T1SC_TSTOP=0; //arranca conteo en módulo TIM
EnableInterrupts;
//CONFIGURACION DE LA INTERRUPCION IRQ
while(1){}
}