Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
230
Добавлен:
04.01.2020
Размер:
5.37 Mб
Скачать

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

Перед исполнением программа должна быть переведена с языка Ассемблер на язык кодовых комбинаций и в таком виде помещена в память микропроцессорной системы (МПС). Этот перевод осуществляется с помощью программы трансляции, называемой ассемблером. Язык Ассемблер можно использовать и при отсутствии программы для трансляции, в этом случае трансляция осуществляется вручную. Язык Ассемблер индивидуален для каждого микропроцессорного комплекта (МПК).

Следующий уровень языка программирования – язык Макроассемблер. В нем предусматривается возможность присвоения имени некоторой последовательности команд, и в любых местах программы, где должна быть использована эта последовательность, указывается лишь имя последовательности. Применение языка Макроассемблер сокращает запись программы (в среднем на 5…20%) и тем самым улучшает ее обозримость. Каждая серия МПК имеет свой индивидуальный язык Макроассемблер.

Следующий уровень языка программирования – язык высокого уровня. Языки высокого уровня обеспечивают большую компактность программы, что улучшает обзор программы и выявление в ней ошибок.

Различают машинно-независимые и машинно-зависимые языки высокого уровня. Первые позволяют вести запись программы независимо от серии МПК (к таким языкам относятся Бейсик, Паскаль и др.). Вторые пригодны для определенных серий МПК. Языки высокого уровня требуют более сложных трансляторов, кроме того, полученная после трансляции программа занимает больший объем памяти (на 10…100%) и медленнее исполняется, чем в том случае, когда эта программа составляется непосредственно в кодовых комбинациях. При этом эффективность программ на машинно-независимых языках программирования обычно ниже, чем в случае использования машинно-зависимых языков.

Для относительно несложных программ (например, объемом до одной тысячи команд) целесообразно использовать языки низкого уровня: язык кодовых комбинаций, язык Ассемблер или язык Макроассемблер.

211

3.3.2 Язык Ассемблер

Программа на языке Ассемблер представляется в виде последовательности предложений, каждое из которых занимает отдельную строку и содержит четыре фиксированных поля: поле метки, поле команды, поле операнда и поле комментариев.

Поле метки. Если предложение снабжается именем, то оно записывается в поле метки. Имя состоит из последовательности заглавных букв латинского алфавита и цифр. Начинается имя с буквы, содержит не более пяти символов и заканчивается двоеточием (например, M1:). Обычно именами снабжаются предложения, на которые производится условный либо безусловный переход.

Поле команды. В этом поле записывается мнемоническое обозначение кода операции, приводимое в системе команд МП.

Поле операнда. В этом поле приводятся участвующие в операции числа (непосредственные данные), указания об источниках и приемниках операндов. В предложениях условных и безусловных переходов в поле операнда указывается имя (метка) предложения, на которое осуществляется переход.

Числовые данные могут представляться в различных системах счисления. Для указания выбранной для представления числа системы счисления после шестнадцатеричного числа ставится символ «h» (если шестнадцатеричное число начинается с букв A, …, F, то перед числом ставится цифра 0), после десятичного числа можно ставить символ D (либо не записывать никакого символа), восьмеричное число заканчивается символом Q, двоичное – символом B.

Например, пусть требуется загрузить в пару регистров H-L число A195(16). Указанное действие на языке Ассемблер описывается следующим предложением:

Метка

Команда

Операнд

Комментарий

M2:

LXI

H, 0A195 h ; загрузка пары регистров H-L

В качестве операндов могут быть указаны счетчик команд идентификатором PC и двухбайтовое содержимое регистра-аккумулятора вместе с регистром флажков – идентификатором PSW. В командах ввода (IN) и вывода (OUT) в поле операнда указывается номер (адрес) устройства, с которым МП обменивается данными.

При наличии двух операндов они разделяются запятой. Обозначения операндов отделяются от мнемоники одним или двумя пробелами.

212

Поле комментариев. Это поле может содержать любой пояснительный текст, который облегчает чтение программ. Перед комментарием ставится символ «;» (точка с запятой). Приведенная в комментарии запись нужна лишь программисту, при трансляции она игнорируется ассемблером.

3.3.3 Программирование последовательных участков алгоритма

При программировании последовательных участков алгоритма команды условных и безусловных переходов не используются. В этом случае команды программы размещаются в ячейках памяти с последовательно нарастающими адресами. Поле метки может отсутствовать.

Пример 3.4. Требуется принять число из ячейки памяти (ЯП) по адресу 0B00 h, проинвертировать его и записать результат в ЯП по адресу 0B01 h. Начальный адрес программы 0800 h.

Схема алгоритма решения задачи представлена на рисунке 3.15.

