ий)-виконуємо перевірку
якщо прапор дорівнює 1 (Лічильник переповнений) -
; ---------------------------------------------- ------- затримка сигналу
bcf PORTA, 0; встановлюємо в 0 лінію RA0 порту А
movlw d'251 '; поміщаємо значення "251" для таймера в акумулятор
movwf TMR0; поміщаємо значення з акумулятора в таймер
bcf INTCON, TOIF; встановлюємо в 0 прапор переривання по переповнення таймера
tran3 btfss INTCON, TOIF; перевіряємо прапор переривання по переповнення таймера
goto tran3; якщо прапор дорівнює 0 (лічильник не переповнений)-виконуємо перевірку
якщо прапор дорівнює 1 (Лічильник переповнений) -
; ---------------------------------------------- ------- вважаємо імпульси
decfsz NUMIMP, 1; зменшуємо зачение NUMIMP на "1" якщо NUMIMP НЕ дорівнює "0" (передано <5імпульсов) -
goto tran1; переходимо в початок підпрограми на tran1 якщо NUMIMP дорівнює "0"
; ---------------------------------------------- ------- (передано 5 імпульсів) -
movlw d'3 '; поміщаємо значення "3" для NUMIMP в акумулятор
movwf NUMIMP; поміщаємо значення з акумулятора в NUMIMP
return; віз врат з підпрограми
; ============================================== ================
waiting; підпрограма очікування відбитого сигналу
; ---------------------------------------------- ------- затримка початку прийому сигналу
movlw d'151 '; поміщаємо значення "151" для таймера в акумулятор
movwf TMR0; поміщаємо значення з акумулятора в таймер
bcf INTCON, TOIF; встановлюємо в +0 прапор переривання по переповнення таймера
wait1 btfss INTCON, TOIF; перевіряємо прапор переривання по переповнення таймера
goto wait1 якщо прапор дорівнює 0 (лічильник не переповнений)-виконуємо перевірку
якщо прапор дорівнює 1 (Лічильник переповнений) -
; ---------------------------------------------- ------- починаємо рахунок часу
очікування прийому (По 100 мкс)
wait3 movlw d'161 '; поміщаємо значення "161" для таймера в акумулятор
movwf TMR0; поміщаємо значення з акумулятора в таймер
bcf INTCON, TOIF; встановлюємо в 0 прапор переривання по переповнення таймера
wait2 btfsc PORTA, 1; перевіряємо наявність сигналу на лінії RA1 порту А
goto wait4; якщо сигнал є-переходимо на мітку wait4
якщо сигналу ні-продовжуємо рахунок часу
btfss INTCON, TOIF; перевіряємо прапор переривання по переповнення таймера
goto wait2 якщо прапор дорівнює 0 (лічильник не
; ---------------------------------------------- ------- переповнений)-виконуємо перевірку
decfsz TIMER1, 1; якщо прапор дорівнює 1 (лічильник переповнений)-зменшуємо TIMER1 на 1
goto wait3; якщо TIMER1 НЕ дорівнює "0"
; ---------------------------------------------- ------- продовжуємо очікування якщо TIMER1 дорівнює "0" -
movlw d'100 '; поміщаємо значення "100" для TIMER1 в акумулятор
movwf TIMER1; поміщаємо значення з акумулятора в TIMER1
decfsz TIMER2, 1; зменшуємо значення TIMER2 на 1
goto wait3; якщо TIMER2 НЕ дорівнює "0"
; ---------------------------------------------- ------- продовжуємо очікування
якщо TIMER2 дорівнює "0" (сигнал вже не повернеться)-заповнюємо; значення DIGIT1 .. 3
movlw d'9 '; поміщаємо значення "9" для змінної DIGIT1 в акумулятор
movwf DIGIT1; поміщаємо значення з акумулятора в DIGIT1
movlw d'9 '; поміщаємо значення "9" для змінної DIGIT2 в акумулятор
movwf DIGIT2; поміщаємо значення з акумулятора в DIGIT2
movlw d'9 '; поміщаємо значення "9" для змінної; DIGIT3 в акумулятор
movwf DIGIT3; поміщаємо значення з акумулятора в DIGIT3
goto main1; повернення з підпрограми (сигналу немає)
wait4 goto main4; повернення з підпрограми (сигнал є)
; ============================================== ================
reception; підпрограма прийому відбитого сигналу
очікування закінчення сигналу
recp1 btfsс PORTA, 1; перевіряємо наявність сигналу на лінії RA1 порту А
goto recp1; якщо сигналу є-продовжуємо очікування
; ---------------------------------------------- ------- якщо сигналу ні-починаємо перевірку
recp6 movlw d'251 '; поміщаємо значення "251" для таймера в акумулятор
movwf TMR0; поміщаємо значення з акумулятора в таймер
bcf INTCON, TOIF; встановлюємо в 0 прапор переривання по переповнення таймера
recp1 btfss INTCON, TOIF; перевіряємо прапор переповнення таймера
якщо таймер НЕ переповнений-
btfsc PORTA, 1; перевіряємо відсутність сигналу на лінііRA1 порту А
якщо таймер переповнений або є
goto recp2; сигнал-йдемо на мітку recp2
; якщо таймер НЕ перепо...