Haz una pregunta
  Foros de Electrónica » Diseño digital » Interfaces y Programación
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

19/08/2011 #1


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?
19/08/2011 #2

Avatar de fdesergio

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
19/08/2011 #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[i]=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[i]=read_eeprom(i);}............
19/08/2011 #4

Avatar de fdesergio

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
19/08/2011 #5

Avatar de Rijiru

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
19/08/2011 #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
22/08/2011 #7


incorrecto solo interruccion por rb0 si el pic es gama 16...
22/08/2011 #8


si eso estaba viendo gracias.
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Buscar más temas sobre:
Lupa Interfaces y Programación

Lenguajes de programación, gestión y manejo de puertos

Cerrar
Foros de Electrónica » Diseño digital » Interfaces y Programación

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.