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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Начал разбираться с IAR AVR, появились и будут появляться вопросы
eXeC001er
сообщение Sep 9 2005, 08:30
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 305
Регистрация: 23-02-05
Из: Краснодар
Пользователь №: 2 848



if ((PINB &= 0xFE) == 1)
правильно ли я проверяю 1 в нулевом бите PINB
==================================
command |= (PINB &= 0xFE);
правильно переношу PINB.0 в нулевой бит command
===================================
можно делать так:

OCR1 = ICR1 + Bit_75;

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

tempor = ICR1 + Bit_75;
OCR1 = tempor;
Go to the top of the page
 
+Quote Post
KRS
сообщение Sep 9 2005, 08:36
Сообщение #2


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(eXeC001er @ Sep 9 2005, 11:30)
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;
Go to the top of the page
 
+Quote Post
eXeC001er
сообщение Sep 9 2005, 08:46
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 305
Регистрация: 23-02-05
Из: Краснодар
Пользователь №: 2 848



Следующий

static char count_bit = 0;

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

если я ее объявлю вот так, то чему она будет равна?!
Go to the top of the page
 
+Quote Post
KRS
сообщение Sep 9 2005, 08:49
Сообщение #4


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Вообще все эти вопросы не по IAR AVR, а по С
все в соответсвии со стандартом.
Порты - обычные перменные volatile
Прерывание - обычная функция, только с другим прологом и эпилогом
Go to the top of the page
 
+Quote Post
eXeC001er
сообщение Sep 9 2005, 08:54
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 305
Регистрация: 23-02-05
Из: Краснодар
Пользователь №: 2 848



ладна сам отвечу на свой вопрос (книгу открыл)
она будет проинициализированна только один раз.
Go to the top of the page
 
+Quote Post
PaulS
сообщение Sep 9 2005, 08:58
Сообщение #6





Группа: Новичок
Сообщений: 9
Регистрация: 28-01-05
Пользователь №: 2 265



command |= (PINB &= 0xFE);
правильно переношу PINB.0 в нулевой бит command

Это тоже не совсем правильно, надо или очищать предварительно
0 бит в command, а то первая же 1 там навсегда и останется
или например так делать

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

И лучше сразу вместо 0 писАть символьное имя
для улучшения читабельности.
Go to the top of the page
 
+Quote Post
eXeC001er
сообщение Sep 9 2005, 08:59
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 305
Регистрация: 23-02-05
Из: Краснодар
Пользователь №: 2 848



Другой вопрос именно по IAR
у него в *.h файлах написаны объявления
типа
#define ICR1 1
но они не работают при использовании этих имен из С конструкций, а в файле написано что это объявления для Ассемблера, пришлось их скопировать в свой h файл, шоб работало, почему так, что мне в каждом новом проекте такие операции проводить?!
Go to the top of the page
 
+Quote Post
eXeC001er
сообщение Sep 9 2005, 09:01
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 305
Регистрация: 23-02-05
Из: Краснодар
Пользователь №: 2 848



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

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

после принятия всех битов и обработки, command обнуляется
Go to the top of the page
 
+Quote Post
KRS
сообщение Sep 9 2005, 09:08
Сообщение #9


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(eXeC001er @ Sep 9 2005, 12:01)
to PaulS
у меня там вот такая конструкция

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

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


command будет равнв 0 если 0 бит порта 0
или будет равна 2
в симуляторе IAR будет 0 (потому что PINB 0)? если туда конечно не записать другое значение
Go to the top of the page
 
+Quote Post
KRS
сообщение Sep 9 2005, 09:11
Сообщение #10


Профессионал
*****

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Цитата(eXeC001er @ Sep 9 2005, 11:59)
Другой вопрос именно по IAR
у него в *.h файлах написаны объявления
типа
#define ICR1  1
но они не работают при использовании этих имен из С конструкций, а в файле написано что это объявления для Ассемблера, пришлось их скопировать в свой h файл, шоб работало, почему так, что мне в каждом новом проекте такие операции проводить?!
*



вообще для С у IAR используются не #define
а специальные макросы типа
SFR_B(PINB, 0x16) /* Input Pins, Port B */
таким образом и обявляется порт
макрос преобразуется в определение переменной volatile по определенному адресу
Go to the top of the page
 
+Quote Post
eXeC001er
сообщение Sep 9 2005, 09:17
Сообщение #11


Местный
***

Группа: Свой
Сообщений: 305
Регистрация: 23-02-05
Из: Краснодар
Пользователь №: 2 848



да я это обнаружил но это савсем не удобно! только номера битов и все а имен нет!
там для примера есть конструкция
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; не работает
Go to the top of the page
 
+Quote Post
eXeC001er
сообщение Sep 9 2005, 09:45
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 305
Регистрация: 23-02-05
Из: Краснодар
Пользователь №: 2 848



еще вопрос по среде
в даташите сказанол что при чтении 16 битных регистров надо соблюдать определенный порядок, так вот если я обращаюсь ко всему регистру сразу например
TCNT1 = 0xFFD0;
при транстляции это дело сделается как указано в даташите, или надо в С конструкциях тоже придерживаться требований даташита?!
Go to the top of the page
 
+Quote Post
Rst7
сообщение Sep 9 2005, 09:50
Сообщение #13


Йа моск ;)
******

Группа: Модераторы
Сообщений: 4 345
Регистрация: 7-07-05
Из: Kharkiv-city
Пользователь №: 6 610



Цитата(eXeC001er @ Sep 9 2005, 12:17)
TIMSK_bit5 = 1;          не работает
*


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


--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
Go to the top of the page
 
+Quote Post
eXeC001er
сообщение Sep 9 2005, 10:10
Сообщение #14


Местный
***

Группа: Свой
Сообщений: 305
Регистрация: 23-02-05
Из: Краснодар
Пользователь №: 2 848



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

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

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

Но все равно спасибо. Сам нашел.
В опциях проекта >> general >> Library Configuration
Go to the top of the page
 
+Quote Post
PaulS
сообщение Sep 9 2005, 10:44
Сообщение #15





Группа: Новичок
Сообщений: 9
Регистрация: 28-01-05
Пользователь №: 2 265



Цитата(eXeC001er @ Sep 9 2005, 12:17)
да я это обнаружил но это савсем не удобно! только номера битов и все а имен нет!
TIMSK |= (1<<5);        работает
а
TIMSK_bit5 = 1;          не работает
*


Так пиши не номера, а имена и все понятно будет smile.gif

TIMSK |= (1<<TICIE1);

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

Цитата(eXeC001er @ Sep 9 2005, 12:01)
у меня там вот такая конструкция

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

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


А ну тогда все ОК, вдвигаться всегда будет 0
Go to the top of the page
 
+Quote Post

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

 


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


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