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


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.56
|
Objavljeno: Tor Feb 19, 2008 6:31 pm Naslov sporočila: |
|
|
Tvoj opis je ena huda zmeda (ali je pa tak kar program) V prekinitvah preverjas stanja tipk in postavis ustrezne zastavice. Vse, kar je v zvezi z glavnim programom (odvizi na dogodke) pa potem preverjajo te zastavice in jih resetirajo, ko dogodek zaznajo oz. obdelajo, odvisno od tega kaksno delovanje zelis. _________________ Ka ti bo pa torba ce si kupu kolo ? |
|
Nazaj na vrh |
|
 |
kavelj22 Član


Pridružen-a: Tor 23 Jan 2007 23:56 Prispevkov: 465 Aktiv.: 2.08 Kraj: Ljubljana
|
Objavljeno: Tor Feb 19, 2008 7:15 pm Naslov sporočila: |
|
|
Hvala za tistega smeskota, ampak tudi jaz ne razumem niti besede kar si hotel povedati. Tako pac je ko srecata eden ki ze zna in drug ki se uci.
Takole:
Citiram: |
Main
btfss INTCON,TMR0IF
goto Main
bcf INTCON,TMR0IF
call Stop_Mode
call Start_Stop_motor
goto Main
Menu_setings
preverjanje tipk za menu
goto Menu_setings
|
Ok. V tej prekinitveni rutini oz. kakorkoli ze preverjam tipko za zaustavitev sistema in izvaja se vklop in izklop motorja. Ce je tipka pritisnjena se postavi zastavica ki jo preverjam tudi v Start_Stop_motor. Se pravi ce je postavljena se izvede izklop motorja in se klice Menu_setings. Se pravi z ustavitvijo sistema se postavimo na menu za nastavitev parametrov delovanja motorja. Ta procedura je napisana v zanko, samo za nastavitev parametrov. Ce hocemo ponovno zagnati program ga lahko samo z resetom.
Je to mozno???
Upam da je kaj bolj razumljivo
LP _________________ Živleje ni potica, življeje je črn kruh. Bul ga šparaš bul je suh. Zato pa kr na mizo žjim. |
|
Nazaj na vrh |
|
 |
igo Član

Pridružen-a: Sre 11 Okt 2006 19:11 Prispevkov: 3641 Aktiv.: 16.00
|
Objavljeno: Tor Feb 19, 2008 9:18 pm Naslov sporočila: |
|
|
Problem je s skladom, zaradi napačne rabe goto, call in return ukazov.
Primer napake:
Delaj
...
call Cyc (ob izpolnjenem pogoju kličeš Cyc)
...
goto Delaj
Cyc
...
goto Go_back
goto Cyc (izbereš med Cyc in Go_back)
Go_back
...
goto Delaj
Manjka VSAJ en return. Ostale kode nisem gledal, ampak program se povsem zacikla.
Delalo bi tole, vendar upoštevaj, da se z return vrneš na naslednji ukaz, takoj za call Cyc:
Delaj
...
call Cyc (ob izpolnjenem pogoju kličeš Cyc)
btfsc Temp_key,Key_F_on
...
goto Delaj
Cyc
...
goto Go_back
goto Cyc (izbereš med Cyc in Go_back)
Go_back
...
return
Nisem gledal naprej, a verjetno se ti na podoben način zaplete še pri call F _on ...
Tudi
movlw Tabela
movwf PCLATH ni najboljše zaporedje ukazov, saj vrednost Tabela ni definirana. Zgolj po naključju je enaka 0.
LP,
Igor
DODANO: Sem bolje pogledal. "return" na koncu Go_back ti bo rešil marsikaj ... kar je okrog call return narobe pri btfsc skeniranju tipk. A pazi - če boš pritisnil več tipk hkrati , bodo izpolnjeni vsi podprogrami, ki jih kličeš za btfsc Temp_key,...
Vsak call MORA imeti nekje return, s katerim skočiš na naslednji ukaz za tistim, s katerim si klical podprogram.
DODANO2: Napaka se ponovi tudi v zaporedju Delaj1 ... Go_back1
Go_back1
...
return ; tole dodaj
In še glavna težava:
call Mode_menu; napaka je v obeh v obeh Delaj zankah
Mode_menu
...
goto Prelubrification
goto Lubrication
Tu se povsem zaciklaš z goto, call, goto, call,... brez return-ov.
Zadevo rešiš z
goto Mode_menu ; v obeh Delaj in Delaj1 zankah _________________ Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor |
|
Nazaj na vrh |
|
 |
