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



Pridružen-a: Ned 14 Dec 2003 17:47 Prispevkov: 893 Aktiv.: 3.77 Kraj: Dobrepolje
|
Objavljeno: Ned Jun 07, 2009 3:38 pm Naslov sporočila: Namesto Wait uporabiti Timer? |
|
|
Pozdrav!
Tam kjer je Wait ukaz bi rad uporabil Timer, pa mi nikakor ne uspe.
Timer lepo deluje in daje 1 sekundne intervale.
Probal sem s Start in Stop Timer ukazi, pa timer zaštarta in šteje ko pride do 10 se ustavi, ampak koda se pa izvede v celoti.
Nikjer ne najdem podobnega primera, da bi pogledal potek.
Koda: |
Const Timer1reload = 15625
config timer1=timer,prescale = 64
Load Timer1 , Timer1reload
on ovf1 Timer1_isr
enable timer1
Start Timer1
enable interrupts
Do
Porta.1 = 0
Wait Pauza_1 'pauza_1 = 10 sekund
Porta.1 = 1
Wait Pauza_2 'pauza_2 = 15 sekund
Porta.2 = 0
Wait Pauza_3 'pauza_3 = 20 sekund
Loop
Timer1_ISR:
Load Timer1 , Timer1reload
Incr Clock12
If Clock12 > 15624 Then
Print Clock12
End If
If Clock12 > 9 Then
Clock12 = 0
Pomozna = 1
Stop Timer1
End If
return
|
LP,marko |
|
Nazaj na vrh |
|
 |
marko11 Član



Pridružen-a: Ned 14 Dec 2003 17:47 Prispevkov: 893 Aktiv.: 3.77 Kraj: Dobrepolje
|
Objavljeno: Pon Jun 08, 2009 12:22 pm Naslov sporočila: |
|
|
Ali res nihče ne ne ve kako bi namesto Wait ukaza uporabil Timer?
LP, |
|
Nazaj na vrh |
|
 |
LEDuser Član


Pridružen-a: Pon 31 Mar 2008 12:06 Prispevkov: 1104 Aktiv.: 5.27 Kraj: Ljubljana
|
Objavljeno: Pon Jun 08, 2009 1:36 pm Naslov sporočila: |
|
|
Tudi sam uporabljam bascom vendar še nisem prišel na idejo da bi namesto wait uporabil timer. Nisi objavil celotne kode zato je malo težko predvidevati kaj so: Pauza_1, Clock12 ,...
Nevem kaj hočeš narediti s timerom? Ali hočeš da bi npr. Timer ko doseže Pauza_1 skočil v podprogram kjer bi čakal 10s in po preteku 10s bi se vrnil na mesto skoka (return)?
Mislim da je bolj zanesljivo z wait 10 kot pa z širjenjem programa z Timer1. _________________ Razsvetljujemo od leta 1920! |
|
Nazaj na vrh |
|
 |
marko11 Član



Pridružen-a: Ned 14 Dec 2003 17:47 Prispevkov: 893 Aktiv.: 3.77 Kraj: Dobrepolje
|
Objavljeno: Pon Jun 08, 2009 5:00 pm Naslov sporočila: |
|
|
Ja, tako sem mislil, da bi namesto Wait skočil za 10 sek v podprogram in se potem vrnil.
Če gledamo je tukaj skupaj za 45 sekund pauze, ker pa med ukazom Wait ne moreš početi nič drugega, sem tako razmišljal.
V bistvu bi rad, ko se izvaja ta del kode, da bi lahko spreminjal spremenljivke Pauza_1, Pauza_2, to je čas dolžine pauze.
LP, |
|
Nazaj na vrh |
|
 |
LEDuser Član


Pridružen-a: Pon 31 Mar 2008 12:06 Prispevkov: 1104 Aktiv.: 5.27 Kraj: Ljubljana
|
Objavljeno: Pon Jun 08, 2009 5:29 pm Naslov sporočila: |
|
|
Poskusi tako da zamenjaš glavni program za podprogam. V Glavnem programu se vrtijo nastavitve timerja ko timer doseže določeno vrednost (nastavljeno) pa skoči v podprogram " Porta.1 = 0 . . ."
Stanje porta se ohrani dokler ga ne spremeniš z ukazom, zato ni potrebno čakanje. Če pa imaš kaj bolj zakompliciranega potem pa točno povej kaj želiš. _________________ Razsvetljujemo od leta 1920! |
|
Nazaj na vrh |
|
 |
