|
|
  |
Attiny13, самопрограммирование |
|
|
|
Mar 19 2009, 19:03
|

Местный
  
Группа: Свой
Сообщений: 253
Регистрация: 28-12-07
Из: Украина г. Первомайск
Пользователь №: 33 716

|
CODE ldi zl,low (Text8) // ldi zh,high(Text8) // CODE lsl ZL // Умножаем на 2 rol ZH // регистровую пару lpm data,Z // загружаем ячейку памяти из флэш для вывода Это чтение байта из флеши.
|
|
|
|
|
Mar 19 2009, 19:14
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
Цитата(another_one @ Mar 19 2009, 19:40)  Спасибо за поддержку.
Не могу понять как организовать доступ к R0:R1(для записи/чтения данных) и к Z-pointer(для записи адреса) используя WinAVR + AVRAssembler(AVRStudio). Код LDI R0, 25 ; константу в регистр MOV R16, R0 ; регистр в регистр LDS R1, 0x01FF ; из ОЗУ читаем в регистр
LDI R30, low(0x03FE); инициализируем регистровую пару Z(R30,R31) LDI R31, hi(0x03FE) ; адресом 0x03FF LDD R16, Z+ ; читаем ОЗУ косвенно адресуя ячейку памяти с адресом 0x03FE и инкрементируем адрес LDD R17, Z ; читаем ОЗУ косвенно адресуя ячейку памяти с адресом 0x03FF Как-то так....
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
Mar 20 2009, 05:44
|

Профессионал
    
Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581

|
Цитата(demiurg_spb @ Mar 19 2009, 22:14)  Код LDI R0, 25 ; константу в регистр MOV R16, R0 ; регистр в регистр с точностью до наоборот!!! Код LDI R16, 25 ; константу в регистр MOV R0, R16 ; регистр в регистр регистры младшей половины не могут использоваться с командами, кончающимися на I, т.е. использующими в качестве второго операнда константу: LDI, CPI, SBCI и т.п.
--------------------
Я бы взял частями... но мне надо сразу.
|
|
|
|
|
Mar 20 2009, 19:07
|

Участник

Группа: Свой
Сообщений: 63
Регистрация: 13-03-06
Из: Москва
Пользователь №: 15 204

|
Цитата(Павлик @ Mar 19 2009, 22:03)  CODE ldi zl,low (Text8) // ldi zh,high(Text8) // CODE lsl ZL // Умножаем на 2 rol ZH // регистровую пару lpm data,Z // загружаем ячейку памяти из флэш для вывода Это чтение байта из флеши. А если до гланд добираться традиционным способом, то Код ldi zh,high(label*2) ldi zl,low(label*2) или Код ldi zh,high(label<<1) ldi zl,low(label<<1)
|
|
|
|
|
Mar 21 2009, 07:29
|

Нечётный пользователь.
     
Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417

|
Цитата(another_one @ Mar 21 2009, 09:20)  А как для WinAVR(AVRStudio) сделать ассемблерную вставку? Для данной простой задачи "всё украдено до нас". Код #include <avr/pgmspace.h>
prog_uint8_t cf = 10; prog_uint16_t wf = 12345;
uint8_t c; uint16_t w;
... ... c = pgm_read_byte( &cf ); w = pgm_read_word( &wf ); А если таки нужны вставки, то читать C:\WinAVR\doc\avr-libc\avr-libc-user-manual\inline_asm.html и для примеров по данному форуму искать слово __asm__
--------------------
Ну, я пошёл… Если что – звоните…
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|