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

мпт лаб 3.docx

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

Лабораторна робота № 3 Створення програмної затримки часу за допомогою циклів

Мета роботи: засвоїти метод створення затримок часу з використанням вкладених циклів

ТЕОРЕТИЧНІ ВІДОМОСТІ

Алгоритми управління і контролю, як правило, потребують використання затримок часу. Для цього мікроконтролерів використовують два способи:

1)програмну затримку за рахунок багатократного повторення команд з використанням вкладених циклів;

2)використання таймерів, вбудованих у мікросхему контролера.

При програмній затримці команди у вкладеному (внутрішньому) циклі повторюються стільки разів, скільки передбачено в його лічильнику. За цей час лічильник зовнішнього циклу змінюється тільки на одиницю. Тому для оцінки загального часу затримки треба множити час виконання внутрішнього циклу на число, занесене у лічильник зовнішнього циклу. У пропонованій нижче програмі для затримки часу використовується три цикли, вкладених один в інший.

ПОРЯДОК ВИКОНАННЯ ЛАБОРАТОРНОЇ РОБОТИ

1.Увійти у середовище MPLAB, обравши на робочому столі червоно-синю піктограму MPLAB

.

2.Створити новий проєкт, обравши з меню Project – Project Wizard – Далее. У вікні, що з'являється, вибрати мікросхему (Device) PIC16F877 – Далее Далее. У пункті Create New Project File натиснути Browse – обрати папку D:\1Work і ввести ім'я проєкту, наприклад, 326.mcp, де 3 – номер лабораторної роботи, 2 – номер групи, 6 – номер студента за списком. Натиснути Далее Далее Готово.

3.Створити текстовий файл з тим же іменем і розширенням .asm. Для цього обрати мишкою меню File – Add New File to Project. Після появи з цим ім’ям задати вказане ім'я файлу (наприклад, 326.asm) і натиснути Save - Зберегти. У вікні .mcw (наприклад, 326.mcw) з’явиться ім’я створеного файлу.

1

4.Ввести текст програми на асемблері сімейства контролерів РІС16.

;****************************************************** ;ЛАБОРАТОРНА РОБОТА 3 ;Почергове включення світлодіодів

;****************************************************** LIST P=16F877

#INCLUDE "P16F877.INC"

;наступну директиву __CONFIG набрати в одному рядку, ;закінчуючи словом _LVP_OFF

__CONFIG _WDT_OFF & _BODEN_OFF & _XT_OSC & _LVP_OFF & _DEBUG_ON

HI

EQU 0x20

;змінна зовнішнього циклу

MID

EQU 0x21

;змінна середнього циклу

LO

EQU 0x22

;змінна внутрішнього циклу

COD

EQU 1 ;тут замість слова БР слід ввести

 

 

;в десятковій системі номер бригади!

org 0x000 ; (РС)=0

 

bsf

STATUS,RP0 ;банк регістрів 1

;111111111111111111111111111111111111111

movlw b'11101011'

;PORTA - режим введення,

movwf TRISA ; крім RA4, RA2

clrf

TRISD ;PORTD - на виведення

movlw b'10000110' ;

 

movwf ADCON1

;порт А дискретний

bcf

STATUS,RP0 ;банк регістрів 0

;000000000000000000000000000000000000000

bsf

PORTA,4

 

;встановити 1 у біті 4 порту A

bcf

PORTA,4

 

;встановити 0 у біті 4 порту A

clrf

PORTD ;очистити порт D (вимкнути світлодіоди)

bsf

STATUS, C

;встановити біт переносу С

LOOP: rlf

PORTD,f

;зсув вліво вмісту PORTD

call

SEC

 

;виклик підпрограми затримки

goto

LOOP

 

;перехід на повторення дій

;п/п затримки часу

;далі при оформленні написати коментар самостійно! ;У ньому вказати дію команд

SEC: movlw

.42

movwf HI

 

SEC1: movlw

.46

movwf MID

SEC2: movlw

COD*.11

movwf LO

 

SEC3: decfsz

LO,f

goto

SEC3

decfsz

MID,f

goto

SEC2

decfsz

HI,f

goto

SEC1

return

 

end

 

5.Записати програму на диск (File – Save).

6.Виконати компіляцію програми Project – Make (F10 або відповідна піктограма) – Absolute. Після цього на екрані з'являється вікно результатів компіляції (Output).

7.Якщо з'явились повідомлення про помилки (Error), слід, ознайомившись з поясненням змісту помилки, двічі без паузи натиснути мишкою на цей рядок вікна Output. MPLAB зробить активним той рядок у тексті програми, де, ймовірно, зроблено помилку. Треба її виправити, далі так само й

2

інші помилки. Потім повернутись до п. 7, поки не буде видано повідомлення "BUILD SUCCEEDED" ("Компіляція успішна"). При цьому створюється файл з тим же ім'ям і розширенням .hex. Закрити вікно Output.

8.Обрати режим симуляції: Debugger – Select Tool – MPLAB SYM.

9.Створити вікно спостереження (View – Watch). Занести до нього регістри PORTD, HI, MID, LO. Для цього у вікні Watch натиснути ліву чорну стрілку, обрати зі списку PORTD і натиснути кнопку Add SFR. У тому ж вікні натиснути праву стрілку та по-черзі обрати регістри LO, MID, HI, після кожного вибору натискати кнопку Add Symbol.

10.Встановити у програмі точки зупинки на командах:

call SEC, goto LOOP, goto SEC3, goto SEC2, goto SEC1.

Для цього на рядках цих команд зробити мишкою подвійний клік.

11.Задати частоту тактового генератора: Debugger – Settings – у закладці Osc / Trace позначити частоту 3,6864 MHz – Ok (така частота у лабораторного мікроконтролера).

