Hola, chicos y chicas.
Bueno, como el título lo menciona, tengo una duda de cómo manejar un interrupción externa, en concreto #INT EXT (RB0) en el PIC18F4550.
La verdad soy novato manejando un microcontrolador.
Les posteo mi programa para que puedan visualizar mi duda.
Mi intención es utilizar la interrupción externa (RB0) y consecuentemente a este proceso asigné un valor entero a una variable previamente definida con el nombre de Inicio.
El formato de esta variable es de tipo int1 y dependiendo de su valor se ejecutará una de las dos opciones:
Si es uno, se enciende el Led 1 ubicado en el puerto E en el pin RE1 y se apaga el pin RE0, si el valor de la variable inicio es igual a cero sucede el efecto inverso.
El problema de este programa es qué cuando oprimo el MCLR (Master Clear) el proceso inicial no se vuelve a repetir.
Entonces la pregunta es. ¿Cómo le hago para trabajar el MCLR y las interrupciones externas?
Bueno, como el título lo menciona, tengo una duda de cómo manejar un interrupción externa, en concreto #INT EXT (RB0) en el PIC18F4550.
La verdad soy novato manejando un microcontrolador.
Les posteo mi programa para que puedan visualizar mi duda.
Mi intención es utilizar la interrupción externa (RB0) y consecuentemente a este proceso asigné un valor entero a una variable previamente definida con el nombre de Inicio.
El formato de esta variable es de tipo int1 y dependiendo de su valor se ejecutará una de las dos opciones:
Si es uno, se enciende el Led 1 ubicado en el puerto E en el pin RE1 y se apaga el pin RE0, si el valor de la variable inicio es igual a cero sucede el efecto inverso.
El problema de este programa es qué cuando oprimo el MCLR (Master Clear) el proceso inicial no se vuelve a repetir.
Entonces la pregunta es. ¿Cómo le hago para trabajar el MCLR y las interrupciones externas?
PHP:
//Librerias para el microcontrolador
#include <18F4550.h>
#fuses XT, NOWDT, PBADEN, MCLR, PUT, NOWRT
#use delay (clock = 4000000)
//Asiganación de variables a la RAM
#byte TRISE=0xF96
#byte PORTe=0xF84
#byte TRISB=0xF93
#byte PORTB=0xF81
#byte INTCONT2=0xFF1
int1 Inicio;
#INT_EXT
int1 EXT_ISR()
{
Inicio=1;
clear_interrupt(int_ext);
return Inicio;
}
void main()
{
TRISB=0xFF;
TRISE=0x08;
Inicio=0;
bit_clear(INTCONT2, 7);
bit_clear(PORTE, 0);
bit_clear(PORTE, 1);
enable_interrupts(int_ext);
ext_int_edge(L_TO_H);
enable_interrupts(GLOBAL);
while(TRUE)
{
if(Inicio==1)
{
bit_set(PORTE, 1);
bit_clear(PORTE, 0);
}
else
{
bit_set(PORTE, 0);
bit_clear(PORTE, 1);
}
}
}
Última edición por un moderador: