Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 01.05.2006, 01:30  
Limit
Частый гость
 
Регистрация: 07.10.2005
Сообщений: 39
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Limit на пути к лучшему
По умолчанию массивы в АВР

помогите плз!!!

приведу маленький пример:
сохраняю в сегменте данных:
label1: .db 1, 2, 3, 4, 5

потом в сегменте кода пишу:

ldi temp, label1 (+1, +2 +3 ну и так далее)

только вот проблема в temp записывается не значение а походу адресс. как с этим бороться? Большое спасибо.
Реклама:
Limit вне форума  
Непрочитано 01.05.2006, 15:46  
Vovan66
Прописка
 
Регистрация: 05.02.2005
Сообщений: 125
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
Vovan66 на пути к лучшему
По умолчанию

label:
.db 1,2,3,4

ldi XH,high(label)
ldi XL,low(label)
ld temp,X
ld temp,X+1
Ну и так далее.
Vovan66 вне форума  
Непрочитано 01.05.2006, 23:31  
Limit
Частый гость
 
Регистрация: 07.10.2005
Сообщений: 39
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Limit на пути к лучшему
По умолчанию

ОГРОМНОЕ СПАСИБО!!! ВСЕ КАК И НАДО!!! РАБОТАЕТ НА 100%
Limit вне форума  
Непрочитано 01.05.2006, 23:39  
Limit
Частый гость
 
Регистрация: 07.10.2005
Сообщений: 39
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Limit на пути к лучшему
По умолчанию

НЕТ пардон такой вариант не работает!!!

Вы точно ничего не забыли!!! Пишет на счет:

ld temp, X+1 - invalid register

Даже не знаю почему
Limit вне форума  
Непрочитано 02.05.2006, 00:40  
Limit
Частый гость
 
Регистрация: 07.10.2005
Сообщений: 39
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Limit на пути к лучшему
По умолчанию

Еще раз убеждаюсь, что пока сам не поймешь мало кто поможет (или чуть-чуть). Вобщем через 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

Вот и все!!! Напишите пожалусто что не так или мнение об этом. Всегда писал на С теперь просто на АСМе. Хочу проверить себя, может как то по другому надо.
Limit вне форума  
Непрочитано 02.05.2006, 13:01  
nml
Супер-модератор
 
Аватар для nml
 
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,378
Сказал спасибо: 1,956
Сказали Спасибо 1,328 раз(а) в 578 сообщении(ях)
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
Вот только не пойму - сперва речь шла о сегменте данных (хотя и там были ошибки - косвенная адресация с помощью пары Х не умеет работать со смещением-константой, и в ОЗУ нельзя делать .db число - его надо туда занести программно).

В этом примере - все верно (почти). Для корректности надо бы после add ZL,R16 сделать
ldi R16,0
adc ZH,R16
nml вне форума  
Непрочитано 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  
Limit
Частый гость
 
Регистрация: 07.10.2005
Сообщений: 39
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Limit на пути к лучшему
По умолчанию

Сообщение от 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). Стоит мне так делать для коррекции? БОЛЬШОЕ СПАСИБО!
Limit вне форума  
Непрочитано 02.05.2006, 13:45  
---
Частый гость
 
Регистрация: 02.05.2006
Сообщений: 17
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
--- на пути к лучшему
По умолчанию

Если r16 - счётчик, то непонятен смысл использования индексации.
Проще применить автоинкремент (lpm temp,Z+).
--- вне форума  
Непрочитано 02.05.2006, 13:55  
Limit
Частый гость
 
Регистрация: 07.10.2005
Сообщений: 39
Сказал спасибо: 0
Сказали Спасибо 0 раз(а) в 0 сообщении(ях)
Limit на пути к лучшему
По умолчанию

Сообщение от ---
Если r16 - счётчик, то непонятен смысл использования индексации.
Проще применить автоинкремент (lpm temp,Z+).
так вот об этом я и говорил (напичсано выше). Щас буду пробывать с автоинкриментом. СЕНКС
Limit вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
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, время: 17:19.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot