- •Література
- •Інформаційні ресурси
- •Використання mplab для складання та налагодження програм мікроконтролера
- •Теоретичні відомості
- •Порядок виконання лабораторної роботи
- •Лабораторна робота № 21 Дії з портами мікроконтролера, логічні операції та обробка окремих бітів
- •Теоретичні відомості
- •21.1. Аналіз роботи програми
- •Лабораторна робота № 22 Створення програмної затримки часу за допомогою циклів
- •Теоретичні відомості
- •22.1. Результати аналізу програми
- •Лабораторна робота № 23 Створення затримки часу за допомогою переривань від таймера
- •23.2. Варіанти задання коефіцієнтів ділення переддільника
- •23.2. Алгоритм управління світлодіодами з затримкою від таймера tmr0
- •23.3. Результати аналізу програми
- •Використання енергонезалежної пам'яті даних
- •У регістрі eecon1 розміщені такі біти керування:
- •24.1. Блок-схема алгоритму обміну з eeprom
- •Використання клавіатури з мікроконтролером
- •Теоретичні відомості
- •25.1. Таблиця результатів тестування
- •Виведення цифрової інформації на семисегментні індикатори
- •Основи використання mplab-icd пояснено далі в ході роботи.
- •Закрити вікно icd Options ().
- •Дослідження мікроконтролерного модуля аналого-цифрового перетворювача
- •Закрити вікно icd Options().
- •27.1. Результати вимірів і обчислень
- •Мікроконтролерне дослідження дренькоту контактів
- •Результати вимірів кількості замикань контактів
Лабораторна робота № 23 Створення затримки часу за допомогою переривань від таймера
Мета роботи: засвоїти метод створення затримок часу з використанням таймера TMR0
ТЕОРЕТИЧНІ ВІДОМОСТІ
У мікроконтролерах PIC16хххх на кристалі кремнію, крім ядра мікропроцесора, передбачено розташування різних допоміжних модулів. Їх використання значно спрощує програмування, підвищує продуктивність роботи, скорочує розмір програм. До таких модулів відносяться таймери, що дозволяють отримувати затримки часу або підраховувати зовнішні події, сигнал про які надходить на вхід контролера.
Контролер PIC16F628 має 3 модулі таймерів: восьмирозрядний таймер/лічильник TMR0, шістнадцятирозрядний таймер TMR1 та восьмирозрядний таймер TMR2. Вони можуть використовуватись як окремо, так і для забезпечення роботи інших модулів, наприклад, модуля ССР (захвату/порівняння/широтно-імпульсної модуляції).
Створення затримок часу за рахунок багаторазового виконання вкладених циклів (див. лабораторну роботу № 3), завантажує процесор пустими операціями, тоді як часто в цей час необхідно реалізовувати важливі операції, передбачені алгоритмом контролю, управління та ін.
Значно ефективніше використовувати для затримок таймери. Тоді процесор виконує декілька команд, які програмують таймер на задану затримку. Далі робота таймера і процесора протікає паралельно. Процесор виконує передбачені алгоритмом команди, а таймер одночасно з цим відраховує задану затримку. Після її завершення (переповнення таймера з h'FF' до h'00') автоматично встановлюється в "1" прапорець T0IF, який може бути перевірений програмно. А встановивши попередньо "1" в біті дозволу переривання T0IE, можна після відрахованої таймером затримки автоматично перейти до підпрограми обробки переривання. Функціональну схему таймера подано на рис. 23.1, а регістри, пов'язані з його роботою, у табл. 23.1.
23.1. Регістри, пов'язані з роботою таймера TMR0
Адреса |
Назва |
Біт 7 |
Біт 6 |
Біт 5 |
Біт 4 |
Біт 3 |
Біт 2 |
Біт 1 |
Біт 0 |
0x81 |
OPTION_REG |
RBPU |
INTEDG |
T0CS |
T0SE |
PSA |
PS2 |
PS1 |
PS0 |
0x0B |
INTCON |
GIE |
PEIE |
T0IE |
INTE |
RBIE |
T0IF |
INTF |
RBIF |
Переддільник може бути під'єднаний до TMR0, якщо встановити PSA = 0, або до сторожового таймера WDT (PSA = 1). Коефіцієнт ділення переддільника задається бітами PS2…PS0 (табл. 23.2).
Коли біт T0CS = 0, TMR0 працює від внутрішнього тактового генератора, збільшуючи свій вміст на одиницю після кожних Кп машинних циклів.
Якщо біт T0CS = 1, джерелом імпульсів стає пристрій, підключений ззовні до входу мікроконтролера RA4. Активний фронт цього сигналу визначає біт T0SЕ.
23.2. Варіанти задання коефіцієнтів ділення переддільника
PS2 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
1 | ||
PS1 |
0 |
0 |
1 |
1 |
0 |
0 |
1 |
1 | ||
PS0 |
0 |
1 |
0 |
1 |
0 |
1 |
0 |
1 | ||
Коефіцієнт ділення переддільника Kп |
PSA=0 |
TMR0 |
2 |
4 |
8 |
16 |
32 |
64 |
128 |
256 |
PSA=1 |
WDT |
1 |
2 |
4 |
8 |
16 |
32 |
64 |
128 |
Використання переддільника дозволяє значно розширити діапазон можливих затримок таймера TMR0.
Алгоритм програми (рис. 23.2) передбачає підключення переддільника до таймера TMR0 з коефіцієнтом ділення частоти Кп = 256. Таймер починає рахунок з числа N = 10·Br, де Br – номер бригади. Оскільки при частоті генератора 4 МГц машинний цикл триває 1 мкс, переповнення таймера настає через
ТTMR0 = Кп (256 – N) мкс = 256 (256 – 10·Br) мкс. (23.1)
Зовнішній лічильник COUNT після кожного переривання зменшується на одиницю. Коли після трьох переривань він дораховує до нуля, відновлюється його початкове значення і за допомогою команди зсуву засвічується наступний світлодіод. Це відбувається через Тп = 3 ТTMR0 . (23.2)
ПОРЯДОК ВИКОНАННЯ ЛАБОРАТОРНОЇ РОБОТИ
У середовищі MPLAB створити у папці 1Work новий проект з іменем 23ГБ (Г – номер групи, Б – номер бригади), обравши в меню Project-New Project.
У вікні Edit Project додати новий файл на асемблері 23ГБ.asm (Add Node – додати вузол). Після повернення до вікна Edit Project нижче hex-файла з'явиться файл з розширенням .asm. Після появи вікна середовища MPLAB IDE створити цей текстовий файл з розширенням .asm (File – New), записавши його у папку 1Work (File - Save As …).
Зарисувати алгоритм і ввести текст програми на асемблері.
Записати програму на диск (File – Save).