O código (compilado com o IAR) é simples:
O vídeo abaixo mostra o resultado (depois que corrigi as besteiras que eu fiz):
/*
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