Регистрация | Вход

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: terrarus, ivan_fd  
Время выполнения команд
Yrok Дата: Чт, 27.09.2007, 14:28  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Продвинутый
Сообщений: 112
Репутация: 2   ±
Замечания:   ±
На сайте с 27.09.2007

Статус: Offline

Берем microbasic 5.0.0.2--в нем есть софтовый отладчик
пишем коротенькую програмку
Code

  option_reg=133
      Lcd_Config(PORTC,7,6,5,4,PORTC,1,2,3)
      Lcd_Cmd(Lcd_CURSOR_OFF)
      Lcd_Out(1, 1, "Hello!")
      delay_ms (1000)

и начинаем в отладчике смотреть время выполнения команд
и что же мы видим
перед командой
delay_ms (1000)
общее время выполнения состовляет 72,26 ms
а после ее выполнения 1075,96--а должно быть 1072,26
никто незнает почему так???
соответственно если ставим паузу 3 секунды то получаем 3083,82--погрешность уже 11,56ms
ЯНДЕКС Дата: 27.09.2007
bobinventor Дата: Вт, 02.10.2007, 07:47  |                                                                                                                Сообщение # 2
Группа: Проверенные
Ранг:  Новенький
Сообщений: 3
Репутация: 0   ±
Замечания:   ±
На сайте с 14.09.2007

Статус: Offline

Просто напросто для точных и критичных по времени приложений, нужно пользоваться MPLAB... А эти компиляторы вообщем-то созданы для быстрого создания небольших и не критичных приложений...
А на счет задержек... Я думаю что эот траблы в подпрограмме delay_ms. По сути это же подпрограмма, которая наверняка состоит из команд типа BTFSS и BTFCS. А эти команды при одном из условий выполняются за два цикла работы контроллера.... Вот поэтому есть погрешность... dry
ADMIN Дата: Вт, 02.10.2007, 17:17  |                                                                                                                Сообщение # 3
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1086
Репутация: 32   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Кстати, в MicroBasic есть возможность просмотреть ASM-код. Просто -> Файл - > открыть
Popeye Дата: Пн, 15.10.2007, 09:13  |                                                                                                                Сообщение # 4
Группа: Удаленные
Ранг: 
Сообщений:
Репутация:   ±
Замечания:   ±
На сайте с

Статус:

Команды delay нельзя пользовать. Они просто выполняют некоторое количество программных циклов. Если есть перерывание точность убежит на время обработки перерывания. И clrwdt в delay нет. Т.е. перерывание нельзя, WDT нельзя включать, кому это надо, delay ?
Yrok Дата: Пн, 15.10.2007, 10:20  |                                                                                                                Сообщение # 5
Группа: Проверенные
Ранг:  Продвинутый
Сообщений: 112
Репутация: 2   ±
Замечания:   ±
На сайте с 27.09.2007

Статус: Offline

Quote
Если есть перерывание точность убежит на время обработки перерывания.

Пока выполняется delay --прерывания выполняться небудут!!!!!
А вообще просто для примера написал--так как писал программку для измерения длительности входного импульса--результат всегда был меньше истинного--так и неудалось ничего сделать.
Недавно понял почему--при выполнении любого оператора прерывание необрабатывается--просто ставиться флаг , а обрабатываются прерывания только при переходе от одного оператора к другому--а это очень плохо!!!!
ADMIN Дата: Пн, 15.10.2007, 17:41  |                                                                                                                Сообщение # 6
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1086
Репутация: 32   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Quote (Yrok)
Пока выполняется delay --прерывания выполняться небудут!!!!!

Почему вы так решили?

Yrok Дата: Вт, 16.10.2007, 15:39  |                                                                                                                Сообщение # 7
Группа: Проверенные
Ранг:  Продвинутый
Сообщений: 112
Репутация: 2   ±
Замечания:   ±
На сайте с 27.09.2007

Статус: Offline

Quote

Quote (Yrok)
Пока выполняется delay --прерывания выполняться небудут!!!!!
Почему вы так решили?

Пардон проверил--я был неправ--прерывания происходят.
  • Страница 1 из 1
  • 1
Поиск: