Gast
#1456125
Ich habe versucht ein Bascom Programm in assembler zu übersetzen, um es
im Anschluss zu optimieren.
Funktion: Am Int0 hängt ein Rechteckgenerator. Bei jeder positiven
Flanke wird ein Bitmuster am PortB ausgegeben und der nächste Wert aus
dem EEPROM gelesen. Nach 240 Werten soll wieder von vorne begonnen
werden.
Aber das Programm tut irgendwie nicht das was es soll. Wo liegt mein
Fehler?
.include "m644def.inc"
.org 0x000
rjmp main ; Reset Handler
.org INT0addr
rjmp int0_handler ; IRQ0 Handler
main:
.cseg
;Stackpointer initialisieren
ldi r16, low(RAMEND)
out SPL, r16
ldi r16, high(RAMEND)
out SPH, r16
;Port B als Ausgang
ldi r16, 0xFF
out DDRB, r16
;Interrupt Int0 auf steigende Flanke
lds r16,EICRA
sbr r16, 1<<ISC01 | 1<<ISC00
sts EICRA, r16
;Interrupt Int0 einschalten
ldi r16, 0x01
out EIMSK, r16
sei ; Interrupts global einschalten
ldi ZL,0x00 ; Z-Zeiger laden. Der Einfachheit
direkt adressiert
ldi ZH,0x00
rcall EEPROM_read ; Aufruf des Unterprogramms
Daten aus EEPROM lesen
loop:
rjmp loop
int0_handler:
out PORTB, r16
inc ZL
cpi ZL,0xF1
brne weiter
ldi ZL,0x00
weiter:
rcall EEPROM_read ; Aufruf des Unterprogramms
Daten aus EEPROM lesen
reti
EEPROM_read:
sbic EECR,EEPE ; prüfe ob der vorherige
EEPROMzugriff beendet ist
rjmp EEPROM_read ; nein, nochmal prüfen
out EEARH, ZH ; Adresse laden EEAR=EEPROM
adress register
out EEARL, ZL
sbi EECR, EERE ; Lesevorgang aktivieren
in r16, EEDR ; Daten aus dem EEprom Daten
Register ins CPU Register kopieren
ret
; Daten im EEPROM definieren
.eseg
dta1:
.db 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1 , 0 , 1
.db 0 , 1 , 0 , 1 , 2 , 3 , 2 , 3 , 2 , 3 , 2 , 3
.db 2 , 3 , 2 , 3 , 2 , 3 , 2 , 3 , 2 , 3 , 2 , 3
.db 2 , 3 , 2 , 3 , 2 , 3 , 2 , 3 , 2 , 3 , 2 , 3
.db 2 , 3 , 2 , 3 , 2 , 3 , 2 , 3 , 2 , 3 , 2 , 3
.db 2 , 3 , 2 , 3 , 2 , 3 , 2 , 3 , 2 , 3 , 2 , 3
.db 2 , 3 , 2 , 3 , 2 , 3 , 2 , 3 , 2 , 3 , 2 , 3
.db 2 , 3 , 2 , 3 , 2 , 3 , 2 , 3 , 2 , 3 , 2 , 3
.db 2 , 3 , 2 , 3 , 2 , 3 , 2 , 3 , 2 , 3 , 2 , 3
.db 2 , 3 , 2 , 3 , 2 , 3 , 2 , 3 , 3 , 3 , 3 , 3
.db 2 , 3 , 2 , 3 , 2 , 3 , 2 , 3 , 2 , 3 , 2 , 3
.db 2 , 3 , 2 , 3 , 2 , 3 , 2 , 3 , 2 , 3 , 2 , 3
.db 2 , 3 , 2 , 3 , 2 , 3 , 2 , 3 , 2 , 3 , 2 , 3
.db 2 , 3 , 2 , 3 , 2 , 3 , 2 , 3 , 2 , 3 , 2 , 3
.db 2 , 3 , 2 , 3 , 2 , 3 , 2 , 3 , 2 , 3 , 2 , 3
.db 2 , 3 , 2 , 3 , 2 , 3 , 2 , 3 , 2 , 3 , 2 , 3
.db 2 , 3 , 2 , 3 , 2 , 3 , 2 , 3 , 2 , 3 , 2 , 3
.db 2 , 3 , 2 , 3 , 2 , 3 , 2 , 3 , 2 , 3 , 2 , 3
.db 2 , 3 , 2 , 3 , 2 , 3 , 2 , 3 , 2 , 3 , 2 , 3
.db 2 , 3 , 2 , 3 , 2 , 3 , 2 , 1 , 1 , 1 , 1 , 1