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 

Množica spremenljivk
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
KRAPman
Član
Član



Pridružen-a: Sre 23 Nov 2005 14:35
Prispevkov: 115
Aktiv.: 0.49
Kraj: Maribor

PrispevekObjavljeno: Ned Jul 02, 2006 5:15 pm    Naslov sporočila:  Množica spremenljivk Odgovori s citatom

Pozdravljeni!

Imam sledeč problem : na PIC poslušam preko 1-wire vodila priklopiti večje število slave-ov, od vsake naprave pa bi želel v programu imeti tisto unikatno 64bitno kodo. Torej če je naprav recimo 15 to pomeni, da bi potreboval 15x8 variabel. v programu to zgleda grozno grdo ( cblock 1_WIRE11,1_WIRE12, ....1_WIRE158 endc ), pa me zanima če je možno narediti kakšno polje spremenljivk, podobno kot v Cju recimo : int array[15].

Hvala za odgovore
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
Slemi
Član
Član



Pridružen-a: Pet 29 Okt 2004 13:29
Prispevkov: 386
Aktiv.: 1.63
Kraj: Hrastnik

PrispevekObjavljeno: Ned Jul 02, 2006 5:20 pm    Naslov sporočila:   Odgovori s citatom

Če delaš v Bascom-u potem uporabi recimo: Dim Number As Byte * 16
Lp

_________________
slemi.info - en
slemi.si - slo
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo AIM - AOL Instant - naslov MSN Messenger - naslov
KRAPman
Član
Član



Pridružen-a: Sre 23 Nov 2005 14:35
Prispevkov: 115
Aktiv.: 0.49
Kraj: Maribor

PrispevekObjavljeno: Ned Jul 02, 2006 5:50 pm    Naslov sporočila:   Odgovori s citatom

Delam v Microchipovem assemblerju Sad

Vseeno hvala za odg.
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.: 23.58

PrispevekObjavljeno: Ned Jul 02, 2006 5:56 pm    Naslov sporočila:   Odgovori s citatom

Mislim, da so take tabele edini nacin - naredi si procedure, ki bodo za vsak "array" vrnile vrednost indeksiranega elementa (povecas PCL in retlw) ... ce naredis se makro, ki bo recimo array[index] spremenil v locena movlw index in call array, bo to skoraj povsem enako ...

Nobena arhitektura (razen VAX) ne pride niti blizu visjenivojskim konstruktom, ker se to ne izplaca. Tudi za PICe obstajajo prevajalniki za C, ce bi na vsak nacin rad programiral v C-ju.
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
Silvo
Moderator
Moderator



Pridružen-a: Pon 24 Feb 2003 17:09
Prispevkov: 14673
Aktiv.: 61.95
Kraj: Koroška-okolica Dravograda

PrispevekObjavljeno: Ned Jul 02, 2006 6:22 pm    Naslov sporočila:   Odgovori s citatom

Jaz naredim nekako takole:

Koda:
CBLOCK 0x20
  1_WIRE:15, TMP
ENDC


Kar pomeni, da za "1_WIRE" stoji rezerviranih 15 lokacij TMP je na 0x20+15

Lokacije v tem primeru ni problem naslavljati indirektno preko FSR.
Če bi želel recimo vpisati v 5 register za 1_WIRE, bi napisal:

Koda:
movwf 1_WIRE+5

_________________
lp
Silvo
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.: 23.58

PrispevekObjavljeno: Ned Jul 02, 2006 6:43 pm    Naslov sporočila:   Odgovori s citatom

Aha, narobe sem prebral zacetno vprasanje - moj prejsnji odgovor je napacen, Silvo pa je predlagal najbrz najboljso resitev.
Nazaj na vrh
Skrit Poglej uporabnikov profil Pošlji zasebno sporočilo
KRAPman
Član
Član



Pridružen-a: Sre 23 Nov 2005 14:35
Prispevkov: 115
Aktiv.: 0.49
Kraj: Maribor

PrispevekObjavljeno: Ned Jul 02, 2006 8:17 pm    Naslov sporočila:   Odgovori s citatom

Ja hvala Silvo za odgovor. Mislim da bo po tej poti šlo ravno prav.


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



Pridružen-a: Sob 26 Feb 2005 16:48
Prispevkov: 115
Aktiv.: 0.49
Kraj: Slovenske Konjice

PrispevekObjavljeno: Sre Dec 13, 2006 9:02 pm    Naslov sporočila:   Odgovori s citatom

Kaj pa narediš ko je tistih +5 spremenljivka?
Primer: imaš neki števec (spremenljivko), ki ti pove na katero lokacijo v ram bi rad vpisal spremenljivko?
Ali lahko napišeš:
Koda:
movwf RAM+STEVEC
?
_________________
Edini način da odkrijemo meje mogočega je da, jih prestopimo in se znajdemo v nemogočem!
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.: 23.58

PrispevekObjavljeno: Sre Dec 13, 2006 10:28 pm    Naslov sporočila:   Odgovori s citatom

Odvisno kateri PIC uporabljas:

- manjsi imajo samo FSR za indirektno naslavljanje. V tem primeru pac pristejes stevec zacetnemu naslovu, rezultat sparvis v FSR in dostopas do indirektne lokacije preko relevantnega registra.

- vecji imajo poleg FSRja tudi nekaj dodatnih registrov za modifikacijo indirektnega naslova, tako da v FSR vpises samo zacetni naslov, v W imas tvoj stevec in za naslavljanje namesto INDFx uporabljas PLUSWx register.

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



