Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Цвинтарный Иван 362-1 Лабораторная работа 3.docx
Скачиваний:
5
Добавлен:
21.06.2023
Размер:
266.92 Кб
Скачать

2.Задание № 2

Проверить работу программы LED.asm. Программа в режиме динамической индикации выводит на светодиодную матрицу 8*8 символ Х. Подключить матричный индикатор к портам микроконтроллера (см. рис.5). Открыть в нем вкладку инструменты/послесвечение (Fade out interval) и установить не менее 500. Во вкладке Light up when установить Row 0 & Column 1. Написать комментарий к подпрограммам led, loop. Рассчитать время задержки подпрограммы loop.

COLUMN EQU 01 ;Начальный номер стобца матрицы

ROW EQU 0 ;начальный номер ряда матрицы

TABL EQU 50h ; адрес таблицы скан-кода символа

org 0 ;начало основной программы

mov a, #COLUMN

mov b, #ROW

mov dptr, #TABL

mov r0, #0 ;установка счетчика столбцов

m1: call led ; вызов подпрограммы определения скан-кода

mov p2, a ;подключения одного столбца

mov p1, b ;и всех рядов матрицы

call loop ;задержка на 2,5 мс (частота миганий 50 ГЦ)

rl a ;следующий столбец

inc r0 ;икримент счетчика столбцов

orl p1, #0ffh ;гашение текущего столбца

cjne r0, #8, m1 ;продолжать до конца столбцов матрицы

mov r0, #0 ;начинается

mov r1, #0 ; следующий

jmp m1 ; цикл

led: push acc ; Сохранить содержимое регистра аккумулятора на стеке

mov a, r1 ; Поместить значение регистра r1 в аккумулятор

movc a, @A+DPTR ; Присвоить значение по адресу DPTR+A и сохранить в аккумуляторе

mov b, a ; Сохранить содержимое аккумулятора в регистре b

inc r1 ; Увеличить значение регистра r1 на 1

pop acc ; Восстановить содержимое аккумулятора из стека

ret ; Возврат из подпрограммы

loop: MOV R2, #01h ; Загрузить значение 01h в регистр R2

MOV R3, #01h ; Загрузить значение 01h в регистр R3

DJNZ R3, $ ; Уменьшить значение регистра R3 на 1 и перейти к текущей позиции, если R3 не равен нулю

DJNZ R2, $-5 ; Уменьшить значение регистра R2 на 1 и перейти к указанному адресу, если R2 не нуль

ret ; Возврат из подпрограммы

org 50h

db 01111110b

db 10111101b

db 11011011b

db 11100111b

db 11100111b

db 11011011b

db 10111101b

db 01111110b

end

Рассчитаем время задержки подпрограммы loop:

MOV R2, #01h – 1такт

MOV R3, #01h – 1 такт

DJNZ R3, $ - 2 такта

DJNZ R2, $-5 – 2 такта

RET – 2 такта

Итого: 1+1+2+2+2 = 8 тактов

= 8мкс

Рисунок 2.1– Работа программы

Программа работает исправно, на светодиодную матрицу 8*8 выводится Х

3. Задание № 3

Разработать и отладить на эмуляторе индивидуальное задание в соответствии со своим вариантом (N): При нажатии кнопки N на матричной клавиатуре 4*4 символ отображается на матричном индикаторе 8*8, в противном случае матричный индикатор потушен

COLUMN EQU 01 ; Начальный номер столбца матрицы

ROW EQU 0 ; Начальный номер ряда матрицы

TABL EQU 50h ; Адрес таблицы скан-кода символа

org 0 ; Начало основной программы

mov P0, #0F7h ; Запись в порт Р2 числа 11110111b

mov R7, #0F7h ; Запись в регистр R7 числа 11110111b

L1: mov A, R7 ; Запись R7 в А

rl A ; Сдвиг А влево

mov R7, A ; Запись А в R7

orl A, #00Fh ; Запись 1 в младшую тетраду А для настройки младшей тетрады Р2 на ввод

mov P0, A ; Настройка порта P0 для ввода данных

; Сканирование линии 2

L3: jb P0.0, L1 ; Проверка состояния кнопки, если нажата, перейти к L1

ljmp S1 ; Иначе перейти к S1 для сканирования столбца 0

; Сканирование столбца 0

S1: jb P0.7, L1 ; Проверка состояния столбца 0, если активен, перейти к L1

ljmp CALC ; Иначе перейти к подпрограмме CALC

CALC: mov a, #COLUMN ; Загрузка начального номера столбца в регистр A

mov b, #ROW ; Загрузка начального номера ряда в регистр B

mov dptr, #TABL ; Загрузка адреса таблицы скан-кода символа в регистр DPTR

mov r0, #0 ; Установка счетчика столбцов в 0

m1: call led ; Вызов подпрограммы определения скан-кода

mov p2, a ; Подключение одного столбца

mov p1, b ; И всех рядов матрицы

call loop ; Задержка на 2,5 мс (частота миганий 50 ГЦ)

rl a ; Следующий столбец

inc r0 ; Инкремент счетчика столбцов

orl p1, #0FFh ; Гашение текущего столбца

cjne r0, #8, m1 ; Продолжать до конца столбцов матрицы

mov r0, #0 ; Начинается

mov r1, #0 ; Следующий

jmp m1 ; Цикл

led: push acc ; Сохранить содержимое регистра аккумулятора на стеке

mov a, r1 ; Поместить значение регистра r1 в аккумулятор

movc a, @A+DPTR ; Присвоить значение по адресу DPTR+A и сохранить в аккумуляторе

mov b, a ; Сохранить содержимое аккумулятора в регистре b

inc r1 ; Увеличить значение регистра r1 на 1

pop acc ; Восстановить содержимое аккумулятора из стека

ret ; Возврат из подпрограммы

loop: MOV R2, #01h ; Загрузить значение 01h в регистр R2

MOV R3, #01h ; Загрузить значение 01h в регистр R3

DJNZ R3, $ ; Уменьшить значение регистра R3 на 1 и перейти к текущей позиции, если R3 не равен нулю

DJNZ R2, $-5 ; Уменьшить значение регистра R2 на 1 и перейти к указанному адресу, если R2 не нуль

ret ; Возврат из подпрограммы

org 50h

db 00111111b

db 10001111b

db 11010011b

db 11011100b

db 11010011b

db 10001111b

db 00111111b

db 11111111b

end

Рисунок 3.1 – Результат работы программы до нажатия кнопки на матричной клавиатуре

Рисунок 3.1 – Результат работы программы после разжатия кнопки

4. КОНТРОЛЬНЫЕ ВОПРОСЫ

4.1. Чему равно содержимое портов МК51 после системного сброса?

После системного сброса содержимое портов равно 0ffh

4.2. Чему равен выходной ток логического нуля и единицы портов микроконтроллера (мА)?

Выходной ток логического ‘0’ равен 1.6 мА, логической ‘1’ – 0.4 мА

4.3Какими командами можно установить бит Р1.1?

SETB P1.1 или ANL P1 #02h

4.4. Приведите схему подключения светодиода к линии Р2.0

Рисунок 4.1 – Схема подключения светодиода к линии Р 2.0

ЗАКЛЮЧЕНИЕ

В ходе лабораторной работы изучили особенности работы параллельных портов МК51, приобрели навыки работы с матричной клавиатурой 4*4 и светодиодной матрицей 8*8.