PIC18F2520 Ports abfragen

#3802756
Lesenswert?

Hallo Forum, ich hoffe mir kann jemand zum Thema weiterhelfen.

Also, PIC18F mit Port B3 ..B7 als Eingang. B0- B2 als Ausgang.
An den  5 Eingängen ist ein DIL Schalter dran, wo ich 2 hoch 5 
Möglichkeiten abfragen kann. Eigentlich wollte ich den kompletten Port 
Einlesen aller x Ssekunden und mit dem vorhergehenden 8 bit Wert 
vergleichen. Ja ja die drei Ausgänge unterschiedlich sein können würde 
ich die ja auch je nach Zustand unterschiedlich einlesen. Diese würden 
meine festgelegten 2 hoch 5 Möglichkeiten durcheinander bringen. Ist 
mein Verständniss so richtig?

Es würde quasi nur Sinn machen, wenn sich die Ausgänge nicht ändern oder 
am besten unbenutzt sind. Richtig?

Ich müsste also am besten jeden der 5 DIL Schalter einzeln einlesen und 
durch Logik (UND) verknüpfen. Richtig?

Gibt es sonst noch eine mir unbekannte Möglichkeit auf die Logik zu 
verzichten und irgendwie den gesamten Portzustand doch zu vewenden?

Ich benutze MPLAB und C18 Compiler.

Danke.

Gruss

Daniel
Gast #3802771
Lesenswert?

Du hast an jedem Port 5 Schalter.
B3 bis B7. Sind 5 mal Low oder High.
Dann fragst du den Port einfach ab.
Also 3^2 = B3, 4^2 = B4 usw.
Dann hast du immer ein Wert vom Port, welcher
du nun weiter verarbeiten kannst.
#3802846
Lesenswert?

Daniel EGAL schrieb:
> Hallo Forum, ich hoffe mir kann jemand zum Thema weiterhelfen.
>
> Also, PIC18F mit Port B3 ..B7 als Eingang. B0- B2 als Ausgang.
> An den  5 Eingängen ist ein DIL Schalter dran, wo ich 2 hoch 5
> Möglichkeiten abfragen kann. Eigentlich wollte ich den kompletten Port
> Einlesen aller x Ssekunden und mit dem vorhergehenden 8 bit Wert
> vergleichen. Ja ja die drei Ausgänge unterschiedlich sein können würde
> ich die ja auch je nach Zustand unterschiedlich einlesen. Diese würden
> meine festgelegten 2 hoch 5 Möglichkeiten durcheinander bringen. Ist
> mein Verständniss so richtig?

Nein.

> Es würde quasi nur Sinn machen, wenn sich die Ausgänge nicht ändern oder
> am besten unbenutzt sind. Richtig?

Nein.

> Ich müsste also am besten jeden der 5 DIL Schalter einzeln einlesen und
> durch Logik (UND) verknüpfen. Richtig?

Wenn schon, dann mit ODER verknüpfen.

Und das macht man nur, wenn die Bits einen Zahlenwert ergeben, die 
DIP-Schalter aber aus irgendwelchen Gründen nicht auf benachbarten Bits 
und/oder in der richtigen Reihenfolge angeschlossen sind, oder gar auf 2 
oder mehr Ports verteilt werden mussten.

> Gibt es sonst noch eine mir unbekannte Möglichkeit auf die Logik zu
> verzichten und irgendwie den gesamten Portzustand doch zu vewenden?

In deinem Fall macht man so: Ganzen Port lesen, mit einer Bit-Maske 
UND-verknüpfen, wobei alle Bits der Maske auf 1 gesetzt werden, deren 
Zustand dich am Port interessiert. Danach ggf. noch 3x Shift oder 
Division durch 8.

> Ich benutze MPLAB und C18 Compiler.

Wie es beim C18 aussieht weiß ich nicht, aber z.B. der CC5X Compiler 
setzt Divisionen von 2er-Potenzen in Shift-Operationen um. Schau dir 
einfach mal den erzeugten Assembler-Code an.

HTH

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren