Читайте также:
|
|
Нехай, наприклад, необхідно ввести байт стану датчика дискретних сигналів (Di), порівняти його з уставкою, що зберігається у вигляді константи Ki в пам'яті даних, і за результатами порівняння здійснити:
Введення наступного байта стану датчика, якщо Di = Ki;
Формування і виведення керуючих сигналів у випадку, якщо Di > Ki або Di < Ki (сформувати і вивести позитивний імпульс заданої тривалості).
Для вирішення даної задачі необхідно:
Вибрати лінії (розряди) портів А і В для введення сигналів від датчика і виведення імпульсних сигналів (наприклад, RB0... RB7 – на введення, а RA0 – на виведення);
Заборонити всі переривання;
Здійснити опитування стану датчика;
Проаналізувати його (порівняти отриманий байт з константою, використовуючи, наприклад, прапорець переносу позики «С» в регістрі STATUS);
Організувати процедуру передачі управління на дві підпрограми в залежності від результатів порівняння;
Сформувати сигнал заданої тривалості за допомогою тимчасового інтервалу, рівного часу затримки. Для цього можна використати:
![]() |
Рис. 5.2. Загальний алгоритм
програми
програмний лічильник, працюючий, наприклад, в декрементному режимі. При цьому в лічильник заноситься константа, лічильник декрементується. Онулення лічильника є сигналом закінчення часового інтервалу;
внутрішній таймер-лічильник (TMRO);
зовнішній (додатковий) таймер-лічильник у випадку, якщо TMRO з будь-якої причини використати неможливо;
одну або декілька холостих команд NOP;
Організувати введення наступного байта.
На підставі попередніх міркувань можна запропонувати варіант блок-схеми алгоритму робочої програми мікроконтролера (рис. 5.5).
На рис. 5.6 наведена БСА підпрограми порівняння двох восьми- розрядних кодів (СОМР), один з яких представляє собою байт стану датчика (Di), а другий – константу (Ki), що зберігається в одному з регістрів пам'яті даних.
На підставі блок-схем алгоритмів і розподілу пам'яті даних можна запропонувати текст програми, що наведений нижче:
; Текст програми.
LIST p = 16C84, r = HEX
Title ‘Z2’
; Секція заголовка
; Опис спеціальних регістрів
TRISA EQU 85H
TRISB EQU 86H
INTCON EQU 0BH
STATUS EQU 03H
; Опис регістрів вводу/ виводу PIC
PORTA EQU 05H; Регістр вводу/ виводу
; порту А
PORTB EQU 06H; Регістр вводу/ виводу
; порту В
; Опис комірок ОЗУ
CTD EQU 0DH; Лічильник циклу в підпрограмі
; затримки (DELAY)
CONST EQU 0EH; Регістр зберігання константи Ki
;
; Робоча секція
; Точка входу в програму після команди RESET
ORG 0
GOTO INMK
ORG 100H
; Процедура ініціалізації МК
; Заборона переривань
INMK BCF INTCON, 7; Скидання 7-го біта в регістрі
; INTCON
; Завантаження регістра
; керування портом В
MOVLW B'1111 1111’; Переслати константу в W
TRIS 6
; Завантаження регістра
; керування портом A
MOVLW B'0000 0000’; Переслати константу в W
TRIS 5
BCF PORTA, 0; Скидання 0-го біта в регістрі
; порту А
; Опитування стану датчика і процедура порівняння (COMP)
LESS MOVF PORTB, 1
SUBWF CONST, 1
ADDLW B'11111111’
; Перевірка стану прапорця
; переносу/позики С
BTFSC STATUS, 0
GOTO LESS
; Видавання імпульсу заданої тривалості (IMPULS)
BSF PORTA, 0
; Затримка (DELAY)
MOVLW B'0000 1111’; Завантаження лічильника
; затримки
MOVWF CTD
; Цикл затримки
M1 DECFSZ CTD; Декремент CTD, пропустити
; команду, якщо 0 (якщо
; регістр CTD онулився)
GOTO M1
; Припинити видавання сигналу
BCF PORTA, 0
GOTO LESS
END
![]() | |||
Рис. 5.5. Загальний алгоритм програми
5.2.2. Введення байтів стану двох незалежних датчиків
Будемо сподіватись що, наприклад, необхідно ввести водночас через порти введення/ виведення байти стану 2-х незалежних датчиків дискретних сигналів, виконати порівняння введених байтів між собою, і за результатами порівняння здійснити:
У випадку, якщо D1 <= D2 управління передається фрагменту програми з адресою А1 і встановлюється в ²1² ознака (прапорець) F0;
У випадку, якщо D1 > D2 ознака F0 встановлюється в ²0², у відповідності з варіантом завдання формуються керуючі сигнали, а управління передається на фрагмент програми з адресою А2.
Вибрати мікроконтролер, що має не менше 17-ти ліній введення/ виведення дискретних сигналів (наприклад, PIC 16C55);
Вибрати лінії (розряди) портів А, В і С для введення сигналів від датчиків і виведення імпульсних сигналів (наприклад, RB0... RB7 – для вводу сигналів від датчика D1, RC0... RC7 – для вводу сигналів від датчика D2 і RA0 – для виводу імпульсних сигналів управління заданої тривалості);
Здійснити опитування стану обох датчиків;
Порівняти отримані байти стану між собою;
Організувати процедуру передачі управління на дві підпрограми в залежності від результатів порівняння;
Сформувати сигнал заданої тривалості за допомогою часового інтервалу, рівного часу затримки.
Для цього можна використати:
одну або декілька холостих команд NOP;
програмний лічильник, працюючий, наприклад, в декрементному режимі. При цьому в лічильник заноситься константа, лічильник декрементується. Онулення лічильника є сигналом закінчення часового інтервалу;
внутрішній таймер-лічильник (TMRO);
зовнішній (додатковий) таймер-лічильник у випадку, якщо TMRO з будь-якої причини використати неможливо;
Організувати введення наступного байта.
На підставі попередніх міркувань можна запропонувати варіант блок-схеми алгоритму робочої програми мікроконтролера. Цей алгоритм наведений на рис. 5.7. На рис. 5.8 наведена БСА підпрограми порівняння двох байтів стану незалежних датчиків D1 і D2 між собою (СОМР1).
На підставі блок-схем алгоритмів і розподілу пам'яті даних можна запропонувати текст програми, що наведений нижче:
; Текст програми:
LIST p = 16C55, r = HEX
Title ‘Z3’
; Секція заголовка
; Опис спеціальних регістрів
TRISA EQU 85H
TRISA EQU 86H
INTCON EQU 0BH
STATUS EQU 03H
; Опис регістрів вводу/ виводу PIC
PORTA EQU 05H
PORTB EQU 06H
PORTC EQU 07H
; Опис комірок ОЗП
F0 EQU 0DH
; Робоча секція
; Точка входу в програму після RESET
ORG 0
GOTO INP
ORG 100H
; Процедура ініціалізації MK
; Заборона переривань
INMK BCF INTCON, 7; Скидання 7-го біта в регістрі
; INTCON
; Завантаження регістра
; керування портом
MOVLW B’ 1111 1111’; Переслати команду в регістр W
TRIS 6
; Завантаження регістра
; керування портом А
MOVLW B’ 0000 0000’; Переслати команду в регістр W
TRIS 5
; Завантаження регістра
; керування портом С
MOVLW B’ 1111 1111’; Переслати команду в регістр W
TRIS 7
BCF PORTA, 0; Скидання 0-го біта в регістрі
; порту А
; Опитування стану датчиків і процедура порівняння (COMP1)
LESS MOVF PORTB, 0
SUBWF PORTC, 1
; Перевірка стану прапора
; переносу/ позики C
BTFSC STATUS, 0; Якщо С = 1 (D1 <= D2), то
GOTO A1; перехід на фрагмент
; програми з адресою A1
; Настанова прапора F0 в 0
BCF F0, 0
; Видавання імпульсу заданої тривалості (IMPULS)
BSF PORTA, 0; Виставити "1" в порт А
NOP; Затримка (DELAY)
NOP
BCF PORTA, 0; Виставити 0 в порт А
GOTO A2; Перехід на фрагмент
; програми з адресою А2
; Настанова прапора F0 в 1
A1 BSF F0, 0
GOTO LESS
A2 GOTO LESS
END
___________
ПЕРЕТВОРЕННЯ ІНФОРМАЦІЇ
Дата добавления: 2014-12-18; просмотров: 137 | Поможем написать вашу работу | Нарушение авторских прав |
|