www.elektronik.si Seznam forumov www.elektronik.si
Forum o elektrotehniki in računalništvu
 
 PomočPomoč  IščiIšči  Seznam članovSeznam članov  SkupineSkupine  StatisticsStatistika  AlbumAlbum  DatotekeFilemanager DokumentacijaDocDB LinksPovezave   Registriraj seRegistriraj se 
  PravilaPravila  LinksBolha  PriponkePriponke  KoledarKoledar  ZapiskiZapiski Tvoj profilTvoj profil Prijava za pregled zasebnih sporočilPrijava za pregled zasebnih sporočil PrijavaPrijava 

program in podprogrami

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> AVR, LPC900, x51
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
fbifbi
Član
Član



Pridružen-a: Pon 05 Jul 2004 12:17
Prispevkov: 129
Aktiv.: 0.54
Kraj: ljubljana

PrispevekObjavljeno: Sob Apr 29, 2006 9:32 am    Naslov sporočila:  program in podprogrami Odgovori s citatom

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
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo MSN Messenger - naslov
Domenius
Član
Član



Pridružen-a: Sre 30 Nov 2005 14:15
Prispevkov: 1188
Aktiv.: 5.02
Kraj: Medvode

PrispevekObjavljeno: Sob Apr 29, 2006 11:11 am    Naslov sporočila:   Odgovori s citatom

Kaj imaš pa napisano v A_podprogram-u?
_________________
It's electric!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Obišči avtorjevo spletno stran
fbifbi
Član
Član



Pridružen-a: Pon 05 Jul 2004 12:17
Prispevkov: 129
Aktiv.: 0.54
Kraj: ljubljana

PrispevekObjavljeno: Sob Apr 29, 2006 11:22 am    Naslov sporočila:   Odgovori s citatom

Koda:
A_podprogram:
A = A + 1
Return

Samo to.
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo MSN Messenger - naslov
CarpeDiem
Član
Član



Pridružen-a: Pon 16 Feb 2004 17:24
Prispevkov: 333
Aktiv.: 1.41
Kraj: Vrhnika

PrispevekObjavljeno: Sob Apr 29, 2006 12:14 pm    Naslov sporočila:   Odgovori s citatom

Hmm. Osebno mi pade na pamet samo sledeče:

Koda:
Waitms 250


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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo Obišči avtorjevo spletno stran
fbifbi
Član
Član



Pridružen-a: Pon 05 Jul 2004 12:17
Prispevkov: 129
Aktiv.: 0.54
Kraj: ljubljana

PrispevekObjavljeno: Sob Apr 29, 2006 12:32 pm    Naslov sporočila:   Odgovori s citatom

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
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo MSN Messenger - naslov
strobos
Član
Član



Pridružen-a: Sre 24 Sep 2003 12:19
Prispevkov: 726
Aktiv.: 3.07
Kraj: Brežice

PrispevekObjavljeno: Sob Apr 29, 2006 1:51 pm    Naslov sporočila:   Odgovori s citatom

Tipko daj na prekinitev časovnika ( on interrupt ....) in jo bo tako vedno zaznalo, tudi če boš uporabljal waitms ukaze.

Lp
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
fbifbi
Član
Član



Pridružen-a: Pon 05 Jul 2004 12:17
Prispevkov: 129
Aktiv.: 0.54
Kraj: ljubljana

PrispevekObjavljeno: Sob Apr 29, 2006 4:04 pm    Naslov sporočila:   Odgovori s citatom

Sem malo pogledal Interrupt-e samo s čim se zgodi. Kako se zgodi prekinitev?
Kakšen dogdek se mora zgoditi?
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo MSN Messenger - naslov
strobos
Član
Član



Pridružen-a: Sre 24 Sep 2003 12:19
Prispevkov: 726
Aktiv.: 3.07
Kraj: Brežice

PrispevekObjavljeno: Sob Apr 29, 2006 10:52 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Slemi
Član
Član



Pridružen-a: Pet 29 Okt 2004 13:29
Prispevkov: 386
Aktiv.: 1.63
Kraj: Hrastnik

PrispevekObjavljeno: Sob Apr 29, 2006 11:47 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo AIM - AOL Instant - naslov MSN Messenger - naslov
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> AVR, LPC900, x51 Časovni pas GMT + 2 uri, srednjeevropski - poletni čas
Stran 1 od 1

 
Pojdi na:  
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: 492 dni


Powered by phpBB © 2001, 2005 phpBB Group