2.3.1 Реалізувати часову затримку заданої тривалості з використанням таймера у вигляді підпрограми і розташувати її за адресою 0x234 у пам'яті програм.
2.3.2 Спираючись на знання, отримані в лабораторній роботі 1 на виводі RB3 мікроконтролера сформувати імпульс заданої тривалості. Виклик підпрограм робити неявним чином.
Приклад програми. Виконання затримки без використання таймера:
…
movlw CDEL ;[1] запис константи movwf VDEL ;[1] у лічильник m1 decfsz VDEL, 1 ;[1] зменшення значення лічильника
;[2] якщо VDEL = 0 пропуск наступної команди
goto m1 ;[2] перехід, якщо VDEL ≠ 0
… ; продовження програми
Зауваження. У квадратних дужках зазначений час виконання кожної команди у машинних циклах. Час виконання фрагмента програми tв при різних значеннях константи CDEL обчислюється таким чином: при CDEL = 1 tв = 1 + 1 + 2 = 4 такти, при CDEL = 2 tв = 1 + 1 + 1 + 2 + 2 = 7 тактів.
Таким чином, у загальному випадку затримка буде дорівнювати tз = (3 CDEL + 1) tц.Приклад програми. Виконання затримки із використанням таймера:
…
; ініціалізація таймера
movlw b'00000000' ;тактування від внутрішнього генератора ;з попереднім дільником при К = 2 bsf STATUS, RP0 ;вибір банку 1
movwf OPTION_REG ;запис у регістр OPTION bcf STATUS, RP0 ;вибір банку 0
…
bcf INTCON, T0IF ;[1] скидання прапорця переповнення
; таймера movlw CDEL ;[1] запис константи для
movwf TMR0 ;[1] ініціалізації лічильника
m1
btfss INTCON, T0IF ;[1] перевірка біта T0IF у регістрі ; INTCON
;[2] якщо T0IF = 1 пропуск наступної
; команди
goto m1 ;[2] перехід, якщо T0IF = 0
… ; продовження програми
Зауваження. У загальному випадку затримка буде приблизно дорівнювати tз = [3 + (256 – CDEL) K] tц, де K – коефіцієнт ділення попереднього дільника (1, 2, 4, 8, …, 256).Приклад програми. Неявний виклик підпрограми з адресою 0x345:
… ; основна програма
call proc1 ; виклик підпрограми proc1 … ; продовження основної програми
proc1 ; підпрограма proc1
movlw 0x03 ; запис старших розрядів movwf PCLATH ; у регістр PCLATH
movlw 0x45 | ; запис молодших розрядів |
movwf PCL … | ; у регістр PCL і перехід за адресою 0x345 |
org 0x345 | ; розміщення підпрограми з адреси 0x345 |
… | ; команди підпрограми |
return | ; повернення з підпрограми в основну |
4 Зміст звіту 4.1 Тема. 4.2.Мета. | ; програму |
4.3 Індивідуальне завдання.
4.4 Алгоритми програм і підпрограм.
4.5 Лістинг програми (файл .lst) із докладним коментуванням виконання програми.
4.6 Короткий опис програми.
4.7 Результати виконання програми. 4.8 Висновки.
Лабораторна робота 4
Вивчити сторінкову організацію пам'яті даних. Навчитися використовувати режим непрямої адресації комірок пам'яті даних. Вивчити організацію і способи доступу до енергонезалежної пам'яті даних (EEPROM).
2.1 Використовуючи метод прямої адресації записати в пам'ять даних мікроконтролера PIC16F877 своє прізвище, ім'я та по батькові.
2.2 Використовуючи метод непрямої адресації переписати анкетні дані з пам'яті даних в енергонезалежну пам'ять (EEPROM).
2.3 Виконати запис в комірку енергонезалежної пам‘яті даних згідно з варіантом.
2.4 Визначити час запису одного байта в EEPROM.
2.5 Визначити можливість читання даних з EEPROM відразу після початку циклу запису.
Варіант 1. В останню комірку EEPROM записати контрольну суму всіх інших комірок пам'яті, що обчислюється шляхом додавання за модулем 2.
Варіант 2. В останню комірку EEPROM записати контрольну суму всіх інших комірок пам'яті, що обчислюється шляхом додавання по модулю
256.
Варіант 3. В останню комірку EEPROM записати максимальне значення з всіх інших комірок пам'яті.
Варіант 4. В останню комірку EEPROM записати мінімальне значення з всіх інших комірок пам'яті.
Варіант 5. В останню комірку EEPROM записати середнє значення з всіх інших комірок пам'яті.
Приклад програми. Очищення 10 байтів пам'яті даних, починаючи з адреси 0x0C, використовуючи метод непрямої адресації:
…
movlw 0x0C ; встановлення початкової адреси
movwf FSR ; ініціалізація покажчика
movlw 10 ; ініціалізація лічильника CTR значенням 10 movwf CTR
m1 clrf INDF ; очищення комірки пам'яті даних incf FSR ; збільшення значення покажчика decfsz CTR, 1 ; зменшення значення лічильника goto m1 ; перехід, якщо не остання комірка
… ; продовження програми
Зауваження. Лічильник CTR не повинен розташовуватися в комірках пам'яті, що очищаються. Імена регістрів FSR (адреса 0x00) і INDF (адреса 0x04) доступні при підключенні заголовного файлу P16F877.INC або повинні бути описані в описовій секції програми.
Приклад програми. Читання даних з комірки пам'яті EEPROM з адресою 0x10 у регістр W:
…
bcf STATUS, RP0 ; вибір банку 0
movlw 0x10 ; визначення адреси комірки пам'яті
; EEPROM
movwf EEADR bsf STATUS, RP0 ; вибір банку 1 bsf EECON1, RD ; строб читання bcf STATUS, RP0 ; вибір банку 0
movf EEDATA, W ; запис у регістр W результату
; читання
…
Приклад програми. Запис значення регістру W у комірку пам'яті EEPROM з адресою 0x10:
…
bcf STATUS, RP0 ; вибір банку 0 movwf EEDATA ; дані для запису
movlw 0x10 ; визначення адреси комірки пам'яті
; EEPROM
movwf EEADR
bsf STATUS, RP0 ; вибір банку 1 bsf EECON1, WREN ; дозвіл запису
bcf EECON1, EEIF ;- скидання прапорця закінчення
; запису в EEPROM
bcf INTCON, GIE ;+ заборона переривань
movlw 0x55 ;+ обов'язкова послідовність команд
movwf EECON2 ;+ movlw 0xAA ;+ movwf EECON2 ;+
bsf EECON1, WR ;+ строб запису
m1 btfss EECON1, EEIF ;- очікування закінчення запису в
; EEPROM goto m1 ;-
bcf STATUS, RP0 ; вибір банку 0
…
Зауваження. Послідовність команд, що відзначені символом ―+‖ є обов'язковою. Команди, що відзначені символом ―–‖ є необов'язковими у випадку однократного запису. Імена регістрів STATUS (адреса 0x03), EEDATA (адреса 0x08), EEADR (адреса 0x09), INTCON (адреса 0x0B), EECON1 (адреса 0x88), EECON2 (адреса 0x89), і біт RP0(5), RD(0), WR(1), WREN(2), EEIF(4), GIE(7) доступні при підключенні заголовного файлу P16F84.INC або повинні бути описані в описовій секції програми.
4. ЗМІСТ ЗВІТУ 4.1. Тема.
4.2. Мета.
4.3. Індивідуальне завдання.
4.4. Алгоритми програм і підпрограм.
4.5. Лістинг програми (файл .lst) із докладним коментуванням виконання програми.
4.6. Короткий опис програми.
4.7. Результати виконання програми. 4.8. Висновки.
Система переривань мікроконтролера PIC16F84.
Власні оброблювачі переривань
Вивчити систему переривань мікроконтролера PIC16F84, способи формування переривань, використання оброблювачів декількох переривань.
2.1 Написати оброблювачі переривань відповідно до варіанта завдання і номера студента за списком журналу групи.
3.1 Визначте джерело переривання відповідно до варіанта завдання і номера студента за списком журналу групи за таблицею.
Джерело переривання | Номер у журналі групи | ||||||||||||||||||||
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | |
Переповнення таймера | * | * | * | * | * | * | * | ||||||||||||||
Передній фронт сигналу на виводі RB0/INT | * | * | * | * | * | * | |||||||||||||||
Задній фронт сигналу на виводі RB0/INT | * | * | * | * | * | * | |||||||||||||||
Закінчення запису в EEPROM | * | * | * | * | * | * | * | ||||||||||||||
Зміна рівня сигналу на виводі RB4 | * | * | * | * | |||||||||||||||||
Зміна рівня сигналу на виводі RB5 | * | * | * | * | |||||||||||||||||
Зміна рівня сигналу на виводі RB6 | * | * | * | * | |||||||||||||||||
Зміна рівня сигналу на виводі RB7 | * | * | * | * |
3.2 Оброблювач переривання по переповненню таймера повинен виконувати.