Перейти к содержанию
    

Начал разбираться с IAR AVR

if ((PINB &= 0xFE) == 1)

правильно ли я проверяю 1 в нулевом бите PINB

==================================

command |= (PINB &= 0xFE);

правильно переношу PINB.0 в нулевой бит command

===================================

можно делать так:

 

OCR1 = ICR1 + Bit_75;

 

или лучше вот так:

 

tempor = ICR1 + Bit_75;

OCR1 = tempor;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

if ((PINB &= 0xFE) == 1)

правильно ли я проверяю 1 в нулевом бите PINB

==================================

command |= (PINB &= 0xFE);

правильно переношу PINB.0 в нулевой бит command

===================================

можно делать так:

 

OCR1 = ICR1 + Bit_75;

 

или лучше вот так:

 

tempor = ICR1 + Bit_75;

OCR1 = tempor;

 

 

1. Не правильно

надо так

if (PINB & 1)

 

а вот так можно

OCR1 = ICR1 + Bit_75;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Следующий

 

static char count_bit = 0;

 

если я в обработчике прерываний объявлю переменную вот так она будет при каждом заходе обнуляться или нет

==============================================

static char count_bit;

 

если я ее объявлю вот так, то чему она будет равна?!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вообще все эти вопросы не по IAR AVR, а по С

все в соответсвии со стандартом.

Порты - обычные перменные volatile

Прерывание - обычная функция, только с другим прологом и эпилогом

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ладна сам отвечу на свой вопрос (книгу открыл)

она будет проинициализированна только один раз.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

command |= (PINB &= 0xFE);

правильно переношу PINB.0 в нулевой бит command

 

Это тоже не совсем правильно, надо или очищать предварительно

0 бит в command, а то первая же 1 там навсегда и останется

или например так делать

 

if(PINB & 1) command |= (0<<1);

else command &= ~(0<<1);

 

И лучше сразу вместо 0 писАть символьное имя

для улучшения читабельности.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Другой вопрос именно по IAR

у него в *.h файлах написаны объявления

типа

#define ICR1 1

но они не работают при использовании этих имен из С конструкций, а в файле написано что это объявления для Ассемблера, пришлось их скопировать в свой h файл, шоб работало, почему так, что мне в каждом новом проекте такие операции проводить?!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

to PaulS

у меня там вот такая конструкция

 

command |= (PINB & 1);

command = command << 1;

 

после принятия всех битов и обработки, command обнуляется

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

to PaulS

у меня там вот такая конструкция

 

command |= (PINB & 1);

command = command << 1;

 

после принятия всех битов и обработки, command обнуляется

 

command будет равнв 0 если 0 бит порта 0

или будет равна 2

в симуляторе IAR будет 0 (потому что PINB 0)? если туда конечно не записать другое значение

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Другой вопрос именно по IAR

у него в *.h файлах написаны объявления

типа

#define ICR1  1

но они не работают при использовании этих имен из С конструкций, а в файле написано что это объявления для Ассемблера, пришлось их скопировать в свой h файл, шоб работало, почему так, что мне в каждом новом проекте такие операции проводить?!

 

 

вообще для С у IAR используются не #define

а специальные макросы типа

SFR_B(PINB, 0x16) /* Input Pins, Port B */

таким образом и обявляется порт

макрос преобразуется в определение переменной volatile по определенному адресу

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

да я это обнаружил но это савсем не удобно! только номера битов и все а имен нет!

там для примера есть конструкция

Examples of how to use the expanded result:

1) AVR |= (1<<5);

* or like this:

2) AVR_Bit5 = 1;

 

первая работает (но опять же нет имен, плохо!)

вторая отказывается работать

вместо AVR понятно что я подставляю имя регистра.

например

TIMSK |= (1<<5); работает

а

TIMSK_bit5 = 1; не работает

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

еще вопрос по среде

в даташите сказанол что при чтении 16 битных регистров надо соблюдать определенный порядок, так вот если я обращаюсь ко всему регистру сразу например

TCNT1 = 0xFFD0;

при транстляции это дело сделается как указано в даташите, или надо в С конструкциях тоже придерживаться требований даташита?!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

TIMSK_bit5 = 1;          не работает

 

Enable bit definition поможет плохому танцору :-) шутка...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

просьба отвечайте полнее,

 

/quote

Enable bit definition поможет плохому танцору :-) шутка...

/quote

 

попробуй разберись где искать этот Enable bit definition, а может его в начале проекта прописывать для препроцессора.

 

Но все равно спасибо. Сам нашел.

В опциях проекта >> general >> Library Configuration

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

да я это обнаружил но это савсем не удобно! только номера битов и все а имен нет!

TIMSK |= (1<<5);        работает

а

TIMSK_bit5 = 1;          не работает

 

Так пиши не номера, а имена и все понятно будет :)

 

TIMSK |= (1<<TICIE1);

 

А битам внешних регистров сам присвой имена в зависимости от назначения

 

у меня там вот такая конструкция

 

command |= (PINB & 1);

command = command << 1;

 

после принятия всех битов и обработки, command обнуляется

 

А ну тогда все ОК, вдвигаться всегда будет 0

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...