Введення байта стану одного датчика

 

Нехай, наприклад, необхідно ввести байт стану датчика дискретних сигналів (Di), порівняти його з уставкою, що зберігається у вигляді константи Ki в пам'яті даних, і за результатами порівняння здійснити:

1) Введення наступного байта стану датчика, якщо Di = Ki;

2) Формування і виведення керуючих сигналів у випадку, якщо Di > Ki або Di < Ki (сформувати і вивести позитивний імпульс заданої тривалості).

Для вирішення даної задачі необхідно:

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

2) Заборонити всі переривання;

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

4) Проаналізувати його (порівняти отриманий байт з константою, використовуючи, наприклад, прапорець переносу позики «С» в регістрі STATUS);

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

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

 

 
 

 


Рис. 5.2. Загальний алгоритм

програми

 

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

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

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

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

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

На підставі попередніх міркувань можна запропонувати варіант блок-схеми алгоритму робочої програми мікроконтролера (рис. 5.5).

На рис. 5.6 наведена БСА підпрограми порівняння двох восьми- розрядних кодів (СОМР), один з яких представляє собою байт стану датчика (Di), а другий – константу (Ki), що зберігається в одному з регістрів пам'яті даних.

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

 

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

LIST p = 16C84, r = HEX

Title ‘Z2’