Assembler in C-Code ? ( AT89C2051)

Im Unterforum Microcontroller - Beschreibung: Hardware - Software - Ideen - Projekte

Elektronik Forum Nicht eingeloggt       Einloggen       Registrieren




[Registrieren]      --     [FAQ]      --     [ Einen Link auf Ihrer Homepage zum Forum]      --     [ Themen kostenlos per RSS in ihre Homepage einbauen]      --     [Einloggen]

Suchen


Serverzeit: 29 12 2025  10:19:54      TV   VCR Aufnahme   TFT   CRT-Monitor   Netzteile   LED-FAQ   Oszilloskop-Schirmbilder            


Elektronik- und Elektroforum Forum Index   >>   Microcontroller        Microcontroller : 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
Zur Homepage von ThomasS

 

  

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.


Zurück zur Seite 1 im Unterforum          Vorheriges Thema Nächstes Thema 


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