Hi,
sei mir nicht böse, aber das ist der unstrukturiertester Code den ich bisher gesehen hab 
Definitionen kommen normalerweise imer als erstes und die ganzen unterprogramme als letztes.
Mich wundert es echt das der Assembler das so angenommen hat...
Ich hab dir das mal schnell neu zusammen kopiert:
Code:
;*****************************************************************************
;*
;* DATEINAME : Led.asm
;* TITEL :
;* DATUM : 9.2.06
;* AUTOR : STK
;* VERSION : 1.0
;*
;*
;*****************************************************************************
.include "m8515def.inc"
;--KONSTANTENDEKLARATION---------------------------------------------
; status register bits
.equ CarryFlag = 0
.equ ZeroFlag = 1
.equ NegativeFlag = 2
.equ TwosFlag = 3
.equ SignFlag = 4
.equ HalfCarryFlag = 5
.equ TransferFlag = 6
.equ GlobalFlag = 7
;--VARIABLENDEKLARATION----------------------------------------
.def work = R16 ;Temp. Variable
.CSEG
.org 0x0000
rjmp MAIN ; Springe um den Prozedurcode herum zum Start des Hauptprogrammes
rjmp UnusedInt_ISR
rjmp UnusedInt_ISR
rjmp UnusedInt_ISR
rjmp UnusedInt_ISR ;Externes Interrupt-Ereignis zum Stoppen der Zeit
rjmp UnusedInt_ISR
rjmp UnusedInt_ISR
rjmp UnusedInt_ISR
rjmp UnusedInt_ISR
rjmp UnusedInt_ISR
rjmp UnusedInt_ISR
rjmp UnusedInt_ISR
rjmp UnusedInt_ISR
UnusedInt_ISR: reti
MAIN:
;Stackpointer initialisieren
ldi work,low (RAMEND) ; RAMEND ist eine im include file vorgegebene Konstante,
out SPL,work
ldi work, high(RAMEND)
out SPH,work
rjmp init
Main_loop:
ldi work, 0b11111111
out PortA, work
out PortB, work
out PortC, work
out PortD, work
rjmp Main_loop;
;--Unterprogramme-----------------------------------------------------
init:
ser work
out ddra, work ;Port A, B, C,
out ddrb, work ;und D als Ausgang
out ddrc, work ;definieren
out ddrd, work
rjmp main_loop
;--HAUPTPROGRAMM-----------------------------------------------------
aber aller anfang ist schwer 
machs doch einfach so:
Code:
.include "m8515def.inc"
.def temp, r16
ldi temp, 0xff
out DDRa, temp
out DDRb, temp
out DDRC, temp
out DDRd, temp
main:
ldi temp, 0b11111111
out PortA, temp
out PortB, temp
out PortC, temp
out PortD, temp
ende:
rjmp ende
Das ist jetzt natürlich nur in der schnelle geschriebn und lässt sich noch anpassen, sollte aber funktionieren.
Gruß,
Mehto
Lesezeichen