Hola a todos! Se que el hilo es un poco antíguo, pero recientemente he tenido un problema con la interupción RB, y como solucionarlo me ha llevabo algún tiempo, he decidido postearlo aquí por si a alguien le es útil.
Bueno, el problema surgió cuando intenté simular en
PROTEUS (v. 7.2) un programa sencillo en
CCS (v.4.088) para
PIC16f84A que hacía uso de varias interrupciones, entre ellas la
RB. Al iniciar la simulación,
PROTEUS lanzaba un mensaje de error que decía algo así como "
violation access error in module <UNKNOW>".
Tras debuggearlo me dí cuenta de que fallaba justo al activar la interrupción RB, y que si comentaba esa línea el programa funcionaba perfectamente (salvo que no hacía la interrupción
). Despues de varias pruebas, se me ocurrió ver el listado en ensamblador y observé que esa línea es codificada por 3 sentencias en ensamblador que ponen a uno los bits 5 y 6 del registro
STATUS, y el bit 3 del registro
INTCON. El (
INTCON,3) es para habilitar la interrupción RB, (
STATUS,5) para seleccionar el banco (lo cual es innecesario ya que
INTCON se puede acceder tanto desde el banco 1 como desde el 0), pero lo que me sorprendió fué que modificara (
STATUS,6) que
en el datasheet pone cláramente que no se usa y debe mantenerse a cero!!!. Al eliminar esta línea la simulación funcionó perfectamente, asiq probablemente
PROTEUS no acepta que se modifiquen bits que no deberían ser usados en el PIC.
Dado que hay más gente que ha usado esta interrupción y no ha tenido este problema, supongo que el bug afectará sólo a algunos PICs. Espero que no sea muy liosa la explicación y que, si a alguien más le ocurre esto, sepa cómo solucionarlo.
Un saludo