PIC18F2520 Ports abfragen

OP #3802756
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
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.
Gast #3802807
Wenn ich das richtig verstanden habe musst du nur die unteren drei Bits 
ausblenden.
1
keys = PORTB & 0xf8;

Bits 0, 1 und 2 sind dann immer 0. Dürfte effizienter sein als jedes Bit 
einzeln zu lesen.
#3802846
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

Eine eigene Frage? Dieser Thread ist über 12 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.