Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как пользоваться такими хедерами (компилятор XC8, PIC12)
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > MCS51, AVR, PIC, STM8, 8bit
kt368
Здравствуйте!
В хедере для PIC12F508 есть упоминание о регистре OPTION:
Код
extern volatile __control unsigned char OPTION              @ 0x000;
И дефайны, которые как-то определяют биты этого регистра:
Код
#define                                 PS                  0x7
#define                                 PSA                 0x8
#define                                 T0SE                0x10
#define                                 T0CS                0x20
#define                                 nGPPU               0x40
#define                                 nGPWU               0x80
#define                                 PS0                 0x1
#define                                 PS1                 0x2
#define                                 PS2                 0x4
Как используя этот хедер обратиться напрямую к какому-либо биту сего регистра?
Если б был union OPTIONreg и struct, то можно было бы, например
Код
OPTIONreg.PSA
А как в вышеопиванном случае (без допиливания хедера вручную) - не понятно. Но я уверен, что как-то можно, ведь эти хедеры не глупые люди писали, наверно у них в голове был алгоритм, как ими пользоваться.
Заранее спасибо.
Палыч
Цитата(kt368 @ Dec 27 2012, 14:30) *
Как используя этот хедер обратиться напрямую к какому-либо биту сего регистра?

Вероятно как-то так:
Код
if(OPTION & X) { // выполнять что-то, если бит равен 1 }
OPTION &= ~X;  // Сбросить бит в ноль
OPTION |= X;  // Установить бит в 1
где Х - имя из приведенного Вами define
kt368
Спасибо, так должно сработать.
Но!
Компилятор почему-то не хочет выполнять операцию
Код
OPTION = OPTION & nGPPU;
Говорит, что регистр OPTION - только для записи, из него нельзя считать данные. И таки да, по даташиту этот регистр "write-only". Т.е. изменения его битов нужно только полностью его перезаписывать? Т.е. только так:
Код
OPTION = 0bXXXXXXXX;
Ruslan1
Цитата(kt368 @ Dec 27 2012, 21:06) *
Спасибо, так должно сработать.
Но!
Компилятор почему-то не хочет выполнять операцию
Код
OPTION = OPTION & nGPPU;
Говорит, что регистр OPTION - только для записи, из него нельзя считать данные. И таки да, по даташиту этот регистр "write-only". Т.е. изменения его битов нужно только полностью его перезаписывать? Т.е. только так:
Код
OPTION = 0bXXXXXXXX;

Ответ на Ваш вопрос: Да.
Пояснение: этот OPTION настолько Write-Only регистр в этом микроконтроллере, что не отображается в память, а запись в него производится специальной командой OPTION.
Это все однозначно описано в родной документации: http://ww1.microchip.com/downloads/en/devicedoc/41236d.pdf
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.