fl
"РЛ" - НАЧИНАЮ Щ ИМ
Ц
меньшей, чем тактовая частота кварце-
вого резонатора. Так вот, период этой
внутренней тактовой синхрочастоты на-
зывается
машинным циклом.
Чтобы бо-
лее никогда не путаться, отныне мы все-
гда будем говорить о тактовой частоте как
о частоте машинных циклов, а не о час-
тоте кварцевого генератора. Только в не-
которых случаях мы будем вспоминать о
существующей разнице, и будем огова-
ривать эти моменты особо. Для кварце-
вого генератора в 12 МГц тактовая ма-
шинная частота составляет 1 МГц, а дли-
тельность машинного цикла - 1 микро-
секунда.
Нетрудно сделать вывод, что время
исполнения любой команды микроконт-
роллера будет определяться некоторым
целым числом машинных циклов. Причем
некоторые команды выполняются 1, не-
которые - 2 и даже 4 машинных цикла.
Зная точно время исполнения каждой ко-
манды, нетрудно рассчитать время вы-
полнения того или иного участка програм-
МЫ ,-ЧТО
требуется
О твНЬ
и очень часто.
Пока что из всех команд микроконт-
роллера мы познакомились всего с че-
тырмя - командой инвертирования CPL,
пересылки MOV, команды цикла DJNZ и
безусловного перехода SJMP. В том при-
мере программы, что мы рассматриваем,
первые две команды из перечисленных
выполняются каждая за 1 машинный цикл
(CPL и MOV), а другие оде - за 2.
Теперь настала пора разобраться с
разницей (или ее отсутствием) между
примером из первой главы и предыду-
щей. Прежде всего, давайте вспомним
одну фразу, которую я обронил при рас-
смотрении примера программы мигания
светодиода; помните, я говорил отом, что
не существует команды микроконтролле-
ра, выполняющей задержку в 0,5 секун-
ды? А ещея говорил, что существует спо-
соб заставить контроллер сделать то, для
чего у него нет соответствующей коман-
ды.
.. Вот в этом и кроется разгадка на-
шей проблемы - д ействительно, отд ель-
ной команды задержки в 0,5 секунды нет,
но при помощи трех-четырех команд мож-
но эту задержку реализовать!
Итаг, вспомним участок нашей про-
граммы:
; заносим в регистр КО число 2
; уменьшаем ИО, пока не станет равным нулю
; организуем цикл по содержимому регистра Ш
; организуем цикл по содержимому регистра И2
(4)loop:
; метка
(5)
mov
R0, #2
(6)
djnz
R0,
$
(7)
djnz
П.1
,
loop
(8)
djnz
R2, loop
и постараемся рассчитать время его вы-
полнения, т.е. время, которое пройдет
после исполнения команды в строке 3 и
loop:
(4-1)
mov
R0, #2
(5-2)
djnz
R0, $
(6-2)
djnz
R1
,
loop
(7-2)
djnz
R2, loop
до исполнения команды из строки 9.
Для этого проставим в каждой строке
количество машинных циклов, которые
нужны для исполнения команды (после
номера строки):
; метка
; заносим в регистр ИО число 2
; уменьшаем ИО, пока не станет равным нулю
; организуем цикл по содержимому регистра В1
; организуем цикл по содержимому регистра И2
А теперь давайте вспомним, сколько
раз каждая из команд будет повторять-
ся. Помните? Каждый цикл, организован-
ный при помощи РЛМ2 повторяется
столько раз, сколько было занесено в со-
ответствующем регистре к моменту пер-
вого исполнения. Отбросив момент на-
чальной неопределенности (о ней мы го-
ворили в предыдущей статье - “запре-
щенный прием”, помните?), можно с уве-
ренностью сказать, что цикл в строке 7
заставит выполняться все предыдущие
строки 256 раз, в свою очередь цикл в
строке 6 тоже заставит выполняться пре-
дыдущие строки 256 раз, и только цикл в
строке 5 выполнится всего дважды.
Таким образом, общее количество
машинных тактов, которые потребуют-
ся для выполнения всех 4-х строк про-
граммы, составит (((1 +2х2)+2)х256+2) х
256+1+2 = 459267 или почти 460 милли-
секунд, т.е. почти искомые 0,5 секун-
ды. Надеюсь, теперь вам ясно, что эти-
ми тремя вложенными циклами мы ре-
ализовали ту самую задержку, для ко-
торой не нашлось отдельной команды?
Каюсь, задержка не абсолютно точно
5 2 ----------------------------------------------------------
соответствует заданной, я пожертвовал
точностью снова в угоду-малому объему
программы (вы ведь ее вручную вводи-
ли, не забыли еще?), но для нашего при-
мера это не самое главное.
..
Важное примечание. Для проверки
вы можете “замерить” скорость работы
этой программы (а заодно и познакомить-
ся с процессом отладки), используя сред-
ства МС&ибЫДля этого необходимо от-
крыть окно просмотра Тайминга
Ф
(меню Вид-
Т а й м и н г ).
Это “вирту-
альный’ се-
ку н д о м е р ,
^
точнее миллисекундомер © . Это окно
можно оставить плавающим в любом
удобном месте, а можно “прилепить” к од-
ной из уже имеющихся областей просмот-
р а -к а к вам будет удобнее. Откомпили-
руйте введенную программу и нажмите
кнопку старта симуляции (меню Выпол-
нение-Запустить симуляцию или Р9). Вы
увидите, что первая команда програм-
мы выделилась цветной полосой
-
сис-
тема готова к пошаговому выполнению
программы. Нажимая
Я?
(или меню Вы-
полнение-Шаг в обход) вы заставляете
систему “выполнить” выделенную коман-
ду, при этом, если вы посмотрите в окно
ресурсов, то в соответствующих регист-
рах увидите результаты работы этой ко-
манды. Попробуйте сами - это интерес-
но и, надеюсь, вам понравится. Кстати,
можно посмотреть и содержимое памяти
программ-догадайтесь, как? © А вот те-
перь используем наш “секундомер’ - на-
жмите Сброс, а потом Запуск и продол-
жайте “прошагивать” свою программу
-
видите, как меняются “показаний? Те-
перь, чтобы замерить время от погаса-
ния до загорания (или наоборот) свето-
диода, нам надо произвести сброс и за
пуск нашего секундомера на команде
СР1. РОЛ и “пройти” всю программу, пока
снова не окажемся на ней, тогда и посмот-
рим на показания секундомера. Только
если вы станете делать это по шагам
(кнопкой Т8), боюсь, терпения у вас не
хватит-слишком много шагов надо сде-
лать! Для ускорения процесса можно ис-
пользовать возможность автоматическо-
го выполнения до указанной команды (Р4
У Радиолюбитель - 0 3 /2 0 0 7
предыдущая страница 52 Радиолюбитель 2007-03 читать онлайн следующая страница 54 Радиолюбитель 2007-03 читать онлайн Домой Выключить/включить текст