Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Part_2.doc
Скачиваний:
4
Добавлен:
04.09.2019
Размер:
2.6 Mб
Скачать

2.2.5. Приклади написання програм

В даному розділі приведено приклади програм для мікроконтролера AT90S1200. Оскільки він являється наймолодшим із серїї AVR, то програми будуть працювати й на інших серіях AVR-контролерів. Слід зазначити, що у AT90S1200 всього 2 порти вводу-виводу (порт В і порт D), один з яких – порт D – неповний. В нього немає старшого (7-го) розряду.

Приклад1. Розробити програму, котра виводить 1-цю на b0 порту В при натисканні кнопки і тримає її значення на протязі 10 секунд.

.device at90s1200

.include "1200def.inc"

ser r16 ; всі біти регістра R16 встановлюються в одиницю

out ddrb,r16 ; налаштовування порту В на вивід

loop: clr r18 ; очистка регістра R18

out portb,r18 ; вивід значення регістра R18 на порт В

sbic pind,0 ; якщо нульовий біт порту D дорівнює 0, то програма пропускає ;наступну команду

rjmp loop ; перехід на початок програми (мітку loop)

ldi r18,1 ; присвоїти регістру R18 константу 1

out portb,r18 ; вивід значення регістра R18 на порт В

rcall Delay ; виклик підпрограми

rjmp loop ; перехід на початок програми (метку loop)

Delay: ; підпрограма затримки на 10 секунд

clr r19 ; очистка регістра R19

clr r21 ; очистка регістра R21

clr r20 ; очистка регістра R20

n1: inc r19 ; інкремент (+1) регістра R19

cpi r19,255 ; порівняння регістра R19 з 255

brne n1 ; якщо R19¹255, то програма переходить на мітку n1

inc r20 ; інкремент (+1) регістра R20

cpi r20,255 ; порівняння регістра R20 з 255

brne n1 ; якщо R20¹255, то програма переходить на мітку n1

inc r21 ; інкремент (+1) регістра R21

cpi r21,160 ; порівняння регістра R21 з 160

brne n1 ; якщо R21¹160, то програма переходить на мітку n1

ret ; повернення із підпрограми в те місце, звідки дана підпрограма ;викликалась

Приклад 2. Зчитати з порту В (біти b0b3) одне двійкове слово, а з порту В (біти b4b7) друге. Виконати операцію логічного “І” над ними і інверсію над результатом. Отриманий результат вивести на біти d3d6 порту D.

.device at90s1200 ;

.include "1200def.inc" ;

ser r16 ; всі біти регістра R16 встановлюються в одиницю

out ddrd,r16 ;налаштування порту D на вивід

loop: in r17,pinb ;ввод даних з порту В в регістр R17

bst r17,0 ; копіювання нульового біта регістра R17 в біт-акумулятор Т регістра ;статусу

bld r18,0 ; загрузка в нульовий біт регістра R18 значення біт-акумулятора

bst r17,1 ; копіювання першого біта регістра R17 в біт-акумулятор

bld r18,1 ; загрузка в перший біт регістра R18 значення біт-акумулятора

bst r17,2 ; копіювання другого біта регістра R17 в біт-акумулятор

bld r18,2 ; загрузка в другий біт регістра R18 значення біт-акумулятора

bst r17,3 ; копіювання третього біта регістра R17 в біт-акумулятор

bld r18,3 ; загрузка в третій біт регістра R18 значення біт-акумулятора

bst r17,4 ; копіювання четвертого біта регістра R17 в біт-акумулятор

bld r19,0 ; загрузка в нульовий біт регістра R19 значення біт-акумулятора

bst r17,5 ; копіювання п’ятого біта регістра R17 в біт-акумулятор

bld r19,1 ; загрузка в перший біт регістра R19 значення біт-акумулятора

bst r17,6 ; копіювання шостого біта регістра R17 в біт-акумулятор

bld r19,2 ; загрузка в другий біт регістра R19 значення біт-акумулятора

bst r17,7 ; копіювання сьомого біта регістра R17 в біт-акумулятор

bld r19,3 ; загрузка в третій біт регістра R19 значення біт-акумулятора

and r18,r19 ;побітова операція логічного “І” над регістрами R18 и R19 (результат ;операції записується в регістр R18)

com r18 ;інвертування регістра R18

bst r18,0 ; копіювання нульового біта регістра R18 в біт-акумулятор

bld r20,3 ; загрузка в третій біт регістра R20 значення біт-акумулятора

