Форум РадиоКот https://radiokot.ru/forum/ |
|
Как расчитать временную задержку https://radiokot.ru/forum/viewtopic.php?f=2&t=565 |
Страница 1 из 1 |
Автор: | Sailanser [ Ср фев 08, 2006 23:24:36 ] |
Заголовок сообщения: | Как расчитать временную задержку |
Вопрос к автору статьи про подключение LCD к 2313. Сам только разбираюсь с программированием микроконтроллеров поэтому хотелось бы узнать как расчитать задержку при программировании на необходимое время поглядел ваш кусок с задержкой на 40мks Delay40mks: push Temp ldi Temp,0 Loop: dec Temp brne Loop pop Temp ret И хотелось бы узнать а как расчитать например на 10,15,20 мks. |
Автор: | Serega [ Чт фев 09, 2006 01:10:11 ] |
Заголовок сообщения: | |
На самом деле - для столь точных временных задержек существует таймер. А вообще - считается очень просто. Допустим, есть прога задержки: Код: Delay:
ldi Temp,0 ldi Temp1,10 loop: dec Temp brne loop dec Temp1 brne loop ret Сначала 256 раз мотается первый цикл (уменьшение Temp на 1). Каждый раз, когда мы проваливаемся из этого цикла, Temp1 уменьшается на 1, и так происходит 10 раз. Известно (из даташита, разумеется), что команда dec выполняется за 1 такт, команда brne - в случае перехода - за два, иначе - за один. Считаем: 255 циклов первой задержки имеют длину 3 такта, 1 цикл - 2 такта. То есть, однократное выполнение - 256*3-1 = 767 тактов Вторая задержка также выполняется за 3 такта. Это происходит каждый раз, когда мы проваливаемся из первой задержки во вторую. Итого - 10 раз. То есть, в сумме - 30 тактов. В сумме получаем: (767*10)+30 = 7700 тактов. Пусть частота кварца = 10 МГц Переводим в секунды. 1 такт = 0,1 мкс 7700 тактов = 770 мкс Фсе ![]() ![]() |
Автор: | Sailanser [ Чт фев 09, 2006 18:24:11 ] |
Заголовок сообщения: | |
Спасибо за разьяснение. |
Автор: | Старый ржавый электронщик [ Чт фев 09, 2006 18:53:23 ] |
Заголовок сообщения: | |
Удачи! ![]() |
Автор: | Sailanser [ Чт фев 09, 2006 21:33:08 ] |
Заголовок сообщения: | |
Еще раз просмотрел ваши пояснения насчет расчета временных задержек: Цитата: На самом деле - для столь точных временных задержек существует таймер.
А вообще - считается очень просто. Допустим, есть прога задержки: Код: Delay: ldi Temp,0 ldi Temp1,10 loop: dec Temp brne loop dec Temp1 brne loop ret Сначала 256 раз мотается первый цикл (уменьшение Temp на 1). Каждый раз, когда мы проваливаемся из этого цикла, Temp1 уменьшается на 1, и так происходит 10 раз. Известно (из даташита, разумеется), что команда dec выполняется за 1 такт, команда brne - в случае перехода - за два, иначе - за один. Считаем: 255 циклов первой задержки имеют длину 3 такта, 1 цикл - 2 такта. То есть, однократное выполнение - 256*3-1 = 767 тактов Вторая задержка также выполняется за 3 такта. Это происходит каждый раз, когда мы проваливаемся из первой задержки во вторую. Итого - 10 раз. То есть, в сумме - 30 тактов. В сумме получаем: (767*10)+30 = 7700 тактов. Пусть частота кварца = 10 МГц Переводим в секунды. 1 такт = 0,1 мкс 7700 тактов = 770 мкс Фсе Ращет окончен. Вооольна! Тогда по этим расчетам получается что первый кусок прграммы равен не 40mks а 76,7 mks если идти по вашему описанию: 256*3-1=767 тактов Пусть частота кварца = 10 МГц Переводим в секунды. 1 такт = 0,1 мкс 767 тактов = 76,7 мкс Может я что не так понял? и если можно то расчет первого куска который на 40mks. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |