Смекни!
smekni.com

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

Після запуску програми виконується настроювання таймерів Т0 і Т1 основного мікроконтролера: таймер Т0 використається як 16-бітовий лічильник, таймер Т1 - як 16-бітовий таймер, що реалізує інтервал часу 50 мс. Програмно забезпечується вимірювальний інтервал тривалістю 1 с., протягом якого таймер Т0 підраховує кількість імпульсів від генератора. Після закінчення інтервалу підрахована кількість відображається на панелі семисегментних індикаторів, і вимірювальний цикл повторяться знову.

У ході роботи програми можна змінювати частоту генерації за допомогою потенціометра Fген, розташованого на верхній панелі корпуса УУМС-2. Результат вимірів відповідно повинен змінюватися. Відображуване числове значення фактично відповідає частоті генеруємих імпульсів, вираженої в герцах.

Програма BTN_LED.ASM з індивідуальним удосконаленням

Призначення. Виконується циклічне читання стану перемикачів для завдання бітових сигналів (адреса 0FFF2h) і отримане двійкове число відображається на лінійці світодіодів (адреса 0FFF1h) чотирма різними способами:

- число відображається відповідно с бітовими значеннями;

- старша тетрда числа відображається відповідно с бітовими значеннями, а молотша тетрода – відповідно з інверсними значеннями;

- старша тетрда числа відповідно з інверсними значеннями, а молодша тетрода – відображається відповідно с бітовими значеннями;

- число відображається відповідно з інверсними значеннями бітів.

Кожний спосіб візуалізації триває 10 секунд, протягом яких можно задавати різні значення перемикачів.

cseg
org 2000h
jmp main
org 200Bh
jmp timer
main: mov TMOD,#01h
mov IE,#10000010b
mov TL0,#LOW(555)
mov TH0,#HIGH(555)
mov DPTR,#0FFF7h
mov A,#1
mov R2,#1
mov R1,#0
call get_n
movx @DPTR,A
setb TR0
loop: mov DPTR,#0FFF1h
movx @DPTR,A
quit: cjne R1, #0,two
mov dptr,#0FFF2h
movx A,@DPTR
jmp loop
two: cjne R1,#1,three
mov dptr,#0FFF2h
movx A,@DPTR
cpl Acc.0
cpl Acc.1
cpl Acc.2
cpl Acc.3
jmp loop
three: cjne R1,#2,fore
mov dptr,#0FFF2h
movx A,@DPTR
cpl Acc.4
cpl Acc.5
cpl Acc.6
cpl Acc.7
jmp loop
fore: cjne R1,#3,loop
mov dptr,#0FFF2h
movx A,@DPTR
cpl A
jmp loop
timer: mov R4,A ;збереження значення акумулятора
clr TR0 ;маскування переривання від таймера 0
inc R7 ;лічильник переривань (180 = 10 сек)
cjne R7,#180,out ;пройшло 10 секунд?
mov R7,#0 ;так – обнуління лічильника
inc R1 ;інкрементуємо показник циклів
cjne R1,#4,outa ;пройшло 4 циклів
mov R1,#0 ;обнулення показника
outa: inc R2
cjne R2,#5,outw
mov R2,#1
outw: mov A,R2
call get_n
mov DPTR,#0FFF7h
movx @DPTR,A
mov DPTR,#0FFF1h
out: mov A,R4
mov TL0,#LOW(555)
mov TH0,#HIGH(555)
setb TR0
reti
get_n: movc A,@A+PC ;підпрограма конверсії значення акумулятора в код ССІ
ret
db 00000110b ;1 ;таблиця значень ССІ для конверсії
db 01011011b ;2
db 01001111b ;3
db 01100110b ;4

6. ПРОГРАМИ ТИПОВИХ ПРОЦЕДУР

1. Передати вміст буфера резидентної пам'яті даних по непрямій адресі з R0. Алгоритм програми представления на рисунку 6.1


Рисугок 6.1 – Алгоритм для програми 1

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

Мітка Команди Коментар
cseg
org 2000h
jmp main ;перехід на виконання головної програми
org 2003h ;початок переривання по INT0
mov DPTR,#0fff2h ;завантаження адреси лінійки перемикачів
movx A,@DPTR ;прийняття значень перемикачів
mov DPTR, #0fff1h ; завантаження адреси лінійки світодіодів
movx @DPTR,A ;візуалізація значень перемикачів
call 0230h ;затримка 50мс
mov R0,A ;завантаження уведеної адреси
mov @R0,SBUF ;передача байта в РПД
mov IE,#0 ;для запобігання накладення переривань
reti ;кінець програми-оброблювача
main: mov IE, #10000001b ;активація переривання по INT0
loop: sjmp loop ;нескінченний цикл

2. Завантажити в покажчик даних початкову адресу 7F00 масиву даних, розташованого в зовнішній пам'яті даних. Алгоритм програми представления на рисунку 6.2

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

