3.        Программирование в машинных кодах

Микропроцессорные устройства и микроЭВМ выполняют свои функ­ции в соответствии с программами, составленными и отлаженными разработ­чиками и записанными затем в память машины. При разработке и отладке микроЭВМ необходимо уметь писать программы в машинных кодах.

Каким же образом составляют такие программы? Рассмотрим простой пример. Требуется составить программу работы специализированного микро­процессорного устройства (рис. 3.1). Пусть в нем имеются два порта: ввода D2 и вывода D4. К порту ввода D2 по линии, связанной с его младшим разрядом, подклю­чена кнопка S1, а к порту вывода D4 по линиям, связанным с его двумя млад­шими разрядами, подключены два светодиода.

Подпись:  
Рис. 3.1. Фрагмент функциональной схемы специализированного устройства

Дешифраторы D1 и D3 формируют сигналы «Выбор модуля 1» CS1 и «Выбор модуля 2» CS2, служащие для активизации соответствующих портов. При этом дешифраторы включены таким образом, что эти сигналы появляются только тогда, когда на младших восьми разрядах шины адреса возникают коды 0000 0001 и 0000 0010 со­ответственно. В таком случае говорят, что порт D2 включен как устройство с адресом 1, а порт D4 – с адресом 2. Далее порт D2 будем называть портом 1, а порт D4 – портом 2.

Допустим, что от устройства требуется выполнение следующей задачи. В исходном состоянии, пока кнопка S1 не нажата, светодиод V1 должен гореть, а светодиод V2 нет. Если кратковременно нажать на кнопку, то светодиод V1 должен на 0,25 с погаснуть, а светодиод V2 загореться. После этого в течение 0,5 с устройство не должно реагировать на нажатие кнопки.

Конечно, использовать микроЭВМ для решения такой простой задачи нецелесообразно, но для знакомства с принципами составления программ именно такая задача нам и нужна.

Итак, программа должна начинаться с записи в порт 2 комбинации битов 00000001. Именно при этом условии V1 горит, а V2 погашен. Затем по команде ввода содержимое порта 1 пересылается в аккумулятор и анализируется, не появился ли нуль в младшем разряде, что может быть только при нажатии на кнопку. Если кнопка не нажата, то операция повторяется. В противном случае в порт 2 посылается комбинация 00000010 (светодиод V2 горит, V1 погашен). После этого микропроцессор в течение 0,25 с не должен производить никаких операций с портами, а затем после задержки, равной 0,5 с, вновь перейти к началу нашей программы. Эти задержки можно будет выполнить программно с помощью специальной подпрограммы.

Занесем все перечисленные действия в табл.3.1 и пронумеруем каждый шаг, получим, по существу, алгоритм решения поставленной задачи. Представление алгоритма в виде таблицы не очень удобно.

Таблица 3.1