Easyelectronics.ru

Электроника для всех
Текущее время: 26 ноя 2020, 21:12

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
 Заголовок сообщения: Как вывести данные из массива?
СообщениеДобавлено: 10 сен 2020, 22:08 
Старожил
Аватара пользователя

Зарегистрирован: 04 июл 2012, 21:07
Сообщения: 208
Откуда: Казахстан, Аксу.
Здрасьте всем. Последний раз занимался контроллерами года 4 назад. Делал всякие приблуды на AVRках для себя. Кодил на асме, потом забросил это дело. Вот опять понадобилось состряпать приблуду на МК, начал заново всё вспоминать, с большим трудом даётся.
Суть проблемы. Имеется массив в памяти программ. Массив устроен так что, (даже не знаю как правильно объяснить)..... В общем берём значение из АЦП, пересчитываем, переводим в вольты, пишем значение в регистр или в ячейку памяти, с названием Result
Размерность один байт. Теперь нужно сопоставить это значение значению которое лежит в массиве. Проблема в том что одному значению должно соответствовать 4 байта. Нужно это для организации шкального индикатора. В каждом байте бит будет указывать на то, что нужно зажечь светодиод.
Massiv:
.db 0b00000011, 0b00000000, 0b00000000, 0b00000000
.db 0b00000111, 0b00000000, 0b00000000, 0b00000000
.................................................................................
.db 0b11111111, 0b11111111, 0b00000111, 0b00000000

Помогите кусочком кода, как сделать чтобы при вынимании последовательно данных из массива распихать эти данные по четырём регистрам скажем R22, 23, 24, 25 или по четырём зарезервированным ячейкам, пусть будут Dig+1, Dig+2, Dig+3, Dig+4.
Что-то типа такого
Decoder:
LDI ZL, Low(Massiv*2)
LDI ZH, High(Massiv*2)
ADD ZL, Result
LDI Temp, 0
ADC ZH, Temp
LPM Result, Z
RET
только что бы на выходе 4 байта. Понимаю, что нужно организовать счётчик на 4, в цикле с декрементом этого счётчика вынимать данные и распихивать по регистрам или ячейкам.
Читал как-то, что есть четыре вида размерности массива. .db , .dw , .dd , .dq. Как работать с первыми двумя расписано, про две других нигде не встречал.

_________________
Романтизьму нет, выпить спокойно не дают, нет прежней красоты....


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как вывести данные из массива?
СообщениеДобавлено: 10 сен 2020, 23:51 
Супермодератор
Аватара пользователя

Зарегистрирован: 26 янв 2010, 22:19
Сообщения: 6802
Откуда: Из тех... Из бывших...
А не проще ли проверять значение АЦП на попадание в диапазон и уже исходя из этого обращаться к элементам вашего массива?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как вывести данные из массива?
СообщениеДобавлено: 11 сен 2020, 01:12 
Старожил
Аватара пользователя

Зарегистрирован: 02 фев 2012, 02:14
Сообщения: 756
Откуда: Вiльна та самостiйна Баварiя
STT прав, проверять входные значения функции нужно.
Примерно так:
Код:
CPI Result, 100
BRSH OutOfRange ; если достигли или более 100
...

Далее для выбора каждого четвертого значения из массива нужно значение результата учетверить:
Код:
LSL Result ; x2
LSL Result ; x2 = итого x4

Потом уже Ваша вышеприведенная функция (команду извлечения нужно заменить на LPM R22, Z+) извлечет из массива стартовый байт значения. Для извлечения последующих трех нужно всего лишь добавить три строчки кода:
Код:
LPM R23, Z+
LPM R24, Z+
LPM R25, Z+


Мы исходим из того факта, что Result принимает значения {0,xx}. Если нет, то нужно их привести к этому, иначе извлечение из массива будут со смещением и с выходом за его пределы.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как вывести данные из массива?
СообщениеДобавлено: 11 сен 2020, 13:13 
Старожил
Аватара пользователя

Зарегистрирован: 04 июл 2012, 21:07
Сообщения: 208
Откуда: Казахстан, Аксу.
Ребят, спасибо за подсказки. Попробую накарябать код в студии., посмотрим что получится.
Входные значения массива не превышают размерности байта.

_________________
Романтизьму нет, выпить спокойно не дают, нет прежней красоты....


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как вывести данные из массива?
СообщениеДобавлено: 18 сен 2020, 21:34 
Старожил

Зарегистрирован: 25 фев 2011, 18:45
Сообщения: 3693
Откуда: Новосибирск
Из старого проекта. Ажно 2012 года.
Show

А впрочем вот весь проект. Сразу говорю. Проект сдавался как рабочий, но проследить работу устройства в течении длительного времени не получилось. Потому считаем проект сырой, но вывод на индикаторы рабочий.


Вложения:
CNT_CYCLES_VER_5.rar [21.95 Кб]
Скачиваний: 34
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB