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

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

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

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

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

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


 
Опции темы

Ассемблерный сдвиг

Непрочитано 23.08.2012, 09:03  
serj_neo
Временная регистрация
 
Аватар для serj_neo
 
Регистрация: 16.01.2007
Адрес: Казахстан
Сообщений: 73
Сказал спасибо: 18
Сказали Спасибо 61 раз(а) в 18 сообщении(ях)
serj_neo на пути к лучшему
По умолчанию Re: Ассемблерный сдвиг

Сообщение от nonamedov Посмотреть сообщение
Ну, и где же тут:
Код:
if (Buf[i+1] & 0x80)Buf[i] |= 1;
Вы были правы.
Цитата:
asm volatile (
"ldi R30,lo8(Buf+384) \n"
"ldi R31,hi8(Buf+384) \n"
"ldi R19,128 \n"
"ldi R20,2 \n"
"Cycle: \n"
"ld R25,-Z \n"
"rol R25 \n"
"st Z,R25 \n"
"dec r19 \n"
"brne Cycle \n"
"dec r20 \n"
"brne Cycle \n"
);
Цитата:
for(i=0;i‹Modules*32;i++)
{
Buf[i] ‹‹= 1;
if (Buf[i+1] & 0x80)Buf[i] |= 1;
}
Кварц 16Мгц
АСМ циклы 3081: время 192.58мкс
Си циклы 17257: время 1078мкс
Вот так вот.
Кто может посказать как переать конец буфера(Buf) не таким образом:
"ldi R30,lo8(Buf+384) \n"
"ldi R31,hi8(Buf+384) \n"
А как нибудь так:
#define Modules 12 Количество LED модулей
Buf[Modules*32] На каждый модуль по 32 байта видеобуффура
Спасибо.
Реклама:

Последний раз редактировалось serj_neo; 23.08.2012 в 11:25.
serj_neo вне форума  
Непрочитано 23.08.2012, 10:45  
nonamedov
Почётный гражданин KAZUS.RUN
 
Регистрация: 06.06.2008
Сообщений: 1,519
Сказал спасибо: 76
Сказали Спасибо 427 раз(а) в 365 сообщении(ях)
nonamedov на пути к лучшему
По умолчанию Re: Ассемблерный сдвиг

Зачем мудрить, можно и так:
Сообщение от serj_neo Посмотреть сообщение
"ldi R30,lo8(Buf+Modules*12) \n"
"ldi R31,hi8(Buf+Modules*12) \n"
,в чем смысл? Лучше напишите нормальные комментарии.
nonamedov вне форума  
Непрочитано 23.08.2012, 11:33  
serj_neo
Временная регистрация
 
Аватар для serj_neo
 
Регистрация: 16.01.2007
Адрес: Казахстан
Сообщений: 73
Сказал спасибо: 18
Сказали Спасибо 61 раз(а) в 18 сообщении(ях)
serj_neo на пути к лучшему
По умолчанию Re: Ассемблерный сдвиг

Сообщение от nonamedov Посмотреть сообщение
Зачем мудрить, можно и так:
Цитата:
Сообщение от serj_neo
"ldi R30,lo8(Buf+Modules*12) \n"
"ldi R31,hi8(Buf+Modules*12) \n"
,в чем смысл? Лучше напишите нормальные комментарии.
Так не компилируется. Modules(количество ЛЕД панелей)*32(Каждой по 32 байта в ОЗУ)

У меня обьявлен дефайн #define Modules 12
То есть имею 12 модулей ЛЕД.
В программе Кругом и везде применяю "Modules" кроме асм вставки.
Вот и хотелось там тоже применить чтоб при компиляции только в одном месте выбирать количество панелей.
Ну в общем уже всё проверил в железе. Всё работает как надо.
serj_neo вне форума  
Непрочитано 23.08.2012, 12:43  
Yurkin2007
Заблокирован
 
Регистрация: 27.03.2007
Сообщений: 1,327
Сказал спасибо: 12
Сказали Спасибо 576 раз(а) в 460 сообщении(ях)
Yurkin2007 на пути к лучшему
По умолчанию Re: Ассемблерный сдвиг

Надо бы расположить байты информации на экране не вдоль строк, а поперёк, по столбцам, типа 2 байта на столбец. Ну, пришлось бы переделать знакогенератор только. И всё, никаких сдвигов по битам. А сдвигать целыми байтами, что проще и логичнее для данного устройства бегущей строки ...
Yurkin2007 вне форума  
Непрочитано 23.08.2012, 20:19  
omercury
Почётный гражданин KAZUS.RUN
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Ассемблерный сдвиг

