реклама на сайте
подробности

 
 
> Some problems with writing into the pin of a port, it's impossible to write like "IO0PIN_bit.P0_6 = *p & 0x
Shedon
сообщение Oct 15 2006, 17:48
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 110
Регистрация: 30-11-04
Из: Nizhny Novgorod
Пользователь №: 1 262



Собственно сабж, был у меня кусок программы:
Код
#define SD            IO0PIN_bit.P0_6

for(unsigned char i=0; i<8; i++)
{
    SD = *p & 0x80;
    *p <<= 1;
    SCLK=1;
    SCLK=0;
    Sleep(2);
}

да вот заметил я, что в SD всегда ноль в независимоти от того, что находится в *p
перепивал код так
Код
#define SD            IO0PIN_bit.P0_6

for(unsigned char i=0; i<8; i++)
{
    if( *p & 0x80 ) SD = 1;
    else SD = 0;
    *p <<= 1;
    SCLK=1;
    SCLK=0;
    Sleep(2);
}

и заработало!
Кто-то сталкивался с подобным?

----------------------------------------
Процессор: LPC2214
Компилятор: IAR 4.30A
Отладчик: jLink
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Сергей Борщ
сообщение Oct 15 2006, 19:28
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Shedon @ Oct 15 2006, 20:48) *
Собственно сабж, был у меня кусок программы:

Кусок явно ошибочный.
*p & 0x80 может принимать значения либо 0 либо 0x80, из последнего в 1 бит умещается только последний бит, т.е. 0.

можно написать
SD = (*p & 0x80) != 0, тогда получится. Или SD = (*p & 0x80) ? 1 : 0; или как Вы придумали.

Для окончательного понимания предлагаю такой вариант:
Код
struct {
uint8_t tmp:8;
} var;

var.tmp = 0xFF;
++var.tmp;

чему будет равен var.tmp?


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th July 2025 - 04:56
Рейтинг@Mail.ru


Страница сгенерированна за 0.01374 секунд с 7
ELECTRONIX ©2004-2016