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

 

В даному розділі вашій увазі представлено програму ініціалізації та тестування мікросхеми пристрою:

bigpauseequ100; задаємо значення стартової паузи

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

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

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

portAequ05h; адрес порта А

portBequ06h; адрес порта В

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

reset:

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

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

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

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

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

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

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

start:

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

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

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

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

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

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

scan:

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

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

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

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

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

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

left:

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

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

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

right:

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

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

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

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

stopproc

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

pauseproc

d3:

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

d2:

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

d1:

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

test

jzd1

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

test

jzd2

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

test

jzd3

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

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

 


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



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