Hi Michi, einfach das Programm, was du geschrieben hast, kompilieren, dann ist automatisch eine *.hex Datei in deinem Ordner.
Kompilieren kannst du mit F7.
@Florian:
So, erstmal gut soweit:
Code:
.include "m8def.inc"
.def tmp = r16 ;Mein Universallregister
.def lpm_reg = r0 ;Mein lpm-Register
.equ time0 = 256-90 ;Damit wird der Timer0 vorgeladen
.equ daten_laenge = 6 ;Länge des Strings
.org 0x000
rjmp reset ;Interruptvektor "reset:"
reset:
;Stack einrichten
ldi tmp, HIGH(RAMEND) ;HIGH-Byte der obersten RAM-Adresse
out SPH, tmp
ldi tmp, LOW(RAMEND) ;Low-Byte der obersten RAM-Adresse
out SPL, tmp
;Timer Register werden belegt, hier Timer 0
ldi tmp, (1<<CS02) ;Prescaler ist 1024
out TCCR0, tmp ;Register TCCR0 ist für den Prescaller zuständig
ldi tmp, time0 ;Hier wird der Timer vorgeladen
out TCNT0, tmp
ldi tmp, (1<<TOIE0) ;Hier werden Interrupts nach Timer0 Überlauf eingeschaltet
out TIMSK, tmp ;Register TIMSK ist dafür zuständig
;Z-Register mit daten1 füllen
ldi ZH, HIGH(tonleiter1 * 2)
ldi ZL, LOW(tonleiter1 * 2)
sei ;Interrupts zulassen
main:
lpm ;Daten laden
mov tmp, lpm_reg ;in temp verschieben
adiw ZL, 1 ;Z um eins erhöhen
ldi tmp, LOW ((tonleiter1 * 2) + daten_laenge) ;vergleiche LOW-Byte
cp ZL, tmp
ldi tmp, HIGH ((tonleiter1 * 2) + daten_laenge) ;vergleiche HIGH-Byte
cpc ZH, tmp
breq ende ;springe zu ende, wenn letztes Byte ausgelesen
rjmp main ;nochmal
ende: ;Endschleife
rjmp ende
tonleiter1:
.db 28, 16, 14, 0 ;Werte zum Vorladen des Timers für die Töne
;c', a' und c''
Allerdings muss hier noch die daten_laenge angepasst werden, oder? Also jetzt sind das ja 4 Bytes und nicht mehr 6, oder?
Gruß
Thomas
Lesezeichen