Der RJMP ist ein einfacher Sprung, ohne Rückkehr.
RCall ist dagegen der Aufruf eines Unterprogramms, so dass man per RET auch wieder zurückkommt.
Das enspricht ziehmlich 1:1 den Basic Befehlen Goto und Gosub.
Der RJMP ist ein einfacher Sprung, ohne Rückkehr.
RCall ist dagegen der Aufruf eines Unterprogramms, so dass man per RET auch wieder zurückkommt.
Das enspricht ziehmlich 1:1 den Basic Befehlen Goto und Gosub.
Hm war mir gar nicht aufgefallen. Natürlich musst Du ein RCALL einsetzen. Da wird ja dann die Adresse auf dem Stack abgelegt, wo nach dem RET wieder zurückgesprungen werden soll. Ein relativer Sprung springt ja nur und merkt sich, lapidar gesagt, nicht, wo er her kommt. Trotz dem meine ich, dass Du in R16 eine 255 schreibst und im nächsten Schritt mit 0 vergleichst. Oder sollte ich mich da irren.
Allerdings finde ich, dass Deine Fragen eher Off Topic sind und in den ASM Bereich sollten. Da kennen sich bestimmt mehr Leute mit aus als hier. Ich selbst progge hauptsächlich in Hochsprachen und nutze nur für Zeitkritisches oder Platzkritisches Inline ASM. Habe also eher wenig Erfahrung und sehe so gut wie jedesmal neu im Datenblatt nach, wie die Befehle zu nutzen sind...
Wenn das Herz involviert ist, steht die Logik außen vor! \/
So... jetzt hab ich das nächste Problem, welches diesmal wirklich mit Bascom zu tun hat
Ich habe die Demoversion (V: 1.11.9.5). Wenn ich folgenden Code compilieren möchte, dann kommt eine Fehlermeldung.
Folgende Meldung kommt dann:Code:$regfile = "m32def.dat" $crystal = 16000000 $framesize = 30 $hwstack = 30 $swstack = 30 $asm .def Temp = R16 .def A = R17 .org $000 Rjmp Main .org $002 Rjmp Int0_handler Main: ldi temp, &b11111111 Out Ddrc , Temp ldi temp, &b00000000 Out Ddrd , Temp ldi temp, &b11111110 Out Portc , Temp ldi temp, &b11111111 Out Portd , Temp ldi a,&b00000011 Out Mcucr , A ldi a,&b01000000 Out Gimsk , A sei 'interrupts allgemein aktivieren (enable interrupts) Lop: nop rjmp lop Int0_handler: sbi portc , 0 reti $end Asm End
Wenn ich allerdings dasCode:Access violation at address 0024572E in module 'BASC-AVR.DLL'. Write of address 05BF1000.
rausnehme, dann kommt die Meldung nicht.Code:.org $000 RJMP Main
An was liegt das?
Und stimmt mein Programm ansonsten (also INT0 auf fallende Flanke)??
Gruß
Chris
Hallo,
ich Progge viel mit Bascom und verwende auch viel den Inline-Assembler.
Bei deinem Code fällt mir auf, dass du alles in Assembler schreiben willst, auch die Interrupt-Vector Tabelle.
Bascom ist eigentlich ausgelegt um in Basic zu proggen. Natürlich kann man auch vieles in Assembler machen, aber Interrupt-Vectortabelle erstellen geht nicht.
Auch Befehle wie .org .data .eep etc geht nicht.
Wenn du in reinem Assembler Proggen willst, dann nimm besser AVR-Studio.
Das Assembler in Basom ist als Inline-Assembler gedacht.
Interrupts sollten deshalb besser mit Bascom-Statements configuriert werden. Das Spart Zeit und man behält die Übersicht. Korzer wird der Code nicht in Assembler.
Wenn du mit Bascom Assembler lernen willst, dann versuche dich anfangs auf einzelne Routinen zu konzentrieren. Deine versuchte Initialisierung sieht sehr nach AVR-Studio aus. In Bascom wird das nur bedingt compiliert und vermutlich nicht funktionieren.
Wenn du trotzdem in dieser Richtung experimentieren willst, dann schau dir mal die Befehle der Bascom Hilfe an. Z.B. $NoInit, $NoRam, $Initmicro, $Loader, $Loadersize, NoRamclear, $RomStart und so weiter an. Da findest du viele Hinweise. Dann wird für dich bestimmt vieles klarer.
Hallo Mitch64,
erstmal danke für deine Antwort.
An AVR-Studio hab ich auch schon gedacht, jedoch hab ich keine Seite gefunden, auf der man das downloaden kann (bzw. ich weiß nicht, welche Datei ich brauche, weil teils französisch). Außerdem bin ich mir nicht sicher, ob das auch mit dem USB-ISP (von robotikhardware) funzt??
Gruß
Chris
Hallo,
das AVR-Studio gibts kostenlos direkt bei www.atmel.com. Das ist der Hersteller dieser Controller. Ob das mit deinem USB-Programmer funktioniert kann ich dir nicht sagen. Muste in der Doku schauen von Studio.
Alternativ brennste das hex eben mit Bascom, das geht auch.
lies das hier :
http://www.rn-wissen.de/index.php/Bascom_Inside-Code
Lesezeichen