
мпт 2 .docx
.pdfЛабораторна робота № 2 Дії з портами мікроконтролера, логічні операції та обробка окремих бітів
Мета роботи: засвоїти систему команд мікроконтролерів PIC16xxx та дії із зовнішніми портами. ТЕОРЕТИЧНІ ВІДОМОСТІ
Однокристальні мікроконтролери сімейства PIC16ххх, зокрема PIC16F877, мають систему з 35 команд, кожна з яких має 14 бітів. Вони дозволяють складати ефективні програми. Коди команд при програмуванні заносяться у пам'ять програм. Вона відділена від однобайтових комірок оперативної пам'яті, які реалізовані регістрами (або інакше – файлами).
Розрізняють регістри спеціального і загального призначення. Усі регістри включно з портами введення-виведення розташовані у загальному адресному полі. Тобто ті команди, що звертаються до регістрів загального призначення, можуть так само звертатись до регістрів спеціального призначення або до зовнішніх портів. Регістри спеціального призначення та зовнішні порти мають сталі імена, які задані у файлі стандартних імен P16F877.INC. Наприклад, зовнішні порти А та В іменуються PORTA та PORTB, вказівник для непрямої адресації – FSR, регістр стану – STATUS, тощо.
Регістрам загального призначення розробник програми надає свої імена за допомогою директиви EQU (див. програму). Вона дозволяє іменувати константи та адреси, що будуть використані у програмі.
Константи можна подавати у двійковій, вісімковій, десятковій або шістнадцятковій системах
числення. Наприклад: |
|
b'01110101' |
– двійкове число; |
o'174' |
– вісімкове число; |
d'186' або .186 – десяткове число;
h'E8' або 0xE8 – шістнадцяткове число. Лабораторна установка складається з таких частин:
1.Комп'ютер з середовищем розробки MPLAB v8.92.
2.Плата мікроконтролера, до якої приєднано елементарні пристрої введення – тумблери, з'єднані з портом B, пристрої виведення – світлодіоди, з'єднані з портом D.
3.Програматор Pickit 2 або Pickit 3.
4.Блок живлення плати розташовано в щиті.
ПОРЯДОК ВИКОНАННЯ ЛАБОРАТОРНОЇ РОБОТИ
1.Увійти у середовище MPLAB, обравши на робочому столі червоно-синю піктограму MPLAB IDE
.
2.Створити новий проєкт, обравши з меню Project – Project Wizard – Далее. У вікні, що з'являється, вибрати мікросхему (Device) PIC16F877 – Далее – Далее. У пункті Create New Project File натиснути Browse – обрати папку D:\1Work і ввести ім'я проєкту, наприклад, 236.mcp, де 1 – номер лабораторної роботи, 3 – номер групи, 6 – номер студента за списком. Натиснути Далее – Далее – Готово.
3.Створити текстовий файл з тим же іменем і розширенням .asm. Для цього обрати мишкою меню File – Add New File to Project. Після появи з цим ім’ям задати вказане ім'я файлу (наприклад, 326.asm) і натиснути Save - Зберегти. У вікні 326.mcw з’явиться ім’я створеного файлу.
4.У вікні з ім’ям асемблерного файлу вести текст програми на асемблері сімейства контролерів РІС16 фірми Microchip.
5.При цьому рекомендується мітку, якщо вона є, завжди ставити з першої позиції рядка. Далі після табуляції ввести мнемоніку команди і знову після табуляції – операнди. Якщо операндів два, між ними ставиться кома. Слідом за командою в рядку можна розташувати коментар, якому має передувати символ "крапка з комою".
Текст програми:
;ЛАБОРАТОРНА РОБОТА 2 ; Дії з портами мікроконтролера, логічні операції
;та обробка окремих бітів.
LIST P=16F877 ;тип мікропроцесора
#INCLUDE "P16F877.INC" ;підключення файла
;стандартних імен
1
;директиву __CONFIG набрати в одному рядку, ;закінчуючи словом _LVP_OFF
__CONFIG _WDT_OFF & _BODEN_OFF &_XT_OSC & _LVP_OFF & _DEBUG_ON
COD |
EQU |
16 |
;тут замість "КОД" введіть дві |
|
|
; останні цифри з імені проекту |
|
org 0x000 |
|
;програмний лічильник (РС) = 0 |
|
nop |
|
|
|
nop |
|
|
|
clrf |
PORTD |
|
|
bsf |
STATUS,RP0 ;банк регістрів 1 |
||
;111111111111111111111111111111111111111 |
|||
movlw b'11101011' |
;PORTA - режим введення, |
||
movwf TRISA ; |
крім RA4, RA2 |
||
clrf |
TRISD ;PORTD - на виведення |
||
movlw b'11111111' |
;PORTB - |
movwf TRISB |
; режим введення, |
||||
movwf TRISC ;PORTC - на введення |
|||||
movlw b'10000110' ; |
|
|
|||
movwf ADCON1 |
;порт А дискретний |
||||
bcf |
STATUS,RP0 ;банк регістрів 0 |
||||
;000000000000000000000000000000000000000 |
|||||
Main: movlw COD |
|
;вивести COD у зачепку |
|||
movwf PORTD ;порту D |
|
|
|||
T0: |
btfss PORTB,0 |
;якщо вимикач RB0 ввімкнутий, |
|||
;пропустити наступну команду |
|||||
goto |
|
T0 |
|
;а якщо ні, – виконати перехід |
|
movlw b'10011000' |
; |
|
|||
iorwf |
PORTD,f |
|
;логічне "АБО" з W та портом D |
||
T1: |
btfss PORTB,1 |
|
;/повторювати ці дві команди, |
||
goto |
|
T1 |
|
;/ поки вимкнений вимикач RB1 |
|
movlw b'11100111' |
|
|
|||
andwf |
PORTD,f |
|
; логічне "ТА" з W та портом D |
||
T2: |
btfss |
PORTB,2 |
|
;\ повторювати ці дві команди, |
|
goto |
|
T2 |
|
;\ поки вимкнений вимикач RB2 |
|
movlw b'11100010' |
|
|
|||
xorwf |
PORTD,f |
|
;логічне "ВИКЛЮЧНЕ АБО" з W та |
||
;портом D |
|
|
|
|
|
T3: |
btfss |
|
PORTB,3 |
;далі написати коментар самостійно |
|
goto |
|
T3 |
|
; |
|
bsf |
|
PORTD,6 |
; |
|
|
bcf |
|
PORTD,1 |
; |
|
|
T4: |
btfss PORTB,4 |
; |
|
||
goto |
|
T4 |
|
; |
|
movlw b'00101010'; |
|
|
|||
movwf PORTD ; |
|
|
|
||
T5: |
btfsc PORTB,0 |
; |
|
||
goto |
|
T5 |
|
; |
|
decf |
|
PORTD,f |
; |
|
|
goto |
|
T0 |
|
; |
|
end |
|
|
|
|
|
У програмі застосовуються такі види команд:
Команда |
Коментар |
|
movlw |
k |
;переслати число (літерал) у робочий регістр W |
movwf |
f |
; переслати вміст робочого регістра W у регістр f |
2

