Hallo Leute,
meiner einer möchte den AT90s1200 dazu bewegen, auf äußere Interrupts
(int0) zu reagieren, aber irgenwie will mir das nicht gelingen.
Habt ihr es schon mal geschafft, wenn ja wie?
Mein Programm sieht so aus, funzt aber nicht:
.NOLIST
.INCLUDE "E:\Eigene~1\Benutzer\Jens\Quellc~1\Def
INC\1200def.inc"
.LIST
.CSEG
.ORG 0000
RJMP START
RJMP ISERVE
START:
ldi R16 , 0xFF ; R16 = 255
out Ddrb , R16 ; Port B Def. Ausgang
ldi R16 , 0x00 ; R16 = 0
out DdrD , R16 ; Port D Def. Eingang
SEI ; Interruptfreigabe
ldi R16 , 0b01000000 ; Bit 7 setzen, vielleicht hilfts
out GIMSK , R16 ; Kontrolregister setzen
ldi R16 , 0b00000000 ;
out MCUCR , R16 ; MCUCR Interruptart festlegen
Prog:
RJMP Prog ; Endlosschleife
ISERVE:
ldi R16, 0xFF ; R16 = 255
Out Portb , R16 ; R16 nach B
ldi R18 , 0x03 ; R18 = hex12
wait1:
ldi R17 , 0xFF ; R17 = 255
pa_loop: ldi R16 , 0b00000001 ; R16 Startwert setzen
out tccr0 , R16 ; R16 nach tccr0
in R16, tifr ; tifr nach R16
sbr R16, exp2(tov0) ; exp2(tov0) mit R16 setzen
out tifr, R16 ; R16 nach tifr
clr R16 ; R16 löschen
out tcnt0, R16 ; R16 nach tcnt0
cwait: in R16 , tifr ; tifr in R16 speichern
sbrs R16 , tov0 ; Registerbi?
rjmp cwait ; springen nach wait
dec R17 ; R17 - 1
brne pa_loop ; springe bei ungleich
dec R18 ; R18 - 1
brne wait1 ; wiederhole
ldi R16, 0x00 ; R16 = 0
out Portb , R16 ; R16 nach B
RETI;
Ohne Interrupt macht das Programm übrigens was es soll, nur kann ich
nicht alles machen was ich will, weil ich halt immer am pollen bin ...
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.