Problem Assembler Kommando JB

Gast #1141269
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
#1141284
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:
1
;********************** set bit indirect pointed by acc *****************
2
;Attention: bit address must be below 80h !
3
;Input: ACC = bit number 00 ... 7F
4
;Output: nothing
5
;Used: R0, ACC
6
;Cycle: 16
7
setibit:
8
        call getibit            ;get mask and address
9
        orl a, @r0
10
        mov @r0, a
11
        ret
12

13
clribit:
14
        call getibit
15
        cpl a
16
        anl a, @r0
17
        mov @r0, a
18
        ret
19

20
cplibit:
21
        call getibit
22
        xrl a, @r0
23
        mov @r0, a
24
        ret
25

26
tstibit:
27
        call getibit
28
        anl a, @r0
29
        add a, #0FFh
30
        ret
31

32
getibit:                        ;get byte address and bit mask
33
        mov r0, a
34
        anl a, #78h             ;byte number
35
        rl a                    ; * 2
36
        swap a                  ;     / 16  = / 8
37
        add a, #20h             ;start data bit addressable
38
        xch a, r0
39
        anl a, #7               ;bit number
40
        inc a
41
        movc a, @a+pc           ;bit mask
42
        ret
43
        db 1, 2, 4, 8, 10h, 20h, 40h, 80h
44
;------------------------------------------------------------------------


Peter

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.