igo Član

Pridružen-a: Sre 11 Okt 2006 19:11 Prispevkov: 3641 Aktiv.: 16.00
|
Objavljeno: Tor Feb 19, 2008 11:20 pm Naslov sporočila: |
|
|
Eh, preveč zmede je s temi goto, call, return. Nariši si okrog in okrog na list papirja oblačke z imeni podprogramov.
Nato jih poveži med seboj z barvnimi puščicami. Modra ga goto, rdeča za call, zelena za return.
Ob sedanjem stanju je cela zmeda.
Legenda: kličeš = call, greš=goto, vrneš=return
Sem našel še napačno zaporedje:
Main
... call Stop_mode ; kličeš Stop_mode
goto Main
Stop_mode
... call Mode ; kličeš Mode
return ; do tega returna se nikoli ne vrneš, ker v Mode kličeš Mode_menu, odkoder greš v Lubrification/Prelubrification in naprej greš v Delaj/Delaj1.
Posledično se nikoli več ne vrneš v Main.
Rešitev:
Če upoštevaš, kar sem napisal v prejšnjem sporočilu (return na koncu Go-back in Goback1 ter goto Mode_menu v obeh Delaj in Delaj1), je potrebno še ustrezno predelati Delaj in Delaj1, da bo v njih ukaz return, s katerima se boš vrnil v Mode .
V Mode pa mora biti tudi return, da se boš vrnil v Spuscena1.
Od tam se že vračaš v Main, kjer čakaš na ukaz za novi Stop_Mode.
Zakaj imam občutek, da nikjer ne najdem prekinitvene procedure ??? Jo sploh uporabljaš?
Tudi org 0x005 ti nič ne pomaga, če pa imaš takoj za njim ukaz org 0x100. Daj tiste napise v tabelah, vključno z org 0x100, PRESTAVI povsem na konec programa - tik pred end.
Mode_menu
incf Mode_key_state,f ; Ne vem od kod ti xorwf za prištevanje. Tole je ekvivalent tvoji želji
btfsc Mode_key_state,0
goto Pre
goto Lub
LP,
Igor
p.s.: A to delaš za vijačni kompresor?
DODANO: Z gornjimi popravki boš ob pritisku tipke Temp_key,Key_Mode prišel v Mode_menu, tam pa izbral med goto Pre/Lub. Ta del ti bo torej povsem pravilno deloval.
Sedaj samo še razmisli, pod katerimi pogoji se bi rad iz Delaj in Delaj1 vrnil v Mode. To sta edini mesti, od koder se lahko vrneš v Mode, sicer je potrebna popolna prenovitev call/goto klicev/skokov. Zgoraj omenjaš, da bi rad samo z resetiranjem začel od začetka. Brez return-ov v Delaj, Delaj1 in Mode je to dejansko res edina možnost za vrnitev v Main.
Imaš Main, kličeš Stop_mode, kličeš Mode, kličeš Mode_menu, greš Pre/Lub in se vrtiš najdlje do Mode_menu.
Potrebno je paziti še na globino sklada, saj je Mode_menu že na tretji globini od osmih - vmes pa še kup klicev pavz, LCD rutin, EEprom rutin, ... . Vsak klic je skok v eno globino nižje, z vrnitvijo skočiš eno globino višje. Pri skokih z goto pa ostajaš na trenutni globini sklada.
Zato predlagam še združitev Main, Stop_mode in Mode v eno veliko zanko, od koder kličeš Mode_menu. Naprej pa že dela z gornjimi popravki. _________________ Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor |
|
Nazaj na vrh |
|
 |
kavelj22 Član


