Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Теоретичні відомості. Використання клавіатури з мікроконтролером




Використання клавіатури з мікроконтролером

 

Мета роботи: засвоїти способи використання клавіатури в мікроконтролерній системі

 

Як правило, для введення інформації вручну в системах управління використовують клавіатуру.

Через те, що в лабораторній установці відсутні клавіші, будемо вважати, що ввімкнення-вимкнення вимикачів імітує роботу клавіш.

У лабораторних роботах № 2, 5 при виконанні програми неодноразово використовувалось опитування стану вимикачів (можна вважати клавіш). Наприклад, опитування стану вимикача RA0, підключеного до біту 0 порту А, виконує фрагмент програми:

 

POVTOR: btfss PORTA, 0; якщо RA0=1, пропустити наступну

; команду

goto POVTOR; якщо ні,– виконати перехід на POVTOR

 

Недоліком такого способу введення інформації про стан контакту кнопки, реле, вимикача, кінцевого або шляхового вимикача тощо є те, що, поки не натиснуто клавіші, контролер не виконує ніяких інших корисних дій, які потрібно було б передбачити в алгоритмі.

Раціональніше організувати роботу системи так, щоб не робити неперервних опитувань стану клавіш, а здійснювати реагування на зміну їх стану, використовуючи переривання.

Спеціально для цього у PIC-контролерах передбачено переривання при зміні стану будь-якого з входів RB4–RB7. У такому разі встановлюється прапорець RBIF у регістрі INTCON (конфігурації переривань). Якщо раніше були встановлені в стан "1" біти RBIE (дозвіл переривань від зміни стану чотирьох старших бітів порту В) і GIE (глобальний дозвіл переривань), почне виконуватись підпрограма обробки переривання з адреси h'4'. Це переривання може вивести мікроконтролер з режиму SLEEP.

Іншим чином мікроконтролер вийде з режиму SLEEP, якщо буде встановлено RBIE =1, а GIE = 0. Тоді при натисканні на будь-яку клавішу програма буде виконуватись з наступної за SLEEP команди.

Коли RBIE = 0, ні переривання, ні пробудження не відбудеться.

 
На рис. 25.1. зображено типову схему підключення клавіатури матричним способом.

Для забезпечення роботи схеми:

· виводи RB0-RB3 встановлюють у режим виведення, RB4-RB7 – введення;

· програмно підключають підтягуючі внутрішні резистори порту В (у регістрі OPTION_REG біт RBPU = 0), щоб при ненатиснутих клавішах на входи RB4-RB7 надходила "1";

 

 

· на RB0-RB3 виводять "0". У регістрі INTCON встановлюють біт дозволу переривання при зміні сигналу на входах RB4-RB7 (RBIE =1) і глобальний дозвіл переривання (GIE = 1). При замиканні будь-якої клавііші зміниться стан порту В. Наприклад, якщо замкнути контакт SB9, через нього з виходу RB2 на вхід RB6 надійде "0". Таким чином, зміниться стан порту В, встановиться прапор RBIF = 1 і буде здійснено виклик підпрограми обробки переривання.

У ній потрібно передбачити:

1) читання або запис в PORTB, щоб усунути невідповідність попереднього та останнього кодів порту B;

2) скидання прапора RBIF в нуль.

Звичайно, там же потрібно передбачити визначення натиснутої клавіші і реагування на цю дію згідно з алгоритмом розроблюваної програми. У лабораторній установці використовується інша схема підключення контактів (рис. 25.2). Тут замість клавіш використовуються чотири вимикачі SB1–SB4. При розімкнутих контактах на входи RB4–RB7 надходять сигнали низького рівня ("0").

Якщо замкнути контакт, наприклад SB1, на вхід RB4 надійде сигнал високого рівня ("1") через те, що співвідношення опорів дільника напруги R1 << R5. Світлодіоди призначені для відображення факту сприйняття контролером сигналу від натиснутої клавіші.

Відомо, що через пружні властивості контактів при їх замиканні за короткий час (до 10 мс) контакти один або декілька разів розмикаються і знову замикаються. Це явище називається "дренькіт контактів". При програмуванні слід його враховувати, зробивши затримку 10–20 мс після першого замикання контактів. Після затримки, коли дренькіт припиниться, можна програмно визначити, який контакт замкнутий, і здійснити відповідні до цього дії.

