zdravim vas. potreboval by som poradit s pristupom do flash pamäti cez istrukciu LPM. Zaujimaju ma hlavne tabulky konstant velkostou nad 255 byte
.include "m8def.inc"
start:
ldi r16,low(RAMEND)
out SPL,r16
ldi r16,high(RAMEND)
out SPH,r16
; Vlož adresu tabulky 'tabulka' do Z registru.
; Násobíme dvěma, abychom dostali bajtovou adresu.
ldi ZH,high(2*tabulka) ; Horní bajt adresy do ZH
ldi ZL,low(2*tabulka) ; Dolní bajt adresy do ZL
lpm ; Vlož 1. bajt z tabulky do r0
adiw ZL,1 ; Zvětši Z register o 1
lpm ; Vlož 2. bajt z tabulky do r0
ldi ZH,high(2*tabulka+9)
ldi ZL,low(2*tabulka+9)
lpm ; Vlož 10. bajt z tabulky do r0
; 2.varianta
ldi ZH,high(2*tabulka)
ldi ZL,low(2*tabulka)
lpm r16,Z ; Vlož 1. bajt z tabulky do r16
; 3.varianta
ldi ZH,high(2*tabulka)
ldi ZL,low(2*tabulka)
lpm r16,Z+ ; Vlož 1. bajt z tabulky do r16
lpm r16,Z+ ; Vlož 2. bajt z tabulky do r16
lpm r16,Z+ ; Vlož 3. bajt z tabulky do r16
tabulka:
.db 0,10,20,30,40,50,60,70,80,90,100,110 ; atd max 64 kB
no skor som myslel nieco ine , trebars skok napr. do stredu tabulky cez premennu (register) skoky po 5 byte
ja som to riesil takto:
nasobi: ;nasobi reg * 5 hodnotou reg temp
inc r23
adiw zl,5
cp r23,temp
brne nasobi
clr r23
z1
lpm temp,z+ ;nacita byte ulozene v flash
rcall odosli_data
inc r22
cpi r22,5
brne z1
clr r22
clr zl
ret
tabulka:
.db 10,20,30,40,50,60,70,80,90,100,
.db 110,120,130,140,150,160,170,180…atd
… len mi to zabralo vela strojoveho casu hlavne ku kovcu tabulky…[/code]
[code]
mi to nejak nezobralo dobre tak este raz =)
no skor som myslel nieco ine , trebars skok napr. do stredu tabulky cez premennu (register) skoky po 5 byte
ja som to riesil takto:
nasobi: ;nasobi reg * 5 hodnotou reg temp
inc r23
adiw zl,5
cp r23,temp
brne nasobi
clr r23
z1:
lpm temp,z+ ;nacita byte ulozene v flash
rcall odosli_data
inc r22
cpi r22,5
brne z1
clr r22
clr zl
ret
tabulka:
.db 10,20,30,40,50,60,70,80,90,100,
.db 110,120,130,140,150,160,170,180…atd
… len mi to zabralo vela strojoveho casu hlavne ku koncu tabulky…[/code]
Delal jsem podobne hopkani po tabulce v attiny2313, jde to udelat velmi rychle treba prez shiftovani, ale vzdyt Atmega8 ma i instrukci na nasobeni ne? Tak proc ji nepouzit?
diky za tip este by bodol snad nejaky prikladik…
tedy u atmegy16