Resolución de condiciones de discrepancia de interrupción en cambio en un PIC16F877

1

Estoy usando pic16f887 para simular rápidamente el codificador para luego usarlo en un proyecto más grande. Las señales de lectura de los codificadores A y B que usan la interrupción al cambiar para portb y el programa fueron:

if(RBIF) 
{
  value++;
  UART_Write('b');
  __delay_ms(100);
  RBIF = 0;
}

y cuando lo cambié a:

if(RBIF) 
{
  asm(" MOVF _PORTB" );  
  value++;
  UART_Write('b');
  __delay_ms(100);
  RBIF = 0;
}

y esto Esto termina las condiciones de desajuste !! mi pregunta es ¿cuáles son las condiciones de discrepancia y por qué la carga de w con portb termina eso?

Gracias de antemano

    
pregunta Catch.Me

1 respuesta

1

Este es el comportamiento previsto de este microcontrolador. Consulte la hoja de datos , página 47:

  

Para los pines de interrupción en cambio habilitados, el valor actual se compara con el valor antiguo bloqueado en la última lectura de PORTB para determinar qué bits han cambiado o no coinciden con el valor anterior. Las salidas de "falta de coincidencia" de la última lectura se ORDEN juntas para establecer el bit de indicador de Interrupción de Cambio de PORTB (RBIF) en el registro INTCON.

También:

  

Una condición de falta de coincidencia continuará configurando el bit de indicador RBIF. La lectura o escritura de PORTB finalizará la condición de falta de coincidencia y permitirá que se borre el bit de bandera RBIF.

    
respondido por el bitsmack

Lea otras preguntas en las etiquetas