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 

pic12f675
Pojdi na stran 1, 2  Naslednja
 
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
krupivnk
Član
Član



Pridružen-a: Tor 27 Feb 2007 20:45
Prispevkov: 335
Aktiv.: 1.61
Kraj: Lj

PrispevekObjavljeno: Sre Nov 26, 2008 5:51 pm    Naslov sporočila:  pic12f675 Odgovori s citatom

Želim s enaučiti par osnov iz programiranja picev v asm. Pa sem naletel na težavo. In sicer se mi noče sprožiti prekinitev timerja0(saj se gp2 ne postavi na 1).Kje ga lomim?
Prilagam kodo:
Koda:

include P12F675.INC
   __CONFIG   _WDT_OFF & _INTRC_OSC_NOCLKOUT & _MCLRE_OFF

WTMP equ 0x20
STATUS_TMP equ 0x21
STEVEC equ 0x22
   


   org 0x00
   goto GLAVNI

   org 0x04
   goto PREKINITEV


;------------------------------------------------

PREKINITEV
   movwf WTMP   ;shranim W
   swapf STATUS,W   ;uporabimo SWAPF ker ne vpliva na statusne bite
   movwf STATUS_TMP   ;shranem status registe
   btfsc INTCON,T0IF   ;je priçlo do TMR0 prekinitve
   goto TMR_PREK
;tukaj lahko nadaljujemo s kodo ter ugotavljamo kako drugo vrsto prekinitve

END_PREK

   swapf STATUS_TMP,W   ;
   movwf STATUS   ;vrnem status
   swapf WTMP,F   
   swapf WTMP,W   ;vrnem W
   retfie      ;iz prekinitve


TMR_PREK
   
   
   bsf GPIO,GP2
   bcf INTCON,T0IF   ;briçem bit T0 prekinitve
   goto END_PREK


;-------------------------------------------------------------------------   
GLAVNI
   call init

   bcf GPIO,GP0
   bsf GPIO,GP1
zanka
   nop
   goto zanka




;-------------------------------------------------------------------------
init
   
   clrwdt ;Clear WDT and
; postscaler
   bsf STATUS,RP0 ;Bank 1
   movlw b'10000111' ;Select TMR0,
; prescale, and
; clock source
   movwf OPTION_REG ;
   bcf STATUS,RP0 ;Bank 0

   movlw 0x00
   movwf GPIO
   bsf STATUS,RP0; bank1
   movwf TRISIO
   bcf STATUS,RP0;bank0
   movlw b'10100000' ; omogoźili bomo prekinitve ter vkljuźili
   movwf INTCON   ;TMPO prekinitev ki se izvede pri prekinitvi çtevca tmr0   
   return
   


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



Pridružen-a: Sob 28 Apr 2007 12:32
Prispevkov: 4066
Aktiv.: 19.74

PrispevekObjavljeno: Sre Nov 26, 2008 11:22 pm    Naslov sporočila:   Odgovori s citatom

Komparatorje ugasni
_________________
Tule nisem več aktiven.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
krupivnk
Član
Član



Pridružen-a: Tor 27 Feb 2007 20:45
Prispevkov: 335
Aktiv.: 1.61
Kraj: Lj

PrispevekObjavljeno: Tor Dec 02, 2008 7:08 pm    Naslov sporočila:   Odgovori s citatom

še nakaj: kako pa bi čimbolj enostavno izvedel "if else stavek" v asm. recimo da hočem postaviti nek 1/0 pin ko bo vrednost neke spremenljivke med 100 in 150?in obratno
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
gumby
Član
Član



Pridružen-a: Sob 28 Apr 2007 12:32
Prispevkov: 4066
Aktiv.: 19.74

PrispevekObjavljeno: Tor Dec 02, 2008 7:20 pm    Naslov sporočila:   Odgovori s citatom

C prevajalnik naredi tole ("i" je na naslovu 0x21):
Koda:
32:                   if(i<=100 || i>150)
   039    0821     MOVF 0x21, W
   03A    3C64     SUBLW 0x64
   03B    1803     BTFSC 0x3, 0
   03C    2841     GOTO 0x41
   03D    0821     MOVF 0x21, W
   03E    3C96     SUBLW 0x96
   03F    1803     BTFSC 0x3, 0
   040    2843     GOTO 0x43
33:                      i=1;
   041    3001     MOVLW 0x1
   042    00A1     MOVWF 0x21
   043    ...


Kaj krajše verjetno ne bo šlo, vsaj dve primerjavi je treba na vsak način naredit...

_________________
Tule nisem več aktiven.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
krupivnk
Član
Član



Pridružen-a: Tor 27 Feb 2007 20:45
Prispevkov: 335
Aktiv.: 1.61
Kraj: Lj

PrispevekObjavljeno: Tor Dec 02, 2008 7:27 pm    Naslov sporočila:   Odgovori s citatom

kater c prevajalnik pa je to? je zastonj? kaj omejitve kode? če bo šlo v c-ju le zakaj bi se matral z asm Razz
Hvala za pomoč!

EDIT: Sem že našel h tech c
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Sokrat
Član
Član



Pridružen-a: Čet 25 Avg 2005 11:00
Prispevkov: 5584
Aktiv.: 25.15

PrispevekObjavljeno: Sre Dec 03, 2008 12:26 am    Naslov sporočila:   Odgovori s citatom

Poskusi "mikroC" za PICe. Omejitev kode sicer je, ampak ima izbrani MUC pol manj prostora, kolikor znasa omejitev. Prevajalnik podpira vse PICe, na katere sem do zdaj naletel, pri vecjih seveda naletis na omenjeno omejitev (2K programskih besed), a je za vecino programov kar dovolj, pa tudi cena za polno razlicico je vse prej kot pretirana, kar se rado zgodi amerikancem. Mislim, da so drugi prevajalniki precej bolj omejeni, glede bugov pa ne morem nic reci, ker se nisem na nobenega naletel.
_________________
Ka ti bo pa torba ce si kupu kolo ?
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
BorisP
Član
Član



Pridružen-a: Čet 03 Feb 2005 20:52
Prispevkov: 85
Aktiv.: 0.38
Kraj: Celje

PrispevekObjavljeno: Sre Dec 03, 2008 2:21 pm    Naslov sporočila:   Odgovori s citatom

Jaz za PIC12F675 uporabljam CC5X, pa do sedaj še nisem potreboval polne verzije. Naredil pa sem enostavno GSM alarmno napravo na tem PICU.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
krupivnk
Član
Član



Pridružen-a: Tor 27 Feb 2007 20:45
Prispevkov: 335
Aktiv.: 1.61
Kraj: Lj

PrispevekObjavljeno: Čet Jan 08, 2009 1:33 am    Naslov sporočila:   Odgovori s citatom

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



Pridružen-a: Tor 27 Feb 2007 20:45
Prispevkov: 335
Aktiv.: 1.61
Kraj: Lj

PrispevekObjavljeno: Tor Feb 24, 2009 5:41 pm    Naslov sporočila:   Odgovori s citatom

Kako izvesti deljenje z 1.5 ? Namreč iz 8 bitne ad pretvorbe potrebujem število od 0 do 170 (seveda me zanima rešitev za zbirnik)
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
gumby
Član
Član



Pridružen-a: Sob 28 Apr 2007 12:32
Prispevkov: 4066
Aktiv.: 19.74

PrispevekObjavljeno: Tor Feb 24, 2009 7:14 pm    Naslov sporočila:   Odgovori s citatom

Možiš z 2, deliš s 3. Pri množenju (shift levo za 1 bit) pazi na carry.
_________________
Tule nisem več aktiven.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
krupivnk
Član
Član



Pridružen-a: Tor 27 Feb 2007 20:45
Prispevkov: 335
Aktiv.: 1.61
Kraj: Lj

PrispevekObjavljeno: Tor Feb 24, 2009 7:26 pm    Naslov sporočila:   Odgovori s citatom

Vidim da nisem najbolje zastavil vprašanja. Že prej sem premleval razne kombinacije množenja in deljenja da bi se nekako otresel deljenja z 3,5,... Torej da bi blo vse samo pomikanje ter prištevanje. Torej zanima me kako deliti s 3?
Hvala za pomoč!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Sokrat
Član
Član



Pridružen-a: Čet 25 Avg 2005 11:00
Prispevkov: 5584
Aktiv.: 25.15

PrispevekObjavljeno: Tor Feb 24, 2009 8:07 pm    Naslov sporočila:   Odgovori s citatom

Kako delis s 3 ? Mnozis z 1/3.

Kako ponazoris 1/3 ? Tezko (z omejenim stevilom mest), a to je pac tvoj problem, ker si izbral tako vrednost. Priblizek 1/3 bi bil .01010101010101010101[itd.]b, vec mest, kot si privoscis za racun, manjsa bo napaka.

Primere tovrstnih izracunov in teorijo zadaj najdes v mnogih AppNotih.

In ja, vse skupaj je samo pomikanje in pristevanje.

_________________
Ka ti bo pa torba ce si kupu kolo ?
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
trully1
Član
Član



Pridružen-a: Pet 14 Nov 2003 20:20
Prispevkov: 216
Aktiv.: 0.97
Kraj: Železniki

PrispevekObjavljeno: Tor Feb 24, 2009 8:35 pm    Naslov sporočila:   Odgovori s citatom

Evo tukaj je v C ju napisana rutina za deljenje s 3. Prevedi v asembler.
x ... štv, ki jo želimo deliti
rez ... rezultat
Koda:
int div3(int  x){
  while( x>=6 )
  {
    int r = x>>2;
    rez = rez +r;
    x = x - r - r - r;
  }
  if( x>=3 ) rez++;
  return rez;
}