Начало

1 AC (M)

2 AC (AC)

3 M (AC)

4 Останов

Рисунок 3.15 – Схема алгоритма инвертирования содержимого ячейки памяти

Для записи программы в память МПС необходимо перевести мнемокоды команд в машинные коды. Команды в программе могут быть одно-, двухили трехбайтные и должны занимать в памяти соответственно один, два или три адреса. Запись программ удобно проводить в компактной форме. В программе указывается начальный адрес каждой команды и при этом понимается, что в зависимости от длины команды в памяти будут занимать от одной до трех последовательных ячеек.

Программа инвертирования содержимого ЯП на языке Ассемблер при использовании прямой адресации представлена в таблице 3.4.

213

Таблица 3.4 – Программа инвертирования содержимого ЯП на языке Ассемблер при использовании прямой адресации

Адрес

Метка

Команда

Операнд

Машинный код

Комментарий

 

 

 

 

 

 

0800

 

LDA

0B00 h

3A 00 0B

; чтение числа из памяти

 

 

 

 

 

 

0803

 

CMA

 

2F

; инвертирование числа

 

 

 

 

 

 

0804

 

STA

0B01 h

32 01 0B

; запись числа в память

 

 

 

 

 

 

0807

 

HLT

 

76

; останов

 

 

 

 

 

 

Программа инвертирования содержимого ЯП на языке Ассемблер при использовании косвенной адресации представлена в таблице 3.5.

Таблица 3.5 – Программа инвертирования содержимого ЯП на языке Ассемблер при использовании косвенной адресации

Адрес

Метка

Команда

Операнд

Машинный код

Комментарий

 

 

 

 

 

 

0800

 

LXI

H, 0B00 h

21 00 0B

; запись в пару регистров

 

 

 

 

 

; H-L адреса числа

 

 

 

 

 

 

0803

 

MOV

AС, M

7E

; чтение числа из памяти

 

 

 

 

 

 

0804

 

CMA

 

2F

; инвертирование числа

 

 

 

 

 

 

0805

 

INX

H

23

; увеличение на 1 адреса

 

 

 

 

 

; числа

 

 

 

 

 

 

0806

 

MOV

M, AС

77

; запись числа в память

 

 

 

 

 

 

0807

 

HLT

 

76

; останов

 

 

 

 

 

 

Две программы решения задачи равноценны по требуемой емкости памяти. Однако программа в таблице 3.4 обеспечивает более высокое быстродействие, так как выполняется за 37 тактовых периодов сигнала синхронизации (программа в таблице 3.5 выполняется за 41 тактовый период).

3.3.4 Программирование циклических вычислительных процессов

При программировании участков алгоритмов, содержащих разветвления и циклы, используются команды условных переходов. При выполнении этих команд МП проверяет состояние соответствующего разряда регистра флажков RF. Если при проверке условие не подтверждается, то выполняется следующая по порядку команда программы. Все команды условных переходов трехбайтные. Первый байт содержит код операции, второй и третий байты – адрес команды, которой передается управление. Таким образом, команды условных переходов позволяют строить ветвящиеся алгоритмы и в зависимости от текущего

214

значения результата выполнения программы переходить на различные участки программы.

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

Пример 3.5. Составить циклическую программу сложения массива однобайтных чисел (число слагаемых равно 05 h) с получением двухбайтного результата. Начальный адрес исходных данных 0A00 h. Счетчик циклов организовать на регистре B. Старший байт суммы записать в регистр C, а младший – в аккумулятор AC. Начальный адрес программы 0800 h. Схема алгоритма программы сложения (рисунок 3.16) состоит в том, что после прибавления каждого элемента массива определяется переполнение аккумулятора AC (значение бита C в регистре флажков RF равно единице), и если это имеет место, то содержимое регистра C увеличивается на единицу. Таким образом, за счет суммирования единиц переноса получается старший байт суммы.

Циклическая программа суммирования однобайтных чисел на языке Ассемблер представлена в таблице 3.6.

Таблица 3.6 – Циклическая программа суммирования однобайтных чисел на языке Ассемблер

Адрес

Метка

Команда

Операнд

Машинный код

Комментарий

1

2

3

4

5

6

0800

 

LXI

H, 0A00 h

21 00 0A

; адрес первого слагаемого

0803

 

MVI

B, 05h

06 05

; количество слагаемых

0805

ADD B:

XRA

AC

AF

; обнуление регистра AC

0806

 

MOV

C, AC

4F

; обнуление регистра C

Окончание таблицы 3.6

 

 

 

 

 

 

 

 

 

1

2

3

4

5

6

0807

M1:

ADD

M

86

; суммирование

0808

 

JNC

M2

D2 0C 08

; условный переход на

 

; M2, если (TC) = 0

 

 

 

 

 

080B

 

INR

C

0C

; увеличение содержимого

 

; регистра C на единицу

 

 

 

 

 

080C

M2:

INX

H

23

; увеличение содержимого

; пары H-L на единицу

 

 

 

 

 

080D

 

DCR

B

05

; уменьшение на единицу

 

; содерж. счетчика циклов

 

 

 

 

 

080E

 

JNZ

M1

C2 07 08

; условный переход на M1,

 

;если (TZ) = 0

 

 

 

 

 

0811

 

HLT

 

76

; останов

215

Начало

1 HL 0A00H

2 B 05H

3 AC (AC) (AC)

4 C (AC)

 

5

 

 

 

AC (AC) (M)

 

6

(T

)

 

 

 

 

C

 

 

7

 

1

 

 

 

 

C (C) 1

 

8

 

 

 

HL (HL) 1

 

9

 

 

 

B (B) 1

0

10

(T

)

 

 

 

 

Z

 

 

11

 

1

 

 

 

 

 

Останов

0

Рисунок 3.16 – Схема алгоритма циклической программы суммирования однобайтных чисел

3.3.5 Составление программ, содержащих подпрограммы

Учитывая ограниченные возможности памяти при разработке программ, нужно стараться сделать их как можно короче. С этой целью часть программы, которая неоднократно повторяется, или программа, которая часто используется, могут быть оформлены в виде подпрограмм – последовательностей команд, выполнение которых может быть вызвано из любого места программы любое количество раз. Процесс передачи управления к подпрограмме называется ее вызовом. Данные и адреса, требуемые для работы подпрограммы, называются входными параметрами. Результаты работы

216

подпрограммы, передаваемые по окончании ее работы в основную про-

грамму, называются выходными параметрами.

Для вызова подпрограмм и возврата из них используются команды безусловного и условного вызова подпрограмм и возврата из них.

Команда безусловного вызова подпрограммы CALL b3b2 загружает в про-

граммный счетчик МП PC содержимое байтов b3b2, т. е. начальный адрес подпрограммы. При этом МП автоматически сохраняет в стеке адрес коман-

ды основной программы, к которому она будет обращаться после выполнения подпрограммы (адрес возврата).

Команда RET пересылает в программный счетчик PC адрес возврата, после этого выполнение программы будет осуществляться с этого адреса.

Команды условного вызова подпрограмм и возврата из них позволяют вызвать подпрограмму и возвратиться из нее в зависимости от состояния заданных разрядов регистра флажков RF (аналогично командам условных переходов).

Таким образом, команды вызова подпрограмм и возврата из них используют стек и указатель стека SP. Поэтому при разработке таких программ необходимо назначить область стека, записывая в указатель стека SP адрес

(нижняя граница стека) с помощью команд LXI SP, b3b2 или SPHL.

Вкачестве подпрограммы можно использовать программу, представленную

втаблице 3.6. Входными параметрами подпрограммы суммирования ADDB (таблица 3.6) являются адрес первого слагаемого, записанный в паре регистров H-L, и число слагаемых, записанное в регистре B. Выходным параметром является сумма, старший байт которой записан в регистре C, а младший – в аккумуляторе AC.

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

Таблица 3.7 – Программа суммирования массива однобайтных чисел на языке Ассемблер, содержащая подпрограмму

Адрес

Метка

Команда

Операнд

Машинный

Комментарий

код

 

 

 

 

 

 

 

 

 

 

 

0800

 

LXI

H, 0A00 h

21 00 0A

; адрес первого слагаемого

 

 

 

 

 

 

0803

 

MVI

B, 05h

06 05

; количество слагаемых

 

 

 

 

 

 

0805

 

CALL

ADD B

CD 09 08

; вызов подпрограммы

 

; сложения

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

217

0808

 

HLT

 

76

; останов

 

 

 

 

 

 

0809

ADDB:

XRA

AC

AF

; обнуление регистра AC

 

 

 

 

 

 

080A

 

MOV

C, AC

4F

; обнуление регистра C

 

 

 

 

 

 

080B

M1:

ADD

M

86

; суммирование

 

 

 

 

 

 

080C

 

JNC

M2

D2 10 08

; условный переход на

 

; M2, если (TC) = 0

 

 

 

 

 

 

 

 

 

 

 

080F

 

INR

C

0C

; увеличение содержимого

 

; регистра C на единицу

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

; увеличение содержимого

0810

M2:

INX

H

23

; пары регистров H-L на

 

 

 

 

 

; единицу

 

 

 

 

 

 

 

 

 

 

 

