Forum: Mikrocontroller und Digitale Elektronik myavr - Frage zu Pull-Up und Einlesen eines Ports


von Teemo (Gast)


Lesenswert?

Hallo Leute,

Ich habe ein kleines Problem. Ich möchte Steuerbefehle von einem 
Controller A zu einem anderen (Board B) Übergeben. Hierzu wurden die 
Ports von Board A als Ausgänge Definiert und die Ports des Boards B als 
Eingang mit Pull-Up. Leider klappt das nicht wie gewünscht und ich 
wollte mal Fragen ob ich es vielleicht an einem Fehler in meinem Code 
liegt, den ich selber immer übersehe.

Beispiel:
An dem Board B liegen folgende Spannungen an:
PortC,0 = 0V
PortC,1 = 5V
PortC,2 = 0V
PortC,3 = 0V
PortC,4 = 0V

aber ich erhalte leider keine dezimale 1, wie ich es erwartet (bzw. 
gerne) hätte ;)

Danke schonmal für die Hilfe


      ldi    tmp,0b00000000
      in    tmp,PINC
      cbr    tmp,0b11110001
      ror    tmp

      cpi    tmp,0
      breq  c_status_0
      cpi    tmp,1
      breq  c_status_1
      [...]

von Michael U. (amiga)


Lesenswert?

Hallo,

Teemo wrote:

> Beispiel:
> An dem Board B liegen folgende Spannungen an:
> PortC,0 = 0V
> PortC,1 = 5V
> PortC,2 = 0V
> PortC,3 = 0V
> PortC,4 = 0V
>
> aber ich erhalte leider keine dezimale 1, wie ich es erwartet (bzw.
> gerne) hätte ;)
???

>       ldi    tmp,0b00000000 ; alles Eingänge
>       in    tmp,PINC        ; Daten nach tmp holen
>       cbr    tmp,0b11110001 ; Clear Bit in Register, Du löschst also
                              ; Bit 3, Bit 2, Bit 1
>       ror    tmp            ; rechts schieben, also auch das gerade
                              ; gelöschte Bit 1 in Bit 0 schieben
>
>       cpi    tmp,0          ; auf 0 testen, also 0b00000000
                              ; Bit 0...Bit 2 sind nach Deinem cbr oben
                              ; sowieso 0, das Ergebnis hängt also nur
                              ; noch vom Zustand der
                              ; ehemaligen Bits 7...4 ab...

>       breq  c_status_0
>       cpi    tmp,1
>       breq  c_status_1
>       [...]

Gruß aus Berlin
Michael

von yalu (Gast)


Lesenswert?

>       ldi    tmp,0b00000000 ; alles Eingänge

Wozo? tmp wird gleich im nöächsten Befehl wieder überschrieben.

> ror    tmp

Nimm lsr statt ror. ror shiebt das Carry-Flag in das oberste Bit von
tmp, was sicher nicht deine Absicht ist.

>>       cbr    tmp,0b11110001 ; Clear Bit in Register, Du löschst also
>                              ; Bit 3, Bit 2, Bit 1

Nein, es löscht alle anderen Bits. cbr ist ein And mit dem Komplement
des Arguments.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.