Как расчитать временную задержку

Обсуждаем цифровые устройства...
Ответить
Аватара пользователя
Sailanser
Друг Кота
Сообщения: 3126
Зарегистрирован: Ср фев 01, 2006 22:29:02
Откуда: г.Ростов-на-Дону

Как расчитать временную задержку

Сообщение Sailanser »

Вопрос к автору статьи про подключение LCD к 2313. Сам только разбираюсь с программированием микроконтроллеров поэтому хотелось бы узнать как расчитать задержку при программировании на необходимое время поглядел ваш кусок с задержкой на 40мks

Delay40mks:
push Temp

ldi Temp,0
Loop:
dec Temp
brne Loop

pop Temp

ret
И хотелось бы узнать а как расчитать например на 10,15,20 мks.
Реклама
Аватара пользователя
Serega
Говорящий с текстолитом
Сообщения: 1529
Зарегистрирован: Пн авг 22, 2005 21:02:22
Откуда: Питер

Сообщение Serega »

На самом деле - для столь точных временных задержек существует таймер.
А вообще - считается очень просто. Допустим, есть прога задержки:

Код: Выделить всё

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 мкс

Фсе :) Ращет окончен. Вооольна! :o
Лучше быть первым в деревне, чем вторым в Риме
Реклама
Аватара пользователя
Sailanser
Друг Кота
Сообщения: 3126
Зарегистрирован: Ср фев 01, 2006 22:29:02
Откуда: г.Ростов-на-Дону

Сообщение Sailanser »

Спасибо за разьяснение.
Аватара пользователя
Старый ржавый электронщик
Говорящий с текстолитом
Сообщения: 1507
Зарегистрирован: Чт дек 15, 2005 17:34:48
Откуда: Петрозаводск
Контактная информация:

Сообщение Старый ржавый электронщик »

Удачи! :wink:
путь наименьшего сопротивления проходит по пути наитолстого провода (с) Сергей Соболь
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Sailanser
Друг Кота
Сообщения: 3126
Зарегистрирован: Ср фев 01, 2006 22:29:02
Откуда: г.Ростов-на-Дону

Сообщение Sailanser »

Еще раз просмотрел ваши пояснения насчет расчета временных задержек:
На самом деле - для столь точных временных задержек существует таймер.
А вообще - считается очень просто. Допустим, есть прога задержки:


Код:
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.
Реклама
Ответить

Вернуться в «Цифровая техника»