duda interrupción rb0

#1
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:
 
#2
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
 
#3
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);}............
 
#4
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
 
#5
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
 
#6
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
 

Temas similares

Arriba