Нужно считать состояние 5 (пяти) переключателей на выводах PORD
0,1,2,3,4 и затем вывести некоторую команду на выводы PORTD 5,6,7.
Печатная плата уже сделана с такой разводкой проводников.
С конфигурацией понятно:
DDRD = 0b11100000;
PORTD = 0x00; // ставим Ноль на входах и выходах.
Как считать состояние пяти переключателей, побитно их анализировать и
принять решение для выдачи сигналов (1 или 0) на выходы?
Третья часть задачи понятна - условие if-elseif. Но как решить части задачи 1 и 2? Как считать переключатели-входы и анализировать их биты?
1. Электрик - 09 Марта, 2013 - 11:50:22 - перейти к сообщению
2. Predator - 09 Марта, 2013 - 11:59:00 - перейти к сообщению
1) что за контроллер?
анализировать примерно так:
анализировать примерно так:
CODE:
portstate=PIND;
if(portstate&0x80=0)
{ дела, которые нужно делать если в старшем бите 0}
else
{ дела, которые нужно делать если в старшем бите 1};
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 вероятно
Да, похоже способ, вами предложенный, может анализировать состояние переключателя.
Как организовать цикл для перебора адресов бита от 0-го до 7-го? Это будет последовательность Hex адресов 1, 2, 4, 8, 10, 20, 40, 80 вероятно
4. Predator - 09 Марта, 2013 - 21:26:14 - перейти к сообщению
примерно так:
т.е. анализировать старший бит, сдвигать на 1 бит влево -старшим стал следующий....
есть варианты.
P.S. в АВРах я не разбираюсь (а в контроллерах вообще - есть немного).
CODE:
portstate=PIND;
for (i=0;i<8;i++)
{
if(portstate&0x80=0)
{ дела, которые нужно делать если в текущем бите 0}
else
{ дела, которые нужно делать если в текущем бите 1};
portstate=porrtstate<<1;
}
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};
Внутренний голос мне шепчет. что содержимое скобок надо поменять местами. В смысле "дела" для 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)