.dreg .ereg Fråga för ATmega16
.dreg .ereg Fråga för ATmega16
Tjenixen
Hur ska jag använda tex .dreg?
.dreg
MinVar: .db 0x0F, 0xF0
Den kan jag inte komma åt från koden, varför?
Men lägger jag MinVar i .cseg så kommer jag åt den men inte i .dreg.
Lite exempel på hur jag hanterar .db och .byte i både .creg och .dreg önskas
Om jag har MinVar i .cseg så kan jag ju göra följande
ldi zl, low(MinVar)
ldi zh, high(MinVar)
lpm
och få ut första byten i r0 men hur gör jag om jag har MinVar i .eseg eller .dseg?
*** EDIT ***
Problemet som jag ser det här är att jag inte kan läsa en .db definierad variabel. Varför inte detta?
Jag kan skriva och läsa till 0x60 annars men inte om jag sätter en .db där då får jag konstant 0x0F som värde tillbaks.
*** SLUT EDIT ***
/Henke
Hur ska jag använda tex .dreg?
.dreg
MinVar: .db 0x0F, 0xF0
Den kan jag inte komma åt från koden, varför?
Men lägger jag MinVar i .cseg så kommer jag åt den men inte i .dreg.
Lite exempel på hur jag hanterar .db och .byte i både .creg och .dreg önskas
Om jag har MinVar i .cseg så kan jag ju göra följande
ldi zl, low(MinVar)
ldi zh, high(MinVar)
lpm
och få ut första byten i r0 men hur gör jag om jag har MinVar i .eseg eller .dseg?
*** EDIT ***
Problemet som jag ser det här är att jag inte kan läsa en .db definierad variabel. Varför inte detta?
Jag kan skriva och läsa till 0x60 annars men inte om jag sätter en .db där då får jag konstant 0x0F som värde tillbaks.
*** SLUT EDIT ***
/Henke
Du har tre minnen i en AVR (oftast)
1.RAM, ett flyktigt minne som adressera snabbt och kan skrivas till många gånger.
Till den använder man .dreg. För att komma åt använder man bland annat ld och st.
2.EEPROM, är icke flyktigt minne som används för att spara variabler som behöver vara kvar trots strömmen försvinner.
Till gången till detta minne är via register som exempel EEARH, EEARL, EEDR och EECR, för mer information se databladet som tillhör den uC du arbetar med.
3. Program minnet, är icke flyktigt minne som programmet lagras i. Man kan dessutom lagra konstanter där, exempel vis strängar, tabeller och mm.. som man inte ändrar.
Till gången fås gen lpm...
.db används för att göra sätta en konstant i ett icke flyktigt minne
Exempel:
const2: .db 1,2,3
.BYTE används till att reservera en plats åt en variabel i ett flyktigt minne
Exempel:
vartab: .BYTE 4
Men om avr assembler kan läsas i AVRStudio -> help -> AVR Tools User Guide -> AVR assembler
Hoppas att de svarade lite gran på dina frågor ^^
1.RAM, ett flyktigt minne som adressera snabbt och kan skrivas till många gånger.
Till den använder man .dreg. För att komma åt använder man bland annat ld och st.
2.EEPROM, är icke flyktigt minne som används för att spara variabler som behöver vara kvar trots strömmen försvinner.
Till gången till detta minne är via register som exempel EEARH, EEARL, EEDR och EECR, för mer information se databladet som tillhör den uC du arbetar med.
3. Program minnet, är icke flyktigt minne som programmet lagras i. Man kan dessutom lagra konstanter där, exempel vis strängar, tabeller och mm.. som man inte ändrar.
Till gången fås gen lpm...
.db används för att göra sätta en konstant i ett icke flyktigt minne
Exempel:
const2: .db 1,2,3
.BYTE används till att reservera en plats åt en variabel i ett flyktigt minne
Exempel:
vartab: .BYTE 4
Men om avr assembler kan läsas i AVRStudio -> help -> AVR Tools User Guide -> AVR assembler
Hoppas att de svarade lite gran på dina frågor ^^
Ja...
Du måste manuellt ge variabel i ram minnet dess värde.
Exempel:
Edit:
Tanken med använda "Minvarabel:" är för att slippa använda direkt addreser vilket kan leda till misstag om man råkar ha två variabler men samma adress, men den här metoden så slipper man det...
Du måste manuellt ge variabel i ram minnet dess värde.
Exempel:
Kod: Markera allt
.dseg
Minvarabel: .BYTE 1
//ger Minvarabel 0x09
ldi r16, 0x09
sts Minvarabel, temp
Tanken med använda "Minvarabel:" är för att slippa använda direkt addreser vilket kan leda till misstag om man råkar ha två variabler men samma adress, men den här metoden så slipper man det...
Skumt att inte kompilatorn bråkar om det utan sväljer det utan problem och dessutom reserverar platsen man anger i .db direktivet
Men då försvan ett antal moln på himeln iaf
.eseg = Ickeflyktigt för data som kan ändras men måste sparas mellan av/på på uC
.dseg = Flyktigt minne för variabler som kan ändras under körning
.cseg = Ickeflyktigt för konstanter som inte kommer att ändras
Rätt så va?
/Henke
Men då försvan ett antal moln på himeln iaf

.eseg = Ickeflyktigt för data som kan ändras men måste sparas mellan av/på på uC
.dseg = Flyktigt minne för variabler som kan ändras under körning
.cseg = Ickeflyktigt för konstanter som inte kommer att ändras
Rätt så va?
/Henke