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 

Starost+Znanje +Mikrokontroler ???
Pojdi na stran Prejšnja  1, 2, 3, 4, 5, 6, 7, 8, 9
 
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
kavelj22
Član
Član



Pridružen-a: Tor 23 Jan 2007 23:56
Prispevkov: 465
Aktiv.: 2.08
Kraj: Ljubljana

PrispevekObjavljeno: Tor Apr 01, 2008 7:42 pm    Naslov sporočila:   Odgovori s citatom

Ok, predam se...ocitno mi tole se vedno ni jasno!
Tabele sem sedaj dal od naslova 0x005 naprej, in ne presezejo vrednosti 256, tako da ne rabim PCLATH!
Problem je sedaj v tem da mi pri taksni kodi:
Koda:
movlw Tabela


vrne pravo vrednost tabele (npr; prva tabela se tako nahaja na naslovu 0x006), vendar mi potem instrukcija addwf PCL,f zraven pristeje vrednost 5, se pravi naslov zacetka tabel, in to potem ni vec prava vrednost!
Zato sem se spet lotil po svoje (oz. nekako tako kot je predlagal IGO) in v Program Memory poiskal naslove tabel jim odstel vrednost 0x005, tako da ko jim potem pristeje to vrednost dobim pravo lokacijo tabele.
Koda:
       movlw   0xd
   movwf   Tabela1
   call   LCD_disp

Tako je potem npr: ce je Tabela1 na lokaciji 0x13 sem vpisal lokacijo 0xd + tistih 0x005 je potem 0x13!

Nevem, [slovenščina je zame španska vas] se sam ne razumem ampak se mi zdi da bol ko naredim stvar nemogoce zakomplicirano vsaj dela Very Happy
Mogoce se pa ne da drugace oz. se da z taksnim ali drugacnim preracunavanjem naslovov!

lp

_________________
Živleje ni potica, življeje je črn kruh. Bul ga šparaš bul je suh. Zato pa kr na mizo žjim.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
Sokrat
Član
Član



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

PrispevekObjavljeno: Tor Apr 01, 2008 8:21 pm    Naslov sporočila:   Odgovori s citatom

Namesto da si tako zakompliciral s preracunavanjem, pusti arcunalniku, da to delo opravi namesto tebe (v tem je boljsi - hitrejsi). Primer iz enega mojega programcka:

Koda:
strings   addwf   pcl,f
abc      dt      "abcdefghijklmnopqrstuvwxyz"
      dt      "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
      dt      "0123456789-=_+[]{};':./>?`"
      dt      "~!@#$%^&*()   ",0
test   dt      "test",CR,LF,0


Da preberes znak iz niza test kot naslov podas (test - strings) in prepustis matematiko preprocesorju. Pri tem upostevaj se eno lokacijo zamika (to imas najbrz reseno ze v kodi).

(za cuden zamik na forumu so krivi tabulatorji v originalni kodi, kjer je vse videti normalno)

_________________
Ka ti bo pa torba ce si kupu kolo ?
Nazaj na vrh
Skrit 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: Tor Apr 01, 2008 11:29 pm    Naslov sporočila:   Odgovori s citatom

kavelj22 je napisal/a:
Zato sem se spet lotil po svoje (oz. nekako tako kot je predlagal IGO) in v Program Memory poiskal naslove tabel jim odstel vrednost 0x005, tako da ko jim potem pristeje to vrednost dobim pravo lokacijo tabele.
Verjetno si nameraval poudariti tisto, kar sem jaz poudaril, kajne Wink ?
Koda:

movf Odmik,w ; V W naložiš vrednost spremenljivke Odmik
call Tabela ; Kličeš podprogram Tabela (v PCL se zapiše naslov 0x005)


org 0x005 ; ukaz prevajalniku (posledično programatorju), da se naslednji ukaz nahaja na naslovu 0x005
   ; Prvi ukaz v podprogramu Tabela se torej nahaja na naslovu 0x005.
Tabela addlw PCL,f ; Vrednost Odmika (ki je v W-ju) prišteješ trenutni vrednosti PCL-ja (NoviPCL=StariPCL+Odmik) . addlw PCL,f se torej nahaja na 0x005
dt "Besedilo za LCD" ; Če je Odmik=6, se bo izpisala črka"i"
;   123456789abcdef ; Možne vrednosti spremenljivke Odmik
; V praksi je največja možna vrednost spremenljivke Odmik enaka 254 , saj potem presežeš 256-mesten (8-biten) prostor, ki ga dosežeš s pomočjo Odmik+PCL  (no, za večje tabele se uporablja 16-biten par OdmikZG in OdmikSP)
Pa še v bolj pregledni "naslovni" obliki:
org 0x005
Tabela
addlw PCL,f ; Tale ukaz se nahaja na lokaciji 0x005
retlw "B" ; Tale ukaz (return with litteral (konstanta) in W) se nahaja na naslovu 0x006
retlw "e" ; Tale ukaz (vrni se s konstanto v W-ju) se nahaja na naslovu 0x007
retlw "s" ; Tale ukaz se nahaja na naslovu 0x008
retlw "e" ; -||- 0x009 . Dosežeš ga tako da je Odmik=4 ==> PCL+Odmik=5+4=9
retlw "d" ; Če PCL-ju prišteješ Odmik=5, prideš na naslov 5+5=10 , zato se vrneš s konstanto v W-ju , ki bo po ASCII pretvorbi postala d
retlw "i" ; Verjetno si že odkril, v čem je ves trik Wink
retlw "l" ; Vse računanje se zgodi samodejno, ti moraš samo nastaviti spremenljivko Odmik, pa se izpiše želeni znak v zaporedju
retlw "o" ; bolj podrobno ne znam pojasniti.

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
igo
Član
Član



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

