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

Pridružen-a: Pet 03 Avg 2007 21:12 Prispevkov: 331 Aktiv.: 1.52 Kraj: Dravograd
|
Objavljeno: Sre Dec 12, 2007 12:54 pm Naslov sporočila: Prekinitev RB0 |
|
|
Ali mi lahko kdo pove kam naj dam podprogram za branje mehanske tipke pri RB0 prekinitvi,ker brez tega dela malo posvoje?? Če se da komu bi prosil za kak primer???[/list]
|
|
Nazaj na vrh |
|
 |
bungee Član


Pridružen-a: Pon 07 Mar 2005 18:49 Prispevkov: 1479 Aktiv.: 6.24 Kraj: Ljubljana
|
Objavljeno: Sre Dec 12, 2007 1:53 pm Naslov sporočila: |
|
|
v datoteko kjer imaš kodo?
Daj ti tole razumljivo napiši. Če pa iščeš debounce ...
|
|
Nazaj na vrh |
|
 |
toncibalonci Član

Pridružen-a: Pet 03 Avg 2007 21:12 Prispevkov: 331 Aktiv.: 1.52 Kraj: Dravograd
|
Objavljeno: Sre Dec 12, 2007 1:53 pm Naslov sporočila: |
|
|
Sem že rešil! Včasih ne vidiš vsega kar imaš pred nosom!!
|
|
Nazaj na vrh |
|
 |
toncibalonci Član

Pridružen-a: Pet 03 Avg 2007 21:12 Prispevkov: 331 Aktiv.: 1.52 Kraj: Dravograd
|
Objavljeno: Sre Dec 12, 2007 2:03 pm Naslov sporočila: |
|
|
Ja v mislih sem imel debounce! Nisem vede kam naj postavim "call" da mi bo pravilno bral tipko,zadj sem rešil! Šele začel sem z prekinitvami tak da imam malo težav!
Recimo da imam program za LED-ice ki gredo levo-desno! Kak naredim da po prvem pritisku na tipko gredo levo,pri drugem pa desno???
|
|
Nazaj na vrh |
|
 |
bungee Član


Pridružen-a: Pon 07 Mar 2005 18:49 Prispevkov: 1479 Aktiv.: 6.24 Kraj: Ljubljana
|
Objavljeno: Sre Dec 12, 2007 2:36 pm Naslov sporočila: |
|
|
Misliš tole?
Koda: |
cakaj1:
BTFSS tipka1
GOTO cakaj1
;
; koda za premikanje LED levo
;
cakaj2: BTFSS tipka1
GOTO cakaj2
;
; koda za premikanje LED desno
;
GOTO cakaj1 |
Če pa želiš, da se premikajo stalno pa narediš drugačno preverjanje tipke in katero smer bo zanka peljala potem določaš glede na neko spremenljivko.
|
|
Nazaj na vrh |
|
 |
toncibalonci Član

Pridružen-a: Pet 03 Avg 2007 21:12 Prispevkov: 331 Aktiv.: 1.52 Kraj: Dravograd
|
Objavljeno: Sre Dec 12, 2007 3:02 pm Naslov sporočila: |
|
|
Tale koda vklaplja in izklaplja LED-ico. Kak naj v prekinitvi naredim da bo po prvem pritisku skocil na program za levo po drugem pa v desno? Tisto za levo desno manjka!! Zanima me samo kak naj kaj naredim in kam naj kaj napišem! Upam da veš kaj mislim???[/quote]
Opis: |
|
 Download |
Ime datoteke: |
prekinitevRB0.txt |
Velikost datoteke: |
2.17 KB |
Downloadano: |
12 krat |
|
|
Nazaj na vrh |
|
 |
igo Član

