Forum: Mikrocontroller und Digitale Elektronik ASM Frage 8051(AT89C51CC01) vs AVR


von Thomas (kosmos)


Lesenswert?

ich habe in einem alten Assembler Listing folgenden Befehl gefunden
1
ORL CANGCON,#01h;                      ;/* reset CAN */

bei den AVRs würde das z.B. so ausehen
1
lds temp, CANGCON
2
ori temp, 1
3
sts CANGCON, temp

lässt sich das beim AVR Assembler auch kompakter schreiben damit sich 
der Assembler später um das read-modify-write kümmert wenn die .hex 
erstellt wird.

von S. Landolt (Gast)


Lesenswert?

Man muss sich ja zusätzlich auf ein Arbeitsregister (r16..31) festlegen; 
es bleibt nur ein Macro.

von Falk B. (falk)


Lesenswert?

Thomas O. schrieb:
> lässt sich das beim AVR Assembler auch kompakter schreiben

Nimm C ;-)

von Georg (Gast)


Lesenswert?

Thomas O. schrieb:
> damit sich
> der Assembler später um das read-modify-write kümmert

Der Assembler kümmert sich um garnichts, das muss bei Assembler schon 
der Programmierer tun - wobei es entweder einen Befehl für atomares RMW 
gibt oder eben nicht. Wenn nicht muss das auch der Programmierer regeln, 
z.B. mit Interrupt aus- und wieder einschalten. Aber auch wenn es einen 
Assemblerbefehl dafür gibt muss man prüfen ob die RMW-Sequenz 
tatsächlich ununterbrechbar ausgeführt wird, das muss nicht so sein.

Ein Problem entsteht nur wenn der betroffene Speicherplatz überhaupt von 
einem anderen Programmteil (oder der Hardware) verändert werden kann.

Georg

von Thomas (kosmos)


Lesenswert?

Georg schrieb:
> Der Assembler kümmert sich um garnichts, das muss bei Assembler schon
> der Programmierer tun - wobei es entweder einen Befehl für atomares RMW
> gibt oder eben nicht.

danke Georg ich glaube der Groschen ist jetzt gefallen, das könnte der 
Unterschied zw. CISC und RISC sein am praktischen Beispiel sein. Ich 
habe mit eben gewundert, da ich das bei den AVRs noch nie so gesehen 
habe. Dass das Ergebnis einer OR-Verknüpfung direkt wieder zur Quelle 
geschrieben wird. machte.

Wird also am erweiterten Befehlssatz liegen das der AT89C51 dies mit 
einem speziellen Befehl kann.

von Falk B. (falk)


Lesenswert?

BINGO!

von bitflipser (Gast)


Lesenswert?

Auch wenn der Groschen schon gefallen ist ...
Die Ausgangsfrage klingt nach diesem Macro:
1
.MACRO SETB     ;Arguments: Address, Bit, Register
2
  .if @1>7
3
    .message "Only values 0-7 allowed for Bit parameter"
4
  .endif
5
  .if @0>0x3F
6
    lds  @2, @0
7
    sbr  @2, (1<<@1)
8
    sts  @0, @2
9
  .elif @0>0x1F
10
    in   @2, @0
11
    sbr  @2, (1<<@1)
12
    out  @0, @2
13
  .else
14
    sbi  @0, @1
15
  .endif
16
.ENDMACRO
(aus "macros.inc" zu den AVR-Controllern von Atmel/Microchip)

entsprechend der Frage zu verwenden als
1
SETB CANGCON,1,temp
Gruß Stefan

von Lothar (Gast)


Lesenswert?

Thomas O. schrieb:
> das könnte der Unterschied zw. CISC und RISC sein

Nein das ist der Unterschied zwischen uC mit Bit-adressierbarem Speicher 
z.B. 8051 EFM8 oder Cortex M0+ z.B. LPC8xx und eben ohne z.B. AVR oder 
Cortex M0 z.B. LPC11xx - bei LPC8xx ist RMW mit STR möglich - und nein, 
das ist kein Bit-Banding.

Das beim AT89C51CC01 das ORL atomar ist, das ist gar nicht so sicher, 
das ist ein alter 8051 mit latched I/O:

https://developer.arm.com/documentation/ka004317/

Auch bei aktuellen 8051 mit >25 MHz ist es nicht sicher wegen 
Bus-Waitstates.

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.