cpse counter, time ; skip if we have 100 timer-overflows
75
rjmp count
76
ret
77
78
; ---------------
79
; -- main-loop --
80
; ---------------
81
loop:
82
ldi temp, 0b00000001
83
out PORTB, temp
84
rcall wait
85
86
ldi temp, 0b00000000
87
out PORTB, temp
88
rcall wait
89
90
ldi temp, 0b00000010
91
out PORTB, temp
92
rcall wait
93
94
ldi temp, 0b00000000
95
out PORTB, temp
96
rcall wait
97
98
rjmp loop
99
100
; -----------------
101
; -- other stuff --
102
; -----------------
komischerweiße bleibt das programm beim ersten "rcall wait" einfach
stehen und macht nix mehr.
ABER jetzt kommt das komische: wenn ich die stromzufuhr ganz kurz
unterbreche und dann wieder herstelle dann funktioniert die schaltung
auf einmal
habt ihr ne idee woran das liegen könnte?
MFG Marcel
Hi!
Der Fehler sollte im Timerinit stecken.
Du schreibst:
timer:
ldi counter, 0
ldi temp,timsk ; init the register timsk
ori temp,0b00000010
out timsk,temp
TIMSK hat $39 + dein ori $2 =$3b
Damit wird TICIE1 + TOIE0 eingeschaltet, aber TICIE1 hat keine
ISR_adresse. Der Programmzeiger springt also irgendwo ins Progr.
Du wolltest vermutlich
in temp,timsk ; init the register timsk
schreiben, das könnte gehen. Aber warum diesen Aufwand?
ldi temp,$2
out timsk,temp
bewirkt das selbe.
ldi temp,tccr0 ; start Timer0 with
und
; -----------------------
; -- interrupt-handler --
; -----------------------
rjmp count_0
count_0:
Ist auch unsinnig
Gruss Uwe
Eine eigene Frage?
Dieser Thread ist über 23 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.