Автор Тема: Assembler & PIC16F84A [РЕШЕНО]  (Прочитано 5287 раз)

Оффлайн quality

  • Модератор
  • Продвинутый
  • *****
  • Сообщений: 1278
  • Карма: +207/-9
    • Просмотр профиля
Assembler & PIC16F84A [РЕШЕНО]
« : 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 - среднее количество команд, которые за один цикл выполняются и соответственно на частоту работы поделить ?
« Последнее редактирование: 29 Мая 2013, 10:42:41 от quality »

Оффлайн deadc0de

  • Новичок
  • *
  • Сообщений: 49
  • Карма: +5/-0
    • Просмотр профиля
Re: Assembler & PIC16F84A
« Ответ #1 : 29 Мая 2013, 10:13:34 »
Форумчане, голову совсем сломал с дипломом. Суть вопроса такова. Имеется микроконтроллер 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

  • Модератор
  • Продвинутый
  • *****
  • Сообщений: 1278
  • Карма: +207/-9
    • Просмотр профиля
Re: Assembler & PIC16F84A
« Ответ #2 : 29 Мая 2013, 10:16:20 »
deadc0de, огроменное спасибо. Примного благодарен!  ::) Только в 1 случае мкс, а не мс. 400 нс = 0,4 мкс.  :)
« Последнее редактирование: 29 Мая 2013, 10:19:52 от quality »

Оффлайн kai

  • Постоялец
  • ***
  • Сообщений: 486
  • Карма: +47/-0
  • Шесть цилиндров снова в ряд - и машина как снаряд!
    • Просмотр профиля
Re: Assembler & PIC16F84A [РЕШЕНО]
« Ответ #3 : 29 Мая 2013, 13:03:40 »
Если частота внешнего резонатора F= 20 Мгц , то тактовая процессора  F/4 = 5 Мгц , и один машинный  цикл равен 200 нс.
2 маш. цикла = 400 нс

Оффлайн kai

  • Постоялец
  • ***
  • Сообщений: 486
  • Карма: +47/-0
  • Шесть цилиндров снова в ряд - и машина как снаряд!
    • Просмотр профиля
Re: Assembler & PIC16F84A
« Ответ #4 : 29 Мая 2013, 13:07:44 »
Форумчане, голову совсем сломал с дипломом. Суть вопроса такова. Имеется микроконтроллер 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
« Последнее редактирование: 29 Мая 2013, 13:28:20 от kai »

Оффлайн quality

  • Модератор
  • Продвинутый
  • *****
  • Сообщений: 1278
  • Карма: +207/-9
    • Просмотр профиля
Re: Assembler & PIC16F84A
« Ответ #5 : 29 Мая 2013, 14:29:27 »
Если не секрет , зачем такая точность в расчетах , я обычно включаю таймер и смотрю по переполнению успел , ли я за выделенное мне время мили нет. Если пишу на C , то включаю кусок на ассемблере , иначе беру проц с большей тактовой  ;D
Мне необходимо общее время выполнение команд точное. В итоге посчитав, получилось ~0,2 мс. Я доволен. У меня укладывается  :)

Оффлайн kai

  • Постоялец
  • ***
  • Сообщений: 486
  • Карма: +47/-0
  • Шесть цилиндров снова в ряд - и машина как снаряд!
    • Просмотр профиля
Re: Assembler & PIC16F84A
« Ответ #6 : 29 Мая 2013, 16:04:27 »
Если не секрет , зачем такая точность в расчетах , я обычно включаю таймер и смотрю по переполнению успел , ли я за выделенное мне время мили нет. Если пишу на C , то включаю кусок на ассемблере , иначе беру проц с большей тактовой  ;D
Мне необходимо общее время выполнение команд точное. В итоге посчитав, получилось ~0,2 мс. Я доволен. У меня укладывается  :)
Если не секрет , то что Это за девайс ??

Оффлайн quality

  • Модератор
  • Продвинутый
  • *****
  • Сообщений: 1278
  • Карма: +207/-9
    • Просмотр профиля
Re: Assembler & PIC16F84A
« Ответ #7 : 30 Мая 2013, 11:27:19 »
Цитата: kai
Если не секрет , то что Это за девайс ??
Конечно не секрет :) Стабилизатор (точнее сказать регулятор) напряжения с мозгом. Точность нужна была, дабы убедиться в случае слишком низкого или слишком высокого напряжения, что происходит отключение автотрансформатора от нагрузки. И плюсом к этому управление симисторными ключами, т.е. как быстро будут они запираться или открываться, меняя обмотки.
« Последнее редактирование: 30 Мая 2013, 11:36:01 от quality »