|
Svet elektronike Revija za prave elektronike
|
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
malovrh4 Mojster
Pridružen/-a: Sob Sep 2007 21:14 Prispevkov: 22 Kraj: Polhov Gradec
|
Objavljeno: Pon Sep 17, 2007 9:08 pm Naslov sporočila: kako narediti Interrupt |
|
|
Zanima me naslednje, zakaj mi hardware prekinitev tako kot je napisana spodaj deluje samo enkrat,
pri ponovni postavitvi pina P3.2 (ki je pri at89c52 definiran kot INT0) pa se ne zgodi nič.
Kako bi napisal program, da bi se ob vsaki prekinitvi začel izvajati določen podprogram (recimo krit:), neglede na to, kje bi se izvajal ostali program
'centralna.bas
dim a as byte .......itd.
Enable Interrupts
Enable Int0
On Int0 Krit 'ko je temperatura v kotlu kritična
do
... ' glavni del programa
zac2:
...
loop
Krit:
Cls
Lcd "tempertura kriticna"
Do
P2.0 = 0
P2.1 = 0
P2.2 = 0
If P0.2 = 0 Then
Locate 1 , 1
Lcd "nazaj "
P2.0 = 1
P2.1 = 1
P2.2 = 1
Goto Zac2
End If
Loop
lp
uroš |
|
Nazaj na vrh |
|
|
dkone Profesionalec
Pridružen/-a: Sob Dec 2005 17:03 Prispevkov: 176 Kraj: Krško
|
Objavljeno: Pon Sep 17, 2007 9:23 pm Naslov sporočila: |
|
|
A imaš pull up upor na INT0? _________________ Lp,Denis |
|
Nazaj na vrh |
|
|
malovrh4 Mojster
Pridružen/-a: Sob Sep 2007 21:14 Prispevkov: 22 Kraj: Polhov Gradec
|
Objavljeno: Pon Sep 17, 2007 9:30 pm Naslov sporočila: |
|
|
Da, 47kR, napetost se lepo postavi nazaj na 4,99V
lp
uroš |
|
Nazaj na vrh |
|
|
Jure Urednik
Pridružen/-a: Pon Jan 2004 12:51 Prispevkov: 2132 Kraj: Ljubljana
|
Objavljeno: Tor Sep 18, 2007 7:17 am Naslov sporočila: |
|
|
Uroš,
poglej si program. V prekinitveni rutini ti manjka stavek Return. Nadalje si v prekinitveni rutini uporabil Goto stavek - ki te vrže ven iz rutine in potem pristaneš v programu nekje naključno. Ker imaš Do-Loop stavek v rutini moraš na nek način priti ven iz tega. Jaz se izogibam Do-Loop v prekinitvenih rutinah - razen če lahko narediš tako, da napišeš Loop until (pogoj - recimo P0.2=0). Popravi to troje.
Lp
Jure |
|
Nazaj na vrh |
|
|
vilko Profesionalec
Pridružen/-a: Pon Jan 2004 11:54 Prispevkov: 807 Kraj: Ljubljana
|
Objavljeno: Sre Sep 19, 2007 3:12 am Naslov sporočila: Če že hočeš. |
|
|
Če že hočeš. potem seveda lahko delaš tudi z interruptom, tako za šolo programiranja.
Sicer pa je bi jaz tak problem rajši reševal v glavni zanki, saj reakcija ni nujno tako zelo hitra, da bi bi morali v ta namen prekiniti zanko glavnega programa.
Interrupt se uporablja za nujne zadeve, kadar je glavni program zelo zaseden z drugim delom, recimo, če je treba prestreči kak signal, ki traja silno kratek čas, in bi ga 'preslišali', če bi ga analizirali samo občasno v glavni zanki z IF. _________________ Sliši se paradoksalno, a je vendarle res:
Nekateri ljudje imajo vedno vse prav. No, včasih. |
|
Nazaj na vrh |
|
|
malovrh4 Mojster
Pridružen/-a: Sob Sep 2007 21:14 Prispevkov: 22 Kraj: Polhov Gradec
|
Objavljeno: Čet Sep 20, 2007 7:42 pm Naslov sporočila: |
|
|
Zadeva rešena in že deluje po načrtih. Upošteval sem Juretov nasvet in predelal rutino tako da sem vstavil že ukaz Return in do-loop - until.
Za interrupt sem se odločil, ker glavni program teče v dveh ali več različnih zankah in se mi je zdelo enostavneje uporabiti interrupt,
pa še malo sem se zraven tega naučil
hvala vsem za pomoč in se priporočam še za naprej
lp
uroš |
|
Nazaj na vrh |
|
|
|
|
Ne, ne moreš dodajati novih tem v tem forumu Ne, ne moreš odgovarjati na teme v tem forumu Ne, ne moreš urejati svojih prispevkov v tem forumu Ne, ne moreš brisati svojih prispevkov v tem forumu Ne ne moreš glasovati v anketi v tem forumu You cannot attach files in this forum You cannot download files in this forum
|
Powered by phpBB © 2001, 2005 phpBB Group
|