stor variabel

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
squiz3r
Inlägg: 5424
Blev medlem: 5 september 2006, 20:06:22
Ort: Lund
Kontakt:

stor variabel

Inlägg av squiz3r »

Hej jag vet att svaret på denna frågan finns någonstans på internett, men jag vet inte riktigt vad jag ska söka på...

på mina variabler skriver jag Tex. "variabel1 equ 20h" men när jag sedan ska lägga in ett värde i den kan jag inte lägga in 100h för det säger den är förstort. Hur ska jag skriva för att variablen ska ta 2 minnes platser så att jag kan lägga i ett större värde?


Tack på förhand!
//Daniel A
v-g
EF Sponsor
Inlägg: 7875
Blev medlem: 25 november 2005, 23:47:53
Ort: Kramforce

Inlägg av v-g »

Det största värde du kan ha på två byte är FFh(8-bitar) vill du ha större värde än så får du ha fler celler eller lösa det i koden på annat sätt.
Användarvisningsbild
vfr
EF Sponsor
Inlägg: 3515
Blev medlem: 31 mars 2005, 17:55:45
Ort: Kungsbacka

Inlägg av vfr »

Du reserverar utrymmet med

Kod: Markera allt

   ds.b  2
för en variabel på 16 bitar (2 byte). Men hanteringen måste du sköta manuellt som två 8-bitars delar eftersom PIC16 inte hanterar mer än 8-bitars aritmetik.
Användarvisningsbild
$tiff
Inlägg: 4941
Blev medlem: 31 maj 2003, 19:47:52
Ort: Göteborg
Kontakt:

Inlägg av $tiff »

Var det bara jag som missade var i denna tråd det tydligt deklarerades vilken plattform, programmeringsspråk och kompilator som används? :humf:
Användarvisningsbild
Icecap
Inlägg: 26660
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Efter vad jag vet finns det bara 'equ' i assembler...
Användarvisningsbild
squiz3r
Inlägg: 5424
Blev medlem: 5 september 2006, 20:06:22
Ort: Lund
Kontakt:

Inlägg av squiz3r »

Oj :oops: jag glömde. En PIC12F629, fats jag behöver det till en 16F628A också. det är ASM.

Tack så mycket!

//Daniel A
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Bara för att komplettera lite...

Om du vill ha en 16-bitars "variabel" så får du alltså hantera det med
hjälp av två vanliga 8-bitars register. Obs att de *inte* behöver ligga
på två adresser direkt efter varandra i minnet, de kan naturligtsvis ligga
var som helst...

Sedan, när det gäller att räkna, så får man göra på i princip samma sätt
som när man räknar vanliga tal med papper och penna. Först räknar man
ihop entalen (i detta fall den "låga byten"). Man kollar om det blev någon
"minnessiffra" (i detta fall C-biten i STATUS registret) och ser till att
man lägger till den när man adderar den andra byten (d.v.s det som hade
varit 10-tals siffran i nornala fall). Sen är det bara att fortsätta med så många
bytes som man har (d.v.s 16, 24, 32 o.s.v bitars variabler).

För att subrahera gör man i princip likadant, man använder också där
C-biten i STATUS registret för att hantera "lånesiffra" mellan de olika
8-bitars bitarna av variabeln.

För mult/div blir det lite mer komplext. Dock är ju mult/div med 2, 4, 8
o.s.v enkelt, det är bara att shifta bitarna år det ena eller det andra hållet
i variabeln. Även här använder man C-biten i STATUS för att shifta bitarna
över flera 8-bitars register.
Skriv svar