Тест перевірки окремих вузлів або пристроїв

 

Програма за якою працює мікропроцесор мовою асемблера АТ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 – Алгоритм роботи пристрою


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: