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

Pridružen-a: Sre 23 Nov 2005 14:35 Prispevkov: 115 Aktiv.: 0.49 Kraj: Maribor
|
Objavljeno: Ned Jul 02, 2006 5:15 pm Naslov sporočila: Množica spremenljivk |
|
|
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 |
|
 |
Slemi Član

Pridružen-a: Pet 29 Okt 2004 13:29 Prispevkov: 386 Aktiv.: 1.63 Kraj: Hrastnik
|
Objavljeno: Ned Jul 02, 2006 5:20 pm Naslov sporočila: |
|
|
Če delaš v Bascom-u potem uporabi recimo: Dim Number As Byte * 16
Lp _________________ slemi.info - en
slemi.si - slo |
|
Nazaj na vrh |
|
 |
KRAPman Član

Pridružen-a: Sre 23 Nov 2005 14:35 Prispevkov: 115 Aktiv.: 0.49 Kraj: Maribor
|
Objavljeno: Ned Jul 02, 2006 5:50 pm Naslov sporočila: |
|
|
Delam v Microchipovem assemblerju
Vseeno hvala za odg. |
|
Nazaj na vrh |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.58
|
Objavljeno: Ned Jul 02, 2006 5:56 pm Naslov sporočila: |
|
|
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 |
|
 |
Silvo Moderator


 
Pridružen-a: Pon 24 Feb 2003 17:09 Prispevkov: 14673 Aktiv.: 61.95 Kraj: Koroška-okolica Dravograda
|
Objavljeno: Ned Jul 02, 2006 6:22 pm Naslov sporočila: |
|
|
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:
_________________ lp
Silvo |
|
Nazaj na vrh |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.58
|
Objavljeno: Ned Jul 02, 2006 6:43 pm Naslov sporočila: |
|
|
Aha, narobe sem prebral zacetno vprasanje - moj prejsnji odgovor je napacen, Silvo pa je predlagal najbrz najboljso resitev. |
|
Nazaj na vrh |
|
 |
KRAPman Član

Pridružen-a: Sre 23 Nov 2005 14:35 Prispevkov: 115 Aktiv.: 0.49 Kraj: Maribor
|
Objavljeno: Ned Jul 02, 2006 8:17 pm Naslov sporočila: |
|
|
Ja hvala Silvo za odgovor. Mislim da bo po tej poti šlo ravno prav.
Lp |
|
Nazaj na vrh |
|
 |
msmiha Član

Pridružen-a: Sob 26 Feb 2005 16:48 Prispevkov: 115 Aktiv.: 0.49 Kraj: Slovenske Konjice
|
Objavljeno: Sre Dec 13, 2006 9:02 pm Naslov sporočila: |
|
|
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š:
? _________________ Edini način da odkrijemo meje mogočega je da, jih prestopimo in se znajdemo v nemogočem! |
|
Nazaj na vrh |
|
 |
Sokrat Član


Pridružen-a: Čet 25 Avg 2005 11:00 Prispevkov: 5584 Aktiv.: 23.58
|
Objavljeno: Sre Dec 13, 2006 10:28 pm Naslov sporočila: |
|
|
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 |
|
 |
GJ Član


Pridružen-a: Čet 02 Nov 2006 15:51 Prispevkov: 946 Aktiv.: 4.17 Kraj: Ljubljana
|
Objavljeno: Sre Dec 13, 2006 10:34 pm Naslov sporočila: |
|
|
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š:
? |
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 |
|
 |
msmiha Član

Pridružen-a: Sob 26 Feb 2005 16:48 Prispevkov: 115 Aktiv.: 0.49 Kraj: Slovenske Konjice
|
Objavljeno: Sre Dec 13, 2006 11:09 pm Naslov sporočila: |
|
|
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 |
|
 |
GJ Član


Pridružen-a: Čet 02 Nov 2006 15:51 Prispevkov: 946 Aktiv.: 4.17 Kraj: Ljubljana
|
Objavljeno: Čet Dec 14, 2006 12:22 am Naslov sporočila: |
|
|
LP GJ |
|
Nazaj na vrh |
|
 |
msmiha Član

Pridružen-a: Sob 26 Feb 2005 16:48 Prispevkov: 115 Aktiv.: 0.49 Kraj: Slovenske Konjice
|
Objavljeno: Čet Dec 14, 2006 12:31 am Naslov sporočila: |
|
|
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 |
|
 |
GJ Član


Pridružen-a: Čet 02 Nov 2006 15:51 Prispevkov: 946 Aktiv.: 4.17 Kraj: Ljubljana
|
Objavljeno: Čet Dec 14, 2006 12:52 am Naslov sporočila: |
|
|
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..
LP GJ |
|
Nazaj na vrh |
|
 |
msmiha Član

Pridružen-a: Sob 26 Feb 2005 16:48 Prispevkov: 115 Aktiv.: 0.49 Kraj: Slovenske Konjice
|
Objavljeno: Čet Dec 14, 2006 4:26 pm Naslov sporočila: |
|
|
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 |
|
 |
|
|
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
|