bst r18,1 ; копіювання першого біта регістра R18 в біт-акумулятор

bld r20,4 ; загрузка в четвертий біт регістра R20 значення біт-акумулятора

bst r18,2 ; копіювання другого біта регістра R18 в біт-акумулятор

bld r20,5 ; загрузка в п’ятий біт регістра R20 значення біт-акумулятора

bst r18,3 ; копіювання третього біта регістра R18 в біт-акумулятор

bld r20,6 ; загрузка в шостий біт регістра R20 значення біт-акумулятора

out portd,r20 ; вивід значення регістра R20 в порт D

rjmp loop ;перехід на мітку loop (начало програми)

Приклад 3. Розробити програму дешифратора двійкового коду, який подається на біти d0d2 порту D. Вихід дешифратора – біти порту В. Дозволяючим входом буде біт d6 порту D.

.device at90s1200

.include "1200def.inc"

ser r20 ; всі біти регістра R20 встановлюються в одиницю

out ddrb,r20 ;налаштовування порту B на вивід

main:

ldi r21,254 ;присвоїти регістру R21 число 254

out portb,r21 ; вивід значення регістра R21 в порт В

loop:

set ;встановити в одиницю біт-акумулятор Т статус регістра

clr r21 ;очистка регістра R21

sbic pind,0 ;якщо нульовий біт порту D дорівнює 0, то програма пропускає

;наступну команду

bld r21,0 ; загрузка в нульовий біт регістра R21 значення біт-акумулятора

sbic pind,1 ;якщо перший біт порту D дорівнює 0, то програма пропускає ;наступну команду

bld r21,1 ; загрузка в перший біт регістра R21 значення біт-акумулятора

sbic pind,2 ;якщо другий біт порту D дорівнює 0, то програма пропускає ;наступну команду

bld r21,2 ; загрузка в другий біт регістра R22 значення біт-акумулятора

sbis pind,6 ;якщо шостий біт порту D дорівнює 1, то програма пропускає ;наступну команду

rjmp m2 ;перехід на мітку m2

out portb,r20 ; вивід значення регістра R20 в порт В

rjmp loop ;перехід на мітку loop

m2:

cpi r21,0 ;порівняння регістра R21 з 0

breq main ;якщо R21=0, то програма переходить на мітку main

cpi r21,1 ; порівняння регістра R21 з 1

breq n1 ; якщо R21=1, то програма переходить на мітку n1

cpi r21,2 ; порівняння регістра R21 з 2

breq n2 ; якщо R21=1, то програма переходить на мітку n2

cpi r21,3 ; порівняння регістра R21 з 3

breq n3 ; якщо R21=1, то програма переходить на мітку n3

cpi r21,4 ; порівняння регістра R21 з 4

breq n4 ; якщо R21=1, то програма переходить на мітку n4

cpi r21,5 ; порівняння регістра R21 з 5

breq n5 ; якщо R21=1, то програма переходить на мітку n5

cpi r21,6 ; порівняння регістра R21 з 6

breq n6 ; якщо R21=1, то програма переходить на мітку n6

cpi r21,7 ; порівняння регістра R21зс 7

breq n7 ; якщо R21=1, то програма переходить на мітку n7

rjmp main ; перехід на мітку main (начало програми)

n1:

ldi r22,253 ; присвоїти регістру R22 число 253

out portb,r22 ; вивід значення регістра R22 в порт В

rjmp loop ; перехід на мітку loop

n2:

ldi r22,251 ; присвоїти регістру R22 число 251

out portb,r22 ; вивід значення регістра R22 в порт В

rjmp loop ; перехід на мітку loop

n3:

ldi r22,247 ; присвоїти регістру R22 число 247

out portb,r22 ; вивід значення регістра R22 в порт В

rjmp loop ; перехід на мітку loop

n4:

ldi r22,239 ; присвоїти регістру R22 число 239

out portb,r22 ; вивід значення регістра R22 в порт В

rjmp loop ; перехід на мітку loop

n5: ldi r22,223 ; присвоїти регістру R22 число 223

out portb,r22 ; вивід значення регістра R22 в порт В

rjmp loop ; перехід на мітку loop

n6: ldi r22,191 ; присвоїти регістру R22 число 191

out portb,r22 ; вивід значення регістра R22 в порт В

rjmp loop ; перехід на мітку loop

n7: ldi r22,127 ; присвоїти регістру R22 число 127

out portb,r22 ; вивід значення регістра R22 в порт В

rjmp loop ; перехід на мітку loop

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]