23.08.2006, 20:53
hallo,
ich programmiere seit zwei tagen in assembler und ich bekomme es nicht hin eine led blinken zu lassen.
hier mein code
.NOLIST ; List-Output unterdrücken
.INCLUDE <m32def.inc> ; das gibt es für jeden Controllertyp
.LIST ; List-Output wieder aufdrehen
.CSEG ; was nun folgt, gehört in den FLASH-Speicher
.org $000
.EQU fq = 16000000 ; Quarzfrequenz festlegen
;------------------------------------------------------
; Start Adresse 0000
;------------------------------------------------------
RESET:
rjmp INIT ; springen nach "INIT"
;------------------------------------------------------
; ISR VECTORS
;------------------------------------------------------
; ..... hier kommen dann die Sprungadressen für die Interrupts rein
; dazu kommen wir noch
.org $016
rjmp wait
.ORG INT_VECTORS_SIZE ; dadurch haben wir für die Vektoren Platz gelassen
wait: ;timer Warteschleife
inc r17 ;r17 um eins erhöhen
cpi r17,61 ;vergleichen von r17 mit einer variablen
breq main ;wenn r17 gleich variable dann springe zu main
reti ;rücksprung
INIT:
;------------------------------------------------------
; INITIALIZE
;------------------------------------------------------
.DEF Stackpointer = r24
ldi r24,high(RAMEND) ;Stack Pointer setzen
out SPH,r24 ; "RAMEND" ist in m8def.inc (s.o.) festgelegt
ldi r24,low(RAMEND) ;
out SPL,r24 ;
sei
ldi r16,0b00000101
out TCCR0,r16 ;101: Clock = Taktfrequenz / 1024
ldi r16,0b00000010
out TIMSK,r16 ;1: Int bei Überlauf
ldi r16,0b00000000
out TIFR,r16
ldi r16,0b10000000
out ddrd,r16 ;portd.7 = output
ldi r16,0
out portd,r16 ;portd.7 = low
main:
clr r17 ;r17 wieder auf null setzen
com r16 ;invertieren des registers r16
main1:
out portd,r16 ;invertieren von portd
rjmp main1 ;rücksprung zu main1
ich hoffe dass ich wenigstens einigermasen alles deklariert habe
währe schön wenn ihr mir helfen könnt
mfg franzl
ich programmiere seit zwei tagen in assembler und ich bekomme es nicht hin eine led blinken zu lassen.
hier mein code
.NOLIST ; List-Output unterdrücken
.INCLUDE <m32def.inc> ; das gibt es für jeden Controllertyp
.LIST ; List-Output wieder aufdrehen
.CSEG ; was nun folgt, gehört in den FLASH-Speicher
.org $000
.EQU fq = 16000000 ; Quarzfrequenz festlegen
;------------------------------------------------------
; Start Adresse 0000
;------------------------------------------------------
RESET:
rjmp INIT ; springen nach "INIT"
;------------------------------------------------------
; ISR VECTORS
;------------------------------------------------------
; ..... hier kommen dann die Sprungadressen für die Interrupts rein
; dazu kommen wir noch
.org $016
rjmp wait
.ORG INT_VECTORS_SIZE ; dadurch haben wir für die Vektoren Platz gelassen
wait: ;timer Warteschleife
inc r17 ;r17 um eins erhöhen
cpi r17,61 ;vergleichen von r17 mit einer variablen
breq main ;wenn r17 gleich variable dann springe zu main
reti ;rücksprung
INIT:
;------------------------------------------------------
; INITIALIZE
;------------------------------------------------------
.DEF Stackpointer = r24
ldi r24,high(RAMEND) ;Stack Pointer setzen
out SPH,r24 ; "RAMEND" ist in m8def.inc (s.o.) festgelegt
ldi r24,low(RAMEND) ;
out SPL,r24 ;
sei
ldi r16,0b00000101
out TCCR0,r16 ;101: Clock = Taktfrequenz / 1024
ldi r16,0b00000010
out TIMSK,r16 ;1: Int bei Überlauf
ldi r16,0b00000000
out TIFR,r16
ldi r16,0b10000000
out ddrd,r16 ;portd.7 = output
ldi r16,0
out portd,r16 ;portd.7 = low
main:
clr r17 ;r17 wieder auf null setzen
com r16 ;invertieren des registers r16
main1:
out portd,r16 ;invertieren von portd
rjmp main1 ;rücksprung zu main1
ich hoffe dass ich wenigstens einigermasen alles deklariert habe
währe schön wenn ihr mir helfen könnt
mfg franzl