- •Література
- •Інформаційні ресурси
- •Використання 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.2. Алгоритм управління світлодіодами з затримкою від таймера tmr0
Текст програми:
;******************************************************
;ЛАБОРАТОРНА РОБОТА 23
;Затримка часу з використанням переривання від таймера TMR0
;******************************************************
LIST P=16F628 ;тип мікропроцесора
#INCLUDE "P16F628.INC" ;підключення файла
;стандартних імен
;директиву __CONFIG набрати в одному рядку,
;закінчуючи словом _LVP_OFF
__CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _XT_OSC & _MCLRE_ON & _LVP_OFF
COUNT EQU 0x24
Br EQU БР ;тут замість БР введіть номер бригади
org 0x0 ; (РС) = 0
goto main ;Безумовний перехід
org h'4'
inttmr: movlw .10*Br ;початок п/п переривання
movwf TMR0 ; 10*Br --> TMR0
bcf INTCON,T0IF ;0 --> T0IF
decfsz COUNT,f ;(COUNT)-1 і пропустити, якщо = 0
vert: retfie ;вертання з п/п переривань (GIE = 0)
movlw .3
movwf COUNT ;відновити лічильник COUNT
rrf PORTB,f ;зсув вправо порта В
switch: retfie ;вертання з п/п переривань (GIE = 0)
main: ;ініціалізація:
movlw 0x07 ;Відключити компаратори і включити
movwf CMCON ;біти порту А у дискретний режим
movlw b'10000000'
movwf PORTB ;вивести байт у зачепку порту В
bsf STATUS, RP0 ;Обрати банк регістрів 1
clrf TRISB ;Усі біти порту В - на виведення
movlw 0xFF ;Усі біти порту A
movwf TRISA ; - на введення
movlw b'00000111' ;включити до таймера TMR0
;переддільник та встановити
movwf OPTION_REG ; його коефіцієнт ділення Кп = 256
bcf STATUS, RP0 ;Обрати банк регістрів 0
movlw .10*Br
movwf TMR0 ; 10*Br --> TMR0
movlw .3
movwf COUNT ;3 --> COUNT
pochat: bsf INTCON,T0IE ;дозвіл переривання таймера 0
bsf INTCON,GIE ;глобальний дозвіл переривань
bcf STATUS,C ; 0 --> C
loop: goto loop ;зациклення
end
У програмі застосовуються такі види команд:
Команда |
Коментар |
movlw k |
;переслати число (літерал) у робочий регістр W |
movwf f |
; переслати вміст робочого регістра W у регістр f |
bcf f, b |
;занести 0 у біт номер b регістра f (b 0, 1… 7) |
bsf f, b |
; занести 1 у біт номер b регістра f (b 0, 1… 7) |
rrf f, d |
;зсув вмісту регістра f вліво |
decfsz f,d |
;зменшити на 1 вміст регістра f і пропустити наступну ;команду, якщо отримано 0 |
retfie |
;вертання з підпрограми, при цьому стає: GIE = 1 |
clrf f |
;очистити регістр f |
goto k |
;безумовний перехід на адресу k |
Виконати компіляцію програми (Project – Make Project або крайня права піктограма у вигляді зеленої лійки). Після цього на екрані з'являється вікно результатів компіляції (Build Results).
Якщо з'явилось повідомлення про помилки (error), слід, ознайомившись з поясненням змісту помилки, натиснути двічі мишкою на цей рядок вікна Build Results. MPLAB зробить активним той рядок у тексті програми, де, ймовірно, зроблено помилку. Слід виправити її і далі так само й інші помилки. Потім повернутись до п. 5, поки не буде видано повідомлення "Build completed successfully" (компіляцію завершено успішно). При цьому створюється файл з тим же ім'ям і розширенням .hex.
Створити вікно спостереження (Window – Watch Windows – New Watch Window …), включивши до нього регістри TMR0, COUNT, PORTB.
Встановити точки зупинки на командах з мітками inttmr, vert, switch, pochat. Для цього встановити курсор на потрібний рядок, натиснути праву клавішу мишки та обрати Break Point(s) (команда виділяється кольором).
Здійснити симуляцію виконання програми до мітки pochat, натиснувши кнопку зеленого світлофора або клавішу F9.
Визначити точний час між викликами підпрограми переривання і переключеннями світлодіодів (тобто зміною стану порту В). Для цього створити вікно секундоміра: Window – Stopwatch. Скинути його лічильник (клавіша Zero). Записати мітку зупинки, значення регістрів з вікна Watch і секундоміра у табл. 23.3. Далі продовжувати виконання програми (F9) і після кожної зупинки заповнювати табл. 23.3. Визначити за даними таблиці час між викликами підпрограми переривання ТTMR0 та між моментами переключення світлодіодів Трс.
Підключити лабораторну установку до LPT-порту комп'ютера і до живлення. Встановити перемикач у положення "Програмування" (при цьому світиться світлодіод Prog), а вимикачі, що підключені до портів, усі вимкнути.
Згорнути вікно MPLAB і на робочому столі зробити подвійний клік на синій піктограмі програматора "ProPic2". Обрати тип мікроконтролера PIC16F628 (у верхній правій частині вікна ProPic2 виділено синім кольором). Стандартним шляхом відкрити створений вами файл з розширенням .hex.
Здійснити програмування мікроконтролера, натиснувши на піктограму з червоною блискавкою.
Після завершення програмування переключити перемикач на режим роботи. Візуально визначити час між моментами переключення світлодіодів Твіз і обчислити відносну похибку:
.