Тест перевірки окремих вузлів або пристроїв
Поможем в ✍️ написании учебной работы
Поможем с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой

 

Програма за якою працює мікропроцесор мовою асемблера АТ90S8515 має наступний вигляд:

bigpause equ 100        ; задаемо значення стартової паузи

pause1            egu 15          ; значення паузи перед зміною напрямку руху

pause2            equ 50          ; задаємо час, на протязі якого планетохід буде відїжджати назад

pause2            equ 50          ; задаємо час, на протязі якого планетохід буде розвертатися

portA              equ 05h        ; адрес порта А

portB              equ 06h        ; адрес порта В

 

org         0h                   ; резервування 100 байт починаючи з адресу 0h

 

reset:

mov       r31, 1Fh        ; задаємо направлення роботи портів

out         portB,   r31        ; PB0, PB1, PB2, PB3, PB4 - виходи, PB5, PB6 - входи

mov       r31, 61h        ; виводимо в порт В код зупинки двигунів,

out         portB,   r31        ; і вмикаємо резистори на входах РВ5, РВ6

mov       r31, bigpause ; записуэмо в регістр r31 значення великої паузи

call        pause              ; викликаємо підпрограму паузи

jmp        start                ; переходимо на мітку старт

 

start:

mov       r31, 00000011b ; установлюємо на виході РВ1 лог. 1,

out         portB,   r31        ; що зумовлює ввімкнення лівого двигуна

mov       r31, 00001011b ; установлюємо на виході РВ3 лог. 1,

out         portB,   r31        ; що зумовлює ввімкнення правого двигуна

mov       r31, 00001010b ; установлюэмо на виходіРВ0 лог. 0,

out         portb,    r31        ; що і гасить світлодіод

 

scan:

in           r31, portB              ; читаємо стан порту В

test        r31, 01000000b ; перевіряємо чи натиснута права кнопка

jz           left                  ; якщо натиснута, переходимо на мітку left

test        r31, 00100000b ; перевіряємо чи натиснута ліва кнопка

jz           right                ; якщо натиснута, переходимо на мітку right

jmp        scan                ; якщо ні одна кнопка не натиснена, повторяємо цикл перевірки стану кнопок

left:

mov       r30, 63h        ; записуємо в регістр r30 код повороту наліво, який буде виводиться в порт в

call        stop                ; визиваємо підпрограму stop

jmp        start                ; повертаємся на мітку start

 

right:

mov       r30, 69h        ; записуємо в регістр r30 код повороту направо, який буде виводиться в порт в

call        stop                ; визиваємо підпрограму stop

jmp        start                ; повертаємся на мітку start

; --------------------------------------------------------------------------------------------------

; підпрограма stop, задача якої - ввімкнення потрібного маневру (відїзд, повороти направо та наліво)

; --------------------------------------------------------------------------------------------------

stop       proc

mov       r31, 00001000b ; установлюємо на виході РВ1 лог. 0,

out         portB,   r31        ; що зумовлює вимкнення лівого двигуна

mov       r31, 00000000b ; установлюємо на виході РВ3 лог. 0,

out         portB,   r31        ; що зумовлює вимкнення правого двигуна

mov       r31, pause1            ; записати в регістр r31 значення паузи перед зміною направлення руху

call        pause              ; викликаємо підпрограму pause

mov       r31, 00000100b ; встановлюємо на виході РВ2 лог. 1,

out         portB,   r31        ; що заставляє лівий двигун крутитися в іншу сторону

mov       r31, 00010100b встановлюэмо на виході РВ4 лог. 1,

out         portB,   r31        ; що заставляє правий двигун крутитися в іншу сторону

mov       r31, 00010101b ; встановлюэмо на виході РВ0 лог. 1,

out         portB,   r31        ; що запалює світлодіод

mov       r31, pause2            ; записати врегістр r31 значення часу, на протязі якого планетохід буде відїжджати назад

call        pause ; викликаємо підпрограму pause

mov       r31, 00010101b ; встановлюємо на виході РВ2 лог. 0,

out         portB,   r31        ; що вимикає лівий двигун

mov       r31, 00010001b встановлюэмо на виході РВ4 лог. 0,

out         portB,   r31        ; що вимикає правий двигун

mov       r31, 00000000b встановлюэмо на виході РВ0 лог. 0,

out         portB,   r31        ; чим гасим світлодіод

mov       r31, pause1            ; записати врегістр r31 значення часу, перед зміною напрямку руху

call        pause              ; викликаємо підпрограму pause

out         portB,   r30        ; виводим в порт В код повороту наліво чи направо

mov       r31, pause3            ; записати врегістр r31 значення часу, на протязі якого планетохід буде виконувати поворот

call        pause              ; викликаємо підпрограму pause

out         portB,   r30        ; записуэмо в порт В код відповідаючий повороту направо чи наліво

mov       r31, pause3            ; записати врегістр r31 значення часу, на протязі якого планетохід буде виконувати поворот

call        pause              ; викликаємо підпрограму pause

mov       r31, 61h        ; записуэмо в регістр r31 код, відповідний відключенню двигунів

out         portB,   r31        ; та виводимо його на порт В

mov       r31, pause1            ; записати врегістр r31 значення часу, перед зміною напрямку руху

call        pause              ; викликаємо підпрограму pause

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

; ----------------------------------------------------------------

; підпрограма витримки пауз, інтервал яких задається регістром r31

; ----------------------------------------------------------------

pause proc

d3:

mov       r29, FFh       ; встановлюэмо регістр r29 в FFh

d2:

mov       r28, FFh       ; встановлюэмо регістр r28 в FFh

d1:

sub        r28, 1            ; віднімаємо від регістру r28 оденицю

test        r28, 2

jz           d1

sub        r29, 1            ; віднімаємо від регістру r29 оденицю

test        r29, 3

jz           d2

sub        r31, 1            ; віднімаємо від регістру r31 оденицю

test        r31, 4

jz           d3

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

 

end                                    ; завершення програми

 

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

Рисунок 3.2.1 – Алгоритм роботи пристрою

Дата: 2019-07-30, просмотров: 180.