В даному розділі вашій увазі представлено програму ініціалізації та тестування мікросхеми пристрою:
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; завершення програми