Assembler in C-Code ? ( AT89C2051) Im Unterforum Microcontroller - Beschreibung: Hardware - Software - Ideen - Projekte
| Autor |
|
Assembler in C-Code ? ( AT89C2051) |
|
|
|
|
BID = 128881
Studi26 Gerade angekommen
Beiträge: 2 Wohnort: Hannover
|
|
Moin,
kann mir mal bitte jemand erklären, wie ich Assembler-Code in C umstricke ?? Habe einen Compiler von Raisonance (RIDE51) und ein progrämmchen in Assembler. Wie bekomme ich es nun hin, dass die IDE den Assemblercode annimmt ??
Der Code lautet:
; Reset and Interrupt vectors
.org 0000h ;reset
ajmp main
.org 0023h ;serial port interrupt
ajmp i_ser
; ************* Interrupts *************
i_ser:jnb RI, i_ser_r ; If nothing received return
mov a, SBUF ; Load buffer and compare
cjne a, #041h, i_ser_r ; equal, #041h == A
mov a, P1 ; get value from Port1
anl a,#0f0h ; mask H-Nibble
swap a ; swap H- and L-Nibble
mov B,#10d ; 10 in b
mul ab ; multiply a with 10
mov b,a ; store a
mov a, P1 ; get value from Port1 again
anl a,#00fh ; mask L-Nibble
add a,b ; add 10er
mov SBUF, a ; send serial data
i_ser_r: reti
; ************* Main *************
main: mov SCON,#050h ; serial interface mode 1
mov TMOD,#020h ; Timermodus 2
mov TH1,#0fdh ; Timer 1 reload value
setb TR1 ; Timer 1 start
setb ES ; enable serial interrupt
setb EA ; enable global interrupts
loop: ajmp loop ;loop
Der Studi
Oh shit, die Formatierung des Textes ist natürlich Grotte. Sorry
[ Diese Nachricht wurde geändert von: Studi26 am 17 Nov 2004 9:56 ] |
|
BID = 135634
ThomasS Stammposter
   
Beiträge: 259 Wohnort: nähe Mannheim
|
|
Naja, uebersetzen kannst du es dir hier schlecht lassen, aber so schwierig scheint mir das auch nicht ganz zu sein....
Deine Interrupt Vektoren kannst du so lassen...
Um deinen Interrupt und dein Hauptprogramm umzuschreiben musst du einfach ein wenig in der Doku nach den entsprechenden Registern suchen
ist leider mit etwas Arbeit verbunden die dir hier wohl keiner abnehmen wird... Aber dein Programm ist auch nicht das groesste....
Das meiste in deinem Prograemmchen sind Registerbelegungen um sie in den entsprechden Modus zu setzen...
mov SCON,#050h ; // hier wird in das Register SCON der Wert #050h geschrieben...
die Adresse deines SCON Registers wird wohl in einer Headerdatei beschrieben sein....
In C sieht das nicht sehr viel anders aus
*SCON = 0x0050; .....
setb TR1 ; Timer 1 start // Hier wird ein Bit fuer deinen Timer gesetzt...
was soll man da gross sagen
mov B,#10d hier wird die Zahl 10 in b kopiert....
mul ab ; multiply a with 10 // hier wird a mit b (10) multipiliziert...
eigentlich steht in den komentaren was du wissen musst, um es in C umzusetzen
multiplikation *
zuweisen =
....
am besten schaust du dir mal die befehle fuer assembler an und schreibst dir auf ein blatt was in deinem prog. passiert...
allternativ gibt es auch cca = c callable assembler. assemblerprogramme, die man in c aufrufen kann....
|
|
BID = 147109
tommi_l Gerade angekommen
Beiträge: 8
|
Falls dein Compiler Inline Assembler unterstützt kannst du auch in c-Files mit Assembler schreiben.
Meist ist das so eine Preprozessor Anweisung wie #asm oder so.
Der wird dann Mitcompiliert.
Eventuell mußt du die Assembler Befehle anpassen, wenn du auf ein neues Target wechselst.
|
|
Zum Ersatzteileshop
Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation!
Impressum
Datenschutz
Copyright © Baldur Brock Fernsehtechnik und Versand Ersatzteile in Heilbronn Deutschland
gerechnet auf die letzten 30 Tage haben wir 17 Beiträge im Durchschnitt pro Tag heute wurden bisher 1 Beiträge verfasst © x sparkkelsputz Besucher : 187998772 Heute : 2787 Gestern : 15227 Online : 437 29.12.2025 10:19 7 Besucher in den letzten 60 Sekunden alle 8.57 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
|
xcvb
ycvb
0.0363941192627
|