PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Simulator Funktioniert nicht ?



Bqube
17.12.2008, 20:57
Hi alle zusammen,
ich bin noch ganz frisch hier und hab schon die ersten Probleme ich verusch mich schon seid Tagen durch verschiedene Tut's durchzuarbeiten auch hier von der Seite aus aber es klappt nicht. Das einfachste Programm eine LED anzusteuern geht nicht , was in den zeilen steht das man die Port als ausgang oder eingang einstellen muss das hab ich ja verstanden aber wenn ich das Programm Simulieren will geht's nicht. Ich hab es mit dem AVR-Studio Simulator versucht und mit dem AVR-Simulator von oshnsoft aber die Led's leuchten net.
.NOLIST ; List-Output unterdrücken
.INCLUDE <m8def.inc> ; das gibt es für jeden Controllertyp
.LIST ; List-Output wieder aufdrehen
.CSEG ; was nun folgt, gehört in den FLASH-Speicher


;------------------------------------------------------
; Start Adresse 0000
;------------------------------------------------------
RESET:
jmp INIT ; springen nach "INIT"

;------------------------------------------------------
; ISR VECTORS
;------------------------------------------------------
; ..... hier kommen dann die Sprungadressen für die Interrupts rein
; dazu kommen wir noch


.ORG INT_VECTORS_SIZE ; dadurch haben wir für die Vektoren Platz gelassen
INIT:
;------------------------------------------------------
; INITIALIZE
;------------------------------------------------------
ldi r24,high(RAMEND) ;Stack Pointer setzen
out SPH,r24 ; "RAMEND" ist in m8def.inc (s.o.) festgelegt
ldi r24,low(RAMEND) ;
out SPL,r24 ;

;------------------------------------------------------
; eigene Initialisierungen
;------------------------------------------------------
;....
;....
;....

;------------------------------------------------------
; HAUPTSCHLEIFE
;------------------------------------------------------
Hauptschleife:
;.... eigene befehle
;.... eigene befehle
;.... eigene befehle
rjmp Hauptschleife ; immer wiederholen

;------------------------------------------------------
; ENDE
;------------------------------------------------------
Ende:
rjmp Ende

Bei diesem Code der aus dem Tut von Roboternetz ist meckert er immer
jmp INIT nicht Richtig also AVR-STudio assembliert es nicht und wenn ich es in rjmp umändere macht er es zwar aber die led leuchtet net kann mir bitte einer helfen.
Mfg P.Gnauck

robin
17.12.2008, 22:08
Hi,

deine LED leuchtet nicht, weil deine Hauptschleife leer ist.

Dein programm läuft so ab:

du springst in die Init, initialisierst dort den stack und dann springst du in die Hauptschleife und bleibst da, aber machst einfach nix mehr.

Da fehlt einfach der Code.

So wies aussieht, is des nur ein Grundgerüst für ein Programm, des aber noch nix macht.

mfg robin

Besserwessi
17.12.2008, 22:12
Das mit dem RJMP und JMP läßt sich aufklären:
RJMP ist ein normaler kurzer Befehl, also 1 Word = 2 Bytes lang.
JMP ist ein langer Befehl, also 2 Word = 4 Bytes lang. Außerdem ist der beim Mega 8 gar nicht definiert, denn gar nicht nötig. Es ist also OK das AVRstudio meckert. Beim anderen Assembler könnte es sein das entweder JMP gleich durch RJMP ersetzt wird, oder das der falsche Code mit einem JMP erzeugt wird.

Das gezeigte Programm tut ja irgendwie auch gar nichts. Und außerdem, wie sollen denn da LEDs leichten im Simulator ?

Bqube
18.12.2008, 16:19
Ich benutze zum Simulieren den Simulator von oshnsoft und da kann man verschiedene sachen anzeigen lassen wie auch LED's usw aber was muss ich denn jetzt schreiben damit die Leuchten kann also zumindestens damit eine Leuchtet ??

Besserwessi
18.12.2008, 18:14
Was man machen muß damit die LEDs leuchten, hängt davon ab, wo und wie die LEDs angeschlossen sind. Wenn die LEDS an einem normalen Port hängen, dann muß man halt den Port (oder wengstens die passenden Pins) erst mal auf Ausgang setzen ( z.B. für Port B: LDI temp,255 und out DDRB,temp) und dann halt was passendes in das Ausgabe register (z.B. PORTB) schreiben.

Bqube
18.12.2008, 20:35
Ja es hat geklappt ich hab in das stück fürs hauptprogramm einfach

ldi r16, 0xFF
out DDRB, r16
ldi r16, 0b11111100
out PORTB, r16

Ist es eigentlich egal ob ich Binär Code oder hex verwende macht das was aus also vom Programmablauf her ? =D>

robin
18.12.2008, 20:40
Hi,

ob du Binär oder Hex schreibst ist egal, sin für den Compiler später auch nur Bits.

Falls du ein gutes Tutorial zu AVR-Assembler brauchst, dann kann ich dir dass hier empfehlen:

http://www.mikrocontroller.net/articles/AVR-Tutorial

Da is eigentlich alles drin erklärt und auch jede Menge Beispielcode für nen Mega8. Wenn du nen anderen Controller verwenden musst, musst du halt was abändern.

Mfg robin

Bqube
19.12.2008, 07:51
Das tuorial ist richtig gut nur mein Problem ist Endlisch ist nicht ganz meine stärke und wenn ich mir die Pdf Datei anschaue wo die ganzen Befehle drinn stehen, dann versteh ich nur bahnhof z.b

LD / Rd,k

Was heißt denn nun das Rd und das k das k gibt es in groß und klein das versteh ich nicht so ganz.
Gibt es die Befehlsliste nicht in Deutsch ?

Besserwessi
19.12.2008, 12:00
Die Befehlsbeschreibungen nutzen eine relativ beschränketen Wortschatz. Da sollte man sich eigentlich relativ schnell dran gewöhnen können. Im Zweifelsfall sollte man das als Übung fürs Englich ansehen, auch wenn das unbedingt perfektes Englisch ist.

Im Zweifelsfall ist ohnehin die Beschreibung mit mathematischen Symbolen die zuverlässigere (weil eindeutig).

Bqube
19.12.2008, 21:36
Ja ok quasi Vokabeln raussuchen übersetzen und üben aber was heißen denn nun diese abkürzungen rd , k usw das versteh ich nicht ?