; уменьшение на единицу

0811

 

DCR

B

05

; содержимого счетчика

 

 

 

 

 

; циклов

 

 

 

 

 

 

0812

 

JNZ

M1

C2 0B 08

; условный переход на M1,

 

если (TZ) = 0

 

 

 

 

 

 

 

 

 

 

 

0815

 

RET

 

C9

; возврат в основную

 

 

; программу

 

 

 

 

 

 

 

 

 

 

 

Контрольные вопросы к теме 3.3

1Укажите достоинства и недостатки языков программирования низкого уровня.

2Какие поля содержит предложение на языке программирования Ассемблер?

3Поясните правила записи метки предложения.

4Поясните правила записи числовых данных в поле операнда в шестнадцатеричной

СС.

5Поясните, как выполняется программирование циклических вычислительных процессов на языке Ассемблер?

6Поясните, как составляются программы, содержащие подпрограммы?

7Поясните действия МП при считывании команд CALL b3b2 и RET.

8Как называется процесс передачи управления к подпрограмме.

9Что понимают под входными и выходными параметрами в программах, содержащих подпрограммы?

10Что понимают под адресом возврата?

218

Тема 3.4 Принципы организации однокристальных микроконтроллеров

3.4.1 Общие сведения

Микроконтроллеры (МК) – разновидность МПС (микроЭВМ), ориентированная на реализацию алгоритмов управления техническими устройствами и технологическими процессами. В сравнении с универсальными микроЭВМ МК проще, поэтому практически всю схемотехнику МК можно разместить на одном кристалле. Отсюда второе название МК – однокристальная микроЭВМ. Разработка МК означала появленние БИС такой функциональной законченности, которая позволяет решать в полном объеме задачи определенного класса.

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

Первые МК выпущены фирмой Intel в 1976 г. (восьмиразрядный МК 8048). В настоящее время многими поставщиками выпускаются 8-, 16- и 32-разрядные МК с емкостью памяти программ до десятков Кбайт, небольшими ОЗУ данных и набором таких интерфейсных и периферийных схем, как параллельные и последовательные порты ввода/вывода, таймеры, аналого-цифровые и цифро-аналоговые преобразователи, широтно-импульсные модуляторы и др.

Принципы организации однокристальных МК рассмотрим на примере микроконтроллеров dsPIC33fj32mc204 семейства dsPIC33F американской фирмы

Microchip Technology Inc.

3.4.2 Архитектура микроконтроллеров dsPIC33F

Микроконтроллер dsPIC33fj32mc204 относится к семейству 16-разрядных Flash МК с поддержкой команд цифровой обработки сигналов. Высокое быстродействие в 40 MIPS (миллионов операций в секунду) и эффективная система

219

команд позволяют использовать МК в сложных системах реального времени. Ядро МК семейства dsPIC33F построено по модифицированной гарвардской архитектуре с расширенной системой команд. МК семейства dsPIC33F поддерживают выполнение специфических для алгоритмов цифровой обработки сигналов инструкций (умножение с накоплением), специальные методы адресации (модульная, бит-реверсивная), знаковые вычисления с целыми числами и числами с фиксированной точкой, имеют векторную приоритетную систему прерываний, а также возможность отображения части программной памяти в нереализованную на кристалле область ОЗУ.

Два класса команд: микроконтроллерные инструкции MCU и команды цифровой обработки сигналов DSP равноправно интегрированы в архитектуру МК и обрабатываются одним ядром. Большинство инструкций (команд) имеют длину в одно слово разрядностью 24 бит и выполняются за один цикл, за исключением команд деления, переходов, команд пересылки данных из регистра в регистр и табличных команд. Только три инструкции из 83 имеют длину в два слова (48 бит) и выполняются за два цикла.

Система команд содержит много режимов адресации и оптимизирована для получения максимальной эффективности при программировании МК на языке высокого уровня С.

МК обладает обширным набором периферийных модулей:

-порты ввода/вывода общего назначения;

-таймеры;

-модули захвата и сравнения;

-модули генерации ШИМ сигналов PWM;

-модуль интерфейса квадратурного энкодера EQI;

-10- и 12-битный аналого-цифровой преобразователь ADC;

-коммуникационные интерфейсы (UART, SPI, I2C и др.).

Общая структурная схема ядра и периферийных модулей МК семейства dsPIC33F показана на рисунке 3.17.

3.4.3 АЛУ, умножитель, поддержка деления и DSP-инструкций

16-битное арифметико-логическое устройство (АЛУ) МК dsPIC33F позволяет выполнять за один командный цикл следующие операции: сложение, вычитание, битовый сдвиг и поразрядные логические операции, включая инвер-

220