Eddy71 0 4 марта, 2009 Опубликовано 4 марта, 2009 · Жалоба Вопрос может и дурацкий, но перечитал всё, что в хэлпе было и не нашел, как в 12Fxxx, 16Fxxx калибровочное значение в OSCTUNE загонять. В асме то понятно, но не верится, что типовую процедуру в компилятор не вставили. В мануале только PIC14000 и 18-я серия, но там совсем всё по-другому. Неужели только через #asm_#endasm втыкать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kimstik 0 4 марта, 2009 Опубликовано 4 марта, 2009 · Жалоба Может я не понял вопроса, но что мешает просто туда записать значение? типа OSCTUNE = 0x35; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Vlad27 0 4 марта, 2009 Опубликовано 4 марта, 2009 · Жалоба В OSCTUNE присваиванием, в OSCCAL типа такого, наверное: const unsigned char CALIB @ 0x03FF; void main(void) { OSCCAL = CALIB; ... } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xemul 0 4 марта, 2009 Опубликовано 4 марта, 2009 · Жалоба Может так покатит? #define OSCCAL_ADDR 0x3ff OSCCAL = (*(unsigned char(*)(void))OSCCAL_ADDR)(); И очень сомневаюсь, что нечто подобное отсутствует в хидерах. А в PCW все SFR переиначены на свой лад? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Eddy71 0 4 марта, 2009 Опубликовано 4 марта, 2009 · Жалоба Может так покатит? #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 0 4 марта, 2009 Опубликовано 4 марта, 2009 · Жалоба В хидере на тот же 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. Код получается очень быстрый и компактный. :) Если бы он так не делал, то дорога ему была бы только "ф топку". А как он при этом с CARRY обращается? Чистит/устанавливает перед каждым сдвигом? Или соображает, что можно маской после сдвигов? А во что он компилит x/16? А x/128? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Eddy71 0 4 марта, 2009 Опубликовано 4 марта, 2009 · Жалоба Занятно. Вы хотите сказать, что объявления типа 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 0 4 марта, 2009 Опубликовано 4 марта, 2009 · Жалоба Вот из того, что вчера писал: .................... 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? Или такое невозможно по условию задачи? Компилятор хоть предупреждение выдает на такую конструкцию? Похоже, сезон сбора шишек у Вас еще впереди:) ЗЫЖ компилер (оптимизатор) мог бы и сообразить, что последний сдвиг можно прямо в W сделать. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Eddy71 0 4 марта, 2009 Опубликовано 4 марта, 2009 · Жалоба По-видимому, u8_t PauseTimer; u16_t PropTone;? А что будет при PropTone > 2^12-1? Или такое невозможно по условию задачи? Компилятор хоть предупреждение выдает на такую конструкцию? Похоже, сезон сбора шишек у Вас еще впереди:) ЗЫЖ компилер (оптимизатор) мог бы и сообразить, что последний сдвиг можно прямо в W сделать. Да, размерность правильная угадана. Только "перегрузки" в данном кусочке не будет - входное значение функции не бывает больше 1023.. С вопросом поспешил: разглядывая листинг с удивлением заметил, что компилятор сам всё уже вставил. Так как он без напоминания это делает, в мануале об этом ничего и не упомянули. Вопрос снят, тема закрыта. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться