Ich brauche Hilfe bei der Verwendung eines PIC16F887 und der mitgelieferten 44-Pin-Demoplatine von Microchip. Es wird mit einem PicKit2 programmiert.
Auf diesem Demoboard ist ein Taster so mit RB0 verbunden, dass der Pegel am Pin die ganze Zeit hoch ist und durch Drücken des Tasters der Pegel niedrig wird. Der Taster dient dazu, ein externes Interrupt-Signal zu simulieren. Ich versuche, mit Interrupts auf diesem Chip zu experimentieren, kann aber keine Statusänderung an diesem Pin lesen.
Ich habe einen einfachen Code, der den Status von RB0 testet und RD0 entsprechend einstellt. Es passiert jedoch nichts, egal ob die Taste gedrückt wird oder nicht.
Kann jemand hier etwas falsch sehen? Ich weiß, dass der IC selbst in Ordnung ist, da ich andere Programme ausführen kann, die diesen Eingangspin nicht verwenden.
Hier ist ein PDF auf dem Demoboard, falls jemand interessiert ist. http://ww1.microchip.com/downloads/en/devicedoc/41296b.pdf
#include <pic16f887.h>
#include <htc.h>
__CONFIG (0x20E4);
__CONFIG (0x2EFF);
void main(void){
int i;
int k;
TRISB = 0xff; //set PORTB as inputs
TRISD = 0x00; // Set PORTD as an Output
while(1)
{
RD0=RB0;
}
Ich habe die folgenden Änderungen gemäß der Lösung von Dave unten ohne Änderung vorgenommen.
void main(void){
int i;
TRISB = 0xff; //set PORTB as inputs
TRISD = 0x00; // Set PORTD as an Output
while(1)
{
i=PORTB;
PORTD=i;
}
}
Ich habe meine Antwort auf diese Frage gefunden. Ich musste ANSEL und ANSELH auf 0 setzen, um digitale E/A zu ermöglichen
Danke für alle Vorschläge.
Anstatt Bit 0 auf Port B in Bit 0 auf Port D zu schreiben, schreiben Sie den gesamten Port B in eine Variable und schreiben Sie dann die Variable in Port D. Wenn dies funktioniert, liegt es wahrscheinlich am Problem "Lesen, Ändern, Schreiben". Ich hatte ein ähnliches Problem und mir wurde durch diese Antwort geholfen: https://electronics.stackexchange.com/a/7686/1900
Chris Stratton
Michael