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

 
 
> Как пользоваться такими хедерами (компилятор XC8, PIC12)
kt368
сообщение Dec 27 2012, 10:30
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 454
Регистрация: 13-10-10
Из: Киев
Пользователь №: 60 135



Здравствуйте!
В хедере для 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
А как в вышеопиванном случае (без допиливания хедера вручную) - не понятно. Но я уверен, что как-то можно, ведь эти хедеры не глупые люди писали, наверно у них в голове был алгоритм, как ими пользоваться.
Заранее спасибо.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 3)
Палыч
сообщение Dec 27 2012, 10:57
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Цитата(kt368 @ Dec 27 2012, 14:30) *
Как используя этот хедер обратиться напрямую к какому-либо биту сего регистра?

Вероятно как-то так:
Код
if(OPTION & X) { // выполнять что-то, если бит равен 1 }
OPTION &= ~X;  // Сбросить бит в ноль
OPTION |= X;  // Установить бит в 1
где Х - имя из приведенного Вами define
Go to the top of the page
 
+Quote Post
kt368
сообщение Dec 27 2012, 19:06
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 454
Регистрация: 13-10-10
Из: Киев
Пользователь №: 60 135



Спасибо, так должно сработать.
Но!
Компилятор почему-то не хочет выполнять операцию
Код
OPTION = OPTION & nGPPU;
Говорит, что регистр OPTION - только для записи, из него нельзя считать данные. И таки да, по даташиту этот регистр "write-only". Т.е. изменения его битов нужно только полностью его перезаписывать? Т.е. только так:
Код
OPTION = 0bXXXXXXXX;
Go to the top of the page
 
+Quote Post
Ruslan1
сообщение Dec 27 2012, 19:41
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 360
Регистрация: 6-03-06
Из: Кишинев
Пользователь №: 15 025



Цитата(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
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 10:25
Рейтинг@Mail.ru


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