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

мпт 07 6 16 Скудря

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

Лабораторна робота № 7 Виведення цифрової інформації на семисегментні індикатори

Мета роботи: вивчити способи налагодження систем на базі РІС-контролерів, засвоїти методи виведення інформації на семисегментні індикатори за допомогою регістрів зсуву

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

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

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

Щоб виправити подібні помилки, використовують пристрої, які називають емулятори. Вони дозволяють спільно налагодити апаратне та програмне забезпечення реальної мікроконтролерної системи. Але емулятор дорого коштує. Схожими за призначенням та значно дешевшими з є налагоджувачі-програматори MPLAB-ICD (In-Circuit Debugger), PICKIT 2, PICKIT 3. Ці пристрої є програматорами і водночас внутрішньосхемними налагоджувачем.

PICKIT 2, PICKIT 3 забезпечують:

виконання коду в реальному масштабі часу;

покрокове виконання коду

точки зупинки;

внутрішньосхемне налагодження;

вбудоване програмування;

роботу від джерела живлення налагоджуваної системи;

Часто при створенні мікроконтролерних систем управління і контролю необхідно передбачати виведення інформації на індикатори.

Типові схеми спряження мікроконтролерів з індикаторами використовують велику кількість зовнішніх виводів. Навіть для малопровідної динамічної індикації потрібно використати n + 8 виводів мікроконтролера, де n – кількість відображуваних цифр.

Раціональніше використовувати послідовну передачу інформації за двопровідною схемою з використанням регістрів зсуву (рис. 7.1). У такому випадку незалежно від кількості індикаторів потрібно використати два виводи мікроконтролера: один – для передачі даних (RC5), другий – для передачі сигналу синхронізації (RC3). Іще один вивід використовується лише для скидання регістрів

(RA2).

Алгоритм передачі інформації такий: у циклі, що повторюється 8·n разів (для двох індикаторів 16 разів), здійснюється послідовне в часі виведення бітів семисегментних кодів цифр на вивід RC5. Як тільки черговий біт з'являється на RC5, мікроконтролер виводить тактовий імпульс на RC3.

При цьому інформація на виходах 0-7 регістрів зсувається вниз, а біт з виходу RC5 запам'ятовується на виході 0 верхнього регістра. Після завершення циклу коди регістрів лишаються незмінними до наступного подібного циклу. А на індикаторах через обмежувальні опори засвічуються сегменти потрібних цифр.

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

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

.

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

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

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

Текст програми:

1

;********************************************************* ; Лабораторна робота № 7 ;Індикація чисел на семисегментних індикаторах

;*********************************************************

list p=16f877 ; директива задає тип процесора

#include <p16f877.inc> ;включення файлу стандартних імен

__CONFIG _WDT_OFF & _BODEN_OFF & _XT_OSC & _LVP_OFF & _DEBUG_ON

Br

equ 16

;тут замість БР вставити номер своєї бригади

 

CBLOCK

20H

;директива задає блок регістрів

 

T_C

; буфер даних для відображення

 

_N

 

; Змінна для установки затримок

 

LOOP3

; Змінні

 

LOOP2

 

; для

 

LOOP1

; підпрограм

 

LOOP0

; затримок

 

LSD

 

; Молодша цифра числа

 

MSD

 

; Старша цифра числа

 

L7

 

;7-сегментний код молодшої цифри

 

M7

 

;7-сегментний код старшої цифри

 

ENDC

 

 

;****************************************************** ; Основна програма

;******************************************************

ORG 000H

 

nop

 

 

goto main

 

org

4

 

goto

int

 

main:

 

 

clrf

PORTA

; Обнулити порт А

2

 

bsf

PORTA,2

 

;відмінити скидання регістрів зсуву

 

clrf

PORTC

 

 

 

 

clrf

PORTD

 

 

 

 

bsf

STATUS,RP0

 

; банк пам'яті 1

;111111111111111111111111111111

 

movlw b'11111011'

; Встановити порт А на введення,

 

movwf TRISA

 

; лише біт 2 на виведення

 

