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

мпт лаб 5

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

Лабораторна робота № 5

Використання енергонезалежної пам'яті даних Мета роботи: засвоїти використання енергонезалежної пам'яті даних

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

Досягненням сучасних електронних технологій є EEPROM (Electrically Erasable Programmable Read-Only Memory) пам'ять даних, що зберігає інформацію при вимкнутому живленні. При цьому є можливість не тільки читати вміст EEPROM, а й записувати туди дані як при прошиванні, так і під час роботи контролера. У мікросхемах PIC16F877 вбудовано 256 байтів такого виду пам'яті.

Для роботи з EEPROM пам'яттю в мікроконтролерах PIC16FXXX використовуються регістри оперативної пам'яті:

 

 

EEDATA – регістр обміну даними з EEPROM пам'яттю;

 

 

 

 

EEADR – визначає адресу комірки EEPROM, до якої здійснюється звертання;

 

 

EECON1 – регістр керування обміном з EEPROM пам'яттю;

 

 

 

 

EECON2 – фізично відсутній регістр, що використовується виключно як

 

службовий при запису в EEPROM.

 

 

 

 

У регістрі EECON1 розміщені такі біти керування:

 

 

 

 

7

6

5

4

3

2

1

0

 

EE

X

 

X

X

WR

W

W

RD

 

PRD

 

 

 

 

ERR

REN

R

 

 

Біти 4-6 не використовуються;

біт 7 EEPRD – біт вибору роботи з EEPROM пам'яттю даних або з областю пам'яті програм: 1 – флеш пам'ять програм для запису/читання з неї даних,

0 – EEPROM пам'ять даних;

біт 3 WRERR – ознака помилки запису в EEPROM: 1 – запис попередньо перервано, 0 – запис завершено успішно;

біт 2 WREN – дозвіл запису даних в пам'ять програм та EEPROM: 1 – запис дозволений, 0 – запис заборонений;

біт 1 WR – біт керування записом в EEPROM:

1 – почати процес запису в пам'ять програм або EEPROM (встановлюється програмно, скидається тільки апаратно по завершенні запису),

0 – запис закінчено;

біт 0 RD – біт керування читанням з пам'яті програм або EEPROM:

1 – здійснити читання (встановлюється програмно, скидається тільки апаратно по завершенні читання),

0 – читання завершено.

Перед записом в EEPROM у регістр EEADR слід занести адресу потрібної комірки EEPROM, а в EEDATA – байт даних. Щоб не допустити випадковий запис у EEPROM передбачено здійснювати його після встановлення біта EEPRG = 0, WREN = 1 і послідовного надсилання в EECON2 коду h'55', потім h'AA' (що нагадує пароль, без якого запис не виконається). Далі слід встановити WR = 1. Починається запис в EEPROM, який триває 4-8 мс. По завершенні запису біт WR автоматично скидається в 0 (одночасно встановлюється прапорець переривання – біт EEIF = 1). Не можна починати запис нового байта поки WR = 1.

Читання з EEPROM пам'яті виконується простіше. В EEADR слід занести адресу комірки EEPROM, з якої треба отримати значення, і встановити в EECON1 біт RD = 1. Дані одразу після цього можуть бути використані з регістра EEDATA.

На рис. 5.1 зображено алгоритм програми, який передбачає опитування вимикачів RA0, RA1. Якщо включити на мить RA0, програма отримає з EEPROM задану кількість чисел, виконає підрахунок їх суми, обчислить середнє з округленням результату до цілого та запише його в EEPROM. Воно буде збережене і при вимкнутому живленні.

Якщо після подачі живлення ввімкнути на мить вимикач RA1, середнє значення, записане в EEPROM, читається в оперативну пам'ять, порівнюється з двійковим числом, попередньо набраним

1

вимикачами порту В. Якщо значення збігаються, засвітиться світлодіод RD3, якщо ні – RD1 (тоді треба знайти та виправити помилки).

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

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

.

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

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

4.Ввести текст програми. Зверніть увагу на те, що в мікроконтролері PIC16F877 регістри

EEDATA, EEADR розташовані в банку пам'яті 2, а EECON1, EECON2 – в банку 3. Регістр лічильника COUNT розташовано у "рентгенівській" області пам'яті 0x70…0x7F, до якої є доступ з будь-якого банку пам'яті.

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

LIST P=16F877

#INCLUDE "P16F877.INC"

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

__CONFIG _WDT_OFF & _BODEN_OFF & _XT_OSC & _LVP_OFF &_DEBUG_ON

HI

EQU

h'110' ;старший байт суми

LO

EQU

h'112' ;молодший

байт

суми

FIRST EQU

h'12' ;адреса початку

масиву даних в EEPROM

COUNT EQU

h'70'

