Está en la página 1de 3

#include <msp430.

h>
void ini_P1_P2(void);
void config_ini(void);
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
#define
long int i=0;

ZERO
UM
DOIS
TRES
QUATRO
CINCO
SEIS
SETE
OITO
NOVE
AA
AB
AC
AD
AE
AF

~(BIT0 + BIT1 + BIT2 + BIT3 + BIT4 + BIT5)


~(BIT1 + BIT2 )
~(BIT0 + BIT1 + BIT3 + BIT4 + BIT6)
~(BIT0 + BIT1 + BIT2 + BIT3 + BIT6)
~(BIT1 + BIT2 + BIT5 + BIT6)
~(BIT0 + BIT2 + BIT3 + BIT5 + BIT6)
~(BIT0 + BIT2 + BIT3 + BIT4 + BIT5 + BIT6)
~(BIT0 + BIT1 + BIT2)
~(BIT0 + BIT1 + BIT2 + BIT3 + BIT4 + BIT5 + BIT6)
~(BIT0 + BIT1 + BIT2 + BIT3 + BIT5 + BIT6)
~(BIT0 + BIT1 + BIT2 + BIT4 + BIT5 + BIT6)
~(BIT2 + BIT3 + BIT4 + BIT5 + BIT6)
~(BIT0 + BIT3 + BIT4 + BIT5)
~(BIT1 + BIT2 + BIT3 + BIT4 + BIT6)
~(BIT0 + BIT3 + BIT4 + BIT5 + BIT6)
~(BIT0 + BIT4 + BIT5 + BIT6)

void main(void) {
config_ini();
ini_P1_P2();

do{
switch( i ){
case 0:
P2OUT = ZERO;
break;
case 1:
P2OUT = UM;
break;
case 2:
P2OUT = DOIS;
break;
case 3:
P2OUT = TRES;
break;
case 4:
P2OUT = QUATRO;
break;
case 5:
P2OUT = CINCO;
break;
case 6:
P2OUT = SEIS;
break;
case 7:
P2OUT = SETE;

break;
case 8:
P2OUT = OITO;
break;
case 9:
P2OUT =
break;
case 10:
P2OUT = AA;
break;
case 11:
P2OUT =
break;
case 12:
P2OUT =
break;
case 13:
P2OUT =
break;
case 14:
P2OUT =
break;
case 15:
P2OUT =
break;

NOVE;

AB;
AC;
AD;
AE;
AF;

default:
P2OUT = ~BIT7;
break;
}
}while(1);
}
void config_ini(void){
WDTCTL = WDTPW + WDTHOLD;
// Stop watchdog timer
DCOCTL= CALDCO_12MHZ; //Funo pronta da biblioteca prara a frequencia ficar
em 16MHZ
BCSCTL1= CALBC1_12MHZ;
BCSCTL2= DIVS1 ;//+ DIVS1; //seta a diviso da frequencia em 8 para clock
secundario 16/8MHz -> 2MHz
BCSCTL3= 0x00;// XCAP0 + XCAP1; //Define os capacitores 12,5pF no sei co
mo escolher
//while(BCSCTL3 & LFXT1OF);//sai desse loop quando LFXT1CLK estiver esta
vel
__enable_interrupt();
}
void ini_P1_P2(void){
P1DIR = ~(BIT0 + BIT3);
sto como sada
P1REN = BIT0 + BIT3;

//BIT0 e BIT3 como entrada digital, o re


// Habilita resistores de P1.0 e P1.3

P1OUT
1.0 e P1.3
P1IES
P1IE
P1IFG

= BIT0 + BIT3;

// Habilita resistores de pull up para P

= BIT0;//+ BIT3);
= BIT0;// + BIT3;
= 0x00;

//Determina borda de descida


//Habilita a interrupo
//Limpa todas as flags

P2DIR = BIT0 + BIT1 + BIT2 + BIT3 + BIT4 + BIT5 + BIT6 + BIT7; // Todos
os bits da P2 como saida
P2SEL &= ~(BIT6 + BIT7); // P2.6 e P2.7 como saida digital conectados n
os pinos 18 e 19 do uCon and bit-bit
P2OUT = 0xFF; // Leds apagados
}
#pragma vector=PORT1_VECTOR
__interrupt void P1_RTI(void){
P1IFG &= ~(BIT0+BIT3); //limpa a flag
P1IE &= ~(BIT0 + BIT3); //desabilita interrupo
WDTCTL=WDTPW+WDTTMSEL+WDTCNTCL + WDTIS1;// 8192/ Frequencia do cloclk ->
4,096ms
IE1 |=WDTIE;
/*
* WDTPW -> permite modificar o whatchdog
* WDTTMSEL -> modo temporizador
* WDTCNTCL -> limpa o contador
* WDTIS0 -> 01 : diviso por 8192
*/
}
#pragma vector=WDT_VECTOR
__interrupt void WDT_RTI(void){
WDTCTL=WDTPW+WDTHOLD; //Para o watchdog (senha+parar o whatchdog)
if (~(P1IN)& BIT0){ //Se a entrada co ch 1 for de 1 para 0, vai entrar n
o IF e dizer que ocorreu um giro no encoder
if(~(P1IN) & BIT3){ //Se o sinal do ch2 estiver baixo, o giro fo
i anti horario, se for alto, foi horario (borda de descida atrasa ou adianta)
if(i>0){
i--;
}
}
}
else{
if(i < 15){
i++;
}
}

P1IFG &= ~(BIT0+BIT3); //limpa a flag


P1IE |= (BIT0 + BIT3); //habilita interrupo
}

También podría gustarte