 |
www.elektronik.si Forum o elektrotehniki in računalništvu
|
Poglej prejšnjo temo :: Poglej naslednjo temo |
Avtor |
Sporočilo |
fbifbi Član

Pridružen-a: Pon 05 Jul 2004 12:17 Prispevkov: 129 Aktiv.: 0.54 Kraj: ljubljana
|
Objavljeno: Sob Apr 29, 2006 9:32 am Naslov sporočila: program in podprogrami |
|
|
imam sledeč glavni program:
Koda: |
Do
Debounce P3.0 , 1 , A_podprogram , Sub
Debounce P1.5 , 1 , D_podprogram , Sub
Loop |
Problem je da ko pritisnem tipko se mora na portu p1.1 izvajat sledeč program:
Koda: |
Set P1.1
Waitms 250
Reset P1.1
Waitms 250
|
Sam sem nekako rešil tako:
Koda: |
Do
Debounce P3.0 , 1 , A_podprogram , Sub
Debounce P1.5 , 1 , D_podprogram , Sub
If A = 1 Then
Gosub H
End If
If A = 2 Then
Gosub J
End If
If A = 3 Then
A = 0
End If
Loop |
Ki stalno preverja sdpremenljivko A v kateri je zapisano stanje in pošilja v ustrezne pod programe.
Pri tem pa je problem ko se izvaja podprogram:
Koda: |
Set P1.1
Waitms 250
Reset P1.1
Waitms 250
|
Nobena tipka ne uboga. Ker sem še začetnik nevem kako bi to rešil drugače. |
|
Nazaj na vrh |
|
 |
Domenius Član



Pridružen-a: Sre 30 Nov 2005 14:15 Prispevkov: 1188 Aktiv.: 5.02 Kraj: Medvode
|
Objavljeno: Sob Apr 29, 2006 11:11 am Naslov sporočila: |
|
|
Kaj imaš pa napisano v A_podprogram-u? _________________ It's electric! |
|
Nazaj na vrh |
|
 |
fbifbi Član

Pridružen-a: Pon 05 Jul 2004 12:17 Prispevkov: 129 Aktiv.: 0.54 Kraj: ljubljana
|
Objavljeno: Sob Apr 29, 2006 11:22 am Naslov sporočila: |
|
|
Koda: |
A_podprogram:
A = A + 1
Return
|
Samo to. |
|
Nazaj na vrh |
|
 |
CarpeDiem Član


Pridružen-a: Pon 16 Feb 2004 17:24 Prispevkov: 333 Aktiv.: 1.41 Kraj: Vrhnika
|
Objavljeno: Sob Apr 29, 2006 12:14 pm Naslov sporočila: |
|
|
Hmm. Osebno mi pade na pamet samo sledeče:
in
Koda: |
Debounce P3.0 , 1 , A_podprogram , Sub
|
se "ne marata" najbolje. Ko je program v funkciji waitms, ga tvoje pritiskanje na tipko ne zanima preveč. Šele ko se waitms izteče, "zagrabi" debounce in počaka "trepetanje" tipke. Vendar vseeno bi tipka morala delovati, če bi držal več kot tvojih 2x 0,25 s. Ne pozabi, da je uC relativno hitra stvar.
Malo si preberi kaj spoh in kako delata ti dve funkciji. |
|
Nazaj na vrh |
|
 |
fbifbi Član

Pridružen-a: Pon 05 Jul 2004 12:17 Prispevkov: 129 Aktiv.: 0.54 Kraj: ljubljana
|
Objavljeno: Sob Apr 29, 2006 12:32 pm Naslov sporočila: |
|
|
Sem ugotovil prav to. Zdaj ugotavljam kaj uporabit namesto tega:
Koda: |
Set P1.1
Waitms 250
Reset P1.1
Waitms 250
|
Da bi tipka ubogala in na P1.1 dobival tak signal.
Help sem že dvakrat preiskal pa nism našel nič pametnega. |
|
Nazaj na vrh |
|
 |
strobos Član

Pridružen-a: Sre 24 Sep 2003 12:19 Prispevkov: 726 Aktiv.: 3.07 Kraj: Brežice
|
Objavljeno: Sob Apr 29, 2006 1:51 pm Naslov sporočila: |
|
|
Tipko daj na prekinitev časovnika ( on interrupt ....) in jo bo tako vedno zaznalo, tudi če boš uporabljal waitms ukaze.
Lp |
|
Nazaj na vrh |
|
 |
fbifbi Član

Pridružen-a: Pon 05 Jul 2004 12:17 Prispevkov: 129 Aktiv.: 0.54 Kraj: ljubljana
|
Objavljeno: Sob Apr 29, 2006 4:04 pm Naslov sporočila: |
|
|
Sem malo pogledal Interrupt-e samo s čim se zgodi. Kako se zgodi prekinitev?
Kakšen dogdek se mora zgoditi? |
|
Nazaj na vrh |
|
 |
strobos Član

Pridružen-a: Sre 24 Sep 2003 12:19 Prispevkov: 726 Aktiv.: 3.07 Kraj: Brežice
|
Objavljeno: Sob Apr 29, 2006 10:52 pm Naslov sporočila: |
|
|
V Bascomu 8051 in s to serijo(8051) nisem delal že štiri leta, tako, da ti lahko le "megleno" opišem: Timer moraš konfigurirat tako, da se bo prekinitvena rutina izvršila takrat ko boš pritisnil tipko. To tipko moraš dat na tisti pin, kjer določen timer sprejema zunanjo prekinitev(npr. T0 INT)-piše v datasheetu mikrokontrolerja. Napiši kateri mikrokontroler uporabljaš. Ko konfiguriraš timer za ta način, moraš dati zunanje proženje in fronto(pozitivno ali negativno) na katero se bo prožil. Kako se konfigurira timer za določen način, piše v datasheetu mikrokontrolerja.
Lp |
|
Nazaj na vrh |
|
 |
Slemi Član

Pridružen-a: Pet 29 Okt 2004 13:29 Prispevkov: 386 Aktiv.: 1.63 Kraj: Hrastnik
|
Objavljeno: Sob Apr 29, 2006 11:47 pm Naslov sporočila: |
|
|
Konfiguriraj si timer tako, da boš imel prekinitve recimo na 5ms. Potem pa v teh prekinitvah, preverjaj stanje tipke in ob aktivnem nivoju povečuj neko spremeljivko za 1. Potem če ti ta spremenljivka recimo zraste nad 10, potem je bila tipka pritisnjena. Tu dodaj IF stavek ki spremenljivko drži na 10 (IF spremeljivka>10 Then spremeljivka = 10) in IF stavek, ki spremenljivko izbriše na 0 če tipka ni v aktivnem stanju. Če je bila tipka pritisnjena, potem v drugi spremenljivki napiši da se mora izvajati podprogram za utripanje oziroma če se je sedaj izvajal, da se ne bo več. To ponavadi izgleda tako, da spremenljivki določiš vrednost 1/0. Potem pa rabiš tu še eno spremenljivko, ki ji v primeru, da mora ledica, ali pa kar imaš na izhodu utripati, povečuješ vrednost in ko naraste na 50 (5ms = 50 = 250ms) jo zbrišeš na nič in spremeniš stanje na izhodu, to se potem ponavlja.
Upam, da to kaj pomaga.
Lp _________________ slemi.info - en
slemi.si - slo |
|
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 Ne, ne moreš pripeti datotek v tem forumu Ne, ne moreš povleči datotek v tem forumu
|
Uptime: 491 dni
Powered by phpBB © 2001, 2005 phpBB Group
|