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

2-Лабораторная_Основы микропроцессорной техники_6

.rtf
Скачиваний:
25
Добавлен:
23.06.2014
Размер:
43.69 Кб
Скачать

Министерство общего образования Российской Федерации

ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)

Кафедра промышленной электроники (ПрЭ)

Лабораторная работа № 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 ;Зацикливаем программу

Ответы на вопросы:

    1. SEL MB1 ;Выбор первого банка ПП JMP proc ;Переход к программе proc

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

    3. Системный сброс устанавливает регистры PC и SP в нулевое состояние, выбирает RB0 и MB0, запрещает прерывание, останавливает таймер счетчик, сбрасывает в ноль флаги пользователя F0, F1 запрещает выдачу тактовых импульсов на выход T0, подготавливает порты Р1 и Р0 в приёму информации (выводит в них байт единиц).

    4. Возможно оценить время выполнения программы в машинных циклах (Пункт Set Cyeles).