mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Problem Assembler Kommando JB


Autor: Dieter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Folgendes Problem:

Controller 8051

Das Register R7 enthält die BitAdresse eines Portpins (z.B. 0x81h)
Mit JB (JumpBit) soll der Zustand ausgewertet werden.

JB 0x81h, ziel    ;funktioniert

MOV R7, 0x81h     ;funktioniert
JB  R7, ziel      ;Fehlermeldung

Die unterste Zeile erzeugt Fehlermeldung, da R7 keine BitAdresse ist.
Die fixe Angabe der Adresse ist aber nicht geeignet, da die Adresse als 
Parameter der Funktion übergeben werden soll.

Wie sorge ich dafür, dass der Inhalt von R7 als BitAdresse ausgewertet 
werden kann? Andere Idee?

Gruß Dieter

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eine indirekte Bitadressierung kann der 8051 nicht.
Und SFRs können nicht mal als Bytes indirekt adressiert werden.

Man kann sich aber entsprechende Funktionen für Bits im SRAM schreiben:

;********************** set bit indirect pointed by acc *****************
;Attention: bit address must be below 80h !
;Input: ACC = bit number 00 ... 7F
;Output: nothing
;Used: R0, ACC
;Cycle: 16
setibit:
        call getibit            ;get mask and address
        orl a, @r0
        mov @r0, a
        ret

clribit:
        call getibit
        cpl a
        anl a, @r0
        mov @r0, a
        ret

cplibit:
        call getibit
        xrl a, @r0
        mov @r0, a
        ret

tstibit:
        call getibit
        anl a, @r0
        add a, #0FFh
        ret

getibit:                        ;get byte address and bit mask
        mov r0, a
        anl a, #78h             ;byte number
        rl a                    ; * 2
        swap a                  ;     / 16  = / 8
        add a, #20h             ;start data bit addressable
        xch a, r0
        anl a, #7               ;bit number
        inc a
        movc a, @a+pc           ;bit mask
        ret
        db 1, 2, 4, 8, 10h, 20h, 40h, 80h
;------------------------------------------------------------------------



Peter

Autor: Dieter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Peter

Sehr schnelle Antwort!

Meine Befürchtung hat sich bestätigt, und ich dachte schon ich wäre zu 
doof ;-)

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.