Bueno aquí van mis comentarios y después de extrujarme los sexos:
1º Efectivamente el programa con su esquema funciona perfectamente.
2º Copio tu programa en mi esquema cambiando, la salida del puerto A(pin0) por el puerto B(pin0), apar dejarlo como el tuyo t sigue funcionando perfectamente. De esto entiendo que el esquema está bien.
3º Ahora vuelvo a colocar la salida en el pin 0 del puerto A. Para ello modifico el programa que me mandaste eliminando la instruccion LOW led (creo que segun indica en el manual programa el puerto como salida pero solo funciona con el puerto B) y la cambio por asignar a la variable "led" el valor =0.
Antes en la cabecera del programa y le indico que voy a utilizar el puerto A como salida y declaro los pines como todos digitales y
sorpresa
YA NO FUNCIONA.
Se repiten las interrupciones y al salir de la rutina de interrupcion ya no se borra el RBIF
De todo esto deduzco que al realizar esa configuracion hay algo que está mal realizada o más bien que falta algo, pero ya no se me ocurre que.
Por otra parte entiendo que la zona de programa de retardo de 1ms es el "main" y que ahí puede ir cualquier otra cosa
Este es el programa que me pasaste:
Device 16F877
XTAL = 4
Symbol LED = PORTB.0
Symbol RBIF = INTCON.0
INTCON = %10001000
Low LED
DelayMS 400
On Interrupt GoTo ISR
While 1 = 1
DelayMS 1
Wend
Disable
ISR:
Toggle LED
RBIF = 0
Resume
Enable
End
Y esta zona de aquí es la que realizo yo:
Device 16F877
XTAL = 4
Symbol LED = PORTA.0
Symbol RBIF = INTCON.0
INTCON = %10001000
ALL_DIGITAL = True 'Todos los pines son digitales
TRISA = %00000000
LED=0
DelayMS 400 'He probado con delay y sin delay
On Interrupt GoTo ISR
Main:
While 1 = 1
DelayMS 1
Wend
goto Main
Disable
ISR:
Toggle LED
RBIF = 0
Resume
Enable
End
Como ves sólo está el cambio del puerto A por B el resto es lo mismo, pero aquí se producen multiples interrupciones y la verdad ya no se que pensar, pero seguro que hay algo mal.
Saludos
F.