Zdravim Vas, zacinam sa ucit programovat AVR v jazyku Bascom avsak mam problem s jednym programom. Chcel som si na nom vyskusat prerusenie ale nefunguje to tak ako som si predstavoval . V skratke ma ist o to ze pomocou jedneho tlacitka si prepinam dva programy pre ovladanie LED co mi ako tak funguje. Dalsie tlacitko som pouzil pre funkciu prerusenia a to mi uz nechodi a malo by to fungovat tak ze po prichode vzostupnej hrany na INT0 program skoci na podprogram P a rozsvieti niektore LED na porte B. Vedel by mi niekto pomoct kde robim chybu? Viem ze je tam kopec veci ktore by sa dali spravit jednoduhsie ale ucim sa
Dakujem Vam a prikladam program
[code]'Knižnica pre výber MCU
'Nastavenie frekvencie na 8MHz
$regfile = “m644def.dat”
$crystal = 8000000
'Deklarácia portu B ako výstupu
'Deklarácia portu A ako vstupu
'Nastavenie prerušenia INT0 tak aby reagoval na vzostupnú hranu
Config Portb = Output
Config Porta = Input
Config Int0 = Falling
'Pri aktivácii prerušenia sa presuń na program PR
'Povolenie prerušenia INT0
'Povolenie Všetkých prerušení
On Int0 P
Enable Int0
Enable Interrupts
'Deklarácia premennej A ako byte
Dim A As Byte
'Nastavenie premennej A na hodnotu H00
'Nastavenie portu B na hodnotu HFF
'Nastavenie portu A na hodnotu HFF, tzn aktivácia pull-up rezistorov
A = &H00
Portb = &HFF
Porta = &HFF
'Pomenovanie PA0 na TL1
Tl1 Alias Pina.1
'Spustenie Hlavného programu P0, ktorý beží v nekonečnej slučke
P0:
Do
'Po stlačení TL1 sa presuň na program P2
If Tl1 = 0 Then
Gosub P1
End If
'Pri hodnote premennej A = 2, tzn po vykonaní programu P1, a stlačení TL1 sa presuň na program P2
'Počkaj 250ms, kvôli odstráneniu prekmitov na TL1
If Tl1 = 0 And A = 2 Then
Gosub P2
End If
Waitms 250
Loop
'Program 1: Do premennej A zapíš hodnotu 2 a následne pošli na port B hodnotu H00, počkaj 2s a pošli na port B hodnotu HFF a znova čakaj 2s a následne sa vráť do programu P0
P1:
A = 2
Portb = &H00
Wait 2
Portb = &HFF
Wait 2
Return
'Program 2: Do premennej A zapíš hodnotu 1 a následne posielaj na jednotlivé piny portu B logické úrovňe podľa zadania(vytvorenie svetelného hada), pričom po každom
'odoslaní hodnoty počkaj 1s. Nakoniec sa vráť do programu P0
P2:
A = 1
Portb = &B00000001
Wait 1
Portb = &B00000010
Wait 1
Portb = &B00000100
Wait 1
Portb = &B00001000
Wait 1
Portb = &B00010000
Wait 1
Portb = &B00100000
Wait 1
Portb = &B01000000
Wait 1
Portb = &B10000000
Wait 1
Portb = &B01000000
Wait 1
Portb = &B00100000
Wait 1
Portb = &B00010000
Wait 1
Portb = &B00001000
Wait 1
Portb = &B00000100
Wait 1
Portb = &B00000010
Wait 1
Portb = &B00000001
Wait 1
Portb = &HFF
Return
'Program prerušenia
P:
Portb = &H55
Waitms 500
Return
End[/code]
administrator: přejmenováno z "Prerušenie Atmega644P - Bascom"