Сообщение от dosikus Посмотреть сообщение
Сдвиг проходит через CARRY - это подсказка.
Алексей, а что ты получишь из C, когда сдвинешь первый раз?

Вначале надо "задвинуть" в С тот бит, в сторону которого будет сдвиг, а в конце из С сохранить бит в крайний противоположный.
bst/bld - подсказка...
omercury вне форума  
Непрочитано 23.08.2012, 20:24  
Hives
Гражданин KAZUS.RUN
 
Регистрация: 25.11.2010
Сообщений: 516
Сказал спасибо: 1
Сказали Спасибо 126 раз(а) в 109 сообщении(ях)
Hives на пути к лучшему
По умолчанию Re: Ассемблерный сдвиг

omercury поворачиваем цикл наоборот и ничего "Вначале" двигать не надо.
Hives вне форума  
Непрочитано 23.08.2012, 21:33  
omercury
Почётный гражданин KAZUS.RUN
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
omercury на пути к лучшему
По умолчанию Re: Ассемблерный сдвиг

Сообщение от Hives Посмотреть сообщение
omercury поворачиваем цикл наоборот и ничего "Вначале" двигать не надо.
Да ну?
omercury вне форума  
Непрочитано 23.08.2012, 21:39  
Hives
Гражданин KAZUS.RUN
 
Регистрация: 25.11.2010
Сообщений: 516
Сказал спасибо: 1
Сказали Спасибо 126 раз(а) в 109 сообщении(ях)
Hives на пути к лучшему
По умолчанию Re: Ассемблерный сдвиг

так смешно? ну объясни нам, глупым, вместе посмеемся.
Hives вне форума  
Непрочитано 23.08.2012, 21:56  
omercury
Почётный гражданин KAZUS.RUN
 
Аватар для omercury
 
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,487
Сказал спасибо: 30
Сказали Спасибо 3,070 раз(а) в 2,011 сообщении(ях)
omercury на пути к лучшему
Подмигивание Re: Ассемблерный сдвиг

Открываем ДШ на любой АВР и смотрим команды ROL и ROR
Нажмите на изображение для увеличения
Название: Rol_Ror.jpg
Просмотров: 43
Размер:	8.6 Кб
ID:	38020
Что видим?
Регистр шириной 9 бит. Девятый - флаг переноса.
Сдвиг выполняется одновременно
(для ROL) То, что было в С сдвигается в нулевой бит регистра, весь регистр сдвигается влево (b1‹‹b0. b2‹‹b1 и т.д., а содержимое бита 7 сдвигается в флаг переноса. (Для ROR в обратную сторону.)
То бишь, не загрузив предварительно в флаг С старший бит из старшего байта массива, мы его потеряем. При сдвиге вправо, соответственно, надо загружать в флаг переноса младший бит младшего байта массива.
Ну и после последней команды сдвига в флаге переноса мы имеем последний бит из массива, который тоже неплохо бы сохранить, чтоб не потерять...

"Лопата"...

Последний раз редактировалось omercury; 23.08.2012 в 22:02.
omercury вне форума  
Непрочитано 23.08.2012, 22:03  
dosikus
Гуру портала
 
Аватар для dosikus
 
Регистрация: 20.11.2004
Сообщений: 9,979
Сказал спасибо: 928
Сказали Спасибо 2,261 раз(а) в 1,557 сообщении(ях)
dosikus на пути к лучшему
По умолчанию Re: Ассемблерный сдвиг

Сообщение от omercury Посмотреть сообщение
Алексей, а что ты получишь из C, когда сдвинешь первый раз?
Вначале надо "задвинуть" в С тот бит, в сторону которого будет сдвиг, а в конце из С сохранить бит в крайний противоположный.
bst/bld - подсказка...
А это не само собой подразумевалось?
Или надо было разжевать все полностью?
Тогда не интересно , ни чего не запомнил бы ТС .
__________________
Осторожно , злой кот
dosikus вне форума  
 

Метки
асм си
Опции темы

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сдвиг фаз при помощи ЦОС lexa1000 Цифровые сигнальные процессоры 11 05.04.2013 15:12
Сдвиг в тестбэнче Aleksashka1 Микроконтроллеры, АЦП, память и т.д 1 17.01.2011 16:26
Выбор, включение, модуляция, сдвиг и выключение majorka65 Микроконтроллеры, АЦП, память и т.д 1 26.05.2010 19:34
Сдвиг сигнала, почему? Gonchar Микроконтроллеры, АЦП, память и т.д 11 24.05.2010 23:42
Как или чем определить фазовый сдвиг Online Измерительное оборудование 19 06.11.2006 15:12


Часовой пояс GMT +4, время: 04:43.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.