Си и AVR studio

Обсуждаем контроллеры компании Atmel.
Ответить
Открыл глаза
Сообщения: 55
Зарегистрирован: Чт май 30, 2013 15:05:07

Сообщение СергейКир »

Здравствуйте.
Среда - AVR studio 6
Язык - Си
МК - Mega8
Моделирую в Proteus
Пишу код

Код: Выделить всё

	 //начинаем основной цикл рабочего хода
	 
	 if (  ((PIND&(1 << PIND6)) == 0)) && ((PIND&(1 << PIND1)) == 1) )//если нажали вперёд и концевик 2 не замкнут то
	 {

	 }


При моделировании PIND6 - лог ноль, на PIND1 - лог единица (см. вложения).
Вопрос. Почему не срабатывает моё условие (см. код)?
Спасибо.
Вложения
project.jpg
(56.99 КБ) 284 скачивания
Реклама
Вымогатель припоя
Сообщения: 599
Зарегистрирован: Ср янв 06, 2010 10:01:46

Сообщение metan »

Здравствуйте.
Ошибка в том, что на месте PIND6 и PIND1 должны быть номера битов, а не их значения.
Вообще неплохо было бы сделать так:

Код: Выделить всё

#define   SetBit(reg, bit)          reg |= (1<<bit)            
#define   ClearBit(reg, bit)       reg &= (~(1<<bit))
#define   InvBit(reg, bit)         reg ^= (1<<bit)
#define   BitIsSet(reg, bit)       ((reg & (1<<bit)) != 0)
#define   BitIsClear(reg, bit)    ((reg & (1<<bit)) == 0)
пример использования:

Код: Выделить всё

SetBit(PORTB, 0);    //установить нулевой бит порта B    
InvBit(tmp,6);         //инвертировать шестой бит переменной tmp

…
if  (BitIsClear(PIND, 0)) {   //если очищен нулевой бит в регистре PIND                                     
…..                                     //выполнить блок
}
Реклама
Открыл глаза
Сообщения: 55
Зарегистрирован: Чт май 30, 2013 15:05:07

Сообщение СергейКир »

Спасибо за ответ.
Я только начинаю. Буду придерживаться Вашего совета. Сейчас попробую.
P.S. Кстати вот так

Код: Выделить всё

 if  (((PIND&(1 << PIND6)) == 0) && (!(PIND&(1 << PIND1)) == 0) )//если нажали вперёд и концевик 2 не замкнут то
	 {
         }
заработало. Но сделал по Вашему. Естественно всё получилось.
Спасибо ещё раз.
P.S.2 Здорово, когда тебе отвечают просто так, без "гугли" и без "всё же просто, подумай немного".
Ответить

Вернуться в «AVR»