roboforum.ru

Технический форум по робототехнике.


Вопросы по Line Tracer

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

Re: Вопросы по Line Tracer

Сообщение Master » 01 апр 2008, 00:08

Терм, я конешно понимаю что на форуме ты самый молодой, но ты ведь не первый день на форуме? Это типа я скажу, собрал робота, а он не шивелится что делать?
Давай сюда:
1. Что должно получится в итоге?
2. Файлик проекта ВМлаба.
3. Текст программы.
4. и т. д.
Аватара пользователя
Master
 
Сообщения: 4468
Зарегистрирован: 21 дек 2006, 19:56
Откуда: Украина, г.Одесса
прог. языки: Delphi и С

Re: Вопросы по Line Tracer

Сообщение Vooon » 01 апр 2008, 14:38

Myp писал(а):1.
Код: Выделить всёРазвернуть
if (!(PIND & (1<<PIND.1))) // проверить "0" на линии 1 порта D

2.
Код: Выделить всёРазвернуть
if PIND.1 == 0 // проверить "0" на линии 1 порта D


1.
наверное всеже не PIND.1, а PD1
ибо PINx.y, на сколько помню, понимает только CV

в avrlibc определены позиции всех битов всех регистров как номер бита
те PD1 == 0x01

пользоваться _BV() я не люблю, т.к. писать нифига не меньше
это всего лишь макрос:
Код: Выделить всёРазвернуть
#define _BV(x) (1<<x)


а операция достаточно проста:
предположим что PIND = 0b00001010,
тогда:
msk = 0b00000001 << 1 => 0b00000010
PIND & msk => 0b00001010 & 0b00000010 => 0b00000010 > 0 == True
а если PIND = 0b01101000, то
PIND & msk => 0b01101000 & 0b00000010 => 0b00000000 == 0 == False

кстати чтобы не писать это есть макрос bit_is_set() (изучать хедеры avrlibc)

2.
код становится непереносим на другие компиляторы
Linux user | Firefox user
Аватара пользователя
Vooon
Site Admin
 
Сообщения: 3339
Зарегистрирован: 09 фев 2006, 15:36
Откуда: Москва
Skype: vooon341
прог. языки: Python, C, Bash, JavaScript, C++, PHP
ФИО: Владимир Ермаков

Пред.

Вернуться в Идеи

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 38