- •Запись и выполнение простых программ
- •Задания для домашней подготовки
- •Задания к лабораторной работе
- •Организация условных переходов, подпрограмма и стек
- •Задания для домашней подготовки
- •Задания к лабораторной работе
- •Выполнение арифметических операций. Обмен данными с eeprom.
- •Задания для домашней подготовки
- •Задания к лабораторной работе
- •Организация работы с внешними устройствами. Порты ввода/вывода.
- •Регистр данных порта b - portb
- •Регистр направления данных порта b - ddrb
- •Выводы порта b - pinb
- •Задания для домашней подготовки
- •Задания к лабораторной работе
Лабораторная работа № 1
Запись и выполнение простых программ
Цель работы:исследование выполнения отдельных команд и простых программ; использование различных методов адресации в программах; написание программ.
Краткие сведения из теории
Процессор микроконтроллера (МК) ATtiny26(L) имеет фиксированный набор из 118 команд. Время выполнения команды определяется процессом получения, декодирования и выполнения команды. Это время принято представлять рядом временных интервалов. Наиболее короткий временной интервал, равный периоду синхросигналов МК, называется машинным тактом. Время, необходимое для извлечения 1 байта из памяти или внешнего устройства, или выполнение команды, определяемой одним машинным словом, называется машинным циклом. Машинный цикл может включать в себя 3-5 машинных тактов. В зависимости от вида команды время выполнения может занимать от 1 до 5 машинных циклов. В общем случае, для микропроцессоров принято различать 10 различных видов циклов:
извлечение кода команды;
чтение данных из памяти;
запись данных в память;
извлечение данных из стека;
запись данных в стек;
ввод данных из внешнего устройства;
вывод данных на внешнее устройство;
цикл обслуживания прерывания;
останов (режим SLEEP)
обслуживание прерывания в режиме останова.
Программа записывается в память МК в последовательных ячейках памяти. Рассмотрим простейшую программу (П-1.1), извлекающую число из памяти по адресу A0, инвертирующую его и записывающую результат в память по адресу A1.
П-1.1 (в мнемокодах)
Мнемокод |
Комментарий |
lds r0, $A0 com r0 sts $A1,r0 ret |
Получить число из адреса A0 в регистр R0 Инвертировать число Записать результат по адресу A1 Выход из подпрограммы |
При записи программ принято все числа представлять в шестнадцатеричной системе счисления. Для записи программы в память МК необходимо перевести мнемокод в машинный код (откомпилировать программу)
П-1.1 (размещение по адресам памяти машинного кода)
Адрес |
Число |
Комментарий |
0000 |
9000 |
Код команды LDS, с указанием регистра |
0001 |
00A0 |
Адрес (операнд команды LDS) |
0002 |
9400 |
Код команды COM, с указанием регистра |
0003 |
9200 |
Код команды STS, с указанием регистра |
0004 |
00A1 |
Адрес (операнд команды STS) |
0005 |
9508 |
Код команды RET |
Предварительную запись программ удобно проводить в более компактной форме:
П-1.1 (общее представление записи)
Адрес |
Маш. код |
Метка |
Мнемокод |
Комментарий |
0000 |
9000 00A0 |
|
LDS R0,0x00A0 |
Получить число из адреса A0 в регистр R0 |
0002 |
9400 |
|
COM R0 |
Инвертировать число |
0003 |
9200 00A1 |
|
STS 0x00A1,R0 |
Записать результат по адресу A1 |
0005 |
9508 |
|
RET |
Выход из подпрограммы |
Это позволяет сократить объем при описании программ и сделать более простым их анализ. В данном примере используется прямая адресация. Рассмотрим аналогичную программу с косвенной адресацией:
П-1.2
Адрес |
Маш. код |
Метка |
Мнемокод |
Комментарий |
0000 |
EAA0 |
|
LDI R26,0xA0 |
Установить младший байт адреса для пары X |
0001 |
27BB |
|
CLR R27 |
Очистить старший байт адреса пары X |
0002 |
900D |
|
LD R0,X+ |
Получить значение по адресу, записанному в X, увеличить X на единицу (00A0 00A1) |
0003 |
9400 |
|
COM R0 |
Инвертировать число |
0004 |
920C |
|
ST X,R0 |
Записать результат по адресу в X |
0005 |
9508 |
|
RET |
Выход из подпрограммы |