myavr - Frage zu Pull-Up und Einlesen eines Ports

Gast #854420
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
      [...]
#854447
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
Gast #854462
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.

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