rudiP Član

Pridružen-a: Tor 07 Avg 2007 15:30 Prispevkov: 1234 Aktiv.: 5.68 Kraj: KOPER
|
Objavljeno: Pon Jun 08, 2009 5:50 pm Naslov sporočila: |
|
|
Tako bo bolje:
Koda: |
Dim S_1ms As Word ' stevec tisočink sekunde
Dim S_sekund As Byte
Dim Sek_f As Bit ' zastavica sekunde
Config Porta = Output
Porta = 0
Ledika Alias Porta.0 'porta.0 smo imenovali ledika
Const Timer0reload = 1 'izračunaj novo vrednost za 1 milisekundo za timer 0 glede na frekvenco kristala
Config Timer0 = Timer , Prescale = 64 ' timer1 steje daljcasa glej datasheet
Load Timer0 , Timer0reload
On Ovf0 Timer0_isr
Enable Timer0
Start Timer0
Enable Interrupts
Do
If Sek_f = 1 Then 'če se je iztekla sekunda je postavljena zastavica
Reset Sek_f 'zbrišeš zastavico
Ledika = Not Ledika 'vsako sekundo prižge ali ugasne ledico
End If
Loop
'**************************************************************
Timer0_isr:
Load Timer0 , Timer0reload
Incr S_1ms
If S_1ms = 1000 Then
S_1ms = 0
Set Sek_f 'postavimo zastavico, da je
End If
Return
'**************************************************************
|
Na forumu dobiš dokument Seminar-publikacija.pdf, kjer so člani našega foruma lepo vse razložili . _________________ Lep pozdrav iz Kopra Rudi |
|
Nazaj na vrh |
|
 |
marko11 Član



Pridružen-a: Ned 14 Dec 2003 17:47 Prispevkov: 893 Aktiv.: 3.77 Kraj: Dobrepolje
|
Objavljeno: Pon Jun 08, 2009 5:53 pm Naslov sporočila: |
|
|
LEDuser poglej,
Vse kar se dogaja je v Do Loop zanki in to se neskončno ponavlja dokler ne ustavim programa.
Da nebi prekinjal programa med delovanjem in bi rad spreminjal čase pauze med izvajanjem Kako to napraviti?
LP, |
|
Nazaj na vrh |
|
 |
rudiP Član

Pridružen-a: Tor 07 Avg 2007 15:30 Prispevkov: 1234 Aktiv.: 5.68 Kraj: KOPER
|
Objavljeno: Pon Jun 08, 2009 6:08 pm Naslov sporočila: |
|
|
Sva istočasno pisala
Koda: |
**************************************************************
Timer0_isr:
Load Timer0 , Timer0reload
Incr S_1ms
If S_1ms = druga_vrednost Then
S_1ms = 0
Set Sek_f 'postavimo zastavico, da je
End If
Return
'**************************************************************
|
Ne vem kako si si zamislil menjavo vrednosti timerja, preko rs232 ali stikal na portu ?
v stavku >>If S_1ms = druga_vrednost Then>> imaš v tem primeru spremenljivko druga_vrednost namesto prej 1000. Z spreminjanjem vrednosti te spremenljivke se bo menjal tudi čas v katerem bo utripala led dioda.
Upam, da sta dojela kako se dela z prekinitvami tajmerja ?? _________________ Lep pozdrav iz Kopra Rudi |
|
Nazaj na vrh |
|
 |
marko11 Član



Pridružen-a: Ned 14 Dec 2003 17:47 Prispevkov: 893 Aktiv.: 3.77 Kraj: Dobrepolje
|
Objavljeno: Pon Jun 08, 2009 6:40 pm Naslov sporočila: |
|
|
rudiP
Te vrednosti bom spreminjal s tikami na portu.
Sedaj pa rabim čas, da v miru preštudiram in sprobam tvoje nasvete.
LP,marko |
|
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: 492 dni
Powered by phpBB © 2001, 2005 phpBB Group
|