timer conta ate TACCR0 e depois decrementa ate zero (grafico triangular) //seta flag CCIFG em DOIS MOMENTOS: quando atinge o valor de TACCR0 ou volta para zero TA0CCTL0 = CCIE; //(capture/compare interrupt enable) habilita a interrupcao pela flag CCIFG //TA0CCR0 = 0xFFFF; TA0CCTL0 &= ~CCIFG; //limpa flag de interrupcao}//______________________________________________________________________________void imprime(void)//FUNCAO IMPRIME MATRIZ{ for (i=0;i<8 br="" i=""> { desligalinhas(); for(j=0;j<8 br="" j=""> { if (matriz[i][j]!=0) acende(); else apaga(); } if(i==0) linha1(); else if(i==1) linha2(); else if(i==2) linha3(); else if(i==3) linha4(); else if(i==4) linha5(); else if(i==5) linha6(); else if(i==6) linha7(); else linha8(); __delay_cycles(250); }}/*void escrita(void);matriz[i][j] = 1;matriz[i][j] = 1;matriz[i][j] = 1;matriz[i][j] = 1;matriz[i][j] = 1;matriz[i][j] = 1;matriz[i][j] = 1;0x7f, 0x88, 0x88, 0x88, 0x88, 0x7f, // A 0xff, 0x91, 0x91, 0x91, 0x91, 0x6e, // B 0x7e, 0x81, 0x81, 0x81, 0x81, 0x42, // C 0xff, 0x81, 0x81, 0x81, 0x81, 0x7e, // D 0x81, 0xff, 0x91, 0x91, 0x91, 0x91, // E 0x81, 0xff, 0x91, 0x90, 0x90, 0x80, // F 0x7e, 0x81, 0x81, 0x89, 0x89, 0x4e, // G 0xff, 0x10, 0x10, 0x10, 0x10, 0xff, // H 0x00, 0x81, 0xff, 0xff, 0x81, 0x00, // I 0x06, 0x01, 0x81, 0xfe, 0x80, 0x00, // J 0x81, 0xff, 0x99, 0x24, 0xc3, 0x81, // K 0x81, 0xff, 0x81, 0x01, 0x01, 0x03, // L 0xff, 0x60, 0x18, 0x18, 0x60, 0xff, // M 0xff, 0x60, 0x10, 0x08, 0x06, 0xff, // N 0x7e, 0x81, 0x81, 0x81, 0x81, 0x7e, // O 0x81, 0xff, 0x89, 0x88, 0x88, 0x70, // P 0x7e, 0x81, 0x85, 0x89, 0x87, 0x7e, // Q 0xff, 0x98, 0x98, 0x94, 0x93, 0x61, // R 0x62, 0x91, 0x91, 0x91, 0x91, 0x4e, // S 0xc0, 0x81, 0xff, 0xff, 0x81, 0xc0, // T 0xfe, 0x01, 0x01, 0x01, 0x01, 0xfe, // U 0xfc, 0x02, 0x01, 0x01, 0x02, 0xfc, // V 0xff, 0x02, 0x04, 0x04, 0x02, 0xff, // W 0xc3, 0x24, 0x18, 0x18, 0x24, 0xc3, // X 0xc0, 0x20, 0x1f, 0x1f, 0x20, 0xc0, // Y 0xc3, 0x85, 0x89, 0x91, 0xa1, 0xc3, // Z*///______________________________________________________________________________void main (void) //Programa{ setup_MSP(); setup_TIMER(); reinicia(); //E POSSIVEL USAR OS COMANDOS ABAIXO NO LUGAR DE time(NULL) //time_t t; //srand((unsigned) time(&t)); //srand( (unsigned)time(NULL) );/* srand(time(NULL)) alimenta a funcao rand com uma semente de tempo A funcao time(NULL) e calculado corresponde ao total de segundos passados desde 1 de janeiro de 1970 ate a data atual. Desta forma, a cada execucao o valor da "semente" sera diferente.*/ __bis_SR_register(GIE); //habilita interrupcao TA0CTL |= MC_2; //run timer //TA0CTL &= ~MC_2; //stop timer while(1) imprime();//loop infinito}#pragma vector = PORT2_VECTOR__interrupt void interrupt_botao (void){ if (P2IN&0x08 && movimento!=2) movimento=1; //Define a movimentacao da cobra executada pela interrupcao do timer else if (P2IN&0x10 && movimento!=1) movimento=2; else if (P2IN&0x20 && movimento!=4) movimento=3; else if (P2IN&0x40 && movimento!=3 && movimento!=0) movimento=4; P2IFG = 0; //limpa flag de interrupcao}#pragma vector = TIMER0_A0_VECTOR__interrupt void interrupt_timer(void){ if (movimento==1) up(); else if (movimento==2) down(); else if (movimento==3) right(); else if (movimento==4) left(); TA0CCTL0 &= ~CCIFG; //limpa flag de interrupcao}