
мпт Лаб 1
.pdf
Лабораторна робота № 1
Використання MPLAB для складання та налагодження програм мікроконтролера
Мета роботи: засвоїти основи роботи у середовищі MPLAB
ТЕОРЕТИЧНІ ВІДОМОСТІ
MPLAB IDE – це інтегроване програмне середовище, призначене для розробки, компіляції, налагодження та програмування
PIC-мікроконтролерів фірми Microchip Technology Incorporated. MPLAB IDE складається з :
oтекстового редактора для запису програм на асемблері або мові високого рівня;
oкомпілятора для перетворення тексту програм на машинний код;
oналагоджувача (симулятора) для імітації виконання програми та її аналізу;
oсистеми допомоги щодо користування MPLAB IDE;
oзасобів програмування контролерів.
Робочий стіл середовища (рис. 1.1) має:
1)головне текстове меню;
2)графічне меню;
3)вікно проєкту;
Рис. 1.1 – Робочий стіл середовища MPLAB
1)робочу область програми;
2)додаткові вікна;
3)лінійку стану, що відображує поточний стан системи.
Створіть на диску D: папку D:\1Work, куди будуть зберігатись всі проєкти.
Подальше засвоєння основ роботи у MPLAB слід здійснити, виконуючи конкретне завдання.
ПОРЯДОК ВИКОНАННЯ ЛАБОРАТОРНОЇ РОБОТИ
1.Увійти у середовище MPLAB, обравши на робочому столі червоно-синю піктограму MPLAB IDE .
2.Створити новий проєкт, обравши з меню Project – Project Wizard – Далее. У вікні, що з'являється, вибрати мікросхему (Device) PIC16F877
– Далее – Далее. У пункті Create New Project File натиснути Browse –
обрати папку D:\1Work і ввести ім'я проєкту, наприклад, 126.mcp, де 1 – номер лабораторної роботи, 2 – номер групи, 6 – номер студента за списком. Натиснути Далее – Далее – Готово.
3.Створити текстовий файл з тим же іменем і розширенням .asm. Для цього обрати мишкою меню File – Add New File to Project. Після появи з цим ім’ям задати вказане ім'я файлу (наприклад, 126.asm) і натиснути Save - Зберегти. У вікні 126.mcw з’явиться ім’я створеного файлу.
4.У вікні з ім’ям асемблерного файлу вести текст програми на асемблері сімейства контролерів РІС16 фірми Microchip.
5.При цьому рекомендується мітку, якщо вона є, завжди ставити з першої позиції рядка. Далі після табуляції ввести мнемоніку команди і знову після табуляції – операнди. Якщо операндів два, між ними ставиться кома. Слідом за командою в рядку можна розташувати коментар, якому має передувати символ "крапка з комою".
Текст програми:
;ЛАБОРАТОРНА РОБОТА 1 ;Дослідження команд пересилання, арифметичних і логічних
; команд, способів адресації
|
LIST P=16F877 |
;тип мікропроцесора |
|
#INCLUDE "P16F877.INC" ;підключення файлу стандартних імен |
|||
__CONFIG |
_WDT_OFF |
& _BODEN_OFF & _XT_OSC & _LVP_OFF & |
|
_DEBUG_ON |
|
|
|
REG_1 |
EQU |
0x20 |
|
REG_2 |
EQU |
0x21 |
|
COD |
EQU |
16 |
;тут замість "КОД" введіть дві |
|
||||||
|
|
|
|
;останні цифри імені проєкту |
|
|||||
org 0x000 |
|
|
;програмний лічильник (РС) = 0 |
|||||||
clrf PORTD |
|
|
;Обнулити |
порт |
D |
(PCL)=01, |
||||
(STATUS)=1C |
|
|
|
|
|
|
|
|
|
|
bsf |
STATUS,RP0 |
|
;банк |
регістрів |
1 |
(PCL)=02, |
||||
(STATUS)=3C |
|
|
|
|
|
|
|
|
|
|
;111111111111111111111111111111111111111 |
|
|
|
|||||||
movlw |
|
b'11101011' |
|
;PORTA |
- |
|
режим |
введення, |
||
(PCL)=03, |
|
|
|
|
|
|
|
|
|
|
;(W)=EB |
|
|
|
|
|
|
|
|
|
|
movwf |
|
TRISA |
|
; |
крім RA4, RA2 (PCL)=04, (TRISA)=2B |
|||||
movlw |
|
b'11111111' |
|
;PORTB - (PCL)=05, (W)=FF |
||||||
movwf |
|
TRISB |
|
; режим введення, (PCL)=06 |
|
|||||
movwf |
|
TRISC |
|
;PORTC - на введення (PCL)=07 |
||||||
clrf |
|
TRISD |
|
;PORTD - |
на |
виведення |
(PCL)=08, |
|||
(TRISD)=00 |
|
|
|
|
|
|
|
|
|
|
movlw |
|
b'10000110' |
; (PCL)=09, (W)=86 |
|
||||||
movwf |
|
ADCON1 |
;порти А, E дискретні (PCL)=0A, |
|||||||
;(ADCON1)=86 |
|
|
|
|
|
|
|
|
|
|
bcf |
STATUS,RP0 |
|
;банк |
регістрів |
0 |
(PCL)=0B, |
||||
(STATUS)=1C |
|
|
|
|
|
|
|
|
|
|
;000000000000000000000000000000000000000 |
|
|
|
|||||||
Main: |
|
|
|
|
|
|
|
|
|
|
movlw |
|
0x3A |
|
;переслати |
число |
0x3A у |
робочий |
|||
регістр |
|
|
|
|
|
|
|
|
|
|
;(PCL)=0C, (W)=3A |
|
|
|
|
|
|
|
|
||
movwf |
|
REG_1 |
|
;копіювання |
вмісту |
робочого |
регістра |
|||
в |
|
|
|
|
|
|
|
|
|
|
;REG_1 (PCL)=0D, (REG_1)=3A |
|
|
|
|
|
|
||||
movlw |
|
COD |
|
;переслати |
COD |
у |
робочий |
регістр |
||
(PCL)=0E, |
|
|
|
|
|
|
|
|
|
|
;(W)=61 |
|
|
|
|
|
|
|
|
|
|
addwf |
REG_1,f |
;додати вміст |
регістрів |
REG_1 |
і |
|||||
робочого, |
|
|
|
|
|
|
|
|
|
|
;результат в регістрі REG_1 (PCL)=0F, |
|
|
|
|
|
|
|
|||
;(STATUS)=18, (REG_1)=9B |
|
|
|
|
|
|
|
|
|
|
movlw |
REG_2 |
;переслати |
|
вміст |
регістра |
REG_2 |
у |
|||
робочий |
|
|
|
|
|
|
|
|
|
|
;регістр (PCL)=10, (W)=21 |
|
|
|
|
|
|
|
|
|
|
movwf |
FSR |
;копіювання |
вмісту |
робочого |
регістра |
|||||
в FSR |
|
|
|
|
|
|
|
|
|
|
|
|
;(PCL)=11, (FSR)=21 |
|
|
|
|
||||
movlw |
COD |
;переслати |
|
вміст |
регістра |
COD |
у |
|||
робочий |
|
|
|
|
|
|
|
|
|
|
;регістр (PCL)=12, (W)=61 |
|
|
|
|
|
|
|
|
|
|
movwf |
INDF |
;копіювання |
вмісту |
робочого |
регістра |
|||||
в |
|
|
|
|
|
|
|
|
|
|
;REG_2 (PCL)=13, (REG_2)=61 |
|
|
|
|
|
|
|
|
||
incf |
INDF,f |
;збільшити на одиницю вміст регістра |
|
|||||||
;REG_2, результат залишається в ньому ж |
|
|
|
|
|
|
||||
;(PCL)=14, (REG_2)=62 |
|
|
|
|
|
|
|
|
|
|
movlw |
b'00000011' ;переслати |
|
число |
b'00000011' |
у |
|||||
робочий |
|
|
|
|
|
|
|
|
|
|
;регістр (PCL)=15, (W)=03 |
|
|
|
|
|
|
|
|
||
addwf |
PCL,f |
;додати |
вміст |
регістрів |
PCL |
і |
||||
робочого, |
|
|
|
|
|
|
|
|
|
|
;результат в регістрі PCL (PCL)=19 |
|
|
|
|
|
|
|
|
||
decf |
REG_1,f |
;зменшити |
на |
одиницю |
вміст |
регістра |
||||
REG_1, |
|
|
|
|
|
|
|
|
|
|
;результат залишається в ньому ж. |
|
|
|
|
|
|
|
|
||
decf |
REG_1,f |
;зменшити |
на |
одиницю |
вміст |
регістра |
||||
REG_1, |
|
|
|
|
|
|
|
|
|
|
;результат залишається в ньому ж. |
|
|
|
|
|
|
|
|
||
decf |
REG_1,f |
;зменшити |
на |
одиницю |
вміст |
регістра |
||||
REG_1, |
|
|
|
|
|
|
|
|
|
|
;результат залишається в ньому ж. |
|
|
|
|
|
|
||
decf |
REG_1,f |
;зменшити |
на |
одиницю |
вміст |
регістра |
||
REG_1, |
|
|
|
|
|
|
|
|
;результат залишається в ньому ж (PCL)=1A, |
|
|
|
|
||||
;(REG_1)=9A |
|
|
|
|
|
|
|
|
decf |
REG_1,f |
;зменшити |
на |
одиницю |
вміст |
регістра |
||
REG_1, |
|
|
|
|
|
|
|
|
;результат залишається в ньому ж (PCL)=1B, |
|
|
|
|
||||
;(REG_1)=99 |
|
|
|
|
|
|
|
|
movlw |
h'20' |
;переслати число h'20' у робочий |
||||||
;регістр (PCL)=1C, (W)=20 |
|
|
|
|
|
|
|
|
movwf |
PORTD |
;увімкнути |
світлодіод |
RD5 |
||||
(PCL)=1D, |
|
|
|
|
|
|
|
|
;(PORTD)=20 |
|
|
|
|
|
|
|
|
ncycl: goto |
ncycl |
;зациклення програми |
|
|
|
|||
end |
|
|
|
|
|
|
|
|
1.Записати програму на диск (File – Save).
2.Виконати компіляцію програми Project – Make (F10 або відповідна піктограма) – Absolute. Після цього на екрані з'являється вікно результатів компіляції (Output).
3.Якщо з'явились повідомлення про помилки (error), слід, ознайомившись з поясненням змісту помилки, двічі без паузи натиснути мишкою на цей рядок вікна Output. MPLAB зробить активним той рядок у тексті програми, де, ймовірно, зроблено помилку. Треба її виправити і далі так само й інші помилки. Потім повернутись до п. 7, поки не буде видано повідомлення "BUILD SUCCEEDED" ("Компіляція успішна"). При цьому створюється файл з тим же ім'ям і розширенням .hex.
4.Закрити вікно Output. Відкрити вікно регістрів спеціального призначення (меню: View – Special Function Registers).
5.Створити вікно спостереження (View – Watch) Занести до нього імена регістрів пам'яті REG_1 та REG_2. Для цього, у вікні Watch натискати справа чорний трикутник, обираючи після кожного імені кнопку "Add Symbol". Переміщуючи і змінюючи розміри, розташуйте вікна так, щоб вони не накладались і одночасно було зручно аналізувати їх вміст.
6.Обрати в меню режим симуляції Debugger – Select Tool – MPLAB SYM.
7.Виконати скидання на початок програми (клавіша F6). Слід знати, що зелена стрілка завжди вказує на команду, яка ще не виконувалась. Її буде виконано наступною.
8.Перед виконанням чергової команди слід передбачити, що зміниться після її виконання. Натискаючи на клавішу F7 (Step Into – крок), виконайте програму, записуючи після кожного кроку виконану команду асемблера і стан регістрів з вікон Special Function Registers і Watch, що змінили свій вміст (вони на екрані відмічаються червоним кольором). Цими даними доповнити текст програми за зразком (див. текст, виділений курсивом). У цій лабораторній роботі записуйте в коментарі вміст регістрів лише в шістнадцятковій системі. Ознаку числення в коментарі можна не писати:
movlw |
b'11111111' |
;PORTB - |
(W)=FF,(PCL)=09 |
||
movwf |
TRISC |
|
|
|
;PORTC-на |
введення(PCL)=0B,(TRISC)=FF |
|
|
|||
clrf |
TRISD |
|
;PORTD |
- |
на |
виведення(PCL)=0D,(TRISD)=00 |
|
|
|||
movlw |
b'10000110' |
; (W)=86,(PCL)=0E |
|
||
movwf |
ADCON1 |
;порт А дискретний, (ADCON1)=86, |
|||
PCL=0F, тощо. |
|
|
|
|
|
У програмі застосовуються такі види команд:
Команда |
|
Коментар |
|
movlw |
k |
;переслати число (літерал) у робочий регістр W. |
|
movwf |
f |
; переслати вміст робочого регістра W у регістр f. |
|
addwf |
f, d |
;додати вміст регістрів W i f, результат занести: |
|
у W, якщо d = 0, або у регістр f, якщо d = 1. |
|||
|
|
||
clrf |
f |
очистити регістр f |
|
bcf |
f, b |
;занести 0 у біт номер b регістра f (b 0, 1… 7). |
|
bsf |
f, b |
; занести 1 у біт номер b регістра f (b 0, 1… 7). |
|
goto |
k |
;безумовний перехід на адресу k |
|
decf |
f, d |
;від вмісту регістра f відняти 1, результат занести: |
|
у W, якщо d = 0, або у регістр f, якщо d = 1. |
|||
|
|
ЗМІСТ ЗВІТУ Звіт має містити: назву та мету лабораторної роботи, скорочений
порядок виконання лабораторної роботи, текст програми з коментарем, перелік імен регістрів спеціального призначення, що використовуються у дослідженій програмі, формат та опис дії кожного виду команд, що зустрічаються у дослідженій програмі мікроконтролера, відповіді на контрольні запитання.
КОНТРОЛЬНІ ЗАПИТАННЯ
1.Які основні складові має середовище MPLAB?
2.Як створити новий проєкт?
3.Яких синтаксичних правил рекомендується дотримуватись, складаючи текст програми?
4.Як виправити помилки, виявлені на етапі компіляції?
5.Як здійснити симуляцію покрокового виконання програми?
6. |
Чому при виконанні команди addwf |
REG_1,f може змінитись стан |
|
регістра STATUS? |
|
7. |
Чому при виконанні команди addwf |
PCL,f здійснюється стрибок |
|
через декілька команд? |
|
8.З яким регістром виконується дія, коли виконуються команди movwf INDF
incf INDF,f ? Чому?