Технический форум
Вернуться   Технический форум > Электроника, самоделки и техника > Форум по электронике > Микропроцессоры


Ответ
 
Опции темы Опции просмотра
Старый 21.03.2013, 17:15   #1 (permalink)
Larik
Member
 
Регистрация: 26.12.2011
Сообщений: 39
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Нужна помощь по программированию на Си МК PIC

Здравствуйте.
При написании программы на Си для МК PIC столкнулся с проблемой организации задержек.
Стандартный файл в компиляторе HI-TECH Software "delay.h" заточен под 4 МГц, а мне необходимо работать с 20 МГц.
Есть ли у кого макрос или собранная функция задержки
Или что изменить в стандартом файле для корректной работы МК при организации задержек мкс и мс.

Благодарен за помощь в данном вопросе.
Larik вне форума   Ответить с цитированием

Старый 21.03.2013, 17:15
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Лучше сразу прояснить ситуацию прочитав схожие посты

Нужна помощь с БП
Нужна помощь
Нужна помощь !
Нужна помощь
Нужна помощь
Нужна помощь с БП

Старый 21.03.2013, 18:01   #2 (permalink)
korsaj
Member
 
Регистрация: 13.05.2011
Сообщений: 401
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 274
По умолчанию

http://diymicro.ru/pic-mk-eksperimen...etodiodom.html

Последний раз редактировалось korsaj; 21.03.2013 в 18:07
korsaj вне форума   Ответить с цитированием
Старый 21.03.2013, 21:54   #3 (permalink)
Larik
Member
 
Регистрация: 26.12.2011
Сообщений: 39
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Такие статьи я читал, но я говорил о том, что задержку необходимо организовать на 20Мгц частоты.
Larik вне форума   Ответить с цитированием
Старый 22.03.2013, 10:20   #4 (permalink)
korsaj
Member
 
Регистрация: 13.05.2011
Сообщений: 401
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 274
По умолчанию

ПЛОХО ЧИТАЛ!!!
Носом ткнуть НАДО!!!
Миниатюры
ashampoo_snap_2013.03.22_07h21m32s_001_.png  
korsaj вне форума   Ответить с цитированием
Старый 22.03.2013, 10:24   #5 (permalink)
korsaj
Member
 
Регистрация: 13.05.2011
Сообщений: 401
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 274
По умолчанию

Извините за агрессию...
korsaj вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 22.03.2013, 11:02   #6 (permalink)
Larik
Member
 
Регистрация: 26.12.2011
Сообщений: 39
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Вы знаете, всё ведь на так просто.
Полазив в папке с компилятором я нашёл только два фала, которые связаны с задержками, и то, один из них просто демонстрационный.

#include <htc.h> // Required to interface with delay routines

#ifndef _XTAL_FREQ
// Unless already defined assume 4MHz system frequency
// This definition is required to calibrate __delay_us() and __delay_ms()
#define _XTAL_FREQ 20000000
#endif

/** demonstration of various built-in delay mechanisms */
void main(void){
while(1){
NOP();
_delay(1000); // delay for 1000 instruction cycles
CLRWDT();
__delay_us(400); // delay for 400 microseconds
CLRWDT();
__delay_ms(2); // delay for 2 milliseconds
CLRWDT();
}
}




и файл с расширением ___.h

/*
* Delay functions for HI-TECH C on the PIC
*
* Functions available:
* DelayUs(x) Delay specified number of microseconds
* DelayMs(x) Delay specified number of milliseconds
*
* Note that there are range limits: x must not exceed 255 - for xtal
* frequencies > 12MHz the range for DelayUs is even smaller.
* To use DelayUs it is only necessary to include this file; to use
* DelayMs you must include delay.c in your project.
*
*/

/* Set the crystal frequency in the CPP predefined symbols list in
HPDPIC, or on the PICC commmand line, e.g.
picc -DXTAL_FREQ=4MHZ

or
picc -DXTAL_FREQ=100KHZ

Note that this is the crystal frequency, the CPU clock is
divided by 4.

* MAKE SURE this code is compiled with full optimization!!!

*/

#ifndef XTAL_FREQ
#define XTAL_FREQ 4MHZ /* Crystal frequency in MHz */
#endif