Dela pa samo za pozitivna števila.

LP Matjaž
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo Pošlji E-sporočilo
krupivnk
Član
Član



Pridružen-a: Tor 27 Feb 2007 20:45
Prispevkov: 335
Aktiv.: 1.61
Kraj: Lj

PrispevekObjavljeno: Tor Feb 24, 2009 9:14 pm    Naslov sporočila:   Odgovori s citatom

hvala si mi dal idejo. Čeprav ne razumem zakaj uporabljaš tole funkcijo v C-ju Shocked
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
gumby
Član
Član



Pridružen-a: Sob 28 Apr 2007 12:32
Prispevkov: 4066
Aktiv.: 19.74

PrispevekObjavljeno: Tor Feb 24, 2009 9:48 pm    Naslov sporočila:   Odgovori s citatom

Osnovne matematične funkcije v asm:

Koda:
; math funkcije
;
; W register se povozi

;   cblock 0x20         ; dostop iz vseh bank
;      math_X:2         ; LO-HI
;      math_Y:2         ; LO-HI
;      math_RES:2      ; LO-HI
;      math_IDX:2      ; LO-HI
;      math_YY
;   endc
;


; 8-bit mul
; math_RES=math_X*math_Y
mul8
   clrf math_RES
   movf math_X,w
   btfsc math_Y,0
   addwf math_RES,f
   bcf STATUS,C
   rrf math_Y,f
   bcf STATUS,C
   rlf math_X,f
   movf math_Y,f
   btfss STATUS,Z
   goto $-9
   return

; 16-bit add
; math_X=math_X+math_Y
add16
   movf math_Y,w
   addwf math_X,f
   btfsc STATUS,C
   incf math_X+1,f
   movf math_Y+1,w
   addwf math_X+1,f
   return

; 16-bit add
; math_RES=math_RES+math_X
add16r
   movf math_X,w
   addwf math_RES,f
   btfsc STATUS,C
   incf math_RES+1,f
   movf math_X+1,w
   addwf math_RES+1,f
   return

; 16-bit mul
; math_RES=math_X*math_Y
mul16
   clrf math_RES
   clrf math_RES+1
   btfsc math_Y,0
   call add16r
   bcf STATUS,C
   rrf math_Y+1,f
   rrf math_Y,f
   bcf STATUS,C
   rlf math_X,f
   rlf math_X+1,f
   movf math_Y,f
   btfss STATUS,Z
   goto $-.10 ;mul16_1
   movf math_Y+1,f
   btfss STATUS,Z
   goto $-.13 ;mul16_1
   return

; 8-bit div
; math_RES=math_X/math_Y
; ostanek v math_X
div8
   movf math_Y,f
   btfsc STATUS,Z
   return
   clrf  math_RES
   movlw 1
   movwf math_IDX
   bcf STATUS,C
   rlf math_IDX,f
   bcf STATUS,C
   rlf math_Y,f
   btfss math_Y,7
   goto $-5
   movf math_Y,w
   subwf math_X,f
   btfsc STATUS,C
   goto $+3
   addwf math_X,f
   goto $+3
   movf math_IDX,w
   addwf math_RES,f
   bcf STATUS,C
   rrf math_Y,f
   bcf STATUS,C
   rrf math_IDX,f
   btfss STATUS,C
   goto $-.13
   return

; 16-bit sub
; math_X=math_X-math_Y
sub16
   movf math_Y+1,w
   movwf math_YY
   movf math_Y,w
   subwf math_X,f
   btfss STATUS,C
   incf math_YY,f
   movf math_YY,w
   subwf math_X+1,f
   return

; 16-bit div
; math_RES=math_X/math_Y
; ostanek v math_X
div16
   movf math_Y,f
   btfss STATUS,Z
   goto $+4
   movf math_Y+1,f
   btfsc STATUS,Z
   return
   movlw 1
   movwf math_IDX
   clrf math_IDX+1
   clrf math_RES
   clrf math_RES+1
   bcf STATUS,C
   rlf math_IDX,f
   rlf math_IDX+1,f
   bcf STATUS,C
   rlf math_Y,f
   rlf math_Y+1,f
   btfss math_Y+1,7
   goto $-7
   call sub16
   btfsc STATUS,C
   goto $+3
   call add16
   goto $+7
   movf math_IDX,w
   addwf math_RES,f
   btfsc STATUS,C
   incf math_RES+1,f
   movf math_IDX+1,w
   addwf math_RES+1,f
   bcf STATUS,C
   rrf math_Y+1,f
   rrf math_Y,f
   bcf STATUS,C
   rrf math_IDX+1,f
   rrf math_IDX,f
   btfss STATUS,C
   goto $-.18
   return

_________________
Tule nisem več aktiven.
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
Pojdi na stran 1, 2  Naslednja
Stran 1 od 2

 
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: 48 dni


Powered by phpBB © 2001, 2005 phpBB Group