Смекни!
smekni.com

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


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

Delay equ 0220h Delay – адреса затримки 1 сек.
Button equ 0fff2h button відповідає адресі перемикачів
ldiodequ 0fff1h ldood відповідає адресі світодіодів
cseg директива повідомляє про початок сегмента коду
callDelay затримки 2із для можливості установки
callDelay потрібного значення на перемикачах
movdptr,#button завантаження в dptr адреси перемикачів
movxa,@dptr збереження стану перемикачів в А
xrl a,#11001001 інвертування зазначених бітів А
movdptr,#ldiod завантаження в dptr адреси світодіодів
movx @dptr,a відображення на лінійці світодіодів кінцевого значення

16. Проінвертувати 1, 2, 4, 6, 7 біти порту В, і видати отримане слово на порт А стенда УУМС-2Текст програми:

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

port equ0fffch ;port адреса порту А
port equ 0fffdh ;port адреса порту В
regcon equ0ffffh ;regcon адреса регістра керування
cseg ;директива початку сегмента коду
mov a,#10010000b ;порт А – вивід, У и С – уведення
movdptr,#regcon ;запис в regcon керуючої інформації
movx @dptr,a ;настроювання ППИ
movdptr,#port ;завантаження адреси порту В (прийом)
movxa,@dptr ;зчитуємо значення з порту В
xrla,#01101011b ;інвертуємо зазначені біти
mov dptr,#port ;завдання адреси порту А
movx @dptr,a ;виводимо на порт А значення з;проінвертованими бітами

17. Програма видає вміст акумулятора в послідовному коді через зазначену лінію порту, залишаючи без зміни інші біти порту. Передача виробляється з молодшого біта.



Текст програми:
cseg ;сегмент коду
org 2000h ;початкова адреса програми
MOV R2, #8 ;лічильник біт => R2
MET: RRC A ;зрушення Асс через прапор З
MOV P1.0, C ;передача біта в Порт Р1
NOP ;виклик затримки
DJNZ R2, MET ;зменшення лічильника й повтор

18. Програма організує послідовну передачу даних акумулятора на зазначений вивід порту в манчестерському коді. Біт передається двома інтервалами: перший - інверсія, другий - пряме значення біта.


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

cseg ;сегмент коду
org 2000h ;початкова адреса програми
mov R0,#8 ;лічильник
loop: rrc a ;зсув А вправо через прапор переносу
cpl c ;інвертування біта
mov P2.0,c ;передача інверсного значення біта
cpl c ;відновлення прямого значення біта
call 0230h ;затримка для вирівнювання тривалості інтервалів
mov P2.0,c ;передача прямого значення біта
djnz R0,loop ;цикл

ІНДИВІДУАЛЬНІ ПРОЦЕДУРИ

1. Процедура відображення уведеної з перемикачів інформації на семисегментном індикаторі в шестнадцатеричном коді.

Уведення й відображення значень перемикачів здійснюється за допомогою регістра DPTR по адресах відповідно 0FFF2h й 0FFF1h.

Візуалізацію здійснює процедура visual, що послідовно виділяє те молодшу, те старшу частину слова для конвертування 4 біт двійкової системи вирахування в код семисегментного індикатора, відповідно до таблиці символів get_num.



Відповідно до алгоритму роботи програми варто написати код програми.

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

cseg
org 2000h
jmp main
main:
loop: mov DPTR,#0FFF2h ;прийняття значень перемикачів
movx A,@DPTR
mov DPTR,#0FFF7h ;завдання нач. адресі СС індикатора для процедури візуалізації
call visual ;виклик процедури візуалізації
call 0203h ;затримка для фіксації значення
sjmp loop ;цикл сканування перемикачів
visual: mov R0,A ;в R0 зберігається тимчасове значення аккум.
anl A,#0Fh ;виділення мол. 4 біт
call get_num ;конвертування в СС-код
movx @DPTR,A ;вивід
inc DPTR ;наступна цифра
mov A,R0 ;перезапис значення
swap A ; виділення ст. 4 біт
anl A#0Fh
call get_num ;конвертування в СС-код
movx @DPTR,A ;вивід
ret
get_num:inc A ;функція одержання семисегметного коду
movx A,@A+PC ;таблиця кодів
db 00111111b ;0
db 00000111b ;1
db 01011011b ;2
db 01001111b ;3
db 01100110b ;4
db 01101101b ;5
db 01111101b ;6
db 00000111b ;7
db 01111111b ;8
db 01101111b ;9
db 01110111b ;A
db 01111101b ;B
db 00111001b ;C
db 01011110b ;D
db 01111001b ;E
db 01110001b ;F
ret

2. Функція уведення числа й паралельного його відображення з можливістю підтвердження уведення.

Уведення й відображення значень перемикачів здійснюється за допомогою регістра DPTR по адресах відповідно 0FFF2h й 0FFF1h.

Для фіксації значень у кожному з доступних регістрів використається зовнішнє переривання INT0(перехід з 1 в 0), в оброблювачі переривання якого й записаний код збереження значення.

Алгоритм роботи програми:

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

cseg
org 2000h
jmp main
org 2003h ;початок переривання по INT0
mov DPTR,#0fff2h ;опитування перемикачів
movx A,@DPTR
mov DPTR, #0fff1h ;вивід значень перемикачів
movx @DPTR,A
call 0230h ;затримка 50млС
mov IE,#0 ;для закінчення програми
reti
main: mov IE, #10000001b ;дозволу переривання
loop: mov DPTR,#0fff2h ;опитування перемикачів
movx A,@DPTR
mov DPTR, #0fff1h ;вивід значень перемикачів
movx @DPTR,A
sjmp loop ;нескінченний цикл сканування до переривання

3. Просуммировать два уведених значення й суму записати в DPTR.

Уведення й відображення значень перемикачів здійснюється за допомогою регістра DPTR по адресах відповідно 0FFF2h й 0FFF1h.

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

cseg
org 2000h
jmp main
org 2003h
clr EX0
jmp INT_0
main: mov IE, #10000001b ;дозволу переривання
mov R7,#0 ;лічильник операндов
setb IT1
loop: mov DPTR,#0fff2h ;опитування перемикачів
movx A,@DPTR
mov DPTR, #0fff1h ;вивід значень перемикачів
movx @DPTR,A
sjmp loop ;нескінченний цикл сканування до переривання
INT_0: clr IT1 ;змінити фронт спрацьовування переривання
mov DPTR,#0fff2h ;опитування перемикачів
movx A,@DPTR
mov DPTR, #0fff1h ;вивід значень перемикачів
movx @DPTR,A
mov R6,A ;запам'ятовування поточних значень перемикачів
mov A,R7 ;для перевірки на кількість уведених операндов
jz nul ;уведено два операнда?
mov A,R6 ;да
mov R1,A ;додавання операндов
add A,R0
mov R0,A ;для виводу за допомогою процедури SSI_W
call 0940 ;вивід
mov DPL,A ;запис значення в DPTR
jmp exit ;кінець програми
nul: mov A,R6 ;немає
mov R0,A ;збереження першого операнда
inc R7 ;наступний буде вводитися другий операнд
setb EX0 ;дозволу переривання
jmp ex ;вихід із процедури уведення
exit: mov R7,#0 ;для закінчення програми
ex: reti

4. Секундомір. Програма використає апаратні засоби відліку тимчасових інтервалів - таймер 0 (200Bh). Час виводиться на ССИ за допомогою стандартної процедури 0940 (для цього потрібне значення потрібно помістити в регістр R0). Програма виконується в зацикленому стані.


Алгоритм роботи програми:

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

cseg
org 2000h
jmp main ;перехід до виконання головної програми
org 200Bh
jmp timer ;перехід до виконання програми обробки переривання
main: mov TMOD,#01h ;включаємо 16 – розрядний таймер
mov IE,#10000010b ;дозволяємо переривання від таймера
mov TL0,#LOW(555) ;завантаження значення для відліку – 50мС
mov TH0,#HIGH(555)
mov R0,#1 ;початку з 1 секунди
call 0940h ;візуалізація секунд
setb TR0 ;старт таймера
loop: sjmp loop ;нескінченний цикл
timer: clr TR0 ;зупинка таймера
inc R7 ;20*50мС=1С
cjne R7,#20,out ;пройшла 1С?
mov R7,#0 ;так – обнуління лічильника циклів по 50мС
inc R0 ;пройшла 1С – инкремент показника секунд
cjne R0,#60,out1 ;пройшла 1 хвилина?
mov R0,#1 ;так - секунди = 1
out1: call 0940h ;показати секунди
out: mov TL0,#LOW(555) ;завантаження значення для відліку – 50мС
mov TH0,#HIGH(555)
setb TR0 ;старт таймера
reti ;кінець підпрограми обробки переривання

5. Стан перемикача INT0. Завдяки цій програмі можна обробляти переривання від INT0 без використання переходів на програма-оброблювач переривань і сканувати стан цього виводу порту P3 як скануються перемикачі. Принцип програми складається зі сканування всього порту й виділення із цього значення потрібного біта(другого). У судячи із цього біта визначається сигнал на INT0. Програма циклічно сканує порт і відповідно до зазначеного біта видає значення на лінійку светодиодов. Два значення - усі запалені - INT0=1; Половина запалена - INT0=0