Gast
#118801
Hallo ich hab da mal ein ganz interessantes Problem und zwar nach dem
ich ein program geschrieben habe das nicht funktioniert hat habe ich
ein test Programm geschrieben das folgendes venomehn hat.
Hier erst mal der Code:
.include "4433.inc"
.def temp1 = r16
.def temp2 = r17
.org 0x000
rjmp main
.org INT0addr
rjmp inttest
main:
ldi temp1, RAMEND
out SPL, temp1
ldi temp1, $F0
out DDRD, temp1
ldi temp1, $0F
out DDRB, temp1
ldi temp1, 0b00000010
out MCUCR, temp1
ldi temp1, 0b01000000
out GIMSK, temp1
sei
ldi temp1,$00
ldi temp2,$00
out PORTB,temp2
out PORTD,temp1
loop:
in temp1, PIND
andi temp1, $01
cpi temp1, $00
breq weiter
rjmp loop
weiter:
ldi temp1,$a0
ldi temp2,$0a
out PORTB,temp2
out PORTD,temp1
rjmp loop
inttest:
ldi temp1,$F0
ldi temp2,$01
out PORTB,temp2
out PORTD,temp1
reti
Die Pins 2 u. 4 sind als Eingänge wie im I/O Tutorial aufgebaut (also
bei Betätigung auf masse).
Wenn jetzt der Taster S1 der an pin2 angeschlossen ist betätigt wird
dann wird in portB $0A
und in portD $A0 geladen so weit so gut aber wenn ich S2 der mit pin4
verbunden ist und somit den interupt auslöst betätige dann wird aus mir
unerklerlichen gründen in portB $0A
und in portD $A0 oder eben in portB wird $01 und in portD $F0 geladen.
Eigentlich sollte ja nur in portB $01 und in porD $F0 geladen werden.
Woran kann das liegen das der falsche wert geladen wird hat irgend
jemand eine Ahnung ?
PS: noch ne kleine frage wenn ich in der loop schleife statt rjmp nur
jmp verwende was laut datenblat ein Sprung zur absoluten Adresse ist
was für mich bedeutet das ich nicht mehr zurück springen kann und das
ist in diesem fall ja auch nicht nötig nur dann funktioniert das
Programm auch nicht nur mit rjmp aber rjmp speichert eine Adresse auf
dem stack und dann müsste doch eigentlich bei einer endlos schleife der
stack über laufen oder nicht bitte klärt mich mal darüber auf DANKE im
voraus Klaus
PPS: Ich drücke nie beide Taster gleichzeitig