ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

Como se puede Detectar cuando un botón ha sido presionado.


Enviado por   •  20 de Noviembre de 2017  •  Tarea  •  2.152 Palabras (9 Páginas)  •  242 Visitas

Página 1 de 9

Taller 2

Interrupciones externas

  1. Detectar cuando un botón ha sido presionado.

Programa

//definicion de frecuencia

#define _XTAL_FREQ 4000000

//declaracion de variables

#define Button PORTBbits.RB0

#define led PORTDbits.RD1

void interrupt isr(void){                                      //rutina interrupción

   

    if(INTCONbits.INT0IF==1){                      // si el flag está en 1 sucedió la interrupción

       INTCONbits.INT0IF=0;                                 //borrar flag

       PORTDbits.RD1=~PORTDbits.RD1;                 //pin salida negada

           }

       }

void configuracion(void) {                           //funcion para la configuracion del micro

    ADCON1=0x0F;                                 //conifugurar pines analogos a digitales

    TRISBbits.TRISB0=1;                          //Pin de entrada INT0

    TRISDbits.TRISD1=0;                          //Pin de salida

   

    //Configuracion Interrupciones

    INTCONbits.GIE=1;                                //Activacion Interrupciones Globales.

    INTCONbits.INT0IE=1;         //Activacion de Interrupcion Timer 0. HABILITA LA INTERRUPCION DE TIMER 0

    INTCONbits.INT0IF=0;                 //Flag(Bandera) de Interrupcion en 0.

    INTCON2bits.INTEDG0=1;                 //indica el flanco de subida

}

int main(int argc, char** argv) {

   

 configuracion();

 

 while(1){  //bucle infinito

 }  

}

Diagrama de flujo

[pic 1]

  1. Conteo de productos para generar una alarma.

//definicion de frecuencia

#define _XTAL_FREQ 4000000

//declaracion de variables

#define AL PORTDbits.RD2

#define start PORTCbits.RC0

#define S1 PORTCbits.RC2

volatile int fin=0,contador=0,cont3=0,cont1=0;

volatile int boton=0,stop1=0;

void interrupt isr(void){ //rutina interrupcion

  //Boton stop

 

    if(INTCONbits.INT0IF==1){// si el flag esta en 1 sucedio la interrupción

       INTCONbits.INT0IF=0;//borrar flag

       stop1=1;        //reinicia el boton de parada

       boton=0;       //reinicia variable de inicio en 0

           }

     

      if(INTCONbits.TMR0IF==1){// si el flag esta en 1 sucedio la interrupción

       INTCONbits.TMR0IF=0;//borrar flag

       

       //tiempo 1 segundo alarma

       if(fin==1){           //valida la variable de verificacion

           contador++;       //contador de incremento 1  

           TMR0H=63582/256;  //Valor Real del Timer 255-Valor Formula = Resultado De la Operacion

           TMR0L=63582%256;

            AL=~AL;   //niega el estado de la alarma

            cont1=0; //reinicio de conteo

           if(contador==2){            

               AL=0;    //desactiva alarma despues de 1 segundo

               contador=0;     //reinicio de contador        

               fin=0;          //reinicio de variable

               cont1=0;        //reinicio de conteo en 0      

               T0CONbits.TMR0ON=0; //desactiva el timer

           }

       }

       }

     

 }

void configuracion(void) {   //funcion para la configuracion del micro

    ADCON1=0x0F; //conifugurar pines analogos a digitales

    TRISBbits.TRISB0=1;  //Pin de entrada INT0

    TRISDbits.TRISD1=0;  //Pin de salida

    TRISCbits.TRISC0=1;  //boton de start

    TRISCbits.TRISC1=1;  //boton stop

    TRISDbits.TRISD2=0;  //alarma

    TRISCbits.TRISC2=1;  //sesor de conteo

    T0CON=0b00000111;//Pre escala de 256, oscilador de 4MHz, Tiempotemp=1ms

    //Configuracion Interrupciones

    INTCONbits.GIE=1; //Activacion Interrupciones Globales.

   

    INTCONbits.INT0IE=1; //Activacion de Interrupcion  INT0.

    INTCONbits.INT0IF=0; //Flag(Bandera) de Interrupcion en INT0.

    INTCON2bits.INTEDG0=1; //indica el flanco de subida

   

    INTCONbits.TMR0IE=1; //Activacion de Interrupcion Timer 0.

   

    INTCONbits.TMR0IF=0; //Flag(Bandera) de Interrupcion en 0.

    TMR0H=63582/256;

    TMR0L=63582%256; //Valor Real del Timer 255-Valor Formula = Resultado De la Operacion.

   

}

int main(int argc, char** argv) {

   

 configuracion();

 

 while(1){  //bucle infinito

 

  if(start==1 && boton==0 ){    

      boton=1;  //variable de inicio inicia en 1  

      stop1=0;  //variable que valida la interrupcion del boton de parada

  }  

  if(boton==1 && start==0 && stop1==0){

    cont3=0;              //variable de conteo en 0

   

    while(S1==1){             //bucle del conteo de productos(valida si se activo el sensor))

        if(cont3==0 && fin==0){  //condicion para validar el inicio de conteo y si la alarma esta apagada

...

Descargar como (para miembros actualizados) txt (8 Kb) pdf (429 Kb) docx (303 Kb)
Leer 8 páginas más »
Disponible sólo en Clubensayos.com