Перейти к содержанию
    

Задержка на Pic16

Нужна задержка на Пик16, к примеру, 0.1 сек.

Нашел 1 прогу, которая генерирует код для задержки, которую мы вводим.

Потом нашел одну ссылку, где делается то же самое.

НО:

когда вводишь 0.1 сек в эти 2 разные проги, то они генерируют:

1)

movlw 0x37

movwf d1

movlw 0x4B

movwf d2

Delay_0

decfsz d1, f

goto $+2

decfsz d2, f

goto Delay_0

 

;2 cycles

goto $+1

2)

movlw .221

movwf Reg_1

movlw .130

movwf Reg_2

decfsz Reg_1,F

goto $-1

decfsz Reg_2,F

goto $-3

nop

nop

Какая из них правильная?

Как правильно вручную рассчитывать задержки?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нашел 1 прогу

Проги не ищут. Проги пишут.

 

Единицей измерения времени внутри процессора (в общем случае) служит такт.

Пишем цикл. Рассчитываем время его выполнения.

Если нужны бОльшие задержки - пишем второй цикл, внутри которого вызываем первый с фиксированной задержкой.

И так далее.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Формулу для расчета где взять?

Формулу Вы, разумеется, напишете сами. Исходя из конкретной реализации цикла.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 "обычная" команда = 4 такта (машинный цикл). 1 команда перехода (goto, return, retfie, retlw) = 8 тактов (2 машинных цикла)

1 такт = 1 / (частота кварца)

Необходимое кол-во исполненных команд для задержки на 0.1 сек = 0.1 / (1 такт) / 4

Получите кол-во "обычных" команд. В цикле есть ещё переход goto восполняемый за 2 маш.цикла, учитывая это считайте кол-во итераций цикла (циклов, если потребуются вложенные)

Для точного набивания времени можно использовать nop (1 маш.цикл) или goto $+1 (2 маш.цикла на одной команде) - оба этих трюка используются в приведённых примерах.

Теперь пишите формулу, забивайте в Scilab или какую другую считалку и считайте.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Теперь пишите формулу, забивайте в Scilab или какую другую считалку и считайте.

Ну и разумеется проверяете готовую программу на симуляторе в MPLABe. Такты он считает до безобразия корректно. Время округляет при показе больших величин, а вот такты показывает правильно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...