Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
01.05.2006, 01:30
|
|
Частый гость
Регистрация: 07.10.2005
Сообщений: 39
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
массивы в АВР
помогите плз!!!
приведу маленький пример:
сохраняю в сегменте данных:
label1: .db 1, 2, 3, 4, 5
потом в сегменте кода пишу:
ldi temp, label1 (+1, +2 +3 ну и так далее)
только вот проблема в temp записывается не значение а походу адресс. как с этим бороться? Большое спасибо.
|
|
|
|
01.05.2006, 15:46
|
|
Прописка
Регистрация: 05.02.2005
Сообщений: 125
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
|
label:
.db 1,2,3,4
ldi XH,high(label)
ldi XL,low(label)
ld temp,X
ld temp,X+1
Ну и так далее.
|
|
|
|
01.05.2006, 23:31
|
|
Частый гость
Регистрация: 07.10.2005
Сообщений: 39
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
ОГРОМНОЕ СПАСИБО!!! ВСЕ КАК И НАДО!!! РАБОТАЕТ НА 100%
|
|
|
|
01.05.2006, 23:39
|
|
Частый гость
Регистрация: 07.10.2005
Сообщений: 39
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
НЕТ пардон такой вариант не работает!!!
Вы точно ничего не забыли!!! Пишет на счет:
ld temp, X+1 - invalid register
Даже не знаю почему
|
|
|
|
02.05.2006, 00:40
|
|
Частый гость
Регистрация: 07.10.2005
Сообщений: 39
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Еще раз убеждаюсь, что пока сам не поймешь мало кто поможет (или чуть-чуть). Вобщем через 15 мин сам написал такой код (исправленный выше). Пушу для МЕГИ16:
.cseg
.org 100
Lbel: .db 1,2,3,4,5,6,7,8,9,10
.org 0
rjmp RESET
........
........
........
My_function:
ldi r16, 5
ldi ZH, HIGH(SIN*2) ;старший байт 2-байтного слова
ldi ZL, LOW(SIN*2) ;младшый байт 2-байтного слова
; стоим на 0 индексе массива
add ZL, r16 ;инкрементирую индекс на значение записанного в r16
lpm ;загружаю данные с памяти
mov temp, r0 ;собственно присваиваю temp = 6
ret
Вот и все!!! Напишите пожалусто что не так или мнение об этом. Всегда писал на С теперь просто на АСМе. Хочу проверить себя, может как то по другому надо.
|
|
|
|
02.05.2006, 13:01
|
|
Супер-модератор
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,392
Сказал спасибо: 1,976
Сказали Спасибо 1,332 раз(а) в 580 сообщении(ях)
|
Сообщение от Limit
|
Еще раз убеждаюсь, что пока сам не поймешь мало кто поможет
|
Совершенно верно. Разбираться лучше самому.
Цитата:
|
.cseg
.org 100
Lbel: .db 1,2,3,4,5,6,7,8,9,10
.org 0
rjmp RESET
My_function:
ldi r16, 5
ldi ZH, HIGH(SIN*2) ;старший байт 2-байтного слова
ldi ZL, LOW(SIN*2) ;младшый байт 2-байтного слова
; стоим на 0 индексе массива
add ZL, r16 ;инкрементирую индекс на значение записанного в r16
lpm ;загружаю данные с памяти
mov temp, r0 ;собственно присваиваю temp = 6
ret
|
Вот только не пойму - сперва речь шла о сегменте данных (хотя и там были ошибки - косвенная адресация с помощью пары Х не умеет работать со смещением-константой, и в ОЗУ нельзя делать .db число - его надо туда занести программно).
В этом примере - все верно (почти). Для корректности надо бы после add ZL,R16 сделать
ldi R16,0
adc ZH,R16
|
|
|
|
02.05.2006, 13:19
|
|
Частый гость
Регистрация: 02.05.2006
Сообщений: 17
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
АВРщики делают так:
ldi ZL,LOW(INDEX)
ldi ZH,HIGH(INDEX)
subi ZL,LOW(-SIN*2)
sbci ZH,HIGH(-SIN*2)
lpm
...
|
|
|
|
02.05.2006, 13:33
|
|
Частый гость
Регистрация: 07.10.2005
Сообщений: 39
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Сообщение от nml
|
Сообщение от Limit
|
Еще раз убеждаюсь, что пока сам не поймешь мало кто поможет
|
Совершенно верно. Разбираться лучше самому.
Цитата:
|
.cseg
.org 100
Lbel: .db 1,2,3,4,5,6,7,8,9,10
.org 0
rjmp RESET
My_function:
ldi r16, 5
ldi ZH, HIGH(SIN*2) ;старший байт 2-байтного слова
ldi ZL, LOW(SIN*2) ;младшый байт 2-байтного слова
; стоим на 0 индексе массива
add ZL, r16 ;инкрементирую индекс на значение записанного в r16
lpm ;загружаю данные с памяти
mov temp, r0 ;собственно присваиваю temp = 6
ret
|
Для корректности надо бы после add ZL,R16 сделать
ldi R16,0
adc ZH,R16
|
Я вот только не пойму r16 - это мой счетчик. А я его обнуляю. Это сперва тогда надо сохранить в стеке, обнулить, суммирование с переносом, потом востановить. Или использовать другой регистор для обнуления. У меня 80 байт, все от 0-51 (255/5). Стоит мне так делать для коррекции? БОЛЬШОЕ СПАСИБО!
|
|
|
|
02.05.2006, 13:45
|
|
Частый гость
Регистрация: 02.05.2006
Сообщений: 17
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Если r16 - счётчик, то непонятен смысл использования индексации.
Проще применить автоинкремент (lpm temp,Z+).
|
|
|
|
02.05.2006, 13:55
|
|
Частый гость
Регистрация: 07.10.2005
Сообщений: 39
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
|
Сообщение от ---
|
Если r16 - счётчик, то непонятен смысл использования индексации.
Проще применить автоинкремент (lpm temp,Z+).
|
так вот об этом я и говорил (напичсано выше). Щас буду пробывать с автоинкриментом. СЕНКС
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Тема |
Автор |
Раздел |
Ответов |
Последнее сообщение |
Сигнатура в АВР
|
Tolstopuz |
Микроконтроллеры, АЦП, память и т.д |
3 |
19.05.2009 22:20 |
Большие отрицательные числа и АВР
|
ua_gruzin |
Микроконтроллеры, АЦП, память и т.д |
7 |
31.01.2009 11:41 |
Новый Баском АВР
|
Kabron |
Микроконтроллеры, АЦП, память и т.д |
42 |
15.02.2008 11:17 |
ШИМ АВР проблема
|
Zemlyanov |
Микроконтроллеры, АЦП, память и т.д |
14 |
11.02.2007 20:44 |
Массивы в PICC_V8.05PL1
|
vovan_zh |
Микроконтроллеры, АЦП, память и т.д |
11 |
24.09.2006 11:33 |
Часовой пояс GMT +4, время: 15:16.
|
|