Алгоритм взаємодії мікроконтролера з клавіатурою наведено на рис. 25.3, 25.4.

 

 
 

 

ПОРЯДОК ВИКОНАННЯ ЛАБОРАТОРНОЇ РОБОТИ

1. У середовищі MPLAB створити у папці D:\ 1Work новий проект з іменем 25ГБ (Г – номер групи, Б – номер бригади), обравши у меню Project-New Project.

2. У вікні Edit Project додати новий файл на асемблері 25ГБ.asm (Add Node – додати вузол). Після повернення до вікна Edit Project нижче hex-файла з'явиться файл з розширенням.asm. Після появи вікна середовища MPLAB IDE створити цей текстовий файл з розширенням.asm (File – New), записавши його у папку D:\1Work (File - Save As …).


 




3. Ввести текст програми на асемблері з вставкою власного фрагмента виведення інформації на світлодіоди згідно із заданим варіантом (див. коментар до програми).

4. Записати програму на диск (File – Save).

5. Виконати компіляцію програми (Project – Make Project або кнопка у вигляді зеленої лійки). Після цього на екрані з'являється вікно результатів компіляції (Build Results). Ознайомитись з повідомленнями про можливі помилки (error) і виправити їх. Потім повернутись до виконання п. 4, 5, поки не буде видано повідомлення "Build completed successfully" (компіляцію завершено успішно).

6. Підключити лабораторну установку до LPT1 порту комп'ютера і джерела живлення. Встановити перемикач режимів у положення "Програмування" (світиться світлодіод "Prog"), а всі вимикачі, що підключені до портів, вимкнути.

7. Згорнути вікно MPLAB і на робочому столі монітора зробити подвійний клік на синій піктограмі програматора "Propic2". Перевірити у вікні Propic2, чи вірно задано тип мікроконтролера (має бути PIC16F628). Стандартним шліхом відкрити створений при компіляції hex файл з ім'ям вашого проекту.

8. Виконати програмування мікроконтролера, натиснувши на піктограму з червоною блискавкою. Після завершення програмування відтиснути перемикач режимів у положення "Робота".

9. Здійснити тестування мікроконтролерної системи у порядку, вказаному в табл. 25.1.

 

25.1. Таблиця результатів тестування

Стан тумблерів Стан світлодіодів
RB4 RB5 RB6 RB7 RB3 RB2 RB1 RB0 RA3 RA2 RA1 RA0
                       
                       
                       
                       
                       
                       
                       
                       
                       
                       

 

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

 

;Лабораторна робота 25

;Взаємодія контролера з клавіатурою

 

LIST P=16F628

INCLUDE "P16F628.INC";підключення файла стандартних імен

;директиву __CONFIG набрати в одному рядку,

;закінчуючи словом _LVP_OFF

__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _MCLRE_ON & _LVP_OFF

TEMP EQU h'20';регістр для тимчасового зберігання і

;обробки інформації

org 0

goto start

 

org h'4'

goto ServiceInt;підпрограма обробки переривань

;основна програма

start: call init;виклик підпрограми ініціалізації

loop: sleep; встановити режим енергозбереження

nop

goto loop

ServiceInt: btfsc INTCON,RBIF;переривання від зміни

;стану клавіатури?

goto ServiceWakUp;якщо так, тоді обслуговування

bcf INTCON, T0IE;якщо ні, заборонити переривання

;від таймера

bcf INTCON, T0IF;скинути прапор таймера TMR0

return

;визначення натиснутої клавіші,

;ввімкення відповідних світлодіодів

;і очікування відпускання всіх клавіш

ServiceWakUp: bcf INTCON, RBIE;заборонити переривання

;від порту В

movf PORTB, w;прочитати порт В

bcf INTCON, RBIF;скинути прапор зміни стану порту В

call delay16;затримка 16 мс для завершення

;дренькоту контактів

movf PORTB, w

andlw b'11110000';виділити і запам'ятати

movwf TEMP; код контактів

;управління світлодіодами:

btfsc TEMP, 7;якщо замкнуто контакт RB7,

goto variant;перейти до виконання власного фрагмента

