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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.