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

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

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

Лабораторна робота № 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.

1

При цьому інформація на виходах 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) з’явиться ім’я створеного файлу.

2

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

Microchip.

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

;********************************************************* ; Лабораторна робота № 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

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

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

 

3

;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 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:

 

 

 

OUTTER:

 

 

 

 

MOVLW

.102

 

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

MOVWF

LOOP2

 

 

INNER:

 

 

 

 

movlw

d'15'

 

 

movwf

LOOP0

 

 

ININNER:

 

 

 

 

DECFSZ

LOOP0,F

 

4

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

;

btfssSTATUS,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

 

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

int:

retfie

 

 

 

 

END

5

У програмі застосовуються такі види команд:

Команда

Коментар

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.

6

Далі виконувати програму 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

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 ?

7

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

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

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

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

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

8

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