
- •Методические указания и задания по лабораторному практикуму по курсу «Микропроцессоры» Учебное пособие Москва 2013
- •Лабораторная работа №1. "Исследование возможностей интегрированной среды для создания программ для микроконтроллеров"
- •1. Краткое описание интегрированной среды
- •1.1. Окно интегрированной среды
- •1.2. Использование отладчика (симулятора) для ассемблерных модулей
- •1.3. Порядок создания программ на Ассемблере с помощью интегрированной среды
- •1.4. Порядок отладки программ на Ассемблере с помощью интегрированной среды
- •1.5. Дополнительные операторы языка Ассемблера для использования интегрированной среды
- •1.6. Задание для домашней подготовки
- •1.7. Лабораторное занятие
- •1.8. Отчет по работе
- •Лабораторная работа №2. "Исследование арифметических и логических операций над двоичными и шестнадцатеричными числами применительно к реализации в микроконтроллерах"
- •1. Логические и арифметические операции
- •2.6. Задание для домашней подготовки
- •1.7. Лабораторное занятие
- •Лабораторная работа №3. "Исследование возможностей интегрированной среды для создания программ для оэвм семейства mcs51"
- •1.6. Задание для домашней подготовки
- •1.7. Лабораторное занятие
- •1.8. Содержание отчета
- •1.9. Задания для самопроверки
- •Лабораторная работа №4 Исследование программно-аппаратного комплекса для отладки программ для оэвм семейства mcs-51
- •4.1. Макетно-отладочная плата ев-552
- •2.3. Порядок создания и проверки программ в интегрированной системе uVision2 - eb552
- •2.3.1. Использование программы ев552.Exe для загрузки нех файлов в плату
- •8. Передача отлаживаемого файла в плату ев552
- •2.4. Задание для домашней подготовки
- •2.5. Лабораторное занятие
- •2.5.1. Основы работы с массивами чисел
- •2.5.2. Отладка программы в интегрированной среде
- •2.6. Результаты отчета
- •2.7. Контрольные вопросы
- •Лабораторная работа № 5 Исследование таймеров-счетчиков и системы прерывания оэвм
- •3.1. Основные теоретические сведения
- •3.1.1. Использование таймера для осуществления программной задержки
- •3.1.2. Система прерываний оэвм
- •3.1.3. Управление работой таймеров
- •Xseg at 0000h
- •3.1.4. Работа таймера в режиме счетчика событий
- •Xseg at 0000h
- •3.2. Задание для домашней подготовки
- •3.3. Лабораторное задание
- •3.3.1. Исследование работы таймеров
- •3.4. Содержимое отчета
- •Список рекомендованной литературы
2.5. Лабораторное занятие
2.5.1. Основы работы с массивами чисел
Пусть требуется осуществить какое-либо преобразование массива чисел и записать результат в какой-нибудь другой массив. Таким образом, надо задать входной массив. Особенностью программирования на Ассемблере является невозможность непосредственного задания массива в памяти данных без осуществления операций ОЭВМ. Такое задание возможно только для памяти программ с помощью оператора:
myarr: db 20h,21h,22h,23h,24h,25h,26h,27h,28h,29h
Псевдооператор DB задает в ячейке с заданным адресом байт, который указан в качестве аргумента. Для приведенного примера в памяти команд, начиная с текущего адреса (например, после кодов программы) записываются 10 байт с указанными значениями.
Далее при необходимости использовать этот массив надо сначала записать в регистр DPTR адрес массива и затем считать определенное значение в аккумулятор:
mov dptr,#myarr ; установка DPTR на начало массива
movc a,@a+dptr ;считывание байта из памяти программ в А
Адрес памяти программ, из которого берется байт, определяется суммой значений в DPTR и в А. Поэтому адрес следующего символа можно задать как в А, так и в DPTR (но в последнем случае надо обнулить аккумулятор, чтобы он не влиял на выбор адреса элемента массива).
Ниже приведена программа перезаписи содержимого массива с именем myarr, заданного после адресов этой программы, в массив mysec, зарезервированный во внешней памяти данных с адреса 0000Н.
Программа 3
NAME TEST4
XSEG AT 0000h; задание сегмента внешней памяти данных
mysec: ds 20h ; резервирование 20 байт в этом сегменте
DSEG AT 10h ; задание сегмента внутренней памяти данных (при ;необходимости)
CSEG AT 8000h; задание сегмента памяти программ с адреса 8000Н
ORG 8000h; задание адреса начала программы с 9000Н
mov r0,#10; в r0 – количество перезаписываемых байт
call 23ddh; вызов подпрограммы отображения состояния процессора ;на LCD
mov dptr,#myarr; запись в dptr адреса начала массива в памяти ;программ
call 23ddh
mov a,#0h
call 23ddh
mov r2,dph; сохранение в r2 и r3 адреса текущего байта в массиве
call 23ddh
mov r3,dpl; в памяти программ
call 23ddh
mov dptr,#mysec; запись в dptr адреса начала массива во внешней
;памяти данных
call 23ddh
mov r4,dph; сохранение в r4 и r5 адреса текущего байта в массиве
call 23ddh
mov r5,dpl; во внешней памяти данных
call 23ddh
mov dptr,#myarr
call 23ddh
m1: mov a,#0; обнуление аккумулятора
movc a,@a+dptr; пересылка байта из массива в памяти программ в
;аккумулятор
call 23ddh
inc dptr; увеличение счетчика на 1
call 23ddh
mov r2,dph; сохранение в r2 и r3 адреса текущего байта в массиве
call 23ddh
mov r3,dpl;в памяти программ
call 23ddh
mov dph,r4;восстановление из r4 и r5 адреса текущего байта в
call 23ddh
mov dpl,r5;массиве во внешней памяти данных
call 23ddh
movx @dptr,a; пересылка байта из А в массив во внешней памяти
;данных
call 23ddh
inc dptr; увеличение счетчика на 1
call 23ddh
mov r4,dph; сохранение в r4 и r5 адреса текущего байта в массиве
call 23ddh
mov r5,dpl;во внешней памяти данных
call 23ddh
mov dph,r2;восстановление из r2 и r3 адреса текущего байта в
;массиве в памяти программ
call 23ddh
mov dpl,r3
call 23ddh
djnz r0,m1; вычитание из счетчика байтов 1 и проверка на нуль
ret;возврат из программы
myarr: db 20h,21h,22h,23h,24h,25h,26h,27h,28h,29h;Задание массива
; в памяти программ
call 23ddh
ret
end