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

 
 
 
Reply to this topicStart new topic
> Команда delay, Keil uvision 8.02
VAHOO
сообщение Jan 19 2007, 21:16
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 163
Регистрация: 22-09-05
Пользователь №: 8 834



Всем привет! подскажите пожалуйста чем можно заменить команда
delay в Keil uvision 8.02, например delay (5) 5ms,

заранее спасибо!


--------------------
Прошивка это душа микроконтроллера!
Go to the top of the page
 
+Quote Post
gala
сообщение Jan 19 2007, 21:49
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 119
Регистрация: 29-11-05
Из: Украина, Черкассы
Пользователь №: 11 564



Применяю прерывание по таймеру = 1000Гц, которое модиф.
счетчикИ кождые 1, 10, 100 мс
Go to the top of the page
 
+Quote Post
VAHOO
сообщение Jan 19 2007, 22:20
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 163
Регистрация: 22-09-05
Пользователь №: 8 834



а без использавание таймера это не возможно?
у меня таймер работает для времени

Сообщение отредактировал VAHOO - Jan 19 2007, 22:25


--------------------
Прошивка это душа микроконтроллера!
Go to the top of the page
 
+Quote Post
VAHOO
сообщение Jan 20 2007, 23:53
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 163
Регистрация: 22-09-05
Пользователь №: 8 834



Qala, если не трудно дай кусок программы, заеранее спасибо!


--------------------
Прошивка это душа микроконтроллера!
Go to the top of the page
 
+Quote Post
Abakt
сообщение Jan 21 2007, 00:24
Сообщение #5


Участник
*

Группа: Новичок
Сообщений: 73
Регистрация: 10-01-07
Пользователь №: 24 292



вот у гугла спросил
http://www.google.ru/search?hl=ru&neww...1%D0%BA&lr=

много ответов и вот:

http://www.keil.com/support/docs/606.asp?bhcp=1


http://64.233.183.104/search?q=cache:RII1i...t=clnk&cd=7
Go to the top of the page
 
+Quote Post
VAHOO
сообщение Jan 22 2007, 22:50
Сообщение #6


Частый гость
**

Группа: Участник
Сообщений: 163
Регистрация: 22-09-05
Пользователь №: 8 834



нечего полезново не нашел, неужели ни кто не сталкивался с этим?

sad.gif help.gif


--------------------
Прошивка это душа микроконтроллера!
Go to the top of the page
 
+Quote Post
evg123
сообщение Jan 25 2007, 13:00
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 353
Регистрация: 11-09-06
Из: Минск
Пользователь №: 20 282



Единственный рабочий способ это (как предложил gala) с использованием таймера.
Запускаем таймер в 16 битном режиме с перезагрузкой с частотой 1кГц.
В прерывании пишем код

TIMER++; //глобальная переменная (unsigned int), пользовательский таймер

Подпрограммо задержки будет иметь вид

void Delay(unsigned int T) // 1T = 1мс
{
unsigned int TF;

TF=TIMER;
while((TIMER-TF)<T);//сама задержка

}

Применение

Delay(100); // задержка на 100 мс

Все ninja.gif

Сообщение отредактировал evg123 - Jan 25 2007, 13:02
Go to the top of the page
 
+Quote Post
VAHOO
сообщение Jan 25 2007, 20:54
Сообщение #8


Частый гость
**

Группа: Участник
Сообщений: 163
Регистрация: 22-09-05
Пользователь №: 8 834



очень спасибо!


--------------------
Прошивка это душа микроконтроллера!
Go to the top of the page
 
+Quote Post
K_AV
сообщение Feb 15 2007, 15:25
Сообщение #9


Местный
***

Группа: Свой
Сообщений: 492
Регистрация: 19-08-06
Пользователь №: 19 667