movlw b'11010101'

; Встановити RC5, RC3, RC1 на

 

movwf TRISC

 

;виведення, інші - на введення

 

clrf

 

TRISD

 

;PORTD – на виведення

 

bcf

STATUS,RP0

 

; банк пам'яті 0

;00000000000000000000000000000000000

main_0: movlw

d'100'

 

 

MOVWF

 

T_C

 

 

;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

main_1:

 

 

 

 

 

movlw Br ;тут складіть фрагмент, що від вмісту комірки Т_С

 

subwf T_C,f

;віднімає ваш номер за списком. Результат в Т_С

;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

 

btfss STATUS,C

;якщо > 0, пропустити

 

goto main_0

;інакше, - знову почати з більшого числа

 

call

BINBCD

; перетворення BIN=(Т_С) у BCD=(MSD, LSD)

 

call

BCD_7

;перетв. BCD-коду у код індикаторів

disp:

CALL

DISPLAY

; Результат - на індикацію

;-----------------------------------------------

 

movlw

4

 

;затримка на 1 с

 

movwf LOOP3

 

;

 

 

call

DELAY

 

; затримка 250 мс

 

decfsz

LOOP3,f

;

 

goto

main_1

 

;повторити для наступного числа

;-----------------------------------------------

;п/п зсуву регістрів M7, L7 молодшими розрядами

;в 2 регістри зсуву

 

 

DISPLAY:

 

 

 

 

 

movlw d'16' ;лічильник в _N

 

movwf _N

 

 

 

NastBit: rrf

M7,f

 

;зсув вправо пари регістрів M7, L7

 

rrf

L7,f

 

 

 

 

bcf

PORTC,5

;

 

 

btfsc STATUS,C

;якщо висунутий біт=0, RC5=0,

 

bsf

PORTC,5

 

; інакше - RC5=1

;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

 

bsf PORTC,3

 

;тут складіть фрагмент, що формує

 

bcf PORTC,3

 

;тактовий імпульс у біті 3 порта С

;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

 

decfsz

_N,f

 

;лічильник - 1, і пропустити, якщо 0

 

goto

NastBit

 

;зсув повторюється 16 разів

 

return

 

 

 

;---------------------------------------

DELAY:

 

 

 

 

 

MOVLW

 

.250

 

; Затримка 250 мс

 

MOVWF

 

LOOP1

 

 

DELAY_N_MS:

 

 

 

3

OUTTER:

 

 

 

MOVLW

 

.102

; Затримка 1 мс

MOVWF

 

LOOP2

 

INNER:

 

 

 

movlw d'15'

 

movwf LOOP0

 

ININNER:

 

 

 

DECFSZ

LOOP0,F

 

goto

ININNER

 

DECFSZ

LOOP2, F

 

GOTO

INNER

 

DECFSZ

LOOP1, F

 

GOTO

OUTTER

 

RETURN ;********************************************

;Стандартні процедури роботи з дисплеєм

;********************************************

;коментар до цієї підпрограми написати самостійно

BINBCD:

CLRF

MSD

;

MOVF

T_C,w

;

MOVWF LSD

;

GTENTH:

 

 

movlw d'10' ;

 

subwf LSD,W ;

 

btfss STATUS,C

;

 

 

;

 

 

;

retlw 0

;

 

 

;

movwf LSD

;

incf

MSD,F

;

goto

GTENTH

;

;------------------------------------

;п/п перетворення BCD (MSD, LSD)

;в 7-сегментні коди двох цифр (M7, L7)

BCD_7:

movf

MSD,W

 

call

tab7s

;п/п перетв. цифри (W) в 7-сегментний код

movwf M7

;7-сегм. код старшої цифри – в M7

movf

LSD,W

 

 

call

tab7s

 

 

movwf L7

;7-сегм. код молодшої цифри – в L7

return

 

 

;------------------------------------

tab7s:

addwf PCL,f ;п/п перетвор. цифри (W)=0..9

;сегменти:

 

abcdefgh

; у 7-сегментний код в W

 

 

retlw b'11111100'

;0

