Введення байтів стану двох незалежних датчиків

 

Будемо сподіватись що, наприклад, необхідно ввести водночас через порти введення/ виведення байти стану 2-х незалежних датчиків дискретних сигналів, виконати порівняння введених байтів між собою, і за результатами порівняння здійснити:

1) У випадку, якщо D1 <= D2 управління передається фрагменту програми з адресою А1 і встановлюється в ²1² ознака (прапорець) F0;

2) У випадку, якщо D1 > D2 ознака F0 встановлюється в ²0², у відповідності з варіантом завдання формуються керуючі сигнали, а управління передається на фрагмент програми з адресою А2.

· Вибрати мікроконтролер, що має не менше 17-ти ліній введення/ виведення дискретних сигналів (наприклад, PIC 16C55);

· Вибрати лінії (розряди) портів А, В і С для введення сигналів від датчиків і виведення імпульсних сигналів (наприклад, RB0... RB7 – для вводу сигналів від датчика D1, RC0... RC7 – для вводу сигналів від датчика D2 і RA0 – для виводу імпульсних сигналів управління заданої тривалості);

3) Здійснити опитування стану обох датчиків;

4) Порівняти отримані байти стану між собою;

5) Організувати процедуру передачі управління на дві підпрограми в залежності від результатів порівняння;

6) Сформувати сигнал заданої тривалості за допомогою часового інтервалу, рівного часу затримки.

Для цього можна використати:

· одну або декілька холостих команд NOP;

· програмний лічильник, працюючий, наприклад, в декрементному режимі. При цьому в лічильник заноситься константа, лічильник декрементується. Онулення лічильника є сигналом закінчення часового інтервалу;

· внутрішній таймер-лічильник (TMRO);

· зовнішній (додатковий) таймер-лічильник у випадку, якщо TMRO з будь-якої причини використати неможливо;

7) Організувати введення наступного байта.

На підставі попередніх міркувань можна запропонувати варіант блок-схеми алгоритму робочої програми мікроконтролера. Цей алгоритм наведений на рис. 5.7. На рис. 5.8 наведена БСА підпрограми порівняння двох байтів стану незалежних датчиків D1 і D2 між собою (СОМР1).

 


На підставі блок-схем алгоритмів і розподілу пам'яті даних можна запропонувати текст програми, що наведений нижче:

; Текст програми:

LIST p = 16C55, r = HEX

Title ‘Z3’