Está en la página 1de 3

Practica uno

Cuando se presione 5 veces el botn que se prendan los leds, a la sexta vez que se apaguen. ISR BOTON

CALL #T 50ms Si Si Si

P.1.3=0

Var=var+1

Var< 5

Apagar led

P.1.3=0

No

No

1 No Encender led

Var=5

Espera 50ms

No Borra bandera

Borra bandera

1 #

RETI

Diagrama de flujo

RESET

Reloj =1MHz Apagar perro guardin Programar BIOS P1.3=Entrada P1.0 y p1.6 =Salida P1SEL=0; P1SEL2=0; P1DIR=0XF7; P1REN=0X08; P1IES=0X08; P1IFG=0; P1IE=0X08; P2SEL=0; P2SEL2=0; P2DIR=0XFF;

Cdigo
#include <msp430G2553.h> unsigned int var=0; void main( void ) { // Stop watchdog timer to prevent time out reset WDTCTL = WDTPW + WDTHOLD; P1SEL=0; P1SEL2=0; P1DIR=0XF7; P1REN=0X08; P1IES=0X08; P1IFG=0; P1IE=0X08; P2SEL=0; P2SEL2=0; P2DIR=0XFF; P1OUT &=~BIT0+BIT6;//Apaga LEDS _BIS_SR(LPM0_bits+GIE); //CPU apagada y permite interrupciones } // Rutina de servicio del puerto1 #pragma vector =PORT1_VECTOR __interrupt void Port1_void(void){ __delay_cycles(30000); if((P1IN&BIT3)==0){ //Pregunta por el botn, si es 0 esta presionado, si es 1 no se presiona. __delay_cycles(30000);//Tiempo de rebote

var++; //se incrementa la variable para llegar a las 5 veces if(var<5)//si var es menor que 5 { P1IFG&=~BIT3; //envia al bit 3 un 0 return; // regresa ya que la variable aun no es mayor a 5 } else if(var==5) //si el boton fue presionado 5 veces entra en el ciclo { P1OUT|=BIT0+BIT6; //envia un uno a los bit 0 y 6, que son los bits conectados a los leds P1IFG&=~BIT3; // Borra bandera return; //regresa } else { P1OUT&=~BIT0+BIT6;//apagar leds P1IFG&=~BIT3; //envia un 0 al bit 3 var=0; //reinicia el conteo return; } } else{ P1IFG&=~BIT3; return;} return; }

También podría gustarte