Смекни!
smekni.com

Мікропроцесорні пристрої (стр. 16 из 21)

2.3.1 Реалізувати часову затримку заданої тривалості з використанням таймера у вигляді підпрограми і розташувати її за адресою 0x234 у пам'яті програм.

2.3.2 Спираючись на знання, отримані в лабораторній роботі 1 на виводі RB3 мікроконтролера сформувати імпульс заданої тривалості. Виклик підпрограм робити неявним чином.

3 Варіанти завдань

3.1 t1 = [(N mod 5) + 1] tц, де N – номер студента за списком журналу групи, tц – тривалість командного циклу.

3.2 t2 = (C + I N) tц, де C – номер групи, I – індекс групи, N – номер студента за списком журналу групи, tц – тривалість командного циклу.

3.3 t3 = 20 C I N tц, де C – номер групи, I – індекс групи, N – номер студента за списком журналу групи, tц – тривалість командного циклу.

3.4 Для парних номерів за списком журналу групи формувати позитивний імпульс на виводах мікроконтролера ( ), а для непарних номерів – негативний імпульс ().

Приклад програми. Виконання затримки без використання таймера:

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

Організація і використання пам'яті даних

1 Мета

Вивчити сторінкову організацію пам'яті даних. Навчитися використовувати режим непрямої адресації комірок пам'яті даних. Вивчити організацію і способи доступу до енергонезалежної пам'яті даних (EEPROM).

2 Завдання по лабораторній роботі

2.1 Використовуючи метод прямої адресації записати в пам'ять даних мікроконтролера PIC16F877 своє прізвище, ім'я та по батькові.

2.2 Використовуючи метод непрямої адресації переписати анкетні дані з пам'яті даних в енергонезалежну пам'ять (EEPROM).

2.3 Виконати запис в комірку енергонезалежної пам‘яті даних згідно з варіантом.

2.4 Визначити час запису одного байта в EEPROM.

2.5 Визначити можливість читання даних з EEPROM відразу після початку циклу запису.

3 Варіанти завдань

Варіант 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. Висновки.

Лабораторна робота 5

Система переривань мікроконтролера PIC16F84.

Власні оброблювачі переривань

1 Мета

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

2 Завдання по лабораторній роботі

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

3 Варіанти завдань

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 Оброблювач переривання по переповненню таймера повинен виконувати.