PrispevekObjavljeno: Sre Apr 02, 2008 5:46 pm    Naslov sporočila:  Re: Tabele Odgovori s citatom

Sem ugotovil, kaj "čaraš" z izračunavanjem. Pozorno si oglej komentarje v LCD_disp.
Popravljena koda + par komentarjev + par malenkosti :
Koda:
Tabela_setup
   addwf   PCL,f
Tabela
   retlw   'N'
   retlw   'a'
   retlw   'p'
   retlw   'e'
   retlw   't'
   retlw   'o'
   retlw   's'
   retlw   't'
   retlw   ' '
   retlw   'j'
   retlw   'e'
   retlw   '!'
   retlw   80      
Tabela1   
   retlw   'N'
   retlw   'a'
   retlw   'p'
   retlw   'e'
   retlw   't'
   retlw   'o'
   retlw   's'
   retlw   't'
   retlw   'i'
   retlw   ' '
   retlw   'n'
   retlw   'i'
   retlw   '!'
   retlw   80
;******************************************
;zanka za izpis tabele   
;*******************************************

LCD_disp   ; Sem smo prišli z naslovom Tabela ali Tabela1 v W
   movwf   Naslov ; Shranim W v Naslov
   movlw   Tabela ; Konstanto Tabela shranim v W
   subwf   Naslov ,f; Od Naslov-a (Tabela ali Tabela1) moramo odšteti W (naslov Tabela)
   ; Če je bilo v Naslov-u Tabela, bo po novem v Naslov-u 0 (Tabela-Tabela=0 )
   ; Če je bilo v Naslov-u Tabela1, bo po novem v Naslov-u 13 (Tabela1-Tabela=13 )
Sedaj lahko dosežemo pravo črko na Naslov-u , ki ga prištejemo PCL-ju . To je to.

   bsf      RS
Delaj1
   movf   Naslov,w
   call   Tabela_setup
   movwf   Test
   btfsc   Test,7
   return
   call   LCD_izpis
   incf   Naslov,f
   
   goto   Delaj1
   bcf      RS
   return
;************************************
;pošljemo znak na LCD
;*************************************
LCD_izpis
   movwf   Temp1
   movlw   b'00001111'
   andwf   PORTB,f
   movf   Temp1,w
   andlw   b'11110000'
   iorwf   PORTB,f
   call   Sporoci
   swapf   Temp1,f
   movlw   b'11110000'
   andwf   Temp1,f
   movlw   b'00001111'
   andwf   PORTB,f
   movf   Temp1,w
   iorwf   PORTB,f
   call   Sporoci
   return
   
Glavni
   bsf      STATUS,RP0
   clrf   TRISA
   movlw   b'00000010'
   movwf   TRISB
   movlw   b'10000001'
   movwf   OPTION_REG
   bcf      STATUS,RP0
   movlw   b'00000000'
   movwf   PORTA
   movlw   b'00000000'
   movwf   PORTB

   call   Pavza1s ; SEM daj 1 sekundo pavze za pravilno inicializacijo LCDja, da se vzpostavi napajanje
   call   LCD_Init
   bsf      PORTB,3
   
   movlw   Tabela         ;izpisemo tabelo
   call   LCD_disp
   
   
Zanka
   call   Pavza1s ; SEM daj 1 sekundo pavze, da ne bo prehitro preverjalo stanja

   btfsc   PORTB,1   ;preverjamo prisotnost nap. na pinu 1 portb
   goto   pJeNap ; Izpiše, da JE napetost
   goto   pNiNap ; Da veš, kam gre, čeprav se pNiNap nahaja v naslednji vrstici

pNiNap
   movlw   b'00000001'     ;pobrisemo zaslon
   call   LCD_izpis
   movlw   .20
   call   Pavza
   movlw   Tabela   ;izpisemo tabelo : Napetosti ni!
   call   LCD_disp
   goto   Zanka

pJeNap
   movlw   b'00000001' ;pobrisemo zaslon, kurzor skoči na 0. Če ne bi brisal, bi moral tule klicati call KurzorNa .
   call   LCD_izpis
   movlw   .20
   call   Pavza
   movlw   Tabela1   ;izpisemo Tabelo1 : Napetost je!
   call   LCD_disp
   goto   Zanka


konec   ; tega ni treba
   goto   konec
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
kavelj22
Član
Član



Pridružen-a: Tor 23 Jan 2007 23:56
Prispevkov: 465
Aktiv.: 2.08
Kraj: Ljubljana

PrispevekObjavljeno: Sre Apr 02, 2008 6:47 pm    Naslov sporočila:   Odgovori s citatom

Ja, IGO rekel bi takoj da sem te kopiral ce bi bil preprican da nisem rekel bedarije Smile. Pa nisem bil Wink

Naredil sem ravno obratno kot ti. Ti si vpisoval odmik in klical tabelo. Jaz pa sem v tabelo podal naslov + 0x005!

Ampak nekaj moras podati ker ce napisemo samo to;
Koda:
movlw   Tabela   
   call   LCD_disp


dobimo v W naslov tabele od 0x000 in ne od 0x005 in ce je potem addwf PCL,f, to ni vec pravi naslov!

Hvala se za ostalih par malenkosti, delajo pa tabele sedaj tako kot morajo!

lp

_________________
Živleje ni potica, življeje je črn kruh. Bul ga šparaš bul je suh. Zato pa kr na mizo žjim.
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo MSN Messenger - naslov
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 Prejšnja  1, 2, 3, 4, 5, 6, 7, 8, 9
Stran 9 od 9

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


Powered by phpBB © 2001, 2005 phpBB Group