Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Задержка на Pic16
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > MCS51, AVR, PIC, STM8, 8bit
Peacemaker
Нужна задержка на Пик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

Какая из них правильная?
Как правильно вручную рассчитывать задержки?
DpInRock
Цитата
Нашел 1 прогу

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

Единицей измерения времени внутри процессора (в общем случае) служит такт.
Пишем цикл. Рассчитываем время его выполнения.
Если нужны бОльшие задержки - пишем второй цикл, внутри которого вызываем первый с фиксированной задержкой.
И так далее.
Peacemaker
Формулу для расчета где взять?
rx3apf
Цитата(Peacemaker @ Jan 7 2012, 13:41) *
Формулу для расчета где взять?

Формулу Вы, разумеется, напишете сами. Исходя из конкретной реализации цикла.
Cosmojam
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 или какую другую считалку и считайте.
Ruslan1
Цитата(Cosmojam @ Jan 7 2012, 12:56) *
Теперь пишите формулу, забивайте в Scilab или какую другую считалку и считайте.

Ну и разумеется проверяете готовую программу на симуляторе в MPLABe. Такты он считает до безобразия корректно. Время округляет при показе больших величин, а вот такты показывает правильно.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.