Elöljáróban, én most csak felfutóélre való megszakítást próbálgattam.
A fenti programot átraktam ATtiny2313-ra
Kód: Egész kijelölése
$regfile = "attiny2313.dat"
$crystal = 4000000
'Set interrupt on PD2, type = Rising
Config Int0 = Rising
On Int0 Button
Enable Interrupts
Enable Int0
Do
NOP
Loop
Button:
NOP
Return
End
És jól megy a szimulátorban, tehát ha a PD2-t kapcsoljuk akkor odaugrik a megszakításrutinra.
Ezek után átírtam ATtiny13-re
Kód: Egész kijelölése
$regfile = "attiny13.dat"
$crystal = 4000000
'Set interrupt on PB1, type = Rising
Config Int0 = Rising
On Int0 Button
Enable Interrupts
Enable Int0
Do
NOP
Loop
Button:
NOP
Return
End
Itt nem működik a szimulátorban jól, ha PB1-t kapcsoljuk semmi nem történik. Az igaz, hogy az Interrupt fülön az INT0-t kapcsolva igen, de az nem normális így.
Ezek után áttúrtam a "attiny2313.dat" és a "attiny13.dat" fájlokat vajon mi lehet a különbség. Rengeteg hasonlitgatás (kipontosvesszőzés,újrafordítás,próba) nem hozott eredményt. Azt gondoltam ebben majd meglelem a szimulációra vonatkozó "összefüggéseket" is de nem. Ez csak a cimeket, beállításokat tartalmazza.
Mire már csak az a különbség maradt, hogy az egyik a PD2-ön a másik a PB1-en várja az INT-et. De ugye a ATtiny13-ban nincs D port. Sebaj, gondoltam egy próbát megér. Beillesztettem az IO részbe:
Problémát nem okozhat hiszen a $10-$12-es címen semmi nincs.
Ez annyit tett, hogy az újrafordítás után a szimulációban megjelent a D port is (ami ugye a valóságban nincs). És megjött a csoda! PD2-re kattintva megtörténik a megszakítás.
Szumma: a szimulátor rossz helyen várja a megszakítást.
Jó hír viszont, hogy a fordítás az valószínűleg jó, AVR Simulator IDE-ben - a kódot assembly-ben látva - jól működik.
(Ha esetleg van valakinek ATtiny13-ja kéznél kipróbálhatná a valóság mit mutat)