Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: josegranada en 02 de Octubre de 2009, 12:55:40
Título: ayuda con as interrupciones
Publicado por: josegranada en 02 de Octubre de 2009, 12:55:40
necesito hacer un gran proyecto que tiene un gran programa, y me gustaria saber como tengo que hacer para poder conseguir que si toco un pulsador de la interrupcion RB4 por ejemplo me salga un 1 para que se encienda un led por otro puerto.
este es el codigo que llevo yo hecho me podrian decir como modificarlo para poder conseguir tal fin.
#include "16f877.h" #byte pb=6 #byte pa=5 //#byte pc=7 #byte pd=8 #use delay(clock=4m) //OJOOOOO PONER ANTES ESTE COMANDO PARA EL LCD #include "mipant4bit.c" #int_rb int lectura(); int conta=0; int pb1; void main() {
//------------------------------------------------------------------------- //---------------------lectura de las teclas----------------------------- int teclas() { int pb1=0;//variable dnd guardamos lo q hay en pb una vez sepamos que hay un 1 en cualquier entrada int lectura;//guardamos lo que hay en pb lectura=input_b(); delay_ms(20); if(!bit_test(lectura,4)) bit_set(pb1,4);//si el bit0=1 se guarda en pb=0 else if(!bit_test(lectura,5)) bit_set(pb1,5);//si el bit2=1 se guarda en pb=0 else if(!bit_test(lectura,6)) bit_set(pb1,6);//si el bit2=1 se guarda en pb=0 else if(!bit_test(lectura,7)) bit_set(pb1,7);//si el bit3=1 se guarda en pb=0 //hacmos un bucle para estar siempre mirando si se tocan los botones while(input_b()==lectura&&conta<200) { delay_ms(20); conta++; } return pb1;//devolvemos lo guardado en la variable pb1 }
Título: Re: alguien me ayuda
Publicado por: Suky en 02 de Octubre de 2009, 14:31:19
En el titulo del hilo no indica cual es el posible problema, cámbialo por favor :? Lee las reglas del foro (http://www.todopic.com.ar/foros/index.php?action=globalAnnouncements;id=1).
En la interrupción puedes manejar una variable que al pulsar te indique que hacer después:
Código: C
#int_RB
void RB_isr(void){
delay_ms(20);
if(input(PIN_B4)==1){
TypeAcc=~TypeAcc;// TypeAcc es un bit que indica por ejemplo en 0 cargar Puerto B con 0xFF y en 1 0xAA.-
Título: Re: alguien me ayuda
Publicado por: japifer_22 en 02 de Octubre de 2009, 14:45:07
hola intentalo de esta manera: en la parte donde defines los parametros del pic pone
#byte PORTB = 0x106 // al inicio de tu codogo define como entrada de tus pulsadores puerto B
int8 x; x=PORTB; //leemos puerto B como esta output_D(x); // reflejamos lo del puerto B en el puerto D osea si tengo el el puerto B 00011001, el puerto D quedaria de la misma manera00011001, pero como obio queel puerto B como entrada y el puerto D como salida.
PD: esto lo aprendi el otro dias nomas :mrgreen: por la ayuda de suky y gera :D
a y lo otro cambia el nombre a tu titulo y pone en espesifico en que quieren que te ayuden como dijo suky
Título: Re: ayuda con as interrupciones
Publicado por: Cryn en 02 de Octubre de 2009, 20:21:22
no hay que olvidarse en la rutina de interrupción colocar:
output_b(input_b());
antes de salir, porque es un requisito para deshabilitar el flag de interrupción por cambio de estado, que está explicado en la hoja de datos. Es leer el puerto y sacarlo por el mismo puerto.