|
|
  |
Команда delay, Keil uvision 8.02 |
|
|
|
Jan 19 2007, 21:16
|
Частый гость
 
Группа: Участник
Сообщений: 163
Регистрация: 22-09-05
Пользователь №: 8 834

|
Всем привет! подскажите пожалуйста чем можно заменить команда delay в Keil uvision 8.02, например delay (5) 5ms,
заранее спасибо!
--------------------
Прошивка это душа микроконтроллера!
|
|
|
|
|
Jan 19 2007, 22:20
|
Частый гость
 
Группа: Участник
Сообщений: 163
Регистрация: 22-09-05
Пользователь №: 8 834

|
а без использавание таймера это не возможно? у меня таймер работает для времени
Сообщение отредактировал VAHOO - Jan 19 2007, 22:25
--------------------
Прошивка это душа микроконтроллера!
|
|
|
|
|
Jan 20 2007, 23:53
|
Частый гость
 
Группа: Участник
Сообщений: 163
Регистрация: 22-09-05
Пользователь №: 8 834

|
Qala, если не трудно дай кусок программы, заеранее спасибо!
--------------------
Прошивка это душа микроконтроллера!
|
|
|
|
|
Jan 25 2007, 13:00
|
Местный
  
Группа: Свой
Сообщений: 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 мс Все
Сообщение отредактировал evg123 - Jan 25 2007, 13:02
|
|
|
|
|
Jan 25 2007, 20:54
|
Частый гость
 
Группа: Участник
Сообщений: 163
Регистрация: 22-09-05
Пользователь №: 8 834

|
очень спасибо!
--------------------
Прошивка это душа микроконтроллера!
|
|
|
|
|
Feb 15 2007, 15:25
|
Местный
  
Группа: Свой
Сообщений: 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 мс Все  Когда за время очередного выполнения продпрограммы DELAY произойдет переполнение переменной TIMER (а это будет случаться примерно раз в минуту), очередная задержка будет выполняться неожиданно долго? Или я чего-то не понял? Ой, наверное, наоборот - задержка закончится неожиданно досрочно... ---------------------------------- Более позднее исправление: Перепроверил - все работает нормально. Извиняюсь за невольную провокацию.
|
|
|
|
|
Feb 15 2007, 16:09
|

Гуру
     
Группа: Свой
Сообщений: 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
|
|
|
|
|
Feb 16 2007, 17:12
|
Частый гость
 
Группа: Свой
Сообщений: 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 с
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|