nter>
Підпрограма індикації indication Даний блок відповідає наведеній нижче частини програми.
; ============================================== ================
indication; підпрограма індикації вимірюваного відстані
; ---------------------------------------------- ------- встановлюємо біти підключення індикаторів
bsf DIGIT1, 6; встановлюємо біт 6 змінної DIGIT1 в 1
bsf DIGIT2, 7; встановлюємо біт 7 (крапка) змінної DIGIT2 в 1
bsf DIGIT2, 5; встановлюємо біт 5 змінної DIGIT2 в 1
bsf DIGIT3, 4; встановлюємо біт 4 змінної DIGIT3 в 1
; ---------------------------------------------- ------- виводимо значення DIGIT1 на індикатор
movf DIGIT1, 0; поміщаємо значення змінної DIGIT1 в акумулятор
movwf PORTB; виводимо значення в порт У
В
встановлюємо затримку відображення
clrf TMR0; Обнуляємо таймер і
bcf INTCON, TOIF; встановлюємо в 0 прапор переривання за його переповнення
indc1 btfss INTCON, TOIF; перевіряємо прапор переривання по переповнення таймера
goto indc1; якщо прапор дорівнює 0 (лічильник не переповнений)-виконуємо перевірку
; якщо прапор дорівнює 1 (лічильник переповнений) - переходимо до наступного
; індикатору
; ---------------------------------------------- ------- виводимо значення DIGIT2 на індикатор
movf DIGIT2, 0; поміщаємо значення змінної DIGIT1 в акумулятор
movwf PORTB; виводимо значення в порт У
встановлюємо затримку відображення
clrf TMR0; Обнуляємо таймер і
bcf INTCON, TOIF; встановлюємо в 0 прапор переривання за його переповнення
indc2 btfss INTCON, TOIF; перевіряємо прапор переривання по переповнення таймера
goto indc2; якщо прапор дорівнює 0 (лічильник не переповнений)-виконуємо перевірку
якщо прапор дорівнює 1 (Лічильник переповнений) - переходимо до наступного індикатору
; ---------------------------------------------- ------- виводимо значення DIGIT3 на індикатор
movf DIGIT3, 0; поміщаємо значення змінної DIGIT3 в акумулятор
movwf PORTB; виводимо значення в порт У
; встановлюємо затримку відображення
clrf TMR0; Обнуляємо таймер і
bcf INTCON, TOIF; встановлюємо в 0 прапор переривання за його переповнення
indc3 btfss INTCON, TOIF; перевіряємо прапор переривання по переповнення таймера
goto indc3; якщо прапор дорівнює 0 (лічильник не переповнений)-виконуємо перевірку
; якщо прапор дорівнює 1 (лічильник переповнений) -
return; повернення з підпрограми
; ============================================== ================
У першій частині підпрограми indication ми встановлюємо В«біти точки і харчування В»індикаторів відповідно до схеми. У змінній DIGIT1 буде зберігатися значення дециметрів від 0 до 9 т.к. використовувані в схемі індикатори є семи сегментними з додатковим виводом для десяткового роздільника - точки, в змінній DIGIT2 - значення метрів, у змінній DIGIT3 - значення декаметри відповідно. Таким чином згідно зі схемою для відображення цифр на індикаторах через дешифратор використовується всього чотири лінії порту B: RB0, RB1, RB2, RB3 для передачі бітів 0, 1, 2 і 3 відповідно. Обчислені відображаються значення будуть зберігатися в змінних DIGIT1 ... 3 поразрядно, для цього використовується перші чотири біти кожної змінної. Лінії RB4, RB5 і RB6 порту В ми використовуємо для почергової подачі живлення на індикатори. Лінія RB4 на індикатор декаметри (відображення значення DIGIT3), RB5 на індикатор метрів (відображення значення DIGIT2), RB6 на індикатор дециметрів (відображення значення DIGIT1). Для цього ми ісп ользуем наступні біти змінних: біт 6 - DIGIT1, біт 5 - DIGIT2 і біт 4 - DIGIT3 відповідно до схеми. Лінія RB7 порту В використовується для подачі сигналу на десяткову точку індикатора метрів (змінна DIGIT2). Таким чином використовується весь порт В і ми можемо, заздалегідь встановивши біти в змінних посилати їх на порт В черзі, відповідно черзі підключаючи індикатори. Для наочності нижче наведений малюнок 10.
В
Рис. 10. Схема індикації.
Далі виводимо значення DIGIT1 на порт В. Організуємо затримку відображення на індикаторі за допомогою таймера TMR0 на 256 мкс. Потім цю ж процедуру виробляємо для DIGIT2 і DIGIT3 відображаючи їх значення на індикаторах.
Підпрограма натискання кнопки pressing
Даний блок відповідає наведеній нижче частини програми.
; ============================================== ================
pressing; підпрограма обробки натиснення кнопки
btfss PORTA, 2; перевіряємо лінію RA2 порту А (кнопку s2),
goto main1; якщо Не натиснута повертаємося в програму (на indication)
goto main2; якщо натиснута-поверне...