роботы робототехника микроконтроллеры


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

> Описание: Не могу понять=)
nest Администратор Post Id



Администратор


Сообщений всего: 4866
Дата рег-ции: Сент. 2009  



cjA пишет:
деление на два или три - одна команда, а сдвиг- другая.

ещё раз: мне всё равно, какая там комманда и где.
Я говорю, что:
сдвиг битов в байте вправо то же самое, что и деление байта на два.
сдвиг влево - умножение.
Это логическая операция, а не комманда.
Прикреплено изображение
4576457.png

 
 Top
beam Post Id



Главнокомандующий


Сообщений всего: 278
Дата рег-ции: Дек. 2009  



ладно,суть понял,...ну вот допустим мне надо загнать в последний регистр вот это....-чтобы на четырех выходах была логическая 1..(+)..а на остальных,логический 0..(-)..,возможно так продвинуть такие байты начиная с первого регистра,переполняя первый регистр,байты перейдут во второй,переполняя второй в третий и тд,
 
 Top
cjA Post Id



Генерал


Сообщений всего: 3291
Дата рег-ции: Янв. 2010  



дык легко! говорюж- варьируешь их как хочешь!

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 : с тебя только - запрограммировать и запустить, программа правильная
 
 Top
beam Post Id



Главнокомандующий


Сообщений всего: 278
Дата рег-ции: Дек. 2009  



А што это такое? if( var_0 & (1<<k) )
 
 Top
cjA Post Id



Генерал


Сообщений всего: 3291
Дата рег-ции: Янв. 2010  



гы Голливудская улыбка
beam учи лучьше ассемблер в чистом виде, меня эти единицы много меньшие нуля- тоже всегда смущают, я начинаю думать о метрике пространства в котором это может быть и отвлекаюсь ... Голливудская улыбка

(Отредактировано автором: 12 Июля, 2010 - 13:28:02)

 
 Top
mihail Post Id



Гуру


Сообщений всего: 1065
Дата рег-ции: Март 2010  



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

С бегущим огоньком можно попробовать все сделать проще. Проверь в своей схеме порты управляющие регистрами.
Прикреплено изображение
mega8.gif

(Отредактировано автором: 12 Июля, 2010 - 17:25:51)

 
 Top
cjA Post Id



Генерал


Сообщений всего: 3291
Дата рег-ции: Янв. 2010  



О! Ну да, корпуса разные бывают.
А по схеме mihail'а - раньше все было правильно
beam, выложи уже свою прогу которую шьешь?
 
 Top
mihail Post Id



Гуру


Сообщений всего: 1065
Дата рег-ции: Март 2010  



Изобрази как нибудь, то что хочешь получить в итоге.

Пример:

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

0 - не светящийся светодиод
1 - светящийся светодиод
(Добавление)
Забыл сказать, if( var_0 & (1<<k) ) это немного сокращенная запись. В полном виде она может выглядеть так: if( (var_0 & (1<<k)) != 0b00000000 )

(Отредактировано автором: 12 Июля, 2010 - 17:37:20)

 
 Top
beam Post Id



Главнокомандующий


Сообщений всего: 278
Дата рег-ции: Дек. 2009  



Спасибо,...Я разобрался,бегущяя строка идет нормально,...
(Добавление)
все 32 светодиода работают,
(Добавление)
<< сдвиг влево ....а в право тоже можно сдвигать?
 
 Top
nest Администратор Post Id



Администратор


Сообщений всего: 4866
Дата рег-ции: Сент. 2009  



beam пишет:
<< сдвиг влево ....а в право тоже можно сдвигать?
а вы попробуйте с ">>" :)
 
 Top
mihail Post Id



Гуру


Сообщений всего: 1065
Дата рег-ции: Март 2010  



beam пишет:
а в право тоже можно сдвигать?

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

0b10000000 >> 1 получится 0b01000000
0b10000000 >> 7 получится 0b00000001
 
 Top
cjA Post Id



Генерал


Сообщений всего: 3291
Дата рег-ции: Янв. 2010  



нет сдвигать вправо нельззя, только от младшего бита к старшему
можно подправить програмку так что будет казатья что огонек бежит в другую сторону, но
а- не знаю спосбны ли на это эти регистры
б- программа будет гораздо сложнее

покажи лучьще что получилось?
 
 Top
nest Администратор Post Id



Администратор


Сообщений всего: 4866
Дата рег-ции: Сент. 2009  



cjA пишет:
сдвигать вправо нельззя
это почему вдруг?

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

cjA, вы не путайте. В регистры можно вдвигнуть быстро и незаметно, а потом ждать сколько надо. Потом следующую "картинку" вдвинуть, опять ждать... ну и так далее, как смена кадров в телеке.
 
 Top
cjA Post Id



Генерал


Сообщений всего: 3291
Дата рег-ции: Янв. 2010  



я и сказал что не уверен что это регистры достаточно быстродействующие.
зависит кстати еще от светодиодов. может придется кондеры ставить.

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

ну нельзя для этих микросхем туда-обратно делать и все (гы-гы) читайте даташит
 
 Top
nest Администратор Post Id



Администратор


Сообщений всего: 4866
Дата рег-ции: Сент. 2009  



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

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

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

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

Хватит вам уже флеймить. А то это опять похоже на "декавольты".
 
 Top
Страниц (7): « 1 2 3 4 5 [6] 7 »
« Делимся опытом »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 





Powered by Exclusive Bulletin Board
ExBB FM 1.0 RC1 Smiles by Fool from Foolstown
  Яндекс.Метрика   Рейтинг@Mail.ru