;лічильник

в області рентгенівської пам'яті

_N

EQU

h'08'

;кількість

даних

 

org h'2100'+FIRST

;область EEPROM пам'яті

radix dec

;директива встановлення десяткової

;системи за замовчуванням

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

; далі у директиві DE (запис в EEPROM при програмуванні) ;ввести у десятковій системі 8 чисел

;розрахованих за формулами:

;для і=1...7 х(і)=2*і*№бригади - №групи, ;Примітка: якщо число перевищує 127, відкинути старшу цифру ;для і=8 х(8)=125 – 10*№бригади ;замінити наведені далі числа даними свого варіанту

;Приклад для варіанту 1:

;для і=1...7 х(і)=2*і*№бригади - №групи = 2*і*1–6 =2*і–6

;х(1)=2*1*1–6=-4 ;х(2)=2*2*1–6=-2 ;х(3)=2*3*1–6=0

;х(4)=2*4*1–6=2

2

;х(5)=2*5*1–6=4 ;х(6)=2*6*1–6=6 ;х(7)=2*7*1–6=8 ;х(8)=125–10*1=115

;сума масиву S = -4-2+0+2+4+6+8+115=129 ;середнє M = 129/8 = 16,125

;заокруглене середнє A = 16 = h'10' = b'00010000'

;У директиві DE занести в десятковій системі дані,

;розраховані за власним варіантом

DE -4,-2,0,2,4,6,8,115 ;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

radix hex

;далі шістнадцяткова система за

 

 

 

; замовчуванням

org

h'000' ;Після включення живлення і скидання(РС)=0

nop

 

 

 

 

 

clrf

 

PORTA

;очистити порт А

clrf

PORTD

 

 

 

 

bsf

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

;111111111111111111111111111111111111111

movlw b'11100011'

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

movwf TRISA

 

; крім RA2, RA3, RA4

movlw b'11111111' ;PORTB -

movwf TRISB

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

clrf

 

TRISD ;PORTD – режим виведення

movlw b'10000110'

;

 

movwf ADCON1

 

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

bcf

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

;000000000000000000000000000000000000000

Main:

 

 

 

 

 

bsf

PORTA,4

 

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

bcf

PORTA,4

 

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

OPYTTUMB: btfsc

PORTA, 1 ;якщо RA1 = 0, пропустити команду

goto

 

PEREVREZ

 

;інакше перейти на мітку PEREVREZ

btfss PORTA, 0

;якщо RA0 = 0, пропустити команду

goto

 

OPYTTUMB

 

;інакше – повторити опитування

bsf

 

STATUS, RP1

; Обрати банк регістрів 2

;2222222222222222222222222222222222222222

clrf

 

LO

 

;очищення

clrf

 

HI

 

;накопичувача суми

movlw _N

 

;кількість елементів масиву -

movwf COUNT

;в лічильник COUNT

movlw FIRST

;адреса першого

movwf EEADR

; доданка - в EEADR

Next: bsf

 

STATUS, RP0

bsf

 

STATUS, RP0

;банк регістрів 3

;33333333333333333333333333333333333333

bsf

 

EECON1, RD ;команда читання з EEPROM

bcf

 

STATUS, RP0

;банк регістрів 2

;22222222222222222222222222222222222222

movf

 

EEDATA, w

 

;отримане число – в W

addwf LO, f

;\ Накопичення

3

clrw

 

 

 

 

 

 

btfsc EEDATA, 7

 

 

 

 

movlw h'FF'

 

 

 

 

 

btfsc STATUS, C

;\

 

 

 

incf

 

HI, f ;\ суми в HI:LO

 

addwf HI,f

 

 

 

 

 

incf

EEADR, f ;перейти до наступної комірки EEPROM

decfsz

COUNT, f

;якщо додано всі дані, пропустити

goto

 

Next

;інакше – перейти до наступного доданка

rrf

HI, f

 

;/ Зсув суми в HI:LO

rrf

LO, f

 

;/

 

 

 

rrf

HI, f

 

;/ на 3 розряди вправо

rrf

LO, f

 

;/

 

 

 

rrf

HI, f

 

;/

 

 

 

rrf

LO, f

 

;/ (тобто ділення на 8)

btfsc STATUS, C

 

 

;округлення

incf

LO, f

 

 

 

;до цілого

movf

LO, W

 

 

;підготовка

movwf EEDATA

 

;до запису

 

bsf

 

STATUS, RP0

;банк регістрів 3

;33333333333333333333333333333333333333

bsf

EECON1, WREN

 

;

 

bcf

INTCON, GIE

 

;середнього

movlw h'55'

 

;

 

 

 

movwf EECON2

 

; значення

 

movlw h'AA'

 

;

 

 

 

movwf EECON2

 

