asembler avr

To forum jest dla wszystkich pasjonatów mikrokontrolerów AVR Atmela. Wymiana doświadczeń i pomoc dla początkujących w pisaniu programów zarówno w C, Asemblerze jak i BASCOM. Zapraszam znawców tematu, aby pomogli wszystkim początkującym!
ODPOWIEDZ
greg

asembler avr

Post autor: greg » 16 gru 2004, 18:21

szukam programu w którym zastosowano instrukcje "lpm" mam problem z jej zastosowaniem

czarutek
Użytkownik
Posty: 236
Rejestracja: 02 lis 2004, 11:51
Lokalizacja: Warszawa
Kontakt:

Post autor: czarutek » 16 gru 2004, 21:14


Wojtek
Moderator
Posty: 2606
Rejestracja: 04 sie 2002, 19:00
Lokalizacja: --
Kontakt:

Re: asembler avr

Post autor: Wojtek » 16 gru 2004, 22:42

greg pisze:szukam programu w którym zastosowano instrukcje "lpm" mam problem z jej zastosowaniem
Podam przykład za autorem książki "Mikrokontrolery AVR w praktyce":
ldi zh,high(tabl<<1) ; inicjuj rejestr indeksowy Z
ldi zh,low(tabl<<1)
lpm r16,z ; ładuj stałą z pamięci programu wskazaną przez rejestr Z do rejestru r16
..
..
tabl: .dw $5876 ; bajt $76 jest wskazywany gdy ZLSB=0, bajt $58 jest wskazywany gdy ZLSB=1

Awatar użytkownika
gaweł
Użytkownik
Posty: 651
Rejestracja: 05 kwie 2004, 8:38
Lokalizacja: Białystok
Kontakt:

Post autor: gaweł » 16 gru 2004, 23:21

Chyba wiem na czym polega twój problem. Wojtek napisał to poprawnie, ja mogę jedynie dodać, że do rejestru Z należy załadować adres abszaru zwiększony dwukrotnie (takim operatorem jest <<1, oznacza przesunięty w lewo o jedną pozycję bitową). Wynika to z tego, że instrukcja lpm wymaga podania w rejestrze Z adresu pobieranego z pamięci bajtu, natomiast jednostką do adresowania przez kompilator jest adres słowa dwubajtowego.

czarutek
Użytkownik
Posty: 236
Rejestracja: 02 lis 2004, 11:51
Lokalizacja: Warszawa
Kontakt:

Post autor: czarutek » 17 gru 2004, 8:17

Dorzucę jeszcze, bo Greg nie napisał jaki to AVR...
Niektóre AVRy obsługują tylko podstawowy rozkaz LPM. Nie ma on parametrów, a jego wynikiem jest przepisanie obszaru pamięci programu (Flash) spod adresu wskazanego zawsze w rejestrze Z, zawsze do rejestru R0.
Jakie warianty rozkazu LPM obsługuje nasz AVR najlepiej od razu sprawdzić w "Instruction Set Summary" w nocie katalogowej.

ODPOWIEDZ