Hallo, ich moechte gern meinen atmega8 mit assembler programmieren. Am liebsten unter linux,ich habe die programme avra tavrasm gavrasm hier installiert. Das hexfile wollte ich dann mit avrdude reinschieben. Was mir partout nicht gelingen will, ist: den nachfolgenden Text zu assemblieren. Es ist ein programm von myavr und soll eine led anschalten (ich hoffe das programm ist richtig). unter windows kein problem. Doch jeder dieser linux assembler schimpft an einer anderen stelle. Mag sein das es da ein paar Unterschiede in der syntax gibt. Doch ich kann absolut nicht rausfinden was ich anpassen muss. Kann mir jemand den passendsten assembler empfehlen, und kurz ueber die zeilen schauen was da nicht stimmt. Ich hatte auch mal mit kontrollerlab getestet. Aber da scheint die Einarbeitung auch nicht ganz ohne zu sein. Ich moechte eigentlich erst mal nur so ein kleines Miniprogramm assemblieren, and darauf aufbauend weiterforschen. Gruss Randolf Balasus ;+---------------------------------------------------------------------- .include "m8def.inc" ;----------------------------------------------------------------------- - ;Reset and Interrupt vector ;VNr. Beschreibung rjmp main ;1 POWER ON RESET reti ;2 Int0-Interrupt reti ;3 Int1-Interrupt reti ;4 TC2 Compare Match reti ;5 TC2 Overflow reti ;6 TC1 Capture reti ;7 TC1 Compare Match A reti ;8 TC1 Compare Match B reti ;9 TC1 Overflow reti ;10 TC0 Overflow reti ;11 SPI, STC Serial Transfer Complete reti ;12 UART Rx Complete reti ;13 UART Data Register Empty reti ;14 UART Tx Complete reti ;15 ADC Conversion Complete reti ;16 EEPROM Ready reti ;17 Analog Comparator reti ;18 TWI (I²C) Serial Interface reti ;19 Store Program Memory Ready ;----------------------------------------------------------------------- - ;Start, Power ON, Reset main: ldi r16,hi8(RAMEND) out SPH,r16 ldi r16,lo8(RAMEND) ;Stack Initialisierung out SPH,r16 ;Init Stackpointer sbi DDRB,0 ;PORTB0 auf Ausganp ;----------------------------------------------------------------------- - mainloop: ldi r16,0b00000001 out PORTB,r16 rjmp mainloop ;----------------------------------------------------------------------- -
Wenn du die beiden Zeilen zur Stack Initialisierung in ldi r16,high(RAMEND) ldi r16,low(RAMEND) ;Stack Initialisierung änderst compiliert es gavrasm problemlos mit einer Warnung, dass er die Header Datei nicht benutzt sondern eine interne Tabelle benutzt. Die kannst du, denke ich, ignorieren. Gerhard
Eigentlich programmiere ich kaum ASM, doch das programm sieht für mich ganz sinnvoll aus. Was da genau mit dem Stackpointer passiert weiss ich auf Anhieb nicht, kannst aber (meiner bescheidenen Meinung nach) diese initialiserung für ein "low-level-hello-world" weglassen. Was mir noch echt komisch vorkommt: jeder Interrupt vektor hat einen Offset von 2, RETI benötigt aber nur ein Befehlswort.
Wenn du auch noch die Zeile .include "m8def.inc" durch .DEVICE ATMEGA8 ersetzt unterbleibt auch die Fehlermeldung. Gerhard
ich nehm bisher: avra + sp12 als progger; ging auf anhieb besser als avrdude
oder du holst dir dir datei m8def.inc in der stehen einige definitionen die nützlich sind in main main musst du aber ersetzen, da es die macros hi8 lo8 nicht gibt ;ldi r16,hi8(RAMEND) ldi r16, RAMEND>>8 ;ldi r16,lo8(RAMEND) ;Stack Initialisierung ldi r16, RAMEND & 0xF avra -I /pool/software/avra/AVR main.asm in verzeichnis AVR habe ich die m8def.inc datei grüsse, daniel ps: du könntest auch avr-gcc nutzen als assembler nutzen
Gabriel Wegscheider wrote: > kannst aber (meiner bescheidenen Meinung nach) diese > initialiserung für ein "low-level-hello-world" weglassen. bin auch der Meinung, aber schaden tut's ja nicht. > Was mir noch echt komisch vorkommt: > jeder Interrupt vektor hat einen Offset von 2, RETI benötigt aber nur > ein Befehlswort. Nein, ist beim Mega8 nicht der Fall, siehe Datenblatt (bei meiner Vers. ist das auf Seite 46)...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.