Forum: Mikrocontroller und Digitale Elektronik Problem Assembler Kommando JB


von Dieter (Gast)


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

von Peter D. (peda)


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

von Dieter (Gast)


Lesenswert?

Danke Peter

Sehr schnelle Antwort!

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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.