Pridružen-a: Tor 23 Jan 2007 23:56 Prispevkov: 465 Aktiv.: 2.08 Kraj: Ljubljana
|
Objavljeno: Sre Feb 20, 2008 4:03 pm Naslov sporočila: |
|
|
Igo najprej en velik hvala pa se nekrat hvala. Zdaj bom tole do dobra prestudiral in se lotil zadeve.
Ja drugace pa se trudim nardit krmilje za mazalni sistem za mazanje vreten od enega stroja v sluzbi. Crpalka dva tlacna stikala ter plovec za nivo olja. V bistvu je cisto samostojna enota, z strojem povezana samo z Enable signalom ki ga vklopi po preteku predmazanja. Po vklopu Enable signala ima samo krmilje stroja se dodatno zascito tako da lahko vretena vklopis sele po desetih minutah. Po vsaki napaki ali spremembi parametrov bi rad krozil samo v meniju za nastavljanje parametrov ( se pravi v Mode_menu), ker je po vsaki prekinitvi Enable signala tako ali tako potrebno zaceti cikelj od zacetka. Zato bi kar reset izvedel. Se pravi ce zelimo se kar spremenimo kaksne parametre in lepo reset in gremo od zacetka.
Mogoce sem si kar velik zalogaj zastavil za prvi projekt ampak se mi zdi da vseeno ni tako napacno.
Bomo videli mogoce kaj rata
Hvala,LP _________________ Živleje ni potica, življeje je črn kruh. Bul ga šparaš bul je suh. Zato pa kr na mizo žjim. |
|
Nazaj na vrh |
|
 |
kavelj22 Član


Pridružen-a: Tor 23 Jan 2007 23:56 Prispevkov: 465 Aktiv.: 2.08 Kraj: Ljubljana
|
Objavljeno: Pet Feb 22, 2008 7:46 pm Naslov sporočila: |
|
|
Citiram: |
Mode_menu
incf Mode_key_state,f ; Ne vem od kod ti xorwf za prištevanje. Tole je ekvivalent tvoji želji
btfsc Mode_key_state,0
goto Pre
goto Lub
|
Tisti xorwf je bil misljen za preklaplanje bitov!
Citiram: |
Tudi org 0x005 ti nič ne pomaga, če pa imaš takoj za njim ukaz org 0x100. Daj tiste napise v tabelah, vključno z org 0x100, PRESTAVI povsem na konec programa - tik pred end.
|
Upam da ne bom rekel prevec. Prestavil sem tole na konec ampak sedaj mi sploh ni jasno kaj v moji proceduri narediti da bo to ponovno delovalo
Zmeraj ko pridem do addwf PCL,f me potem vrze na neko lokacijo sredi programa!
Hvala,LP _________________ Živleje ni potica, življeje je črn kruh. Bul ga šparaš bul je suh. Zato pa kr na mizo žjim. |
|
Nazaj na vrh |
|
 |
igo Član

Pridružen-a: Sre 11 Okt 2006 19:11 Prispevkov: 3641 Aktiv.: 16.00
|
Objavljeno: Pet Feb 22, 2008 8:54 pm Naslov sporočila: |
|
|
kavelj22 je napisal/a: |
Tisti xorwf je bil misljen za preklaplanje bitov! |
Delovalo bo tudi z incf, saj se pri tem spremeni stanje bita,0 v Modekeystate. Pa še ena vrstica manj je.
Citiram: |
Tudi org 0x005 ti nič ne pomaga, če pa imaš takoj za njim ukaz org 0x100. Daj tiste napise v tabelah, vključno z org 0x100, PRESTAVI povsem na konec programa - tik pred end.
------------------------
Upam da ne bom rekel prevec. Prestavil sem tole na konec ampak sedaj mi sploh ni jasno kaj v moji proceduri narediti da bo to ponovno delovalo
Zmeraj ko pridem do addwf PCL,f me potem vrze na neko lokacijo sredi programa! |
Hmmm,... potem pa tisto prestavi nazaj na prvotno mesto. Preveri stanje v PCLATH registru. Jaz nisem v Mplab-u preverjal delovanja, sem se samo v tisto goto, call, return poglobil.
Pri tabeli sta me zmotila samo ukaza
org 0x005
org 0x100 , ki sta eden za drugim. Ukaza povesta prevajalniku v .hex (Mplab-u) na kateri lokaciji naj začne pisati program v PIC-a. Prestavi Tabelo na začetek in izbriši org 0x100. Simulacijo opazuj v View-->Program Memory in se potem igraj z org 0x100. Ti bo vse jasno.
Original imaš k sreči tule na forumu. Upam, da po vsaki večji spremembi shraniš prejšnjo različico.
LP,
Igor _________________ Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor |
|
Nazaj na vrh |
|
 |
kavelj22 Član