#define MHZ *1000L /* number of kHz in a MHz */
#define KHZ *1 /* number of kHz in a kHz */

#if XTAL_FREQ >= 12MHZ

#define DelayUs(x) { unsigned char _dcnt; \
_dcnt = (x)*((XTAL_FREQ)/(12MHZ)); \
while(--_dcnt != 0) \
continue; }
#else

#define DelayUs(x) { unsigned char _dcnt; \
_dcnt = (x)/((12MHZ)/(XTAL_FREQ))|1; \
while(--_dcnt != 0) \
continue; }
#endif

extern void DelayMs(unsigned char);
Larik вне форума   Ответить с цитированием
Старый 22.03.2013, 11:04   #7 (permalink)
Larik
Member
 
Регистрация: 26.12.2011
Сообщений: 39
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Только незадача, как подогнать их на мою частоту, чтоб можно было использовать полноценно мс и мкс..

Насчёт команды _delay_ms(n) так вот она не компилится, т.к такая комбинация нигде в подгрузочных файлах не встречается...
Larik вне форума   Ответить с цитированием
Старый 22.03.2013, 12:52   #8 (permalink)
korsaj
Member
 
Регистрация: 13.05.2011
Сообщений: 401
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 274
По умолчанию

Какая у вас версия компилатора? И выложите сюда ваш "delay.h".
korsaj вне форума   Ответить с цитированием
Старый 22.03.2013, 12:56   #9 (permalink)
korsaj
Member
 
Регистрация: 13.05.2011
Сообщений: 401
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 274
По умолчанию

Цитата:
Сообщение от Larik Посмотреть сообщение
Насчёт команды _delay_ms(n) так вот она не компилится, т.к такая комбинация нигде в подгрузочных файлах не встречается...
А первый пример компилится?
Код:
#include <htc.h> // Required to interface with delay routines

#ifndef _XTAL_FREQ
// Unless already defined assume 4MHz system frequency
// This definition is required to calibrate __delay_us() and __delay_ms()
#define _XTAL_FREQ 20000000
#endif

/** demonstration of various built-in delay mechanisms */
void main(void){
while(1){
NOP();
_delay(1000); // delay for 1000 instruction cycles
CLRWDT();
__delay_us(400); // delay for 400 microseconds
CLRWDT();
__delay_ms(2); // delay for 2 milliseconds
CLRWDT();
}
}
korsaj вне форума   Ответить с цитированием
Старый 22.03.2013, 17:47   #10 (permalink)
Larik
Member
 
Регистрация: 26.12.2011
Сообщений: 39
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

HI-TECH Software 9.7
Единственный файл именуемый delay.h в компиляторе выглядит так вот:

/*
* Delay functions for HI-TECH C on the PIC
*
* Functions available:
* DelayUs(x) Delay specified number of microseconds
* DelayMs(x) Delay specified number of milliseconds
*
* Note that there are range limits: x must not exceed 255 - for xtal
* frequencies > 12MHz the range for DelayUs is even smaller.
* To use DelayUs it is only necessary to include this file; to use
* DelayMs you must include delay.c in your project.
*
*/

/* Set the crystal frequency in the CPP predefined symbols list in
HPDPIC, or on the PICC commmand line, e.g.
picc -DXTAL_FREQ=4MHZ

or
picc -DXTAL_FREQ=100KHZ

Note that this is the crystal frequency, the CPU clock is
divided by 4.

* MAKE SURE this code is compiled with full optimization!!!

*/

#ifndef XTAL_FREQ
#define XTAL_FREQ 4MHZ /* Crystal frequency in MHz */
#endif

#define MHZ *1000L /* number of kHz in a MHz */
#define KHZ *1 /* number of kHz in a kHz */

#if XTAL_FREQ >= 12MHZ

#define DelayUs(x) { unsigned char _dcnt; \
_dcnt = (x)*((XTAL_FREQ)/(12MHZ)); \
while(--_dcnt != 0) \
continue; }
#else

#define DelayUs(x) { unsigned char _dcnt; \
_dcnt = (x)/((12MHZ)/(XTAL_FREQ))|1; \
while(--_dcnt != 0) \
continue; }
#endif

extern void DelayMs(unsigned char);
Larik вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 06:47.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.