Como se puede Detectar cuando un botón ha sido presionado.
Enviado por karlo • 3 de Enero de 2019 • 596 Palabras (3 Páginas) • 292 Visitas
...
cont1++; //conteo de productos
cont3=1; //reinicio de conteo
}
}
if(cont1==20){
T0CONbits.TMR0ON=1;//Activa el timer
AL=1; //Activa alarma
fin=1; //
}
}
}
}
Diagrama de flujo
[pic 2]
- Proceso de oscilación.
Programa
//definicion de frecuencia
#define _XTAL_FREQ 4000000
//declaracion de variables
#define led PORTDbits.RD1
volatile int contador1=0,xn=0,temp1=0,temp2=0,contador2=0;
void interrupt isr(void){ //rutina interrupcion
//Boton A
if(INTCONbits.INT0IF==1){// si el flag esta en 1 sucedio la interrupción
INTCONbits.INT0IF=0;//borrar flag
xn=1; //variable del bucle del boton A
led=~led; //niega estado de led
T0CONbits.TMR0ON=1;//Activa el timer
}
//Boton B
if(INTCON3bits.INT1IF==1){// si el flag esta en 1 sucedio la interrupción
INTCON3bits.INT1IF=0;//borrar flag
xn=2; //variable = a 2 del bucle de Botob B
led=~led; //niega estado del pin
T0CONbits.TMR0ON=1;//Activa el timer
}
//tiempo de oscilación
if(INTCONbits.TMR0IF==1){// si el flag esta en 1 sucedio la interrupción
INTCONbits.TMR0IF=0;//borrar flag
//2 segundos
if(temp1==1){ //condición para el tiempo de Boton A
contador1++; //incremeto en 1
TMR0H=63582/256;
TMR0L=63582%256;
if(contador1==4){ //condicion para 2 segundos
led=~led; //niega estado del pin
contador1=0; //reinicio contador
temp1=0; //reinicio variable del bucle del boton A
}
}
//0.5 segundos
if(temp2==1){ //condición para el tiempo de Boton A
contador2++; //incremeto en 1
TMR0H=63582/256;
TMR0L=63582%256;
if(contador2==1){ //condicion para 0.5 segundos
led=~led; //niega estado del pin
contador2=0; //reinicio contador
temp2=0; //reinicio variable del bucle del boton B
}
}
}
}
void configuracion(void) { //funcion para la configuracion del micro
ADCON1=0x0F; //conifugurar pines analogos a digitales
TRISDbits.TRISD1=0; //Pin de salida
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 INT0
//interrupcion externa
INTCON3bits.INT1IE=1; //Activacion de Interrupcion INT1.
INTCON3bits.INT1F=0; //Flag(Bandera) de Interrupcion en INT1.
INTCON2bits.INTEDG1=1; //indica el flanco de subida INT1
//interrupcion de timer
INTCONbits.TMR0IE=1; //Activacion de Interrupcion Timer 0. //HABILITA LA INTERRUPCION DE 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){
if(xn==1){ //bucle Boton A
temp1=1;
}
if(xn==2){ //Bucle Boton B
temp2=1;
}
}
}
Diagrama de flujo
[pic 3]
...