2-Лабораторная_Основы микропроцессорной техники_6
.rtfМинистерство общего образования Российской Федерации
ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)
Кафедра промышленной электроники (ПрЭ)
Лабораторная работа № 2
Отладка прикладных программ для микроконтроллера МК48.
Студент ТМЦДО
Проверил
А.В. Шарапов___________
Новокузнецк 2004
С помощью редактора подготавливаем текст программы:
1 0000 23 01 MOV A,#1 ;Запись единицы в младьший разряд А
2 0002 39 M1: OUTL P1,A ;Вывод содержимого А в Р1
3 0003 E7 RL A ;Циклический сдвиг содержимого А вправо
4 0004 00 NOP ;Пустой оператор
5 0005 E9 05 DJNZ R1,$ ;Временная задежка
6 0007 04 02 JMP M1 ;Зацикливание программы
7 0009 ЕND ;Конец трансляции
Программа получает в порту Р1 эффект бегущего огонька с право на лево (тоже самое происходит в регистре А)
В регистре R1 значение уменьшаются от 0FFH до 0.
Модифицируем программу:
Заменяем команду NOP на INC A. В результате программа заполняет порт Р1 начиная с право все разряды единицами.
Заменяем команду RL A на RR A. Получили в порту Р1 эффект бегущей единицы слева на право.
В режиме Patch Code запишем программу временной задержки и оценим время выполнения программы:
MOV R0,#0
DJNZ R0,$
Время выполнения программы составило: 514 машинных тактов
Запишем программу PROG.ASM
1 0000 05 EN I
2 0001 04 05 JMP M1
3 0003 04 0C JMP CLOK
4 0005 45 M1: STRT CNT
5 0006 17 INC A
6 0007 3C MOVD P4,A
7 0008 47 SWAP A
8 0009 3D MOVD P5,A
9 000A 04 05 JMP M1
10 000C 75 CLOK: ENT0 CLK
11 000D 93 RETR
12 000E END
Содержимое порта Р2 меняется потому что для организации дополнительных четырёх байтовых портов ввода – вывода используется порт Р2
При срабатывании аппаратного прерывания работает подпрограмма обработки прерывания находящаяся по адресу 000СН
При наличии прерывания программа обращается к адресу 0003Н в котором указан, адрес подпрограммы обработки прерывания.
Команда запрещения внешнего прерывания DIS I.
При вызове прерывания в стеки сохранятся адрес возврата в основную программу, а указатель стека SP увеличивается на 1.
Выполняем на эмуляторе программу COMP.ASM
1 0000 BA 00 MOV R2,#0 ;Накопитель результата
2 0002 B8 20 MOV R0,#32 ;Начальный адрес массива
3 0004 BF 20 MOV R7,#32 ;Число элементов массива
4 0006 37 CPL A ;Инверсный код константы
5 0007 A9 MOV R1,A ;в R1
6 0008 F9 M1: MOV A,R1 ;Сравнение очередного
7 0009 60 ADD A,@R0 ;элемента с константой
8 000A E6 11 JNC M2 ;Переход, если < или =
9 000C 2A XCH A,R2 ;Двоично - дессятичный
10 000D 03 01 ADD A,#1 ;счетчик в R2
11 000F 57 DA A ;
12 0010 2A XCH A,R2 ;
13 0011 18 M2: INC R0 ;Наращивания адреса
14 0012 EF 08 DJNZ R7,M1 ;Цикл обработки массива
15 0014 FA MOV A,R2 ;Число N в аккумулятор
Разработать программу:
Бит 1.7 должен обнулиться, если на любых пяти из семи оставшихся линиях порта установлены нулевые уровни.
Разработанная программа :
1 0000 09 M1: IN A,P1 ;Переносим данные из порта в аккумулятор
2 0001 B8 07 MOV R0,#07H ;Кол-во проверяемых разрядов
3 0003 B9 00 MOV R1,#0H ;Кол-во единиц
4 0005 67 M2: RRC A ;Сдвиг аккумулятора вправо
5 0006 F6 09 JC NEXT ;Если флаг переноса=0 переходим
6 0008 19 INC R1 ;Единица в одном из разрядов
7 0009 E8 05 NEXT DJNZ R0,M2 ;Уменьшаем счетчик
8 000B F9 MOV A,R1 ;Сравниваем значение в регистре
9 000C 37 CPL A ;R1 с 5
10 000D 03 05 ADD A,#05H ;
11 000F F6 00 JC M1 ;если меньше то начинаем с начала
12 0011 09 IN A,P1 ;Восстанавливаем в аккумуляторе значение порта
13 0012 53 7F ANL A,#01111111B;налаживаем маску на аккумулятор
14 0014 39 OUTL P1,A ;Выводим в порт
15 0015 04 00 JMP M1 ;Зацикливаем программу
Ответы на вопросы:
-
SEL MB1 ;Выбор первого банка ПП JMP proc ;Переход к программе proc
-
Для перехода возможно использовать две команды: безусловного перехода JMP и вызов подпрограммы LCALL
-
Системный сброс устанавливает регистры PC и SP в нулевое состояние, выбирает RB0 и MB0, запрещает прерывание, останавливает таймер счетчик, сбрасывает в ноль флаги пользователя F0, F1 запрещает выдачу тактовых импульсов на выход T0, подготавливает порты Р1 и Р0 в приёму информации (выводит в них байт единиц).
-
Возможно оценить время выполнения программы в машинных циклах (Пункт Set Cyeles).