Ich konnte Ausgänge an meinem PIC arbeiten lassen und kann eine Reihe von LEDs ein- und ausschalten, während ich verschiedene Ausgangs-Latchs hoch/niedrig setze. Allerdings habe ich viel Schwierigkeiten beim Lesen im Zustand eines Stiftes.Lesestatus der Eingangspins auf einem PIC18
Siehe den nachstehenden Code. Ich habe meine Konfiguration eingerichtet und definiere die TRISC als Eingabe und TRISB als Ausgabe. In einer Endlosschleife überprüfe ich, ob RC6 hoch oder niedrig ist, und setze den gesamten B-Speicher abhängig von dem Ergebnis hoch oder niedrig.
#include <htc.h>
__CONFIG(1, FOSC_IRC & FCMEN_OFF & IESO_OFF);
__CONFIG(2, PWRTEN_OFF & BOREN_OFF & WDTEN_OFF);
__CONFIG(3, MCLRE_OFF);
__CONFIG(4, STVREN_ON & LVP_OFF & DEBUG_OFF);
__CONFIG(5, 0xFFFF);
__CONFIG(6, 0xFFFF);
__CONFIG(7, 0xFFFF);
void main(void)
{
TRISC = 0xFF; // input
TRISB = 0x00; // output
while (1)
{
if (PORTCbits.RC6 == 0)
LATB = 0b00000000;
else
LATB = 0b11111111;
}
return;
}
Der Code wird in Ordnung ohne Warnungen oder Fehler kompiliert. Wenn meine Codelogik einfach die Zwischenspeicher hoch und niedrig setzt, dann funktioniert das gut, aber ich konnte den Zustand eines Pins nicht erfolgreich lesen.
Irgendwelche Ideen?
Ich verwende einen PIC18F14K50 und MPLAB v8.43 und den HiTech ANSI C Compiler.
Meine Verbindungen sind + 5V zum VDD (Pin 1), VSS (Pin 20) zur Masse. Ich habe + 5V bis C6 (Pin 8) und einen 100K Widerstand und LED von B7 (Pin 10) an Masse. Um RC6 umzuschalten, verbinde ich den Draht mit C6.
┌────────┐
+5v -│ 01 20 │- gnd
-│ 02 19 │-
-│ 03 18 │-
-│ 04 17 │-
-│ 05 16 │-
-│ 06 15 │-
-│ 07 14 │-
+5v -│ 08 13 │-
-│ 09 12 │-
led -│ 10 11 │-
└────────┘
Danke, in meinem echten Code benutze ich alle Pins, nicht nur RC6. Um alle Pins als digital und nicht analog zu setzen, würde ich 'ANSEL = 0; ANSELH = 0; 'am Anfang meiner' main() 'Methode? – Ozzah
Oder muss ich etwas mit ADCON1 machen? – Ozzah
Ja, wenn ANSEL und ANSELH gleich 0 gesetzt werden, werden alle analogen Funktionen gelöscht. –