Форум myROBOT.ru » Шаг за шагом » Программирование микроконтроллеров » Как считать состояние переключателей на входах?

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

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

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

Третья часть задачи понятна - условие if-elseif. Но как решить части задачи 1 и 2? Как считать переключатели-входы и анализировать их биты? Замешательство
2. Predator - 09 Марта, 2013 - 11:59:00 - перейти к сообщению
1) что за контроллер?

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

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

3. Электрик - 09 Марта, 2013 - 20:57:11 - перейти к сообщению
Мой контроллер ATMEGA8.
Да, похоже способ, вами предложенный, может анализировать состояние переключателя.
Как организовать цикл для перебора адресов бита от 0-го до 7-го? Это будет последовательность Hex адресов 1, 2, 4, 8, 10, 20, 40, 80 вероятно
4. Predator - 09 Марта, 2013 - 21:26:14 - перейти к сообщению
примерно так:

CODE:

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

т.е. анализировать старший бит, сдвигать на 1 бит влево -старшим стал следующий....
есть варианты.
P.S. в АВРах я не разбираюсь (а в контроллерах вообще - есть немного).
5. Электрик - 10 Марта, 2013 - 15:05:19 - перейти к сообщению
Predator, вы уверены в содержимом в фигурных скобках?
Внутренний голос мне шепчет. что содержимое скобок надо поменять местами. В смысле "дела" для 0 и для 1 надо поменять местами.

if(portstate&0x80=0)
{ дела, которые нужно делать если в текущем бите 0}
else
{ дела, которые нужно делать если в текущем бите 1};
6. Predator - 10 Марта, 2013 - 17:17:50 - перейти к сообщению
хуже, содержимое фигурных скобок правильное, в круглых нужно сравнение вместо присвоения.
было:
CODE:
if(portstate&0x80=0)

должно быть:
CODE:
if(portstate&0x80==0)