;в EEPROM

 

bsf

EECON1, WR ;команда запису в EEPROM

bsf

INTCON, GIE ; глобальний дозвіл переривань

bcf

STATUS, RP1

 

 

 

bcf

STATUS, RP0

; Обрати банк регістрів 0

;00000000000000000000000000000000000000

bsf

PORTD,2

;сигналізація запису в EEPROM

Stop2: goto

Stop2

 

; зациклення

PEREVREZ: bsf

STATUS, RP1

; Обрати банк регістрів 2

;22222222222222222222222222222222222222

movlw FIRST + _N

;/адресу розміщення середнього

movwf EEADR

;/в EEPROM занести в EEADR

bsf

STATUS, RP0

; Обрати банк регістрів 3

;33333333333333333333333333333333333333

bsf

EECON1, RD ;команда читання з EEPROM

bcf

STATUS, RP0

; Обрати банк регістрів 2

;22222222222222222222222222222222222222

movf

EEDATA, w

 

 

;отримане значення – в W

bcf

STATUS, RP1

; Обрати банк регістрів 0

;00000000000000000000000000000000000000

xorwf PORTB, w

;порівняння коду вимикачів з W

btfss STATUS, Z

;якщо вони однакові, пропустити

goto

false

;якщо ні - перейти до сигналізації помилки

true: bsf

PORTD, 3

;сигнал про вірний результат

Stop3: goto

Stop3

 

; зациклення

false: bsf

PORTD, 1

; сигнал про помилку

Stop1: goto

Stop1

 

; зациклення

end

4

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

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

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

8.Розрахувати в зошиті суму масиву, заданого в директиві DE, його середнє значення, заокруглити середнє до найближчого цілого і перевести його у шістнадцяткову систему.

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

10.Створити вікно спостереження (View – Watch) Занести до нього імена зовнішніх портів PORTA, PORTB, PORTD.

11.Відкрити вікно імітації зовнішніх пристроїв (меню: Debugger – Stimulus – New Workbook). У закладці Asynch у колонці Pin/ SFR додати імена зовнішніх пінів портів PORTA: RA0, RA1. Для кожного з них у стовпчику Action задати початковий стан Set Low, натискаючи при цьому у стовпчику Fire на відповідний символ «>» – виконати. У закладці Pin / Register Actions натиснути на підказку Click here to Add Signal. У новому вікні зліва вибрати ім’я PORTB, натиснути кнопку Add => – OK. У вікні Stimulus з’явився стовпчик PORTB, нижче в ньому ввести у шістнадцятковій системі розраховане середнє значення масиву і в цьому ж рядку стовпчика Time вказати 0. Натиснути внизу вікна кнопку Apply.

12.Виконати симуляцію проєкту F9. Задати у закладці Async вікна Stimulus стан RА0 =

Set High – «>». Зупинити програму: Debugger – Halt (F5 або іконка ). У PORTD біт 2 став дорівнювати «1». Це сигналізує, що програма прочитала масив чисел з EEPROM, порахувала середнє, заокруглила та занесла його в EEPROM.

13.Скинути на початок F6. Задати у закладці Async стан RА0 = Set Low – «>», RA1 = Set High – «>». Знову виконати проєкт F9 та зупинити F5. Якщо у вікні Watch у PORTD біт 3 = 1, розрахункове значення збіглося з отриманим мікроконтролером. Якщо ж одиниця встановилась у біті 1 PORTD, це означає, що зроблено помилку. Потрібно перевірити власні розрахунки, текст програми, виправити помилки і повторити дії п.п. 6-13.

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

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

виконати старт програми мікроконтролера або F9. На мить увімкнути вимикач RA0. Має засвітитись світлодіод RD2. Це свідчить, що елементи масиву по черзі читались з EEPROM у оперативну пам'ять, пораховано їх середнє, заокруглене значення та записано в EEPROM.

15. Скинути програму на початок і знову виконати старт програми F9. Вимикачами RB7…RB0 встановити двійковий код середнього значення. На мить увімкнути вимикач RA1. Виконається частина програми, що порівнює середнє значення, записане в EEPROM, з набраним вимикачами порту B. Якщо воно збігаються, світиться світлодіод RD3. Якщо ж була допущена помилка, горить світлодіод RD1. Тоді слід її виправити, виконати компіляцію, прошивку та повторити експеримент.

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

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

5

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

1.Які особливості EEPROM пам'яті?

2.Які регістри спеціального призначення необхідно використати при обміні даними з

EEPROM ?

3.У чому особливості запису даних в EEPROM ?

4.Як виконати читання даних з EEPROM ?

5.Як створюються цикли ?

6.В якому банку знаходяться регістри, що обслуговують обмін з EEPROM пам'яттю?

6

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