PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : [ERLEDIGT] anfänger timer problem



23.08.2006, 19: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

Hanni
23.08.2006, 19:56
Okay, fangen wir mal an:

1. fehlt ein sei um die interupts global zu aktivieren
2. springt man aus einer ISR niemals einfach herraus !!!

izaseba
23.08.2006, 20:19
fehlt ein sei um die interupts global zu aktivieren

Doch doch da ist ein sei, direkt nach der Stackini, den würde ich aber zum Schluß setzten, wenn alle Einstellungen zum Timer getan sind, find ich persönlich eleganter...

und zu 2. Ja das ist ganz böse, setze cpr r17,61 und denn breq in die main1, dann sollte es auch klappen.

Gruß Sebastian

Hanni
23.08.2006, 21:08
fehlt ein sei um die interupts global zu aktivieren

Doch doch da ist ein sei, direkt nach der Stackini, den würde ich aber zum Schluß setzten, wenn alle Einstellungen zum Timer getan sind, find ich persönlich eleganter...


ups, das hab ich glatt übersehen.

franzl
24.08.2006, 09:03
hallo,
danke für eure unterstützung jetzt funktioniert es auch. es ist eben am anfang jeder programmiersprache nicht ganz leicht eine gute strucktur hineinzubekommen.
mfg franzl