Цитата(evg123 @ Jan 25 2007, 12:00) *
Единственный рабочий способ это (как предложил gala) с использованием таймера.
Запускаем таймер в 16 битном режиме с перезагрузкой с частотой 1кГц.
В прерывании пишем код
TIMER++; //глобальная переменная (unsigned int), пользовательский таймер
Подпрограммо задержки будет иметь вид
void Delay(unsigned int T) // 1T = 1мс
{
unsigned int TF;
TF=TIMER;
while((TIMER-TF)<T);//сама задержка
}
Применение
Delay(100); // задержка на 100 мс
Все ninja.gif

Когда за время очередного выполнения продпрограммы DELAY произойдет переполнение переменной TIMER (а это будет случаться примерно раз в минуту), очередная задержка будет выполняться неожиданно долго? Или я чего-то не понял?
Ой, наверное, наоборот - задержка закончится неожиданно досрочно...

----------------------------------
Более позднее исправление:
Перепроверил - все работает нормально. Извиняюсь за невольную провокацию.
Go to the top of the page
 
+Quote Post
Палыч
сообщение Feb 15 2007, 16:09
Сообщение #10


Гуру
******

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



Цитата(K_AV @ Feb 15 2007, 15:25) *
Когда за время очередного выполнения продпрограммы DELAY произойдет переполнение переменной TIMER (а это будет случаться примерно раз в минуту), очередная задержка будет выполняться неожиданно долго? Или я чего-то не понял?


Да, долго. Бесконечно долго!
Наверно, для исправления этого дефекта, лучше выполнять в прерывании
if(TIMER) --TIMER
а, в Delay
TIMER=T;
while(TIMER);//сама задержка
Кроме того такая функция будет иметь погрещность отсчета времени в единицу задаваемой величины.

Ой! Неправда - закончится функция Delay быстрее, чем надо!

Сообщение отредактировал Палыч - Feb 15 2007, 16:15
Go to the top of the page
 
+Quote Post
gala
сообщение Feb 15 2007, 16:13
Сообщение #11


Частый гость
**

Группа: Свой
Сообщений: 119
Регистрация: 29-11-05
Из: Украина, Черкассы
Пользователь №: 11 564



Мне больше нравится вариант в стиле Siemens:

в п/п прерывания:
if( delay_1ms_A>0) delay_1ms_A--; else delay_1ms_A=0;
if( delay_1ms_B>0) delay_1ms_B--; else delay_1ms_B=0;

в основной прогр.:

delay_1ms_A=5; // или 10

while(delay_1ms_A !=0)
{
что-то делаем на фоне ожидания
}
Go to the top of the page
 
+Quote Post
Палыч
сообщение Feb 16 2007, 09:03
Сообщение #12


Гуру
******

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



Цитата(Палыч @ Feb 15 2007, 16:09) *
Да, долго. Бесконечно долго!
.....
Ой! Неправда - закончится функция Delay быстрее, чем надо!

Был неправ! sad.gif
При unsigned int TIMER и TF при вычислении выражения TIMER-TF произайдет заем единицы из "семнадцатого" разряда и значение выражения будет верным
Go to the top of the page
 
+Quote Post
K_AV
сообщение Feb 16 2007, 11:56
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 492
Регистрация: 19-08-06
Пользователь №: 19 667



Извиняюсь, перепроверил - действительно, по варианту evg123 все работает нормально.

А то, что предложил gala, мне тоже понравилось. Единственно, я бы его назвал не DELAY, а TIME_LIMIT.
Go to the top of the page
 
+Quote Post
gala
сообщение Feb 16 2007, 17:12
Сообщение #14


Частый гость
**

Группа: Свой
Сообщений: 119
Регистрация: 29-11-05
Из: Украина, Черкассы
Пользователь №: 11 564



Цитата(K_AV @ Feb 16 2007, 12:56) *
Единственно, я бы его назвал не DELAY, а TIME_LIMIT.


В PLC - обычно называется ТАЙМЕРы

Если есть 1, 10, 100 мс таймеры, то достаточно char
для 0.25, 2.5, 25 с
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 27th July 2025 - 07:01
Рейтинг@Mail.ru


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