Я уже писал процедура void Delay_ms(
const unsigned long time_in_ms);
Переведу на русский - переменная time_in_ms или ваше i должны быть
константой!!! они не могут меняться в процессе работы, а определяются на момент компиляции!
Не правильно: delay_ms(i);
Правильно: delay_ms(30); или const unsigned long i = 30; delay_ms(i);
Для работ с переменный есть другие процедуры:
1. Процедура
Vdelay_msPrototype - void Vdelay_ms(
unsigned time_in_ms);
Description -
Creates a software delay in duration of time_in_ms milliseconds (a variable). Generated delay is not as precise as the delay created by Delay_ms.
Программная задержка в "условных" "time_in_ms" милисекунах, которая не привязана к частоте кварца.
Example pause = 1000;
// ...
Vdelay_ms(pause); // ~ one second pause
Минимальное значение 1 мс (не считаю 0
).
2. Процедура
VDelay_Advanced_ms (изначально предназначена для генерации милисекунд)
Prototype - void VDelay_Advanced_ms(
unsigned time_in_ms,
unsigned Current_Fosc_
kHz);
Description Creates a software delay in duration of time_in_ms milliseconds (a variable), for a given oscillator frequency. Generated delay is not as precise as the delay created by Delay_ms.
Программная задержка в "реальных" "time_in_ms" милисекунах, которая привязана к частоте кварца.
Example pause = 1000;
fosc = 10000; (Частоту вводим в килогерцах, т.е. 10МГц/1000=10000 кГц)
VDelay_Advanced_ms(pause, fosc); // Generates approximately one second pause, for a oscillator frequency of 10 MHz
unsigned = 0...65535, так что максимум типа 65,535 МГц.
Так что четкие и правильные микросекунды этой процедурой не получить.
При кварце 10МГц можно конечно ввести 50000, тогда при time_in_ms = 1 может быть задержка будет 0,2 мс или 200 мкс...
Добавлено спустя 8 минут 2 секунды:Re: Управление сервой с помощью потенциометра. МК PIC16F, язык СПотому и говорю, что проще написать свою процедуру для "микросекунд" или машинных инструкций.
типа пустого цикла с переменной i или ему подобного...
Добавлено спустя 9 минут 32 секунды:Re: Управление сервой с помощью потенциометра. МК PIC16F, язык СИ еще...
эти процедуры с большой натяжкой можно назвать процедурами...
"...Built-in Routines
mikroC PRO for PIC compiler provides a set of useful built-in utility functions. Built-in functions do not require any header files to be included; you can use them in any part of your project.
Built-in routines are implemented as “inline”; i.e. code is generated in the place of the call, so the call doesn’t count against the nested call limit. The only exceptions are Vdelay_ms, Delay_Cyc and Get_Fosc_kHz which are actual C routines.
Note: Lo, Hi, Higher and Highest functions are not implemented in compiler any more. If you want to use these functions you must include built_in.h into your project..."
Перевод гугль:
"Встроенные подпрограммы
mikroC PRO для компилятора ПОС предоставляет множество полезных встроенных функций полезности. Встроенные функции не требует каких-либо файлы заголовков, которые должны быть включены, вы можете использовать их в любую часть вашего проекта.
Встроенные процедуры реализуются как "встроенные", т.е. код генерируется на место вызова, так что вызов не засчитываются вложенных ограничения стека. Исключение составляют лишь Vdelay_ms, Delay_Cyc и Get_Fosc_kHz, которые являются действительно процедурами C.Примечание: Lo, Hi, Higher and Highest функции не реализованы больше в компиляторе. Если вы хотите использовать эти функции, вы должны включить built_in.h в ваш проект."