Учеба > Треп студентов

Assembler & PIC16F84A [РЕШЕНО]

(1/2) > >>

quality:
Форумчане, голову совсем сломал с дипломом. Суть вопроса такова. Имеется микроконтроллер PIC16F84A, имеется программа на ассемблере. Так вот, имеем время выполнения цикла 400 нс при частоте 10 МГц. Допустим команда BCF, количество таковых в тексте 67, выполняется за один цикл (BCF), как посчитать время выполнения всех 67 команд? Или проще, как вообще правильно посчитать время выполнения команды.


UPD: Либо 200 нс при частоте в 20 МГц.
UPD2: Или думаю, что считать так. 67 команд, команды выполнятся за 67 циклов, т.е 67 х 0,2 (или 0,4), верно ли ?
UPD3: И как быть, если на выполнение команды требуется 2 цикла ?

На всякий случай, даташит ориджинал.

Еще нарыл такую штуку:
T = (N * S) / R
где N-кол-во маш. комманд в программе, S - среднее кол-во выполняющихся маш. команд за 1 такт, R - тактовая частота.

верно ли? Т.е получается надо вместо N - 67, вместо S - среднее количество команд, которые за один цикл выполняются и соответственно на частоту работы поделить ?

deadc0de:

--- Цитата: quality от 29 Мая 2013, 09:23:00 ---Форумчане, голову совсем сломал с дипломом. Суть вопроса такова. Имеется микроконтроллер PIC16F84A, имеется программа на ассемблере. Так вот, имеем время выполнения цикла 400 нс при частоте 10 МГц. Допустим команда BCF, количество таковых в тексте 67, выполняется за один цикл (BCF), как посчитать время выполнения всех 67 команд? Или проще, как вообще правильно посчитать время выполнения команды.


UPD: Либо 200 нс при частоте в 20 МГц.
UPD2: Или думаю, что считать так. 67 команд, команды выполнятся за 67 циклов, т.е 67 х 0,2 (или 0,4), верно ли ?
UPD3: И как быть, если на выполнение команды требуется 2 цикла ?

На всякий случай, даташит ориджинал.

Еще нарыл такую штуку:
T = (N * S) / R
где N-кол-во маш. комманд в программе, S - среднее кол-во выполняющихся маш. команд за 1 такт, R - тактовая частота.

верно ли? Т.е получается надо вместо N - 67, вместо S - среднее количество команд, которые за один цикл выполняются и соответственно на частоту работы поделить ?

--- Конец цитаты ---

67*0.2 (или *0.4) [мс]- решение правильное. Если команда выполняется 2 цикла, то 67*2*0.2 (или *0.4)

T=(N*S)/R - в приведенной формуле S - количество ТАКТОВ, за которые выполняется команда, а не количество команд, которые выполняются за 1 такт. (для данного микроконтроллера 1 ЦИКЛ = 4 ТАКТА),
т.е. T=(67*4)/10 [мс]
или, если команда выполняется 2 цикла T=(67*2*4)/10 [мс]

quality:
deadc0de, огроменное спасибо. Примного благодарен!  ::) Только в 1 случае мкс, а не мс. 400 нс = 0,4 мкс.  :)

kai:
Если частота внешнего резонатора F= 20 Мгц , то тактовая процессора  F/4 = 5 Мгц , и один машинный  цикл равен 200 нс.
2 маш. цикла = 400 нс

kai:

--- Цитата: deadc0de от 29 Мая 2013, 10:13:34 ---
--- Цитата: quality от 29 Мая 2013, 09:23:00 ---Форумчане, голову совсем сломал с дипломом. Суть вопроса такова. Имеется микроконтроллер PIC16F84A, имеется программа на ассемблере. Так вот, имеем время выполнения цикла 400 нс при частоте 10 МГц. Допустим команда BCF, количество таковых в тексте 67, выполняется за один цикл (BCF), как посчитать время выполнения всех 67 команд? Или проще, как вообще правильно посчитать время выполнения команды.


UPD: Либо 200 нс при частоте в 20 МГц.
UPD2: Или думаю, что считать так. 67 команд, команды выполнятся за 67 циклов, т.е 67 х 0,2 (или 0,4), верно ли ?
UPD3: И как быть, если на выполнение команды требуется 2 цикла ?

На всякий случай, даташит ориджинал.

Еще нарыл такую штуку:
T = (N * S) / R
где N-кол-во маш. комманд в программе, S - среднее кол-во выполняющихся маш. команд за 1 такт, R - тактовая частота.

верно ли? Т.е получается надо вместо N - 67, вместо S - среднее количество команд, которые за один цикл выполняются и соответственно на частоту работы поделить ?

--- Конец цитаты ---

67*0.2 (или *0.4) [мс]- решение правильное. Если команда выполняется 2 цикла, то 67*2*0.2 (или *0.4)

T=(N*S)/R - в приведенной формуле S - количество ТАКТОВ, за которые выполняется команда, а не количество команд, которые выполняются за 1 такт. (для данного микроконтроллера 1 ЦИКЛ = 4 ТАКТА),
т.е. T=(67*4)/10 [мс]
или, если команда выполняется 2 цикла T=(67*2*4)/10 [мс]

--- Конец цитаты ---

R тут именно частота , а не период.
т.е T=(67*1)/5 мгц = 13.4 микросек (если команда за один цикл)
Т=(67*2)/5 мгц = 26.8 микросек (если команды за два цикла )
Если не секрет , зачем такая точность в расчетах , я обычно включаю таймер и смотрю по переполнению успел , ли я за выделенное мне время мили нет. Если пишу на C , то включаю кусок на ассемблере , иначе беру проц с большей тактовой  ;D

Навигация

[0] Главная страница сообщений

[#] Следующая страница

Перейти к полной версии