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

Блок-схема

Підпрограма затримки Delay подібна підпрограмі затримки в 15-му прикладі.

17). Контролер працює в циклічному режимі, видаючи на кожен з 8-ми світлодіодів одиничний імпульс тривалістю 2 секунди. При перериванні він повинний перейти на обслуговування підпрограми, що записана в задачі 1. Після її виконання перейти до основної задачі.

.device at90s1200

.include "1200def.inc"

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

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

home:

clr r25 ;очищення регитра R25

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

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

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

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

out portb,r25 ;вивід значення регістра R25 на порт У

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

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

mm:

lsl r25 ;логічний зсув вліво всіх бітів регістра R25

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

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

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

sbrs r25,7 ;якщо сьомий біт регістра R25 дорівнює 1, то програма

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

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

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

pp:

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

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

ret ;вихід із підпрограми

in r17,pind ;зчитуємо значення порту D

ldi r18,7 ;записати в регістр R18 число 7

add r17,r18 ;підсумовуємо значення регістрів R17 і R18

out portb,r17 ;результат виводимо на порт D

Delay: ;підпрограма затримки

clr r19 ;очищення регістра R19

clr r21 ;очищення регістра R21

clr r20 ;очищення регістра R20

n1:

inc r19 ;інкремент регістра R19

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

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

inc r20 ;інкремент регістра R20

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

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

inc r21 ;інкремент регістра R21

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

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

ret ;повернення із підпрограми затримки

Блок-схема

Підпрограма pp

П ідпрограма затримки Delay подібна підпрограмі затримки в 15-му прикладі.

18). Реалізувати програми JK-, D-, T-тригерів.

В основній програмі контролер буде реалізовувати роботу Т-тригера. D- і JK-тригери будуть вибиратися сьомим і шостим бітами порту B. Для всіх тригерів прямий вихід – 3-й біт порту D, інверсний вихід – 4-й біт порту D. Для Т-тригера нульовий біт порту D буде Т входом. Для D-тригера нульовий біт порту D – синхровхід, перший біт – вхід D. Для JK-тригера: синхровхід – нульовий біт порту D, вхід J – перший біт і вхід K – другий біт порту D.

.device at90s1200

.include "1200def.inc"

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

out ddrb,r16 ;настроювання порту B на вивід

loop:

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

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

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

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

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

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

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

;T-Trigger

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

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

glav:

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

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

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

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

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

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

;D-Trigger

home:

clr r17 ;очищення регістра R17

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

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

bld r17,0 ;завантаження в нульовий біт R17 значення

;біта-акумулятора

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

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

bld r17,1 ;завантаження в перший біт R17 значення

;біта-акумулятора

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

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

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

breq d2 ;якщо R17=2, програма переходить мітку d2

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

breq d3 ; якщо R17=3, програма переходить мітку d3

andi r18,0b00011000 ;побітове виконання операції логічне «І» над

;регістром R18 і ;числом 000110002

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

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

d1:

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

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

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

d2:

bld r18,1 ;завантаження в перший біт R18 значення

;біта-акумулятора

andi r18,0b00011010 ;побітове виконання операції логічне «І» над

;регістром R18 і ;числом 000110102

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

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

d3:

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

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

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

;JK-Trigger

main:

clr r17 ;очищення регістра R17

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

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

bld r17,0 ;завантаження в нульовий біт R17 значення

;біта-акумулятора

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

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

bld r17,1 ;завантаження в перший біт R17 значення

;біта-акумулятора

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

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

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

breq m2 ;якщо R17=2, програма переходить мітку m2

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

breq m3 ;якщо R17=3, програма переходить мітку m3

andi r18,0b00011000 ;побітове виконання операції логічне «І» над

;регістром R18 і ;числом 000110002

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

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

bld r18,0 ;завантаження в нульовий біт R18 значення

;біта-акумулятора

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

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

m1:

andi r18,0b00011000 ;побітове виконання операції логічне «І» над

;регістром R18 і числом 000110002

bld r18,1 ;завантаження в перший біт R18 значення

;біта-акумулятора

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

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

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

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

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

m2:

andi r18,0b00011000 ;побітове виконання операції логічне «І» над

;регістром R18 і числом 000110002

bld r18,2 ;завантаження в другий біт R18 значення

;біта-акумулятора

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

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

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

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

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

m3:

andi r18,0b00011000 ;побітове виконання операції логічне «І» над

;регістром R18 і числом 000110002

bld r18,1 ;завантаження в перший біт R18 значення

;біта-акумулятора

bld r18,2 ;завантаження в другий біт R18 значення

;біта-акумулятора

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

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

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

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

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

pp: ;підпрограма pp

sbrs r18,3 ;якщо третій біт регістра R18 дорівнює 1,то програма

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

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

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

ret ;вихід із підпрограми рр

nn:

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

ret ;вихід із підпрограми nn

Блок-схема

19). Написати програму, що реалізує роботу кільцевого лічильника з однобітним записаним словом.

.device at90s1200

.include "1200def.inc"

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

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

clr r17 ;очищення регістра R17

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

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

loop:

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

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

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

main:

lsl r17 ;логічний зсув всіх бітів регістра R17 вліво

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

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

sbrs r17,7 ;якщо сьомий біт регістра R17 дорівнює 1,то програма

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

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

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

delay: ;підпрограма затримки

clr r19 ;очищення регістра R19

clr r21 ;очищення регістра R21

clr r20 ;очищення регістра R20

n1:

inc r19 ;інкремент регістра R19

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

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

inc r20 ;інкремент регістра R20

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

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

inc r21 ;інкремент регістра R21

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

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

ret ;вихід із підпрограми затримки

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