Pridružen-a: Čet 02 Nov 2006 15:51
Prispevkov: 946
Aktiv.: 4.17
Kraj: Ljubljana

PrispevekObjavljeno: Sre Dec 13, 2006 10:34 pm    Naslov sporočila:   Odgovori s citatom

msmiha je napisal/a:
Kaj pa narediš ko je tistih +5 spremenljivka?
Primer: imaš neki števec (spremenljivko), ki ti pove na katero lokacijo v ram bi rad vpisal spremenljivko?
Ali lahko napišeš:
Koda:
movwf RAM+STEVEC
?


Takole iz glave..
Array[0..4],[0..4] in njeno naslavljanje.
Najprej deklariraš polje kot je rekel Silvo..
Recimo da je polju ime Ar5m5.

POZOR !!! Da je programska koda čim bolj enostavna paziš, da je polje znotraj ene 256 byte-ov dolge banke.

Potem pa izračunaš pointer takole..
Primer velja za družino F18

Koda:

;W register naslavlja eno izmed 5 byte-nih variabel v polju Ar5m5
        lfsr    0, Ar5m5                 ;naložimo 24 bit kazalec v FSR0 register
        addwf   FSR0L, f                ;Naslov = @Ar5m5 + w * 5 = FSR0 + WREG + 2*WREG + 2*WREG
        addwf   WREG, w                           
        addwf   FSR0L, f
        addwf   FSR0L, f
;Izračunali smo kazalec sedaj le še naložimo vrednost v Temp register
        movff   POSTINC0, Temp
        movff   POSTINC0, Temp + 1
        movff   POSTINC0, Temp + 2
        movff   POSTINC0, Temp + 3
        movff   POSTINC0, Temp + 4


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



Pridružen-a: Sob 26 Feb 2005 16:48
Prispevkov: 115
Aktiv.: 0.49
Kraj: Slovenske Konjice

PrispevekObjavljeno: Sre Dec 13, 2006 11:09 pm    Naslov sporočila:   Odgovori s citatom

Sokrat, bi lahko bil tako dober in zadevo za manjše PICe prikazal na preprostem primeru.
Ali pa vsaj poveš kako bi lahko nadaljeval progam
Recimo da uporabljam PIC serije 12F683, kateremu se ram začne na naslovu 0x20
Koda:

cblock 0x20
STEVEC,RAM:20 ;ram polje zaseda 20 mest naprej od lokacije 21
endc

movlw 0x21
movwf FSR  ;kazalec postavimo na začetek rama
movf STEVEC,w
addwf FSR,f ;File Select Register povečamo za vrednost števca
.            ;kaj naj napišem tukaj
.            ;da bom na lokacijo katero kaže FSR register vpisala
.            ;neko vrednost

_________________
Edini način da odkrijemo meje mogočega je da, jih prestopimo in se znajdemo v nemogočem!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
GJ
Član
Član



Pridružen-a: Čet 02 Nov 2006 15:51
Prispevkov: 946
Aktiv.: 4.17
Kraj: Ljubljana

PrispevekObjavljeno: Čet Dec 14, 2006 12:22 am    Naslov sporočila:   Odgovori s citatom

Koda:

      movwf      INDF


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



Pridružen-a: Sob 26 Feb 2005 16:48
Prispevkov: 115
Aktiv.: 0.49
Kraj: Slovenske Konjice

PrispevekObjavljeno: Čet Dec 14, 2006 12:31 am    Naslov sporočila:   Odgovori s citatom

Ampak v datasheetu v poglavju 2.4 Indirect Addressing, INDF and
FSR Registers piše:
Citiram:

Reading INDF itself indirectly will
produce 00h. Writing to the INDF register indirectly
results in a no operation (although Status bits may be
affected).

Kaj ne pomeni to da če bom hotel pisati v register INDF, se bo to smatralo kot NOP?

_________________
Edini način da odkrijemo meje mogočega je da, jih prestopimo in se znajdemo v nemogočem!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno sporočilo
GJ
Član
Član



Pridružen-a: Čet 02 Nov 2006 15:51
Prispevkov: 946
Aktiv.: 4.17
Kraj: Ljubljana

PrispevekObjavljeno: Čet Dec 14, 2006 12:52 am    Naslov sporočila:   Odgovori s citatom

msmiha je napisal/a:
Ampak v datasheetu v poglavju 2.4 Indirect Addressing, INDF and
FSR Registers piše:
Citiram:

Reading INDF itself indirectly will
produce 00h. Writing to the INDF register indirectly
results in a no operation (although Status bits may be
affected).

Kaj ne pomeni to da če bom hotel pisati v register INDF, se bo to smatralo kot NOP?


Ne..
To se zgodi, če naložiš v FSR vrednost 0 torej naslov registra INDF !!!

Sicer pa imaš v MPLAB-u simulator pa probaj.. Cool

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



Pridružen-a: Sob 26 Feb 2005 16:48
Prispevkov: 115
Aktiv.: 0.49
Kraj: Slovenske Konjice

PrispevekObjavljeno: Čet Dec 14, 2006 4:26 pm    Naslov sporočila:   Odgovori s citatom

Hvala za odgovore, sem potegnil iz neta PIC Simulator, z katerim se da lepo videt kaj se dogaja z vsemi registri, ramom,...
_________________
Edini način da odkrijemo meje mogočega je da, jih prestopimo in se znajdemo v nemogočem!
Nazaj na vrh
Odsoten Poglej uporabnikov profil Pošlji zasebno 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: 491 dni


Powered by phpBB © 2001, 2005 phpBB Group