Добавил:
Макакаревич шатав Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

мпт Лаб 1

.pdf
Скачиваний:
0
Добавлен:
14.07.2025
Размер:
254.16 Кб
Скачать

Лабораторна робота № 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 ? Чому?

Соседние файлы в предмете Основи електроніки та Мікропроцесорної техніки