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 

Prekinitev RB0

 
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Osnove programiranja PIC-a v Assembler-ju
Poglej prejšnjo temo :: Poglej naslednjo temo  
Avtor Sporočilo
toncibalonci
Član
Član



Pridružen-a: Pet 03 Avg 2007 21:12
Prispevkov: 331
Aktiv.: 1.52
Kraj: Dravograd

PrispevekObjavljeno: Sre Dec 12, 2007 12:54 pm    Naslov sporočila:  Prekinitev RB0 Odgovori s citatom

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



Pridružen-a: Pon 07 Mar 2005 18:49
Prispevkov: 1479
Aktiv.: 6.24
Kraj: Ljubljana

PrispevekObjavljeno: Sre Dec 12, 2007 1:53 pm    Naslov sporočila:   Odgovori s citatom

Think v datoteko kjer imaš kodo?

Daj ti tole razumljivo napiši. Če pa iščeš debounce ... :google:
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
toncibalonci
Član
Član



Pridružen-a: Pet 03 Avg 2007 21:12
Prispevkov: 331
Aktiv.: 1.52
Kraj: Dravograd

PrispevekObjavljeno: Sre Dec 12, 2007 1:53 pm    Naslov sporočila: icon_cool  Odgovori s citatom

Sem že rešil! Včasih ne vidiš vsega kar imaš pred nosom!!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
toncibalonci
Član
Član



Pridružen-a: Pet 03 Avg 2007 21:12
Prispevkov: 331
Aktiv.: 1.52
Kraj: Dravograd

PrispevekObjavljeno: Sre Dec 12, 2007 2:03 pm    Naslov sporočila:   Odgovori s citatom

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



Pridružen-a: Pon 07 Mar 2005 18:49
Prispevkov: 1479
Aktiv.: 6.24
Kraj: Ljubljana

PrispevekObjavljeno: Sre Dec 12, 2007 2:36 pm    Naslov sporočila:   Odgovori s citatom

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



Pridružen-a: Pet 03 Avg 2007 21:12
Prispevkov: 331
Aktiv.: 1.52
Kraj: Dravograd

PrispevekObjavljeno: Sre Dec 12, 2007 3:02 pm    Naslov sporočila:   Odgovori s citatom

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]


prekinitevRB0.txt
 Opis:

Download
 Ime datoteke:  prekinitevRB0.txt
 Velikost datoteke:  2.17 KB
 Downloadano:  12 krat

Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
igo
Član
Član



Pridružen-a: Sre 11 Okt 2006 19:11
Prispevkov: 3641
Aktiv.: 16.01

PrispevekObjavljeno: Sre Dec 12, 2007 11:24 pm    Naslov sporočila:   Odgovori s citatom

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
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
Pokaži sporočila:   
Objavi novo temo   Odgovori na to temo   Printer-friendly version    www.elektronik.si Seznam forumov -> Osnove programiranja PIC-a v Assembler-ju Č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