Pridružen-a: Sre 11 Okt 2006 19:11 Prispevkov: 3641 Aktiv.: 16.01
|
Objavljeno: Sre Dec 12, 2007 11:24 pm Naslov sporočila: |
|
|
Zelo neposrečeno Prek-initev imaš. Beri je pa še hujši.
Predlagam prehod na časovne prekinitve s Timerjem0
Koda: |
Zastavice equ 0x30
Izhodi equ 0x31
VoziL equ 0x32
VoziL1 equ 0x33
OdkleniT equ 0x34
#define Smer Zastavice,0
Prek
movwf Work ;shranimo register W
swapf STATUS,w
movwf Stat ;shranimo register STATUS
bcf STATUS,RP0
bcf STATUS,RP1
;banka 0
; Zacetek in konec prekinitve vedno ostaneta nespremenjena.
; Sem vstavim svojo prekinitveno kodo:
decfsz OdkleniT,w ; OdkleniTipke caka na .1
decf OdkleniT,f ; Prepreci prepogosto branje tipk
; Vsaka prekinitev odšteje cas do ponovnega branja tipk
decfsz VoziL,f ; VoziLedice lepo kroži.
goto Prek1
decfsz VoziL1,w ; caka na .1
decf VoziL1,f ; Če je treba daljšo pavzo, dam dva števca
; .... še kakšna malenkost
; Konec moje prekinitvene kode.
Prek1
bcf INTCON,T0IF ;izklopimo zastavico Timer0 prekintev - omogocim prekinitev s Timer0
swapf Stat,w
movwf STATUS ;obnovimo vrednost STATUS
swapf Work,f
swapf Work,w ;obnovimo vrednost W
retfie ;izhod iz prekinitve
; 000000000000000000000000000000000
Glavni ; V svoj Glavni dodaj tole:
;...
clrf INTCON ; Onemogocimo vse prekinitve, T0IF je 0
movlw b'00000001'
movwf OPTION_REG ; Pollupi B vklopljeni , Timer povecuje notranja ura, preddelilnik ; 1:4
clrf TMR0
bsf INTCON, T0IE ; Timer0 Prekinitev Omogocena
bsf INTCON, GIE ; Omogocene Prekinitve
clrf OdkleniT ; Pocakam s prvim branjem tipk za .255 prekinitev
movlw b'00000001'
movwf Izhodi ;Zacetno stanje Izhodov
;...
; 11111111111111111111111111111111111
GlavniP ; Glavni Program
decfsz OdkleniT,w ; Preveri, ce je OdkleniTipke ze na .1
goto $+1 ; NI, Skoci naprej preverjat ostale pogoje
call pBeri ; JE, Tipke so odklenjene
decfsz VoziL1,w ; Preveri, ce je VoziLedice na .1
goto $+1 ; NI, Skoci naprej preverjat ostale pogoje
call pVoziL ; JE, skoči premakniti stanje ledic
goto GlavniP ; Zanka GlavniProgram
; 22222222222222222222222222222222
pBeri
btfsc PORTB,0 ;ali je tipka pritisnjena
goto pBeri1 ;ne,pojdi ven (konec)
call Delay ;da,pocakaj (debounce)
btfsc PORTB,0 ;ali je tipka se vedno pritisnjena?
goto pBeri1 ; NE , bila je le motnja
; ; DA , tipka je pritisnjena
; movlw b'00001000'
; xorwf PORTB,f ;preklopimo led na RB3
movlw b'00000001'
xorwf Zastavice ; Spremenim vrednost Zastavice,0 za Smer
pBeri1 ; pripravim naslednje branje tipk
movlw .180
movwf OdkleniT ; Vpisem, da zelim naslednjic preveriti tipke po .180 prekinitvah
;clrf OdkleniT ; Preverim jih po 256 prekinitvah
;S tem zaklenem Tipke, da jih ne preverjam prepogosto. Naslednjic jih preverim po .180 prekinitvah
return ; Do naslednjic
;Izpuscene tipke mi ni treba preverjati. Ce bo po preteklem casu OdkleniT in Delay tipka pritisnjena, bo pac PORTB,3 spremenil stanje
; 33333333333333333333333333
pDelay ...
; 444444444444444444444444444
pVoziL
bcf STATUS,C ; Carry bit je treba izbrisati pred rlf in rrf
btfss Smer ; V Katero smer naj se vozi ?
goto pVoziLE
;goto pVoziDE
pVoziDE ; DEsno
rrf Izhodi,f
btfsc STATUS,C ; Na desnem robu začne spet z leve strani
bsf Izhodi,7
movf Izhodi,w
movwf PORTB
goto pVoziVen
pVoziLE ; LEvo
rlf Izhodi,f
btfsc STATUS,C ; Na levem robu začne spet z desne strani
bsf Izhodi,0
movf Izhodi,w
movwf PORTB
goto pVoziVen
pVoziVen
movlw .30
movwf VoziL1
; Vpisem, da zelim naslednjic preveriti tipke po VoziL*VoziL1 prekinitvah (VoziL=255)
return
|
Prekinitve s Timer0 ti bodo prišle prav, ko boš vozil LEDice levo in desno. Ko poteče neko število prekinitev, spremeniš stanje izhodov.
V svoji kodi znotraj časovne (Timer0) prekinitve dodaš SAMO osnovne preklope ali stevce, NIKOLI pa raznih pavz in čakanj.
Črka "p" v pIme , je oznaka, da je Ime podprogram. Pri velikem številu spremenljivk in podprogramov je namreč treba ločiti imena po pomenu.
LP,
Igor
_________________ Teoretično je praksa posledica teorije, praktično je pa ravno obratno. (igo 2001)
LP, Igor |
|
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
|