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

 
 
> Работа с битами регистров
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
zltigo
сообщение Feb 26 2010, 15:31
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(SasaVitebsk @ Feb 26 2010, 16:43) *
Рекомендую пользоваться стандартным представлением.

Полностью поддерживаю.
Цитата
Что надо...

Надо не привыкать к дикостям и ненужным уродствам производителей компиляторов и писателей хидеров к контроллерам (им надо несмышленышей к своей кормушке привязывать и не более того). Иначе неизбежно будете обречены изрекать: "после компиляторов для микрочипа PICC18 и MCC18 такой способ кажется дикостью и жутко неудобен". Хотя неудобен, нечитаем и ограничен (давайте пару бит за раз установим) именно кажущийся Вам "удобным" способ.
Пример приличного описания битов в регистре:

Код
#define S5_LIG1        BIT7
#define S5_LIG0        BIT6
#define S5_LIG(x)    (((x)&0x3)<<6)
#define S5_LIM        BIT5

#define S5_MCG1        BIT4
#define S5_MCG0        BIT3
#define S5_MCG(x)    (((x)&0x3)<<3)
#define S5_MCM        BIT2
#define S5_HIM        BIT1
#define S5_IIR        BIT0

.......

SI3000_S5 = S5_LIG(3)|S5_MCG(0)|S5_MCM|S5_HIM);

.....
SI3000_S5 |= S5_LIM;


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post



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

 


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


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