O código (compilado com o IAR) é simples:
- /*
- Spoke-o-dometer
- Teste1 - teste dos LEDs
- Daniel Quadros - abril, 2009
- */
- #include <msp430.h>
- // Valor para contar 200ms c/ clock de 12KHz
- #define TEMPO_200MS 2400 // 200ms * 12KHz
- typedef unsigned char byte;
- static int iLed; // indica qual LED piscar
- // Rotinas Locais
- static void Led (int iLed, int valor);
- // Programa Principal
- void main (void)
- {
- int cont = 0;
- // Desliga Watchdog
- WDTCTL = WDTPW + WDTSSEL + WDTHOLD;
- // Altera a configuração de clock para ativar o VLOCLK
- BCSCTL3 |= LFXT1S1;
- // Programa entradas e saídas
- P1SEL = 0xC0; // P1.0 a P1.5 -> LEDs
- // P1.6 e P1.7 são A3+ e A3-
- P1DIR = 0x3F;
- P1OUT = 0; // Todos as saídas em zero
- P2SEL = 0; // Todos os pinos como I/O
- P2DIR = 0xFF; // Todos os pinos como saída
- P2OUT = 0; // Todos as saídas em zero
- // Inicia os nossos controles
- iLed = 0;
- // Dá um tempinho para estabilizar a alimentação
- while (cont < 0xFF)
- cont++;
- // Alimentação já deve estar estável, vamos ligar o DCO
- BCSCTL1 = CALBC1_12MHZ;
- DCOCTL = CALDCO_12MHZ;
- // Programar a interrupção de tempo real p/ cada 200ms
- TACCR0 = TEMPO_200MS;
- TACTL = TASSEL_1 + MC_1 + TAIE; // ACLK, up mode, interrupt
- // O nosso programa principal vai ficar dormindo,
- // todo o tratamento será feito na interrupção
- _BIS_SR(LPM3_bits + GIE); // Dorme tratando interrupção
- // Nuca vai chegar aqui
- while (1)
- ;
- }
- // Tratamento da interrupção do Timer A
- #pragma vector=TIMERA1_VECTOR
- __interrupt void Timer_A_TO(void)
- {
- switch (TAIV)
- {
- case 10: // overflow
- Led (iLed, 0); // apaga LED anterior
- iLed = (iLed+1) & 7; // passa para o seguinte
- Led (iLed, 1); // acende o LED
- break;
- case 2: // CCR1, não utilizado
- break;
- }
- }
- // Altera o estado de um LED
- // iLed: número do LED, de 0 a 7
- // valor: 0 = apaga, 1 = acende
- static void Led (int iLed, int valor)
- {
- if (iLed < 6)
- {
- if (valor)
- P1OUT |= (1 << iLed);
- else
- P1OUT &= ~(1 << iLed);
- }
- else
- {
- if (valor)
- P2OUT |= (1 << iLed);
- else
- P2OUT &= ~(1 << iLed);
- }
- }
No próximo post, o primeiro teste do sensor.
Nenhum comentário:
Postar um comentário