duda interrupción rb0

hola primera vez que escribo en un foro :)

mi duda es la siguiente:
estoy usando el pic 16f876 y estoy ocupando la interrupción externa por rb0 pero mi duda es si se puede una ves usada la interrupción por flanco de subida volver a activarla para ocupar por flanco de bajada.

quiero que al flanco de subida comience mi programa y cuando llege el flanco de bajada que se salga del programa...

se puede?:unsure:
 
Si solo que al entrar a la interrupcion debes identificar el estado del flanco que activo la int luego cambias el flanco y sales de la INT, la proxima entrada sera con el flanco que seleccionaste, chauuuuuuuuuuu
 
pero en que parte tendría que activar de nuevo la interrupción y donde me mandaría al activarla dentro de la misma?

#include <16F876.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP
#use delay(clock= 4000000)
#byte portb=0x06
#byte porta=0x05
//#priority EXT,ra1
//#use standard_io(a)
//#use standard_io(b)
#define use_portb_kbd
#define LCD_DATA_PORT getenv("SFR:pORTc")
#include <lcd.c>
#include <kbd.c>
#include <stdlib.h>


void main() {
set_tris_B(0x01);
enable_interrupts(int_ext); //Habilita int. RB0…
ext_int_edge(l_TO_h); //por flanco de subida
enable_interrupts(GLOBAL);
while(1){
}
}
#INT_EXT
void ext_isr(){

char k;
int i;
int j;
char u;
char data[3], clave[3]; //Matrices para guardar clave y datos

lcd_init();
kbd_init();
port_b_pullups(TRUE);
j=0; //cantidad de errores
while (TRUE) {

i=0; //posición de la matriz
printf(lcd_putc,"\fingrese clave\n "); //Para primer dato

while(i<=2){ //Para tres datos
k=kbd_getc(); //Lee el teclado
if (k!=0) //Si se ha pulsado alguna tecla
{data=k; //se guarda en la posición correspondiente
i++; //de la matriz
printf(lcd_putc,"*");
}
}
delay_ms(1000);

for (i=0;i<=2;i++) { //Pasa datos de eeprom a la matriz clave
clave=read_eeprom(i);}............
 
Yo programa en assembler por eso no te entiendo, bueno seria algo asi, al entrar cada vez a la interrupcion lees el bit determinante del flanco en el reg OPTION (creo que esta ahi) y lo inviertes, haces lo que debes hacer en la rutina de atencion de la INT y sales normalmente, chauuuuuuuuuu
 
Por supuesto que si, en la rutina de interrupcion una vez ahi, haces un arreglo toggle para el bit de option_reg INTEDG

@ASM:

BANKSEL OPTION_REG
BTFSS OPTION_REG,INTEDG
GOTO set_intedg
GOTO clr_intedg

set_intedg
BSF OPTION_REG,INTEDG
GOTO etiqueta

clr_intedg
BCF OPTION_REG,INTEDG
GOTO etiqueta

etiqueta
;;Aqui es la otra parte d etu codigo

@High-TEch

if(INTEDG)
{
INTEDG=0;
}
else
{
INTEDGE=1;
}


Espero y te sea de ayuda

Saludos
 
pfff no me deja cuando trato de activar de nuevo la interrupción me manda errores por todo...

Grasias igual tendre que tratar de otra forma...

sorri pero e leido que se puede realizar interrupciones por el puerto A del pic 16f876 lo e intentado y nada...
saludos
 
Atrás
Arriba