Pridružen-a: Tor 23 Jan 2007 23:56 Prispevkov: 465 Aktiv.: 2.08 Kraj: Ljubljana
|
Objavljeno: Pet Feb 22, 2008 9:01 pm Naslov sporočila: |
|
|
Ze sam Build ni sel skozi ce sem dal tabele na konec. To bom ze porihtal.
Ja to sem pripel samo del programa za Menu. Doma imam celotnega kjer je se delovanje crpalke in tlacnih stikal ampak bi rad zdaj najprej tole porihtal. Drugace je pa nastalo ze kar nekaj razlicic.
Nekaj stvari sem ze resil...pocasi bo!
Hvala,LP _________________ Živleje ni potica, življeje je črn kruh. Bul ga šparaš bul je suh. Zato pa kr na mizo žjim. |
|
Nazaj na vrh |
|
 |
kavelj22 Član


Pridružen-a: Tor 23 Jan 2007 23:56 Prispevkov: 465 Aktiv.: 2.08 Kraj: Ljubljana
|
Objavljeno: Sob Feb 23, 2008 8:39 pm Naslov sporočila: |
|
|
Ok, resil sem call - return zadeve, imam pa drug problem. Sklad je 8 globinski meni pa se ugrezne za 9 in mi povozi prvo lokacijo sklada.
Ampak!!! jaz se na to lokacijo sploh ne vrnem vec-namenoma ker program restartam z reset-om. A bi to delovalo! Pac uporabljam potem globino od 3 do 9, ce me razumete!
Hvala,LP _________________ Živleje ni potica, življeje je črn kruh. Bul ga šparaš bul je suh. Zato pa kr na mizo žjim. |
|
Nazaj na vrh |
|
 |
igo Član

Pridružen-a: Sre 11 Okt 2006 19:11 Prispevkov: 3641 Aktiv.: 16.00
|
Objavljeno: Sob Feb 23, 2008 8:52 pm Naslov sporočila: |
|
|
kavelj22 je napisal/a: |
Pac uporabljam potem globino od 3 do 9, ce me razumete! |
Seveda razumem, saj sem ti napisal, da združi Main, Stop_mode in Mode v ENO zanko, po kateri skačeš z goto. Tako ostaneš ves čas v ničelni globini.
Saj ne potrebiješ call-return tam notri, ker ves čas veš, kje se nahajaš. goto povsem zadostuje za začetno kroženje.
Lahko pa samo v Mode namesto call Mode_menu, napišeš goto Mode_menu , pa boš prihranil še eno globino .
LP,
Igor
DODANO:
Main:
call Stop_Menu ---> goto StopMenu
Stop_menu:
namesto return-ov, povsod napiši goto Main
call Mode ---> goto Mode
Mode:
call Mode_menu --> goto Mode_menu
To je vse, da prihraniš tri globine sklada. _________________ Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor |
|
Nazaj na vrh |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.91 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Sob Feb 23, 2008 9:06 pm Naslov sporočila: |
|
|
Očitno si nekaj hudo zavozlal oz se pisanja programa nisi lotil na pravi način. Pisal sem kar zahtevne aplikacije kjer sem porabil do 90% pomnilnika a sklada ni bilo nikoli premalo. Rabil sem ga do globine max 5 nivojev.
PS.
Kako bi napisal program za recimo kaj iz serije 16C5x kjer je sklad le dvonivojski.
Tukaj recimo imaš en moj primer, kjer je uporablljen mikorokontroler z le dvonivojskem skladom, a je kar precej dejaven. (multipreksira displej, bere 1Wire vodilo) Kot zanimivost - mikrokontroler je brez prekinitev. _________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
kavelj22 Član


Pridružen-a: Tor 23 Jan 2007 23:56 Prispevkov: 465 Aktiv.: 2.08 Kraj: Ljubljana
|
Objavljeno: Sob Feb 23, 2008 9:49 pm Naslov sporočila: |
|
|
Silvo je napisal/a: |
Očitno si nekaj hudo zavozlal oz se pisanja programa nisi lotil na pravi način. Pisal sem kar zahtevne aplikacije kjer sem porabil do 90% pomnilnika a sklada ni bilo nikoli premalo. Rabil sem ga do globine max 5 nivojev.
PS.
Kako bi napisal program za recimo kaj iz serije 16C5x kjer je sklad le dvonivojski.
Tukaj recimo imaš en moj primer, kjer je uporablljen mikorokontroler z le dvonivojskem skladom, a je kar precej dejaven. (multipreksira displej, bere 1Wire vodilo) Kot zanimivost - mikrokontroler je brez prekinitev. |
Ja vem da je to verjetno res. Ampak je to moj prvi projekt in je kar zahteven. Uporabil sem tudi sedem tipk, kjer z tremi nastavljam vrednosti in z vsako najprej izberem in nato potrdim vrednost. Mogoce bi moral drugace potem zastaviti shranjevanjevrednosti v EEPROM in izpise na LCD. Nevem
Igo sem takoj ko sem oddal sporocilo tudi naredil z goto, mal se prehitim vcasih.
Sem pa ugotovil drug problem. Meni zanka Mode ne dela vredu. Vcasih tipka prime in vcasih ne. Sem testiral z ledico do kod pride normalno, in gre prvo skeniranje (Key_test) normalno, drugo skeniranje tudi potem pa ko gre v Wait_for_release pa se zgubi, oz. kot sem rekel vcasih prime vecinoma pa ne. Simulacija pa dela vredu.
Hvala,LP
Hvala,LP _________________ Živleje ni potica, življeje je črn kruh. Bul ga šparaš bul je suh. Zato pa kr na mizo žjim. |
|
Nazaj na vrh |
|
 |