bcf |
f, b |
;занести 0 у біт номер b регістра f (b 0, 1… 7) |
bsf |
f, b |
; занести 1 у біт номер b регістра f (b 0, 1… 7) |
goto |
k |
;безумовний перехід на адресу k |
clrf |
f |
;очистити регістр f |
btfss |
f, b |
;якщо у регістрі f вказаний біт b = 1, пропустити наступну команду |
|
|
|
btfsc |
f, b |
;якщо у регістрі f вказаний біт b = 0, пропустити наступну команду |
|
|
|
iorwf |
f,d |
;побітне "ВКЛЮЧНЕ АБО" з регістрами W i f |
|
|
|
andwf |
f,d |
; побітне "І" з регістрами W i f |
|
|
|
xorwf |
f,d |
; побітне "ВИКЛЮЧНЕ АБО" з регістрами W i f |
|
|
|
6.Записати програму на диск (File – Save).
7.Виконати компіляцію програми Project – Make (F10 або відповідна піктограма) – Absolute. Після цього на екрані з'являється вікно результатів компіляції (Output).
8.Якщо з'явились повідомлення про помилки (error), слід, ознайомившись з поясненням змісту помилки, двічі без паузи натиснути мишкою на цей рядок вікна Output. MPLAB зробить активним той рядок у тексті програми, де, ймовірно, зроблено помилку. Треба її виправити і далі так само й інші помилки. Потім повернутись до п. 7, поки не буде видано повідомлення "BUILD SUCCEEDED" ("Компіляція успішна"). При цьому створюється файл з тим же ім'ям і розширенням .hex. Закрити вікно Output.
9.Подумки аналізуючи програму, слід послідовно записати в табл. 2.1 стан світлодіодів RD7…RD0 після кожної заданої зміни стану вимикачів.
10.Обрати режим симуляції: Debugger – Select Tool – MPLAB SYM.
11.Створити вікно спостереження (View – Watch) Занести до нього ім’я регістра PORTB.
12.Відкрити вікно імітації зовнішніх пристроїв (меню: Debugger – Stimulus-New Workbook).
Узакладці Asynch у колонці Pin/ SFR додати імена зовнішніх пінів порту PORTB: RB0, RB1, …, RB4. Для кожного з них у стовпчику Action задати початковий стан Set Low, натискаючи при цьому у стовпчику Fire на відповідний символ «>» – виконати.
13.Виконати проєкт: F9 і зупинити F5. Звірити стан бітів порту D з передбаченими.
14.Послідовно задавати у вікні Stimulus стан пінів порту B згідно таблиці 2.1, підтверджуючи кожну зміну натисканням «>». Після кожної зміни виконати (F9) і зупиняти (F5) програму.
15.Звіряти стан порту D з передбаченими у п. 9 і у випадку неспівпадіння з'ясуйте, в чому причина невідповідності таблиці та стану світлодіодів.
2.1.Аналіз роботи програми
|
|
Вимикач |
|
|
|
|
Світлодіод |
|
|
|
Мітка |
|||
RB4 |
RB3 |
|
RB2 |
RB1 |
RB0 |
RD7 |
RD6 |
RD5 |
RD4 |
RD3 |
RD2 |
RD1 |
RD0 |
|
|
|
|||||||||||||
0 |
0 |
|
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
Т0 |
0 |
0 |
|
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
Т1 |
0 |
0 |
|
0 |
1 |
1 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
Т2 |
0 |
0 |
|
1 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
Т3 |
0 |
1 |
|
0 |
0 |
1 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
Т4 |
1 |
0 |
|
0 |
0 |
1 |
0 |
0 |
0 |
1 |
1 |
1 |
1 |
1 |
Т5 |
0 |
0 |
|
0 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
1 |
1 |
0 |
Т0 |
16.Приєднати програматор PICkit2 або PICkit3 до входу USB комп'ютера (до плати мікроконтролера він теж має бути приєднаний). Увімкнути живлення демоплати. У середовищі MPLAB обрати Debugger–Select Tool–PICkit 2 (або PICkit 3 – залежно від розташованого на робочому місці програматора). Якщо з'являється віконце з інформацією про небезпеку, що може статись, коли мікроконтролер розрахований на живлення 3,3 В, обрати OK. Прошити мікроконтролер,
натиснувши піктограму або в меню Debugger–Program. З комп'ютера виконати старт програми мікроконтролера
або F9. Згідно з таблицею 2.1 встановлювати стан вимикачів, що
3
з'єднані з PORTB, та визначати стан світлодіодів RD7…RD0, які керовані програмою через PORTD. Звірити дані з таблицею 2.1. Якщо результати не збігаються, з'ясувати причину.
ЗМІСТ ЗВІТУ Звіт має містити: назву та мету лабораторної роботи, скорочений порядок виконання
лабораторної роботи, текст програми з коментарем, таблицю станів вимикачів та світлодіодів після їх кожної зміни, висновки, що порівнюють результати дослідів, перелік імен регістрів спеціального призначення, що використовуються у дослідженій програмі, формат та опис дії кожного виду команд, що вперше зустрічаються у дослідженій програмі мікроконтролера, відповіді на контрольні запитання.
КОНТРОЛЬНІ ЗАПИТАННЯ
1.З яких основних блоків складається лабораторна установка?
2.Як здійснити програмування мікроконтролера?
3.Як виконуються логічні команди iorwf f,d, andwf f,d, xorwf f,d ?
4.Які команди дозволяють здійснити керування окремим бітом регістра чи зовнішнього порту?
5.Як у програмі передбачити опитування стану вхідного біту зовнішнього порту?
6.Для чого призначений файл P16F877.INC?
4