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


 Страниц (1): [1]   

> Без описания
Электрик Post Id


Рядовой


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



Нужно считать состояние 5 (пяти) переключателей на выводах PORD
0,1,2,3,4 и затем вывести некоторую команду на выводы PORTD 5,6,7.
Печатная плата уже сделана с такой разводкой проводников.
С конфигурацией понятно:
DDRD = 0b11100000;
PORTD = 0x00; // ставим Ноль на входах и выходах.

Как считать состояние пяти переключателей, побитно их анализировать и
принять решение для выдачи сигналов (1 или 0) на выходы?

Третья часть задачи понятна - условие if-elseif. Но как решить части задачи 1 и 2? Как считать переключатели-входы и анализировать их биты? Замешательство
 
 Top
Predator Супермодератор Post Id


Супермодератор


Сообщений всего: 1307
Дата рег-ции: Июль 2012  



1) что за контроллер?

анализировать примерно так:
CODE:

portstate=PIND;
if(portstate&0x80=0)
{ дела, которые нужно делать если в старшем бите 0}
else
{ дела, которые нужно делать если в старшем бите 1};

 
 Top
Электрик Post Id


Рядовой


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



Мой контроллер ATMEGA8.
Да, похоже способ, вами предложенный, может анализировать состояние переключателя.
Как организовать цикл для перебора адресов бита от 0-го до 7-го? Это будет последовательность Hex адресов 1, 2, 4, 8, 10, 20, 40, 80 вероятно
 
 Top
Predator Супермодератор Post Id


Супермодератор


Сообщений всего: 1307
Дата рег-ции: Июль 2012  



примерно так:

CODE:

portstate=PIND;
for (i=0;i<8;i++)
{
if(portstate&0x80=0)
{ дела, которые нужно делать если в текущем бите 0}
else
{ дела, которые нужно делать если в текущем бите 1};
portstate=porrtstate<<1;
}

т.е. анализировать старший бит, сдвигать на 1 бит влево -старшим стал следующий....
есть варианты.
P.S. в АВРах я не разбираюсь (а в контроллерах вообще - есть немного).
 
 Top
Электрик Post Id


Рядовой


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



Predator, вы уверены в содержимом в фигурных скобках?
Внутренний голос мне шепчет. что содержимое скобок надо поменять местами. В смысле "дела" для 0 и для 1 надо поменять местами.

if(portstate&0x80=0)
{ дела, которые нужно делать если в текущем бите 0}
else
{ дела, которые нужно делать если в текущем бите 1};
 
 Top
Predator Супермодератор Post Id


Супермодератор


Сообщений всего: 1307
Дата рег-ции: Июль 2012  



хуже, содержимое фигурных скобок правильное, в круглых нужно сравнение вместо присвоения.
было:
CODE:
if(portstate&0x80=0)

должно быть:
CODE:
if(portstate&0x80==0)
 
 Top
Страниц (1): [1]
« Программирование микроконтроллеров »


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





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