Jump to content

    

Some problems with writing into the pin of a port

Собственно сабж, был у меня кусок программы:

#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

Share this post


Link to post
Share on other sites
Собственно сабж, был у меня кусок программы:

Кусок явно ошибочный.

*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?

Share this post


Link to post
Share on other sites
из последнего в 1 бит умещается только последний бит, т.е. 0.

ступил, спасибо, просто как-то думалось что бит должен быть равен единице при любом значение не равном нулю

Share this post


Link to post
Share on other sites

зачем в русскоязычном форуме писать тему на английском ? Выпендрежа ради ? Не стОит, не оценят. В менее лояльных форумах плюсик бы точно выдали

Share this post


Link to post
Share on other sites
зачем в русскоязычном форуме писать тему на английском ?

Ну, например, для того, что-бы сообщения об ответе на эту тему уходили в том числе и на мобильного провайдера не подозревающего о существовании разнообразных 'русских' кодировок и на мобильнике можно было прочитать что это такое прибежало...

Здесь, вроде, не форум любителей вязания и каждый по определению обязан немного владеть английским. К чему такая достаточно резкая реакция?

Share this post


Link to post
Share on other sites

:bb-offtopic: :bb-offtopic: :bb-offtopic: :maniac:

 

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this