SoloCodigo
		Programación Específica => Microcontroladores => Microcontroladores MOTOROLA => Mensaje iniciado por: omar8 en Jueves 31 de Julio de 2008, 19:55
		
			
			- 
				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){}
 
 }