Ich verwende pic16f887, um den Encoder schnell zu simulieren, um ihn später in einem größeren Projekt zu verwenden. Lesesignale von A- und B-Encoder mit Interrupt bei Änderung für portb und das Programm war:
if(RBIF)
{
value++;
UART_Write('b');
__delay_ms(100);
RBIF = 0;
}
und als ich es geändert habe:
if(RBIF)
{
asm(" MOVF _PORTB" );
value++;
UART_Write('b');
__delay_ms(100);
RBIF = 0;
}
und dies Dies beendet Mismatch-Bedingungen!! Meine Frage ist, was die Mismatch-Bedingungen sind und warum das Laden von w mit portb das beendet?
Vielen Dank im Voraus
Dies ist das beabsichtigte Verhalten dieses Mikrocontrollers. Bitte beachten Sie das Datenblatt , Seite 47:
Für aktivierte Interrupt-on-Change-Pins wird der aktuelle Wert mit dem alten Wert verglichen, der beim letzten Lesen von PORTB zwischengespeichert wurde, um zu bestimmen, welche Bits sich geändert haben oder nicht mit dem alten Wert übereinstimmen. Die "Nichtübereinstimmungs"-Ausgänge des letzten Lesens werden miteinander ODER-verknüpft, um das PORTB-Änderungs-Interrupt-Flag-Bit (RBIF) im INTCON-Register zu setzen.
Auch:
Eine Nichtübereinstimmungsbedingung setzt weiterhin das Flag-Bit RBIF. Das Lesen oder Schreiben von PORTB beendet die Nichtübereinstimmungsbedingung und ermöglicht, dass das Flag-Bit RBIF gelöscht wird.
I.Omar