Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: PCW и калибровка встроенного генератора
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > PIC
Eddy71
Вопрос может и дурацкий, но перечитал всё, что в хэлпе было и не нашел, как в 12Fxxx, 16Fxxx калибровочное значение в OSCTUNE загонять. В асме то понятно, но не верится, что типовую процедуру в компилятор не вставили. В мануале только PIC14000 и 18-я серия, но там совсем всё по-другому. Неужели только через #asm_#endasm втыкать?
kimstik
Может я не понял вопроса, но что мешает просто туда записать значение?
типа
OSCTUNE = 0x35;
Vlad27
В OSCTUNE присваиванием, в OSCCAL типа такого, наверное:

Код
const unsigned char CALIB @ 0x03FF;

void main(void)
{
  OSCCAL = CALIB;
  ...
}
xemul
Может так покатит?
Код
#define OSCCAL_ADDR 0x3ff
OSCCAL = (*(unsigned char(*)(void))OSCCAL_ADDR)();

И очень сомневаюсь, что нечто подобное отсутствует в хидерах.

А в PCW все SFR переиначены на свой лад?
Eddy71
Цитата(xemul @ Mar 4 2009, 15:19) *
Может так покатит?
Код
#define OSCCAL_ADDR 0x3ff
OSCCAL = (*(unsigned char(*)(void))OSCCAL_ADDR)();

И очень сомневаюсь, что нечто подобное отсутствует в хидерах.

А в PCW все SFR переиначены на свой лад?


В хидере на тот же 12Ф629 есть только закомментированная строчка:
//////// Oscilator Calibration Address: 90
Там идеология не записи в SFR каких-то констант как в асме, а готовые команды
типа:
Код
setup_ccp1(CCP_COMPARE_CLR_ON_MATCH);  // Configure CCP1 in COMPARE mode


Хотя за неделю знакомства компилятор очень понравился. Сообразительный.
Если в программе попадается что-то вроде х/8, он сам вставляет rrf. Код получается очень быстрый и компактный.
xemul
Цитата(Eddy71 @ Mar 4 2009, 15:01) *
В хидере на тот же 12Ф629 есть только закомментированная строчка:
//////// Oscilator Calibration Address: 90

Занятно. Вы хотите сказать, что объявления типа
static bank1 unsigned char OSCCAL @ 0x90;
в хидерах отсутствуют?
Цитата
Там идеология не записи в SFR каких-то констант как в асме, а готовые команды
типа:
Код
setup_ccp1(CCP_COMPARE_CLR_ON_MATCH);  // Configure CCP1 in COMPARE mode

Надеюсь, что такие обертки - не единственная приятность PCW.
Цитата
Хотя за неделю знакомства компилятор очень понравился. Сообразительный.
Если в программе попадается что-то вроде х/8, он сам вставляет rrf. Код получается очень быстрый и компактный.

smile.gif Если бы он так не делал, то дорога ему была бы только "ф топку".
А как он при этом с CARRY обращается? Чистит/устанавливает перед каждым сдвигом? Или соображает, что можно маской после сдвигов?
А во что он компилит x/16? А x/128?
Eddy71
Цитата(xemul @ Mar 4 2009, 16:47) *
Занятно. Вы хотите сказать, что объявления типа
static bank1 unsigned char OSCCAL @ 0x90;
в хидерах отсутствуют?

В том-то и дело, там этого нет. Уже б разобрался..

Цитата
Надеюсь, что такие обертки - не единственная приятность PCW.
А как он при этом с CARRY обращается? Чистит/устанавливает перед каждым сдвигом? Или соображает, что можно маской после сдвигов?
А во что он компилит x/16? А x/128?

Вот из того, что вчера писал:
Код
....................                 PauseTimer=PropTone/16;
022E:  RRF    39,W
022F:  MOVWF  23
0230:  RRF    38,W
0231:  MOVWF  22
0232:  RRF    23,F
0233:  RRF    22,F
0234:  RRF    23,F
0235:  RRF    22,F
0236:  RRF    23,F
0237:  RRF    22,F
0238:  MOVF   22,W
0239:  MOVWF  3D

Багов при исполнении не обнаружил.
Для работы с обдельным битом его обозвать надо:
Код
#bit CARRY=STATUS.0

Зато флаги хранит в битах:
Код
int1 Done, Progress, ChargeMode;

Документация только кривоватая, а так прикрутился к МПлабу очень даже..
xemul
Цитата(Eddy71 @ Mar 4 2009, 16:17) *
Вот из того, что вчера писал:
Код
....................                 PauseTimer=PropTone/16;
022E:  RRF    39,W
022F:  MOVWF  23
0230:  RRF    38,W
0231:  MOVWF  22
0232:  RRF    23,F
0233:  RRF    22,F
0234:  RRF    23,F
0235:  RRF    22,F
0236:  RRF    23,F
0237:  RRF    22,F
0238:  MOVF   22,W
0239:  MOVWF  3D

Багов при исполнении не обнаружил.

По-видимому, u8_t PauseTimer; u16_t PropTone;? А что будет при PropTone > 2^12-1? Или такое невозможно по условию задачи? Компилятор хоть предупреждение выдает на такую конструкцию?
Похоже, сезон сбора шишек у Вас еще впередиsmile.gif

ЗЫЖ компилер (оптимизатор) мог бы и сообразить, что последний сдвиг можно прямо в W сделать.
Eddy71
Цитата(xemul @ Mar 4 2009, 16:44) *
По-видимому, u8_t PauseTimer; u16_t PropTone;? А что будет при PropTone > 2^12-1? Или такое невозможно по условию задачи? Компилятор хоть предупреждение выдает на такую конструкцию?
Похоже, сезон сбора шишек у Вас еще впередиsmile.gif
ЗЫЖ компилер (оптимизатор) мог бы и сообразить, что последний сдвиг можно прямо в W сделать.


Да, размерность правильная угадана. Только "перегрузки" в данном кусочке не будет - входное значение функции не бывает больше 1023..

С вопросом поспешил: разглядывая листинг с удивлением заметил, что компилятор сам всё уже вставил. Так как он без напоминания это делает, в мануале об этом ничего и не упомянули. Вопрос снят, тема закрыта.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.