Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Звіт лабаи №3.docx
Скачиваний:
1
Добавлен:
20.11.2019
Размер:
33.59 Кб
Скачать

4. За заданим варіантом розробимо програму виконання операції віднімання двохбайтових чисел:

FF00 – 00FF = FE01

Виведемо на динамічний семисегментний світлодіодний індикатор HL2 зменшуване FF00:

ORG 0 ;розміщення програми з адреси 0000.

mov DPTR, #0A004h ;гасіння розрядів

mov A,#00Fh ;статичного індикатора.

movx @DPTR, A

Continue:

;підготовка першого ліворуч (№0) розряду HL2.

mov A, #0000b ;запис в А адреси 00 розряду №0 HL2.

mov DPTR,#8002h ;запис в DPTR адреси 8002 (порту С).

movx @DPTR, A ;вміст А записати в порт С.

;завантаження даних в розряд.

mov A,# 000111001b ;запис семисегментного коду 000111001 ;цифри 2 в А.

mov DPTR,#8001h ;запис в DPTR адреси 8001 порту В

movx @DPTR, A ;записати вміст А в порт В.

call DELAY10 ;затримка

;підготовка другого ліворуч (№1) розряду HL2.

mov DPTR, #8002h ;запис в DPTR адреси 8002 (порту С).

mov A,#0001b ;запис в А адреси розряду №1 індикатора HL2.

movx @DPTR, A ;вміст А записати в порт С.

;завантаження даних в розряд.

mov A,#000111001b ;запис коду 000111001 цифри 0 в А.

mov DPTR,#8001h ;запис в DPTR адреси 8001 порту В,

;звідки дані виводяться на HL2.

movx @DPTR,A ;записати вміст А за адресою, що міститься

;в DPTR, тобто засвітити сегменти A,B,C,D,E,F цифри 0,

;та сегмент H - ':' для розділення годин та хвилин

call DELAY10 ;затримка

;підготовка розряду №2 індикатора HL2.^

mov DPTR,#8002h ;запис у DPTR адреси 8002 (порту С).

mov A,#0010b ;запис в А адреси розряду №2 індикатора HL2.

movx @DPTR, A ;вміст А записати в порт С.

;завантаження даних в розряд.

mov A, # 000111111b ;запис коду 000111111 горіння цифри 1 в А.

mov DPTR, #8001h ;запис у DPTR адреси 8001 порту В.

movx @DPTR, A

;записати вміст А за адресою, що міститься

; в DPTR, тобто в розряд №2 HL2,

call DELAY10 ;затримка.

;підготовка розряду №3 індикатора HL2.

mov DPTR,#8002h ;запис у DPTR адреси 8002 (порту С).

mov A,#0011b ;запис в А адреси розряду №3 HL2.

movx @DPTR, A ;вміст А записати в порт С.

;завантаження даних в розряд.

mov A,# 000111111b ;запис коду 000111111 горіння цифри 2 в А.

mov DPTR,#8001h ;запис у DPTR адреси 8001 порту В.

movx @DPTR,A ;в розряді №3 HL2 засвітити сегменти A,B, ;C, D, E, F,G що формують цифру 8.

call DELAY10 ;затримка.

Jmp Continue

;перехід на початок програми

DELAY10: ;затримка 10 мс

MOV R3, #01h ;0АН = 10D

TCD: LCALL DELAY1

DJNZ R3, TCD ;10 разів зовнішний цикл по 1 мс

RET

DELAY1:

MOV R1, #19h ;1 мкс, (19Н = 25D)

LREX: MOV R2, #012h ;1 мкс, (12Н = 18D)

LRIN: DJNZ R2, LRIN ;(36) мкс на 12 МГц

DJNZ R1, LREX ;25 разів внутрішній цикл по 37 мкс

MOV R0, #8h ;1 мкс,

M1: DJNZ R0, M1 ;2?8=16 мкс,

RET ;2 мкс

End

5. Виведемо на динамічний семисегментний світлодіодний індикатор hl2 відємник 00ff:

ORG 0 ;розміщення програми з адреси 0000.

mov DPTR, #0A004h ;гасіння розрядів

mov A,#00Fh ;статичного індикатора.

movx @DPTR, A

Continue:

;підготовка першого ліворуч (№0) розряду HL2.

mov A, #0000b ;запис в А адреси 00 розряду №0 HL2.

mov DPTR,#8002h ;запис в DPTR адреси 8002 (порту С).

movx @DPTR, A ;вміст А записати в порт С.

;завантаження даних в розряд.

mov A,# 000111111b ;запис семисегментного коду 000111111 ;цифри 2 в А.

mov DPTR,#8001h ;запис в DPTR адреси 8001 порту В

movx @DPTR, A ;записати вміст А в порт В.

call DELAY10 ;затримка

;підготовка другого ліворуч (№1) розряду HL2.

mov DPTR, #8002h ;запис в DPTR адреси 8002 (порту С).

mov A,#0001b ;запис в А адреси розряду №1 індикатора HL2.

movx @DPTR, A ;вміст А записати в порт С.

;завантаження даних в розряд.

mov A,#000111111b ;запис коду 000111111 цифри 0 в А.

mov DPTR,#8001h ;запис в DPTR адреси 8001 порту В,

;звідки дані виводяться на HL2.

movx @DPTR,A ;записати вміст А за адресою, що міститься

;в DPTR, тобто засвітити сегменти A,B,C,D,E,F цифри 0,

;та сегмент H - ':' для розділення годин та хвилин

call DELAY10 ;затримка

;підготовка розряду №2 індикатора HL2.^

mov DPTR,#8002h ;запис у DPTR адреси 8002 (порту С).

mov A,#0010b ;запис в А адреси розряду №2 індикатора HL2.

movx @DPTR, A ;вміст А записати в порт С.

;завантаження даних в розряд.

mov A, # 000111001b ;запис коду 000111001 горіння цифри 1 в А.

mov DPTR, #8001h ;запис у DPTR адреси 8001 порту В.

movx @DPTR, A

;записати вміст А за адресою, що міститься

; в DPTR, тобто в розряд №2 HL2,

call DELAY10 ;затримка.

;підготовка розряду №3 індикатора HL2.

mov DPTR,#8002h ;запис у DPTR адреси 8002 (порту С).

mov A,#0011b ;запис в А адреси розряду №3 HL2.

movx @DPTR, A ;вміст А записати в порт С.

;завантаження даних в розряд.

mov A,# 000111001b ;запис коду 000111001 горіння цифри 2 в А.

mov DPTR,#8001h ;запис у DPTR адреси 8001 порту В.

movx @DPTR,A ;в розряді №3 HL2 засвітити сегменти A,B, ;C, D, E, F,G що формують цифру 8.

call DELAY10 ;затримка.

Jmp Continue

;перехід на початок програми

DELAY10: ;затримка 10 мс

MOV R3, #01h ;0АН = 10D

TCD: LCALL DELAY1

DJNZ R3, TCD ;10 разів зовнішний цикл по 1 мс

RET

DELAY1:

MOV R1, #19h ;1 мкс, (19Н = 25D)

LREX: MOV R2, #012h ;1 мкс, (12Н = 18D)

LRIN: DJNZ R2, LRIN ;(36) мкс на 12 МГц

DJNZ R1, LREX ;25 разів внутрішній цикл по 37 мкс

MOV R0, #8h ;1 мкс,

M1: DJNZ R0, M1 ;2?8=16 мкс,

RET ;2 мкс

End