Chciałem sobie wytestować usypianie atmegi32a za pomocą przerwania INT0
Niby program działa poprawnie, ale co któreś wyzwolenie stanem niskim nie powoduje przejścia do głównej pętli, tak jakby się zawieszał program.
Co może być tego przyczyną?
Uśpienie działa bezbłędnie, ale po wybudzeniu nic się nie da robić oprócz kręcenia się w kółko w głównej pętli.
Próba przejścia do jakiejkolwiek procedury z głównej pętli jest niemożliwe bo cały czas INT0 tak jakby przeszkadzał.
To wygląda na to że to całe POWER MODE do niczego nie jest potrzebne, bo bezużyteczne.
W trakcie normalnej pracy chcę, aby INT0 było cały czas podłączone do GND. A to chyba wyklucza usypiania?
- $regfile = "m32adef.dat"
- $crystal = 11059200 '11,0592MHz
- $hwstack = 64
- $swstack = 32
- $framesize = 64
- Config Int0 = Low Level
- Enable Interrupts
- On Int0 Int0_isr
- Config PortB.0 = Input : PortB.0 = 1 : INT_PCF Alias PinB.0 ' WEJŚCIE SYGNAŁU INT 1Hz
- Config PortB.3 = Output : PortB.3 = 1 : LED Alias PortB.3
- Config POrTD.2 = Input : PORTD.2 = 1 : SWITCH Alias PIND.2
- Dim Mig As Bit
- Dim Flaga As Bit
- Flaga = 0
- Do
- 'Mig = INT_PCF
- 'If Mig = 0 Then LED = 0 Else LED = 1
- ' Wprowadzenie w tryb Power Down
- If SWITCH = 1 Then Flaga = 1
- If Flaga = 1 Then
- 'LED = 1
- Enable Int0
- Config Powermode = Powerdown
- end if
- Loop
- END
- Int0_isr:
- Enable INT0
- SWITCH = 0
- Flaga = 0
- Return
Oczywiście miganie ledem wyciąłem, tak jak w załączonym kodzie, aby nic nie przekłamywało pomiaru prądu.
