Форум myROBOT.ru » Роботы и робототехника » Делимся опытом » Сдвиговой регистр

Страниц (7): « 1 2 3 4 5 [6] 7 »
 

76. nest - 11 Июля, 2010 - 22:40:56 - перейти к сообщению
cjA пишет:
деление на два или три - одна команда, а сдвиг- другая.

ещё раз: мне всё равно, какая там комманда и где.
Я говорю, что:
сдвиг битов в байте вправо то же самое, что и деление байта на два.
сдвиг влево - умножение.
Это логическая операция, а не комманда.
77. beam - 12 Июля, 2010 - 01:00:39 - перейти к сообщению
ладно,суть понял,...ну вот допустим мне надо загнать в последний регистр вот это....-чтобы на четырех выходах была логическая 1..(+)..а на остальных,логический 0..(-)..,возможно так продвинуть такие байты начиная с первого регистра,переполняя первый регистр,байты перейдут во второй,переполняя второй в третий и тд,
78. cjA - 12 Июля, 2010 - 01:10:05 - перейти к сообщению
дык легко! говорюж- варьируешь их как хочешь!

char var_0 = 0b10000000; /* переменная определяет содержимое регистра 0 */
char var_1 = 0b01000000; /* переменная определяет содержимое регистра 1 */
char var_2 = 0b00100000; /* переменная определяет содержимое регистра 2 */
char var_3 = 0b00010000; /* переменная определяет содержимое регистра 3 */
это у nest'а было, а можно так. будут по четыре скакать.
char var_0 = 0b11110000; /* переменная определяет содержимое регистра 0 */
char var_1 = 0b01111000; /* переменная определяет содержимое регистра 1 */
char var_2 = 0b00111100; /* переменная определяет содержимое регистра 2 */
char var_3 = 0b00011110; /* переменная определяет содержимое регистра 3 */
(Добавление)
все, я пас, Ухмылка
все ошибки уже исправленны, beam : с тебя только - запрограммировать и запустить, программа правильная
79. beam - 12 Июля, 2010 - 12:26:52 - перейти к сообщению
А што это такое? if( var_0 & (1<<k) )
80. cjA - 12 Июля, 2010 - 13:27:14 - перейти к сообщению
гы Голливудская улыбка
beam учи лучьше ассемблер в чистом виде, меня эти единицы много меньшие нуля- тоже всегда смущают, я начинаю думать о метрике пространства в котором это может быть и отвлекаюсь ... Голливудская улыбка
81. mihail - 12 Июля, 2010 - 17:23:16 - перейти к сообщению
beam пишет:
А что это такое? if( var_0 & (1<<k) )

Если условие верно, то делается то что в {}

var_0 переменная
k переменная
<< сдвиг влево

если k = 0 то в результате выполнения 1<<0 получим 0b00000001
...
если k = 2 то в результате выполнения 1<<2 получим 0b00000100
если k = 3 то в результате выполнения 1<<3 получим 0b00001000
...
если k = 7 то в результате выполнения 1<<7 получим 0b10000000

& поразрядное И

var_0 = 0b01000001
1<<k = 0b00001000

0b01000001
&
0b00001000
--------------
0b00000000

var_0 = 0b01001001
1<<k = 0b00000001

0b01001001
&
0b00000001
--------------
0b00000001

С бегущим огоньком можно попробовать все сделать проще. Проверь в своей схеме порты управляющие регистрами.
82. cjA - 12 Июля, 2010 - 17:31:14 - перейти к сообщению
О! Ну да, корпуса разные бывают.
А по схеме mihail'а - раньше все было правильно
beam, выложи уже свою прогу которую шьешь?
83. mihail - 12 Июля, 2010 - 17:33:47 - перейти к сообщению
Изобрази как нибудь, то что хочешь получить в итоге.

Пример:

0000000000001000000000000000 (первое состояние цепочки светодиодов)
0000000000000100000000000000 (второе состояние цепочки светодиодов)
0000000000000010000000000000 (третье состояние цепочки светодиодов)

0 - не светящийся светодиод
1 - светящийся светодиод
(Добавление)
Забыл сказать, if( var_0 & (1<<k) ) это немного сокращенная запись. В полном виде она может выглядеть так: if( (var_0 & (1<<k)) != 0b00000000 )
84. beam - 12 Июля, 2010 - 21:33:29 - перейти к сообщению
Спасибо,...Я разобрался,бегущяя строка идет нормально,...
(Добавление)
все 32 светодиода работают,
(Добавление)
<< сдвиг влево ....а в право тоже можно сдвигать?
85. nest - 12 Июля, 2010 - 21:56:09 - перейти к сообщению
beam пишет:
<< сдвиг влево ....а в право тоже можно сдвигать?
а вы попробуйте с ">>" :)
86. mihail - 12 Июля, 2010 - 21:57:09 - перейти к сообщению
beam пишет:
а в право тоже можно сдвигать?

>> сдвиг вправо

0b10000000 >> 1 получится 0b01000000
0b10000000 >> 7 получится 0b00000001
87. cjA - 12 Июля, 2010 - 22:50:14 - перейти к сообщению
нет сдвигать вправо нельззя, только от младшего бита к старшему
можно подправить програмку так что будет казатья что огонек бежит в другую сторону, но
а- не знаю спосбны ли на это эти регистры
б- программа будет гораздо сложнее

покажи лучьще что получилось?
88. nest - 12 Июля, 2010 - 22:56:10 - перейти к сообщению
cjA пишет:
сдвигать вправо нельззя
это почему вдруг?

cjA пишет:
а- не знаю спосбны ли на это эти регистры
им совершенно всё равно, что в них вдвинем, то и светиться будет.

cjA, вы не путайте. В регистры можно вдвигнуть быстро и незаметно, а потом ждать сколько надо. Потом следующую "картинку" вдвинуть, опять ждать... ну и так далее, как смена кадров в телеке.
89. cjA - 12 Июля, 2010 - 23:22:42 - перейти к сообщению
я и сказал что не уверен что это регистры достаточно быстродействующие.
зависит кстати еще от светодиодов. может придется кондеры ставить.

nest пишет:
это почему вдруг?

ну нельзя для этих микросхем туда-обратно делать и все (гы-гы) читайте даташит
90. nest - 13 Июля, 2010 - 00:36:28 - перейти к сообщению
cjA, вы опять всё спутали. сдвигаем байт внутри МК как нам нравится и наружу выдвигаем как хотим: хоть вперемежку из всех четырёх байтов, хоть попорядку или с середины. Так как нам нужно их получить в регистрах.
Выдвинули 32 бита за пару мкс, светим пару секунд. Выдвинули ещё 32 бита - ещё светим.
Так делают serial in - parallel out преобразования.
Так сделаны практически все пропеллерные часы со схемой на внешних регистрах.
Быстро "выплюнули" строку в регистр - ждём, светим.
Выплёвываем следующую строку - опять ждём, светим.

Сами читайте даташит. Вы не разбираетесь. Вы смешали аппаратный сдвиговой регистр в виде отдельной микросхемы со сдвигом битов байта в процессе работы алгоритма МК.

Сами подумайте, где в регистре 74хх164 лево и право? где это однозначно определено?
А в байте лево и право вполне себе существуют - старший и младший бит.

Да и кондёры то тут к светодиодам при чём?!
Быстродействия у 74хх164 для чего может не хватить?
Мало 74HC164, есть 74F164, с ней хоть сотнями МГц работайте. Или вы о чём вообще?

Хватит вам уже флеймить. А то это опять похоже на "декавольты".