Estoy usando pic16f887 para simular rápidamente el codificador para luego usarlo en un proyecto más grande. leyendo señales del codificador A y B usando la interrupción en el cambio para el puerto b y el programa fue:
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 acaba con las condiciones de desajuste!! mi pregunta es ¿cuáles son las condiciones de desajuste y por qué cargar w con portb finaliza eso?
gracias de antemano
Este es el comportamiento previsto de este microcontrolador. Consulte la hoja de datos , página 47:
Para los pines de interrupción por cambio habilitados, el valor actual se compara con el valor anterior bloqueado en la última lectura de PORTB para determinar qué bits han cambiado o no coinciden con el valor anterior. Las salidas 'no coincidentes' de la última lectura se combinan con OR para establecer el bit indicador de interrupción de cambio de PORTB (RBIF) en el registro INTCON.
También:
Una condición de discrepancia seguirá activando el bit indicador RBIF. Leer o escribir PORTB finalizará la condición de discrepancia y permitirá que se borre el bit indicador RBIF.
I.Omar