или меню Выполнение-Выполнять до
курсора). В этом случае, став на коман-
де С И . и запустив секундомер, надо про-
сто нажать
А4 -
система поймет, что надо
выполнять программу до тех пор, пока
снова не попадем на эту команду. В этом
случае весь процесс займет у вас секунд
5 (в зависимости от мощности вашего
компьютера время может быть иным).
Только не забудьте указать правильно ча-
стоту кварцевого резонатора (меню Вы-
полнение-Опции симуляции), иначе по-
казания секундомера будут ложными.
То есть, не смотря на видимую раз-
ницу в практической и ‘Теоретической”
программах, никакой разницы нет ©. Кро-
ме одной - действительно отсутствует
какая-либо настройка порта ввода выво-
да. .
. Однако, особенность нашего микро-
контроллера как раз в том, что после
сброса на всех его портах устанавлива-
ются высокие логические уровни, т.е. ни-
каких специальных мер принимать не
надо! В сущности, настройка портов про-
изошла автоматически в момент сброса.
А это означает, что наша программа пол-
ностью соответствует своему прообразу
из второй главы!
Давайте теперь немного углубимся в
подробности. Прежде всего, познакомим-
ся со способами адресации. Зададимся
вопросом: как можно обратиться к дан-
ным, хранящимся в определенной ячей-
ке памяти микроконтроллера, т.е. ОЗУ?
Ну, разумеется, можно указать адрес
ячейки непосредственно - такой способ
адресации и называется
непосредствен-
ным.
А как еще? А еще можно указать
адрес ячейки, в которой хранится адрес
той ячейки, к данным которой мы хотим
обратиться. Получается какая-то матреш-
ка-указываем адрес на ячейку, ав ячей-
ке адрес, а по адресу - ячейка, а в ней -
д анные.
.. ©То есть мы задаем адрес тре-
буемой ячейки не непосредственно, а че-
рез содержимое другой ячейки, т.е. кос-
венно-такой способ и получил название
косвенной
адресации. Кроме того, если
вместо ячейки памяти для хранения ад-
реса другой ячейки используется регистр,
то у нас будет уже
косвенно-регистро-
вая адресация.
Как вы уже знаете, у мик-
роконтроллеров семейства МС851 нет
практически никакой разницы между
ячейками и регистрами, кроме того, что
для регистров имеются специальные наи-
менования, однако когда мы будем ис-
пользовать косвенную и непосредствен-
ную адресацию в командах программы -
разница все-таки появится.
- - - - - - - - -
1
Небольшое отступление. Существу-
ет кроме названных
еще
несколько ви-
дов адресации, которые являются неки-
ми “гибридамИ’ этих способов и специ-
альньос средств, имеющихся в микрокон-
троллерах, однако в рассматриваемом
нами микроконтроллере (да и во всем се-
мействе МС551) они не реализованы.
Почему-то мне кажется, что у читате-
лей может возникнуть вопрос о необхо-
димости косвенной адресации: разве
нельзя обойтись прямым указанием ад-
реса ячейки? Теоретически можно, но
программы при этом становятся удиви-
тельно громоздкими и крайне запутанны-
ми. Ну вот представьте себе последова-
тельность действий, необходимых для
заполнения предположим 10-и подряд
Идущих ячеек памяти одним и тем же зна-
чением-действие, кстати, требующееся
сплошь и рядом. Без использования кос-
венной адресации мы должны записать
10 кем. \н
I занесения константы по
Юраз-
личным адресам.
А с использованием
косвенной мы поступим так:
1. Занесем адрес первой ячейки в
регистр, например Но
2. При помощи косвенной адресации
по адресу в ИО занесем требуемую кон-
станту в память
3. Увеличим на 1 содержимое ИО
4. Повторим шаги 2 и 3 до тех пор,
пока не достигнем в ИО значения, рав-
ного адресу последней заполняемой
ячейки.
С первого взгляда, между двумя спо-
собами решения поставленной задачи
особой разницы нет- и во втором случае
Потребуется около 10 команд (ведь шаг 4
будет реализован несколькими команда-
ми!). Однако вдумайтесь: а если нам надо
заполнить не 10, а 100 ячеек? В первом
случае потребуется уже 100 команд, а во
втором останутся уже имеющиеся.
.. А
если в процессе работы вы решите из-
менить адреса заполняемой области -г в
первом случае надо будет исправить все
10 (или 100) команд, введя новый адрес
ячейки в каждую команду, а во втором
случае- всего лишь изменить адрес пер-
вой ячейки в первой команде! Чувствуе-
те разницу? И это еще не все преимуще-
ства косвенной адресации! Позже, когда
мы будем осваивать
подпрограммы,
вы
убедитесь, что порой косвенная адреса-
ция - единственный выход!
Теперь несколько слов о том, как мик-
роконтроллер исполняет программу. Вы
уже знаете, что после сброса программа
начинает выполняться всегда с команды,
"РЛ" - НАЧИНАЮ Щ ИМ
находящейся по адресу OOOOh в памяти
программ. Чтобы микроконтроллер
“знал”, по какому адресу следует искать
следующую команду для выполнения, в
составе устройства управления имеется
специальный счетчик команд, имеющий
название PC (Program Counter - про-
граммный счетчик). Это 16-битный счет-
чик (помните, что наш микроконтроллер
может работать с памятью до 64К объе-
мом?). Так вот, устройство управления
загружает команду из памяти программ,
находящуюся по адресу в PC (обратите
внимание - налицо косвенная адреса-
ция!), выполняет еег затем увеличивает
содержимое PC на количество байт, со-
держащихся в команде (команда может
занимать в памяти от 1 до 3 байт), а за-
тем снова загружает команду уже по но;
вому адресу в PC, исполняет ее, снова
увеличивает и т.д. Если встречается ко-
манда, которая изменяет нормальный,
т.е. последовательный, порядок исполне-
ния команд (вы знакомы пока с двумя
такими командами - SJMP и DJNZ), то
вместо увеличения PC на какое-то зна-
чение устройство управления просто за-
носит в PC новое значение адреса, взя-
тое из соответствующего операнда ко-
манды. Таким образом, команду SJMP
вполне можно рассматривать как коман-
ду, заносящую константу в специальный
регистр PC (т.е. вариант команды пере-
сылки MOV).
В завершение хочу познакомить вас
с командой, которая делает.
..
ничего.
Эта команда NOP (No Operation - нет
операции), она действительно не выпол-
няет никаких д ействий. Зачем же она нуж-
на, спросите вы. Отвечу - эта команда
выполняется 1 машинный цикл и исполь-
зуется в основном для реализации задер-
жек. Ее можно добавлять практически в
любое место программы - и ничего, кро-
ме некоторого замедления исполнения
ваших команд не произойдет. Попробуй-
те теперь самостоятельно, в качестве
практического задания, видоизменить
рассмотренную нами программу мига-
ния светодиода так, чтобы длительность
свечения была как можно точнее равна
0,5 секунды (для кварцевого резонатора
12 МГц). Подсказка - изменяйте началь-
ные значения регистров, используемых
для реализации задержки, точную под-
гонку пауз выполняйте при помощи ко-
манды NOP. Скорее всего, потребуется из-
менить количество и расположение меток.
D- - - - - - -
- -
П родолж ение в № 4/2007
Радиолюбитель - 0 3 /2 0 0 7 U
53
предыдущая страница 53 Радиолюбитель 2007-03 читать онлайн следующая страница 55 Радиолюбитель 2007-03 читать онлайн Домой Выключить/включить текст