Peacemaker 0 7 января, 2012 Опубликовано 7 января, 2012 · Жалоба Нужна задержка на Пик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 0 7 января, 2012 Опубликовано 7 января, 2012 · Жалоба Нашел 1 прогу Проги не ищут. Проги пишут. Единицей измерения времени внутри процессора (в общем случае) служит такт. Пишем цикл. Рассчитываем время его выполнения. Если нужны бОльшие задержки - пишем второй цикл, внутри которого вызываем первый с фиксированной задержкой. И так далее. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Peacemaker 0 7 января, 2012 Опубликовано 7 января, 2012 · Жалоба Формулу для расчета где взять? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rx3apf 0 7 января, 2012 Опубликовано 7 января, 2012 · Жалоба Формулу для расчета где взять? Формулу Вы, разумеется, напишете сами. Исходя из конкретной реализации цикла. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Cosmojam 0 7 января, 2012 Опубликовано 7 января, 2012 · Жалоба 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 17 11 января, 2012 Опубликовано 11 января, 2012 · Жалоба Теперь пишите формулу, забивайте в Scilab или какую другую считалку и считайте. Ну и разумеется проверяете готовую программу на симуляторе в MPLABe. Такты он считает до безобразия корректно. Время округляет при показе больших величин, а вот такты показывает правильно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться