Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЦП_ч.2_Лаб.W07.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
4.27 Mб
Скачать

Лабораторна робота №4

ПОРТИ ВВЕДЕННЯ-ВИВЕДЕННЯ, ІНТЕРФЕЙС

STK500 ТА ЗАПИС ПРОГРАМИ ДО МК

Мета роботи: дослідження

ДОМАШНЄ ЗАВДАННЯ

! 1) Засвоїти теоретичні відомості щодо

2) Визначити

СТИСЛІ ТЕОРЕТИЧНІ ВІДОМОСТІ

РВВ і паралельні порти введення-виведення, команди з РВВ

Програмний стек

Стартовий набір (апаратний інтерфейс) STK 500

Програмний інтерфейс STK 500

Алгоритми реалізації ЦКП, макрофункції

Розділи програми

Команди програми

РВВ і паралельні порти введення-виведення, команди з РВВ

3.4 Звертання до регістрів вводу-виводу

Рис. 14. Порт вводу-виводу (а) та функції (б) і формат (в) його пристроїв в адресному просторі регістрів вводу-виводу

Рис. 15. Загальна схема звертання до регістрів вводу-виводу

Рис. 16. Пряма адресація до регістрів вводу-виводу

Вправи

; ===============ДИРЕКТИВИ

.nolist

.include "m8515def.inc" ; Файл включення

.list

;***** Регістрові змінні

.def tmp = r16 ; Тимчасові (temporal) дані

.def tmpa = r17 ; Тимчасові додаткові (additional) дані

; ***** Налаштування портів

1) PA[7..0] – входи, R1- вимкнено (ззовні приєднано R2):

; DDRA = 0b0000 0000, PORTA = 0b0000 0000,

; PINA[7..0] = 0b1111 1111 - кнопки SW[7..0] не натиснуто

2) [7..0] – входи, R1- увімкнено (ззовні відсутні R2): DDRВ = 0b0000 0000

ser tmp ; Установлення регістра (Set Register) : tmp <= 0b1111 1111

out PORTB,tmp ; PORTB[7..0] <= 0b1111 1111

; (Out to I/O location - Виведення до РВВ)

3) [7..0] – виходи, на всіх виводах – лог. 1;

out DDRС,tmp ; DDRС[7..0] <= 0xFF

out PORTС,tmp ; PORTС[7..0] <= 0xFF

4) PD[7..4] – входи, R1- вимкнено; PD[3..0] – виходи, на виводі PD[0] – лог. 1

ldi tmpa,$0F ; tmpa <= 0b0000 1111

out DDRD,tmpа ; DDRD[7..0] <= 0b0000 1111

sbi PORTD,0 ; (PORTD = 0x00), PORTD[0] <= 1

5) [1..0] – входи, R1- вимкнено; [2] – вихід, на виводі [2] – лог. 1

; DDRЕ[2..0] = 0b000, PORTЕ[2..0] = 0b000

sbi DDRЕ,2 ; DDRЕ[2] <= 1

sbi PORTЕ,2 ; PORTЕ[2] <= 1

; ***** 6) Програма: кнопки – світлодіоди

PA[7..0] – входи, R1- вимкнено (ззовні приєднано R2) – див. (1);

[7..0] – виходи, на всіх виводах – лог. 1 – див. (3)

Початок тестування кнопок

Якщо PINA[0] = 0 - кнопку SW[0] натиснуто,

то PORTС[0] <= 0 – засвітити LED[0], інакше:

Якщо PINA[1] = 0 - кнопку SW[1] натиснуто,

то PORTС[1] <= 0 – засвітити LED[1], інакше:

Якщо PINA[7] = 0 - кнопку SW[7] натиснуто,

то PORTС[7] <= 0 – засвітити LED[7], інакше:

затримка для візуалізації стану СД

перейти на початок тестування кнопок.

; =============== ДИРЕКТИВИ

.def tmp = r16 ; Тимчасові дані

.def del = r1 ; Затримка

.def del2 = r2 ; Затримка 2

;=============== ІНІЦІАЛІЗАЦІЯ

ser tmp ; Установлення регістра (Set Register) : tmp <= 0b1111 1111

out DDRС,tmp ; DDRС[7..0] <= 0xFF - [7..0] – виходи

TEST: ;=========ТЕСТУВАННЯ

out PORTС,tmp ; PORTС[7..0] <= 0xFF – гасіння всіх СД

sbis PIND,0 ; Якщо PIND.0 = 1 – відтиснуто SW[0], то пропустити (Skip if Bit in ; I/O Register is Set - пропустити наступну команду, якщо біт РВВ установлено),

cbi PORTС,0 ; інакше (PIND.0 = 0 – натиснуто SW[0]) PORTС[0] <= 0 – ; засвітити LED[0] (Clear Bit in I/O Register – очистити біт у РВВ)

sbis PIND,1 ; Якщо PIND.1 = 1 – відтиснуто SW[1], то пропустити

cbi PORTС,1 ; інакше (натиснуто SW[1]) PORTС[1] <= 0 – засвітити LED[1]

sbis PIND,7 ; Якщо PIND.7 = 1 – відтиснуто SW[7], то пропустити

cbi PORTС,7 ; інакше (натиснуто SW[7]) PORTС[7] <= 0 – засвітити LED[7]

DLY: ; 2562 = 65 536, затримка біля 60 мс

; (вимкнено під час налагодження)

;dec del

;brne DLY

;dec del2

;brne DLY

rjmp TEST ; Повторення циклу