- El contador del timer se configura para que cuente hasta 200.
- De 0 hasta 20 la salida está high. El resto hasta 200 está low.
- Al llegar a 200 se ejecuta la interrupción TIMER0_A0_VECTOR.
- La salida está en P 1.2.
Configuración de la salida:
P1SEL = BIT2;
Configuración del timer:
/*
* TACCTL0, Capture/Compare Control Register 0
*
* CM_0 -- No Capture
* CCIS_0 -- CCIxA
* ~SCS -- Asynchronous Capture
* ~SCCI -- Latched capture signal (read)
* ~CAP -- Compare mode
* OUTMOD_0 -- PWM output mode: 0 - OUT bit value
*
* Note: ~
*/
TACCTL0 = CM_0 + CCIS_0 + OUTMOD_0 + CCIE;
Configuración del PWM:
/*
* TACCTL1, Capture/Compare Control Register 1
*
* CM_0 -- No Capture
* CCIS_0 -- CCIxA
* ~SCS -- Asynchronous Capture
* ~SCCI -- Latched capture signal (read)
* ~CAP -- Compare mode
* OUTMOD_7 -- PWM output mode: 7 - PWM reset/set
*
* Note: ~
*/
TACCTL1 = CM_0 + CCIS_0 + OUTMOD_7;
Fijar el contador en 200, la transición del high a low al llegar a 20:
TACCR0 = 200;
TACCR1 = 20;
Configurar la fuente del reloj:
/*
* TACTL, Timer_A2 Control Register
*
* TASSEL_1 -- ACLK
* ID_0 -- Divider - /1
* MC_1 -- Up Mode
*/
// Usando ACL 12khz
// TACCR0 : 1Seg = 12000
// TACCR1 : 99% -> 198 (99% hight, 1% low)
// 50% -> TACCR0 /2
TACTL = TASSEL_1 + ID_0 + MC_1;
El código a ejecutar en la interrupción al llegar a 200:
#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer_A0 (void){
P1OUT ^= BIT0;
}
No hay comentarios:
Publicar un comentario