ASM Frage 8051(AT89C51CC01) vs AVR

OP #6675813
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.
Gast #6675955
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
OP #6676172
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.
Gast #6676265
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
Gast #6685354
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.

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.