12.Зробити скидання (F6) і пуск програми (F9). Виконання зупиниться на команді call SEC. Далі буде здійснено виклик підпрограми затримки часу. Щоб визначити цей час, слід вивести на екран вікно віртуального секундоміра (Debugger – StopWatch) і обнулити його (Zero). Записати в табл. 3.1 вміст регістрів PORTD, HI, MID, LO та секундоміру Stopwatch з графи Time у мікросекундах. У подальшому виконувати програму до чергової точки зупинки (F9) і заповнювати рядки таблиці після кожної зупинки.

13.Наближено розрахувати час виконання підпрограми затримки. Наприклад, для варіанта COD = 1:

Частота тактового генератора f = 3.6864 МГц.

Період тактового сигналу Тп = 1 / Тп = 1 / 3.6864 МГц = 0,27127 мкс. Час виконання команд без переходів і пропусків становить 4 такти

Тк = 4·0,27127 мкс = 1,085 мкс.

Команди з переходами виконуються вдвічі довше (2,170 мкс).

Час виконання команд тіла внутрішнього циклу (decfsz

LO,f та goto SEC3) становить Ттв = 1,085

+2,170 = 3,255 мкс.

 

 

 

 

 

 

 

Час виконання внутрішнього циклу

 

 

 

 

 

 

Твн = 11·COD·Ттв = 11·1·3,255 = 35,8 мкс.

 

 

 

 

Час виконання середнього циклу

 

 

 

 

 

 

Тс = 46·Твн = 46·35,8 = 1646,8 мкс.

 

 

 

 

 

 

Час виконання зовнішнього циклу (всієї підпрограми затримки)

Тз = 42·Тс = 42·1646,8 = 69166 мкс = 0,069166 с.

 

 

 

 

 

 

22.1. Результати аналізу програми

Команда, на якій

Вміст регістрів у 16-й системі

Час за віртуальним

 

 

здійснено зупинку

PORTD

HI

MID

 

LO

секундоміром, мкс

 

 

call SEC

0x01

0x00

0x00

 

0x00

0

 

 

goto SEC3

0x01

0x2E

0x2E

 

0x0A

10

 

 

goto SEC3

0x01

0x2A

0x2E

 

0x09

13

 

 

goto SEC3

0x01

0x2A

0x2E

 

0x08

16

 

 

goto SEC3

0x01

0x2A

0x2E

 

0x07

20

 

 

Зняти точку зупинки з команди goto SEC3 (зняття здійснюється так само, як і її встановлення) та продовжити виконання програми (F9)

goto SEC2

0x01

0x00

0x00

0x00

 

44

goto SEC2

0x01

0x2A

0x2D

0x00

 

85

goto SEC2

0x01

0x2A

0x2C

0x00

 

125

goto SEC2

0x01

0x2A

0x2B

0x00

 

165

 

Зняти

точку зупинки з команди goto SEC2

 

 

і продовжити виконання програми (F9)

 

goto SEC1

0x01

0x2A

0x2B

0x00

 

1853

goto SEC1

0x01

0x29

0x00

0x00

 

3704

goto SEC1

0x01

0x28

0x00

0x00

 

5556

goto SEC1

0x01

0x27

0x00

0x00

 

7407

Зняти точку зупинки з команди goto SEC1

3

і продовжити виконання програми (F9)

goto LOOP

0x01

0x00

0x00

0x00

77753

 

call SEC

0x02

0x00

0x00

0x00

77756=Tрс

 

goto LOOP

0x02

0x00

0x00

0x00

155509

 

call SEC

0x04

0x00

0x00

0x00

155512

 

goto LOOP

0x04

0x00

0x00

0x00

233265

 

call SEC

0x08

0x00

0x00

0x00

233268

 

14.З таблиці визначити час Tpc у момент першої зміни стану PORTD. Вважаючи точним час перемикання світлодіодів порта В за віртуальним секундоміром комп'ютера Трс, обчислити відносну похибку для розрахункового часу затримки Тз:

=11%

15.Приєднати програматор PICkit2 або PICkit3 до входу USB комп'ютера (до плати мікроконтролера він теж має бути приєднаний). Увімкнути живлення демоплати. У середовищі MPLAB обрати Debugger–Select Tool–PICkit 2 (або PICkit 3 – залежно від розташованого на робочому місці програматора). Якщо з'являється віконце з інформацією про небезпеку, що може статись, коли мікроконтролер розрахований на живлення 3,3 В, обрати OK. Прошити мікроконтролер,

натиснувши піктограму або в меню Debugger–Program. З комп'ютера виконати старт програми мікроконтролера або F9.

16.Візуально визначити час Твіз перемикання сусідніх світлодіодів, визначивши час значної кількості перемикань та поділивши цей час на їх кількість. Обчислити відносну похибку

17.Твіз=0.08

18.Похибка = 0,028 = 2,8%

=2,8%

ЗМІСТ ЗВІТУ Звіт має містити: назву та мету лабораторної роботи, скорочений порядок виконання

лабораторної роботи, блок-схему алгоритму, програму з коментарем, перелік імен регістрів спеціального призначення, що використовуються у досліджуваній програмі, формат та опис дії кожного виду команд, що вперше зустрічаються у дослідженій програмі мікроконтролера, таблицю та результати розрахунків, відповіді на контрольні запитання.

КОНТРОЛЬНІ ЗАПИТАННЯ

1.Як створюються затримки часу?

2.Як виконуються команди call k і return?

3.Як створити звичайний цикл?

4.Як скласти вкладені цикли?

5.Як встановити точку зупинки на заданій команді?

6.Як у середовищі MРLAB можна визначати точний час виконання програми або її фрагментів?

7.Які недоліки програмної затримки часу?

4

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