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

 
 
> Работа с битами регистров
rekcuf
сообщение Jul 28 2009, 17:43
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 28
Регистрация: 5-10-08
Пользователь №: 40 704



Впервые делаю проект на атмеге8, компилятор IAR.

Что надо сделать, чтобы работать с битами похожим образом:

Код
PORTB.PB1 = 1;
PORTB_PB1 = 0;
PC1 = 0;

if(PORTA.PA0)
...

?

Сейчас работает только один способ:
Код
PORTB |= (1 << PB2);

if((PORTB & (1 << PB2)))
...

Но после компиляторов для микрочипа PICC18 и MCC18 такой способ кажется дикостью и жутко неудобен.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
SasaVitebsk
сообщение Feb 26 2010, 13:43
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Рекомендую пользоваться стандартным представлением.
Типа
PORTB |= (1<<PIN5);
Это поможет вам легко переходить от камня к камню и исключит некоторые ошибки.

Для того чтобы всё было лаконично - заведите файл описаний (у меня, к примеру, port.h) и поименуйте осмысленно там ваши ноги.

Например:

// PORTB
#define LEDPWR 5
#define LEDPWR_ON PORTB &= ~(1<<LEDPWR)

и так далее.
Это обеспечит:
1) Возможность простого осмысленного анализа схемы по тексту проги. Из одного места. Например сразу видно что к PB5 подрублен
светодиод и зажигается он нулём.
2) Возможность быстрого внесения изменений в программу минимальными корректировками. Например сменить порт, поменять пины,
сменить полярность.
3) Возможность ввода нескольких версий платы не меняя логики её работы (например после переразводки)
4) Возможность переноса на другую платформу (необходимо поменять логику работы с портами)
Go to the top of the page
 
+Quote Post
igneous
сообщение Mar 1 2010, 05:47
Сообщение #3





Группа: Участник
Сообщений: 8
Регистрация: 17-10-07
Из: Чебоксары
Пользователь №: 31 432



Спасибо за ответы - разобрался на свежую голову...

Цитата(SasaVitebsk @ Feb 26 2010, 16:43) *
Рекомендую пользоваться стандартным представлением.
Типа
PORTB |= (1<<PIN5);
Это поможет вам легко переходить от камня к камню и исключит некоторые ошибки.

Ну это - да, в основном этим и пользуюсь просто необходимо было быстро портировать готовую прогу с одного камня на другой.
И в проге как раз использовались обращения к битовым полям. Просто сделал копию структуры с битовыми полями:
Код
SFR_B_R(0x0000, GPIO0bf);

и появилась возможность делать
Код
GPIO0bf_Bit0=1;
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 9th August 2025 - 03:48
Рейтинг@Mail.ru


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