www.mikrocontroller.net

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


Autor: Teemo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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
      [...]

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.