igo Član

Pridružen-a: Sre 11 Okt 2006 19:11 Prispevkov: 3641 Aktiv.: 16.00
|
Objavljeno: Ned Feb 24, 2008 12:17 am Naslov sporočila: |
|
|
Key_scan
Wait_for_rls
Wait_key_loop
Key_test ; vse to za branje tipk, nikjer pa nimaš debounce .
V Stop_Mode portD shraniš v spremenljivko Vhod, tukaj pa v Temp_key .
movf PORTD,w v Stop_mode nadomesti s call Key_scan. Nato preverjaj btfsc/s Temp_key .
Pazi, kateri bit od PORTD,x, je kateri bit v Temp_key,y !!! x Mora biti enako y !
Key_scan:
clrf Temp_key
movlw b'00111111'
andwf PORTD,w ; preberi D,0...D,5 --> rezultat v W
btfsc STATUS,Z
return ; Če ni nič, ni treba čakati 15ms za izhod iz podprograma
movwf Temp_key ; Če pa je kaj pritisnjeno, shrani v Temp_key
call Debounce ; čakaj vsaj 15 ms
movlw b'00111111' , Tipke PortD,0...5
andwf PORTD,w ; še enkrat preberi D,0...D,5 --> rezultat v W
andwf Temp_key,f ; rezultat prejšnji D "AND" sedanji D shraniš v Temp_key
call Key_test ; Če je hkrati pritisnjenih več tipk, upošteva samo prvo
movwf Temp_key ; Temp_key z največ enim aktivnim bitom - TA JE TISTI PRAVI
Key_scan1:
btfsc STATUS,Z ; Je kaj pritisnjeno?
return ; NE Nobena tipka ni (več) pritisnjena
; Nekaj je bilo pritisnjeno, zato čaka, da spustim tipko
call Debounce ; čakaj vsaj 15 ms
movlw b'00111111' , Tipke PortD,0...5
andwf PORTD,w ; še enkrat preberi D --> rezultat v W
movwf Key_temp
goto Key_scan1 ; Je (še) kaj pritisnjeno?
Key_test:
btfsc STATUS,Z
retlw b'00000000' ; Če ni nobene tipke, se vrni z 0
btfss Temp_key,0
retlw b'00000001'
btfss Temp_key,1
retlw b'00000010'
btfss Temp_key,2
retlw b'00000100'
btfss Temp_key,3
retlw b'00001000'
btfss Temp_key,4
retlw b'00010000'
;btfss Temp_key,5
retlw b'00100000' ; nekaj je bilo zagotovo pritisnjeno, torej ostane le Temp_key,5
; Z vrstnim redom je možno nastaviti prioriteto tipk
To bi moralo delovati.
Možno je tudi kaj poenostaviti, a sem gradil iz tvojega primera, ker ne poznam pomembnosti tipk.
LP,
Igor _________________ Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor |
|
Nazaj na vrh |
|
 |
igo Član

