================
У цьому блоці описується в яких осередках ОЗУ (регістрах загального застосування) будуть зберігається значення наших змінних. Призначення змінних зрозуміло з коментарів наведеної вище частини лістингу програми.
виконує, програма
Даний блок відповідає наведеній нижче частини програми.
; ============================================== ================
; виконувана програма
org 0х000; вектор скидання процесора, початковий адресу
clrf PORTA; очистили вихідні засувки порту А
clrf PORTB; і порту У
clrf TMR0; очищення таймера TMR0
bsf STATUS, RP0; включили банк 1
movlw b'00011110 '; налаштували на виведення лінію RA0,
movwf PORTA; інші лінії порту A на уведення
movlw b'00000000 '; налаштували на виведення всі лінії порту B
movwf PORTB; RB0 ... RB7
bcf OPTION_REG, 7; включили підтягують резистори
bcf OPTION_REG, 5; включили режим таймера для TMR0
bcf STATUS, RP0; включили банк 0
; ============================================== ================
Вказуємо адресу початку програм, вектор скидання процесора. Обнуляємо значення у вихідних засувках обох портів. Обнуляємо значення таймера. Потім встановивши в 1 біт RP0 регістра STATUS, ми отримуємо доступ до регистровому банку 1. Тепер звертаючись до регістрів PORTA і PORTB, ми звертаємося не до вихідним засувок, а до регістрів стану цих портів, і налаштовуємо частина ліній на введення, а частина ліній на висновок, що відповідає схемі наведеної у додатку. Використовуючи битий 7 RBPU регістра OPTION_REG включаємо вбудовану навантаження порту B, для чого встановлюємо біт в 0. За допомогою біта 5 T0CS вибираємо джерело тактирования для таймера TMR0. Для використання внутрішньої тактової частоти CLKOUT, встановлюємо в 0 цей біт. Наприкінці встановивши в 0 бита RP0 регістра STATUS, ми отримуємо доступ до регистровому банку 0.
Основна програма main
Даний блок відповідає наведеній нижче частини програми.
; ============================================== ================
main; основна програма
call initialization; викликаємо підпрограму ініціалізації
main1 call indication; викликаємо підпрограму індикації
goto pressing; викликаємо підпрограму обробки натиснення кнопки
main2 call transfer; викликаємо підпрограму передачі імпульсів
main3 goto waiting; викликаємо підпрограму очікування відбитого сигналу
main4 goto reception; викликаємо підпрограму прийому відбитого сигналу
main5 call calculation; викликаємо підпрограму обчислення відстані
; ============================================== ================
У даній частині використовуються лише два оператора переходу: оператор виклику підпрограми call і оператор безумовного переходу goto. Для наочності наведемо блок-схему основний програми main, в яку додано умови і порядок взаємодії розглядаються далі підпрограм. p> Блок-схема наведена на рис. 9. br/>В
Рис. 9. Блок-схема основної програми main. p> Підпрограма ініціалізації initialization
Даний блок відповідає наведеній нижче частини програми.
; ============================================== ================
initialization; підпрограма ініціалізації та початкових умов
Обнуляємо значення використовуваних змінних
clrf PORTA; очистили вихідні засувки порту A
clrf NUMIMP; Обнуляємо значення NUMIMP
clrf TIMER1; Обнуляємо значення TIMER1
clrf NUMCH; Обнуляємо значення NUMCH
clrf TIMER2; Обнуляємо значення TIMER2
clrf LAPSE; Обнуляємо значення LAPSE
clrf DIGIT1; Обнуляємо значення DIGIT1
clrf DIGIT2; Обнуляємо значення DIGIT2
clrf DIGIT3; Обнуляємо значення DIGIT3
; встановлюємо значення використовуваних змінних
movlw d'5 '; поміщаємо значення "5" для NUMIMP в акумулятор
movwf NUMIMP; поміщаємо значення з акумулятора в NUMIMP
movlw d'100 '; поміщаємо значення "100" для TIMER1 в акумулятор
movwf TIMER1; поміщаємо значення з акумулятора в TIMER1
movlw d'100 '; поміщаємо значення "100" для TIMER2 в акумулятор
movwf TIMER2; поміщаємо значення з акумулятора в TIMER2
movlw d'57 '; поміщаємо значення "57" для LAPSE в акумулятор
movwf LAPSE; поміщаємо значення з акумулятора в LAPSE
return; повернення з підпрограми
; ============================================== ================
Тут ми Обнуляємо використовувані змінні, і встановлюємо для них необхідні значення. Кількість переданих імпульсів NUMIMP в сигналі приймаємо рівним 5 (погоджено з викладачем). І т.д.