retlw b'01100000'

;1

retlw b'11011010'

;2

retlw b'11110010'

;3

retlw b'01100110'

;4

retlw b'10110110'

;5

retlw b'10111110'

;6

retlw b'11100000'

;7

retlw b'11111110'

;8

retlw b'11110110'

;9

;*************************************************

4

int:

retfie

 

 

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)

goto

k

;безумовний перехід на адресу k

clrw

 

;очистити робочий регістр W

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

 

 

 

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

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

7.Якщо з'явилось повідомлення про помилки (error), слід, ознайомившись з поясненням змісту помилки, натиснути мишею на цей рядок вікна Output. MPLAB зробить активним той рядок у тексті програми, де, ймовірно, зроблено помилку. Слід виправити її і далі так само й інші помилки. Потім повернутись до п. 5, поки не буде видано повідомлення "Build completed successfully" (Компіляцію завершено успішно). При цьому створюється файл з тим же ім'ям і розширенням .hex.

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

9.Створити вікно спостереження (View – Watch) Занести до нього імена регістрів Т_С, MSD, LSD, M7, L7. Натиснути правою кнопкою мишки на Value і в контекстному меню обрати Binary. Розширити вікно Watch, щоб бачити двійкові значення.

10.Встановити точки зупинки, зробивши подвійний клік на командах:

 

call

BINBCD

; перетворення BIN=(Т_С) у BCD=(MSD, LSD)

 

call

BCD_7

;перетв. BCD-коду у код індикаторів

disp:

call

DISPLAY

; Результат - на індикацію

11.Виконати програму F9 до точки зупинки. Занести в таблицю 7.1 стан регістрів T_C, MSD, LSD в десятковій системі, а M7, L7 – у двійковій. Іще двічі виконувати програму F9, записуючи дані

 

після кожної зупинки. Подвійним кліком

зняти точки зупинки

з команд

call BINBCD та

 

call BCD_7. Далі

виконувати

програму F9

і записувати вміст

регістрів,

поки не з’ясуєте

 

закономірності в даних.

 

 

 

 

 

 

 

12. Визначте, яке найменше число виведеться на індикатор. Запишіть його. Число 9

 

 

 

 

Таблиця 7.1 – Результати експериментальних досліджень

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Вміст регістрів

 

 

 

 

 

T_C

 

MSD

 

LSD

 

M7

 

 

L7

 

 

 

decimal

 

decimal

 

decimal

 

binary

 

binary

 

 

1

87

 

0

 

0

 

00000000

 

00000000

 

 

2

87

 

8

 

7

 

00000000

 

00000000

 

 

3

87

 

8

 

7

 

11100110

 

11100110

 

 

 

 

 

Подвійним кліком зняти точки зупинки з команд

 

 

 

 

 

 

 

 

call BINBCD

та call BCD_7

 

 

 

 

4

74

 

7

 

4

 

11100110

 

11010011

 

5

5

61

6

1

10101110

10011110

6

48

4

8

10000110

11010100

7

35

3

5

11100101

11100111

8

22

2

2

10101110

10010101

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

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

14.З комп'ютера виконати старт програми мікроконтролера або F9.

Програма виводить на цифровий індикатор визначену послідовність чисел. У разі відхилення фактичного виконання програми від передбаченого виявити та усунути причину помилки.

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

лабораторної роботи, програму з коментарем, заповнену таблицю 7.1, копію екрану MPLAB після першої та останньої зупинки в режимі симуляції.

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

1.Які недоліки має симулятор MPLAB ?

2.Які основні можливості налагоджувача ?

3.Які є способи приєднання семисегментних індикаторів до мікроконтролерів?

4.Які переваги і недоліки приєднання семисегментних індикаторів до мікроконтролерів за допомогою регістрів зсуву ?

5.Які основні етапи перетворення двійкового числа на семисегментний код відповідних десяткових цифр ?

6.Що потрібно змінити у дослідженій програмі, щоб числа на індикаторі з'являлись вдвічі швидше, щоб числа змінювались з вдвічі більшим кроком ?

6

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