Pridružen-a: Sre 11 Okt 2006 19:11 Prispevkov: 3641 Aktiv.: 16.00
|
Objavljeno: Ned Feb 24, 2008 12:58 am Naslov sporočila: |
|
|
Sem komaj zdaj opazil, da zaznavaš tipke, ki so ob pritisku vezane na GND.
Gornji program sem popravil.
Key_scan:
clrf Key_scan
call NegirajD
movlw b'00111111'
andwf Vhod,w ; preberi D,0...D,5 --> rezultat v W
btfsc STATUS,Z
return ; Če ni nič, ni treba čakati 15ms za izhod iz podprograma
movwf Temp_key ; Če pa je kaj pritisnjeno, shrani v Temp_key
call Debounce ; čakaj vsaj 15 ms
call NegirajD
movlw b'00111111' , Tipke PortD,0...5
andwf Vhod,w ; še enkrat preberi D,0...D,5 --> rezultat v W
andwf Temp_key,f ; rezultat prejšnji D "AND" sedanji D shraniš v Temp_key
call Key_test ; Če je hkrati pritisnjenih več tipk, upošteva samo prvo
movwf Temp_key ; Temp_key z največ enim aktivnim bitom - TA JE TISTI PRAVI
Key_scan1:
btfsc STATUS,Z ; Je kaj pritisnjeno?
return ; NE Nobena tipka ni (več) pritisnjena
; Nekaj je bilo pritisnjeno, zato čaka, da spustim tipko
call Debounce ; čakaj vsaj 15 ms
call NegirajD
movlw b'00111111' , Tipke PortD,0...5
andwf Vhod,w ; še enkrat preberi D --> rezultat v W
movwf Key_temp
goto Key_scan1 ; Je (še) kaj pritisnjeno?
Key_test:
btfsc STATUS,Z
retlw b'00000000' ; Če ni nobene tipke, se vrni z 0
btfss Temp_key,0
retlw b'00000001'
btfss Temp_key,1
retlw b'00000010'
btfss Temp_key,2
retlw b'00000100'
btfss Temp_key,3
retlw b'00001000'
btfss Temp_key,4
retlw b'00010000'
;btfss Temp_key,5
retlw b'00100000' ; nekaj je bilo zagotovo pritisnjeno, torej ostane le Temp_key,5
; Z vrstnim redom je možno nastaviti prioriteto tipk
NegirajD:
movlw b'11111111'
xorwf PORTD,w
movwf Vhod
return
LP,
Igor _________________ Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor |
|
Nazaj na vrh |
|
 |
kavelj22 Član


Pridružen-a: Tor 23 Jan 2007 23:56 Prispevkov: 465 Aktiv.: 2.08 Kraj: Ljubljana
|
Objavljeno: Ned Feb 24, 2008 4:20 pm Naslov sporočila: |
|
|
Igor zelo cenim tvojo pomoc ampak mi vseeno ne da miru kar sem napisal jaz. Sem pac trmast in hocem priti zadevi do dna.
Citiram: |
V Stop_Mode portD shraniš v spremenljivko Vhod, tukaj pa v Temp_key . |
V Stop_mode jaz preverjam tipko samo zato da grem v Mode, in od tu naprej se sucem samo se v Mode preverjanju tipk, se pravi kolikor jaz razumem tukaj ni pomembno sedaj katere spremenljivke uporabim za preverjanje. Ali je to Vhod ali Temp_key, saj sta zadevi popolnoma loceni, in pred preverjanjem zmeraj pobrisem spremenljivke.
Je pa res da ni bilo debounca , ki sem ga sedaj dodal ampak moja varijanta se vedno ne deluje. In enostavno mi ni jasno kaj manjka in zakaj tole nebi delovalo.
Citiram: |
Mode
call Key_scan
movwf Temp_key
btfsc Temp_key,0
goto Mode_menu
goto Mode
Key_scan
call Key_test
movwf Temp_key
btfsc Temp_key,7
return
call Debounce
goto Wait_for_rls
Wait_for_rls
movf Temp_key,w
movwf Key_temp
Wait_key_loop
call Key_test
movwf Temp_key
btfss Temp_key,7
goto Wait_key_loop
call Debounce
movf Key_temp,w
clrf Key_temp
return
Key_test
clrf Temp_key
clrf PORTD
movlw b'10000000'
btfss PORTD,0
movlw b'00000001'
btfss PORTD,1
movlw b'00000010'
btfss PORTD,2
movlw b'00000100'
btfss PORTD,3
movlw b'00001000'
btfss PORTD,4
movlw b'00010000'
btfss PORTD,5
movlw b'00100000'
return |
Hvala,LP _________________ Živleje ni potica, življeje je črn kruh. Bul ga šparaš bul je suh. Zato pa kr na mizo žjim. |
|
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: 496 dni
Powered by phpBB © 2001, 2005 phpBB Group
|