Мітка Команди Коментар
counter equ PSW.5
cseg
org 2000h
jmp main ;перехід на початок програми
org 2003h ;обробка переривання по INT0
mov IE,#0 ;для запобігання спрацьовування непотрібного переривання
mov A,R0
call o
call 0220h
mov IE, #10000001b ;дозвіл переривання по INT0
reti ;повернення з підпрограми обробки переривання
main: mov IE, #10000001b ;дозвіл переривання по INT0
clr counter ;обнуління лічильника введених тетрад
loop: mov DPTR,#0FFF2h ;сканування перемикачів
movx A,@DPTR
mov DPTR,#0FFF7h ;для відображення на ССІ
call visual ;підпрограма відображення введеної инф.
call 0230h ;затримка для фіксації значення ССІ
sjmp loop ;цикл сканування введеної инф.
visual: mov R0,A ;підпрограма зберігає значення Акк.
anl A,#0Fh ;виділення мол. тетради для коверции
call get_num ;у код ССИ за допомогою підпрограми
movx @DPTR,A ;відображення мол. частини 16-го числа
inc DPTR ;для відображення ст. частини
mov A,R0 ;відновлення значення Акк.
swap A ;виділення ст. тетради для коверции
anl A,#0Fh
call get_num ;у код ССИ за допомогою підпрограми
movx @DPTR,A ;відображення ст. частини 16-го числа
ret ; кінець підпрограми
o: jb counter,sec ;лічильник дорівнює 1?
mov R1,A ;ні, а значить зберегти введене значення
setb counter ;лічильник – друга тетрада
jmp fist ;завершення циклу уведення першої тетради
sec: mov DPH,A ;дорівнює, а значить збереження уведеної инф.
mov DPTR,#0FFF9h ;візуалізація зі старшого розряду
call visual ;виклик процедури візуалізації
mov A,R1 ;мол. тетрада уведена
mov DPL,A ;запис в DPTR
mov DPTR,#0FFF7h ;візуалізація з мол. розряду
call visual ;візуалізація з мол. розряду
l: jmp l ;зациклення – кінець програми
fist: call 0230h ;затримка 50 мс
ret ;вихід з підпрограми візуалізації
get_num: inc A ;підпрограма перекладу 16-ССІ
movc A,@A+PC
ret
db 00111111b ;0
db 00000110b ;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 01111100b ;B
db 00111001b ;C
db 01011110b ;D
db 01111001b ;E
db 01110001b ;F

Рисунок 6.2 - Алгоритм програми 2 1

3. Програма виконує завантаження керуючого слова в регістр керування таймером TCON з лінійки перемикачів по перериванню INT0 і візуалізацію слова на лінійці світодіодів. Алгоритм програми представления на рисунку 6.3

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

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

Мітка Команди Коментар
cseg ;сегмент коду
org 2000h ;початкова адреса програми
jmp main ;перехід на установку регістра IE
org 2003h ;початок переривання по INT0
mov DPTR,#0fff2h ;запис адреси лінійки перемикачів
movx A,@DPTR ;збереження даних з перемикачів в А
mov DPTR, #0fff1h ;запис адреси лінійки світодіодів
movx @DPTR,A ;візуалізація байта даних
mov TCON,A ;пересилання байта даних у регістр TCON
mov IE,#0 ;обнуління регістра IE
reti ;вихід з підпрограми переривання
main: mov IE, #10000001b ;установка регістра IE
loop: sjmp loop ;зациклення (нескінченний цикл)

4. Програма виконує скидання всіх прапорів користувача (область РПД із адресами 20h-2Fh).

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

Мітка Команди Коментар
cseg ;сегмент коду
org 2000h ;початкова адреса програми
;запис значень на згадку
start: MOV A,#0 ;установка початкового значення
MOV R0, #20h ;завантаження в R0 початкового значення адреси пам'яті
MOV R1, #0Fh ;завантаження в R1 кількості повторень циклу
DM: INC A ;збільшення записуваного значення
MOV @R0,A ;запис значення на згадку
INC R0 ;збільшення адреси пам'яті
MOV DPTR,#0FFF1h ;запис адреси лінійки світодіодів
MOVX @DPTR,A ;візуалізація байта даних
call 0220h ;затримка 1c
DJNZ R1, DM ;зациклення (якщо не всі байти записані)
;обнуління комірок пам'яті
MOV R0, #20h ;завантаження в R0 початкового значення адреси пам'яті
MOV R1, #0Fh ;завантаження в R1 кількості повторень циклу
loop: MOV DPTR,#0FFF1h ;запис адреси лінійки світодіодів
MOV A,@R0 ;пересилання вмісту R0 для візуалізації
MOVX @DPTR,A ;візуалізація байта даних
call 0220h ;затримка 1c
MOV @R0, #0 ;відчищання байта даних
MOV A, @R0 ;пересилання обнуленного регістра R0 в А
MOVX @DPTR,A ;візуалізація байта даних
call 0220h ;затримка 1c
call 0220h ;затримка 1c
INC R0 ;збільшення адреси байта даних
DJNZ R1, loop ;зациклення (якщо не всі байти відчищені)
jmp start ;зациклення

Запам'ятати у ВПД уміст регістрів банку 0. Початкова адреса у ВПД 5000h. Алгоритм програми представления на рисунку 6.4