clrf PORTA;якщо замкнуто інший контакт,

swapf TEMP, w;вивести інформацію

movwf PORTB;на RB0-RB3.

ochik: call KeyRelease;виклик п/п очікування

;відпускання контактів

retfie;вертання з п/п переривання

 

variant:

;========================================================

; тут зробити вставку власного фрагмента програми,

;який у двійковій формі виводить на світлодіоди десяткове

;число БГ, де Б – номер бригади, Г – групи.

;Використати світлодіоди RB3-RB0, RA3-RA0, підключені до

;портів В і А. Вважати RB3 старшим, RA0 молодшим розрядами

;двійкового числа. Наприклад, число d'69' має бути

;відображено так: RB3 RB2 RB1 RB0 RA3 RA2 RA1 RA0

;вагові коефіцієнти: 128 64 32 16 8 4 2 1

;двійкові цифри: 0 1 0 0 0 1 0 1

; (стан світлодіодів)

;========================================================

goto ochik

 

;підпрограма очікування відпускання всіх клавіш

KeyRelease: call delay16; затримка, щоб завершився

;дренькіт

movf PORTB, w;читання з порту В

bcf INTCON, RBIF;скинути прапор порту В

bsf INTCON, RBIE;дозвіл переривань при зміні

;стану порту В

andlw b'11110000';виділити біти, до яких

;підключені контакти

btfsc STATUS, Z;контакти іще замкнуті?

return;ні – вертання з підпрограми

 

sleep;якщо так, – перейти в режим енергозбереження

 

bcf INTCON, RBIE;після пробудження заборонити

;переривання від зміни стану порту В

movf PORTB, w;прочитати порт В

bcf INTCON, RBIF;скинути прапор порту В

goto KeyRelease;повторити очікування

 

;підпрограма ініціалізації

init: movlw h'07'

movwf CMCON;відключити компаратори

clrf PORTA;/вивести у защіпки

clrf PORTB;/портів А і В нулі

bsf STATUS, RP0;обрати банк регістрів 1

clrf TRISA;порт А – на виведення

movlw b'11110000';\ RB4-RB7 – режим введення

movwf TRISB;\ RB0-RB3– режим виведення

bcf STATUS, RP0;обрати банк регістрів 0

bcf INTCON, RBIE;заборонити переривання від

;зміни стану порту В

movf PORTB, w;прочитати порт В

bcf INTCON, RBIF;скинути прапор порту В

bsf INTCON, RBIE;дозволити переривання від зміни

;стану порту В

retfie

;затримка 16 мс

delay16: bsf STATUS, RP0;обрати банк регістрів 1

movlw b'10000101';\підключити переддільник до TMR0

movwf OPTION_REG;\з коефіцієнтом 1/64

bcf STATUS, RP0;обрати банк регістрів 0

clrf TMR0;скидання таймера

bcf INTCON, T0IF;скинути прапор таймера TMR0

bsf INTCON, T0IE;дозволити переривання від

;таймера TMR0

CheckAgain: btfss INTCON, T0IF;/очікування переповнення

goto CheckAgain;/таймера TMR0

bcf INTCON, T0IE;заборонити переривання від

;таймера TMR0

bcf INTCON, RBIF;;скинути прапор таймера TMR0

return

 

end

 

 

ЗМІСТ ЗВІТУ

Зміст має містити: назву та мету лабораторної роботи, схеми підключення клавіатури до мікроконтролера, скорочений порядок виконання лабораторної роботи, алгоритм і програму з коментарем, таблицю результатів тестування системи.

 

КОНТРОЛЬНІ ЗАПИТАННЯ

1. Як позбутися "висячих" (непідключених до "0" або "1") входів мікроконтролера від контактних пристроїв введення інформації?

2. Чим шкідливе явище дренькоту контактів?

3. Як при програмуванні усунути вплив дренькоту контактів?

4. У чому суть алгоритму переривання, пов'язаного зі зміною стану порту В?

5. У чому перевага матричного способу підключення клавіатури?

6. За яким алгоритмом здійснюється опитування клавіатури, підключеної матричним способом?

 

 

Лабораторна робота № 26




Поделиться с друзьями:


Дата добавления: 2015-06-25; Просмотров: 516; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.008 сек.