Цитата(skef @ Mar 3 2013, 10:44)

Проблема заключается в том, что компилятор космик устанавливает бит который не нужно устанавлитвать.
Вот что в таких случаях характерно, так это уверенность пишущего, что он д’Артаньян, а разработчики компилятора сами знаете кто.
Чуть что — сразу «баг», «компилятор самовольно».
Ну кто же признается, что он
книжкой по С он в туалете пользовался, а теперь обосрался, а подтереться нечем сам ошибся.
Цитата(skef @ Mar 3 2013, 10:44)

#define TEST 2
Все слова TEST в коде тупо заменяются буквой 2
Цитата(skef @ Mar 3 2013, 10:44)

PB_ODR = (TEST<<1);// Мы устанавливает "1" на вывод 2 порта В
Число 2 сдвинули влево на один бит и получили число 4. Записали его в порт и получили там нули везде, кроме бита с номером 2. Ура, вывод с номером установился в 1-ку. Случайно совпало (а то у компилятора нашлась бі еще одна бага) так как если бы написали
#define TEST 3
то вывод 3 в единичку не установился бы, вместо этого установились бы выводы 2 и 1.
Цитата(skef @ Mar 3 2013, 10:44)

PB_ODR = (TEST<<0);//Мы устанавливает "0" на вывод 2 порта В
Число 2 сдвинули влево на 0 бит, т.е. оставили число 2. И записали в регистр порта число 2. И получили вполне ожидаемое значение 1 на ножке с номером 1.
Это не то, чего ожидали и нужно на форумах спрашивать, как это «обойти», что сделать, чтобы «гарантировано исключить подобные ситуации».
Говорю как обойти и как исключить:
- Перестать верить в то, что ты д’Артаньян, а
Билл Гейтс Windows Linux IAR GCC, тьху, Cosmic — кака бяка. - Везде сначала искать ошибку себя, нежно любимого и глубоко уважаемого.
- Читать книжки, как это ни странно звучит.
P.S. Пора идти к MBedder-у на курсы по соответствующей лексике. Зла просто не хватает.