Смекни!
smekni.com

Мікропроцесорна техніка (стр. 14 из 17)


Рисунок 6.4 - Алгоритм програми 5

Текст програми:

CSEG
ORG 2000h
MOV PSW, #08H ; Вибір 1-го Банку РЗП
MOV R2, #8 ; Лічильник циклів => R2
MOV DPTR,#5000h ; Початкова адреса => DPTR
MOV R0, #0 ; Початкова адреса Банку 0
MET: MOV A, @R0 ; Пересилання байта з РЗП
MOVX @DPTR, A ; у ВПД
INC DPTR ; Нарощування адреси ВПД
INC R0 ; Нарощування адреси РПД
DJNZ R2, MET ; Зменшення лічильника й повтор

6. Програма виконує запис коду (установленого на перемикачах) на згадку даних, починаючи з адреси 3000h. Комбінація, записувана на згадку, визуализується на лінійці світодіодів. Затримка між записом сусідніх комбінацій 3 секунди. Алгоритм програми представления на рисунку 6.5


Текст програми:

INDequ0fff1h ;IND відповідає адресі лінійки світодіодів
keyequ0fff2h ;key – адреса лінійки перемикачів
Pamequ3000h ;Pam – адреса області пам'яті для запису даних
Delay1s equ0220h ;Delay1s відповідає адресі затримки 1 сек.
cseg ;сегмент коду
org2000h ;початкова адреса програми
movr3, #0 ;регістр R3 виконує функцію лічильника
mov dptr, #Pam ;завантаження адреси області пам'яті для запису даних
m1: Push dpl ;збереження мол. частини DPTR
push dph ;збереження ст. частини DPTR
call Delay1s ;реалізація затримки 3 сек.
call Delay1s
call Delay1s
movdptr, #key ;завантаження адреси лінійки перемикачів
movxa, @dptr ;збереження даних з перемикачів в А
popdph ;відновлення ст. частини DPTR
popdpl ;відновлення мол. частини DPTR
movx@dptr,a ;збереження даних з перемикачів у пам'яті
pushdpl ;збереження мол. частини DPTR
pushdph ;збереження ст. частини DPTR
movdptr,#IND ;завантаження адреси лінійки світодіодів
movx@dptr,a ;візуалізація даних з перемикачів
popdph ;відновлення ст. частини DPTR
popdpl ;відновлення мол. частини DPTR
incdptr ;збільшення адреси пам'яті для запису даних
incr3 ;збільшення лічильника
CJNEr3,#10, m1 ;повторення циклу 10 разів
loop: jmploop ;кінець програми (нескінченний цикл)

Рисунок 6.5 – Алгоритм програми 6


7. Операції зі стеком

Текст програми:

cseg ; директива початку сегмента коду
org 2000h ; початкова адреса програми
PUSH PSW ; збереження в стеці PSW
PUSH ACC ; збереження в стеці акумулятора
PUSH B ; збереження в стеці B
PUSH DPL ; збереження в стеці DPTR
PUSH DPH
MOV PSW, #00H ; вибір Банку РЗП 0
POP DPH ; відновлення DPTR
POP DPL
POP B ; відновлення B
POP ACC ; відновлення акумулятора
POP PSW ; відновлення PSW

8. Використання арифметичних операцій. Скласти два двійкових багатобайтних числа. Обоє доданків розташовані в РПД починаючи з молодшого байта. Початкова адреса доданків в R0 й R1. Формат що складають (довжина в байтах) заданий в R2. Алгоритм програми представления на рисунку 6.6

Текст програми:

cseg
org 2000h
mov DPTR, #0FFF1h ;для виводу на світодіоди
loop: mov a,@R0 ;адреса першого доданка
addc a,@R1 ;додавання
mov @R0,A ; збереження суми частин
movx @DPTR,A ;відображення суми
inc R0 ;наступні байти доданків
inc R1
DJNZ R2,loop ;формат доданків заданий в R2


Рисунок 6.6 – Алгоритм програми 8

9. Програма виконує множення цілого двійкового числа довільного формату на константу 157. Вихідне число зберігається в РПД, адреса його молодшого байта завантажений у регістр R0. Формат числа (довжина в байтах) утримується в регістрі R1. Алгоритм програми представления на рисунку 6.7


10. Рисунок 6.7 – Алгоритм програми 9



Текст програми:

cseg ;сегмент коду
org 2000h ;початкова адреса програми
mov DPTR,#0FFF1h ;завантаження адреси лінійки світодіодів
mov A,#0 ;обнуління акумулятора
loop: add A,@R0 ;завантаження множеного
mov B,#157 ;завантаження множника
mul AB ;операція множення
mov @R0,A ;запис мол. байта
movx @DPTR,A ;візуалізація мол. байта на світодіодах
call 0220h ;затримка 1 сек.
inc R0 ;збільшення адреси
mov A,B ;пересилання ст. байта результату в А
movx @DPTR,A ;візуалізація ст. байта на світодіодах
call 0220h ;затримка 1 сек.
xch @R0,A ;формування чергового байта
DJNZ R1,loop ;зациклення, якщо не всі байти помножені

11. Програма виконує перетворення двійкового числа, яке міститься в акумуляторі в BCD-код.

Текст програми:

cseg ;сегмент коду
org 2000h ;початкова адреса програми
MOV A, R5 ;пересилання операнда в Асс
MOV B, #100 ;дільник 100 для обчислення сотень у числі
DIV AB ;Асс містить число сотень (ст. тетраду)
MOV R6, A ;пересилання числа сотень в R6
MOV A, B ;пересилання залишку вихідного числа в Асс
MOV B, #10 ;дільник 10 для обчислення числа десятків у числі
DIV AB ;число десятків утримується в Ас, число одиниць - в B
SWAP A ;розміщення числа десятків у старшу тетраду Асс
ADD A, B ;розміщення числа одиниць у молодшій тетраді Асс
MOV R5, A ;збереження результату в R5

12. Програма повинна використати логічні операції (і, або, не), уважати стан перемикачів і виконати над ним наступні дії (((not a)and25)or20) xor ((not a)and25), результат візуалізувати на лінійці світодіодів.

Текст програми:

Button equ 0fff2h ;button – адресі перемикачів
Diod equ 0fff1h ;diod відповідає адресі світодіодів
cseg ;директива початку сегмента коду
movdptr,#button ;завантаження в dptr адреси перемикачів
movxa,@dptr ;збереження стану перемикачів в А
clpa ;інвертування А
movr0,#25 ;завантаження 25 в r0
anla,r0 ;and акумулятора й умісту регістра r0
movr0,a ;збереження результату в r0
movr1,#20 ;завантаження в r1 значення 20
orla,r1 ;or акумулятора й r1
xrla,r0 ;xor акумулятора й умісту r0
movdptr,#diod ;завантаження в dptr адреси світодіодів
movx @dptr,a ;відображення на лінійці світодіодів
;кінцевого значення

13. Установити в одиничний стан 1, 2, 4, 6, 7 біти порту А стенда УУМС-2

Текст програми:

port equ0fffch ;port адреса порту А
regcon equ0ffffh ;regcon адреса регістра керування
cseg ;директива початку сегмента коду
mov a,#10010000b ;порт А – вивід, У и С – уведення
movdptr,#regcon ;завантаження адреси регістра керування
movx @dptr,a ;настроювання ППИ
mov dptr,#port ;завдання адреси порту А
mov a,#11010110b ;установлюємо відповідні біти

14. Записати "0" до 0,1, 4, 5, 7 бітів порту А стенда УУМС-2


Текст програми:

port equ 0fffch ;port адреса порту А
port equ 0fffdh ;port
regcon equ 0ffffh ;regcon адреса регістра керування
cseg ;директива початку сегмента коду
mov a,#10010000b ;порт А – вивід, У и С – уведення
movdptr,#regcon ;завантаження адреси регістра керування
movx @dptr,a ;настроювання ППИ
movdptr,#port ;завантаження адреси порту В
movA,@dptr ;уведення інформації через порт В
mov r1,#01001100b ;вказівка бітів для скидання
anla,r1 ;скидання зазначених бітів
movx@dptr,#port ;завдання адреси порту А
movx@dptr,a ;вивід інформації через порт А

15. Проінвертувати інформацію з порту В у відповідні одиничні біти акумулятора стенда УУМС-2

Текст програми:

port equ 0fffdh ;port
regcon equ 0ffffh ;regcon адреса регістра керування
cseg ;директива початку сегмента коду
mov a,#10010000b ;порт А – вивід, У и С – уведення
movdptr,#regcon ;завантаження адреси регістра керування
movx @dptr,a ;настроювання ППИ
movdptr,#port ;завантаження адреси порту В
movA,@dptr ;уведення інформації через порт В
movr0,a ;зберігаємо уведене значення
mova,#01010011b ;слово відповідно до якого
;буде зроблена інверсія
xrla,r0 ;інверсія значення порту по Асс
movx@dptr,#port ;завдання адреси порту А
movx@dptr,a ;вивід інформації через порт А

15. Прочитати стан перемикачів, зберегти в А, проінвертувати 0, 3, 6, 7 біти акумулятора й видати на лінійку світодіодів.