disculpa por entrometerme, es que me se la respuesta
1. para RB1 debes usar:
#INT_EXT1
void handle_int_ext1()
{
... aca tu rutina
...
}
y para RB2: #INT_EXT2
esto de donde lo saque? de la libreria que el ccs trae incorporada para este micro (el 18f4550, creo es el que usas), esta en la carpeta donde instalaste, el programa en la carpeta DEVICES; ahi puedes ver algunas caracteristicas de configuracion del micro, y estan al final las interrpciones que el micro posee
2.
Nunca desabilito las interrupciones, y el programa funciona...
y eso es lo que deberia pasar, ya que estas diciendole al micro que detecte las interrupciones, cuando ocurran, y se ejecute tu rutina programada; ya que entonces por defecto quedan habilitados, (aunque es algo raro ya que en la hoja de datos dice que por defecto estan deshabilitados), seguramente los habilitaste en algun lado y ya despues no los tocaste
pero cuando coloco la deshabilitación pues no funciona.... Porque?
si lo deshabilitas, las interrupciones no funcionaran.
No se supone que si no la deshabilito, pues el pic estaría interrumpido todo el tiempo???
hay que tener esos detalles en ensamblador, pero en ccs, no hace falta deshabilitar el bit que indica que ha ocurrido la interrupcion (ya que cada interrupcion se indica con un bit en un registro, cambian a 1, indicando que ha ocurrido la interrupcion); porque el compilador hace ese trabajo
los enable_interrupts(
int_ext1); y disable_interrupts(
int_ext1); solo hacen que funcione o no la rutina que programes para una determinada interrupcion (ya que la parte de negrillas puede ser cualquier otra interrupcion, para habilitarla o no)
ademas deberas habilitar las interrupciones globales, esto para habilitar todas las interrupciones qeu usaras, esto se hace con: enable_interrupts(global);
entonces en tu main iria mas o menos asi, para interrupcion por RB1:
void main()
{
...
ext_int_edge(1,H_TO_L);
enable_interrupts(int_ext1); // pero tb puedes habilitarla o deshabilitarla donde quieras, cuando sea necesario
enable_interrupts(global);
...
while(true) // tu bucle de trabajo
{
...
}
}
y despues la rutina de interrupcion (tb puede ir antes del main, no hay problemas, ya que yo lo pongo donde sea, jeje
)
#INT_EXT1
void EXT_isr()
{...}
espero me haya dejado entender, y pues sino preguntas lo que no entendiste que te ayudamos
un saludo.