Міністерство Освіти та Науки України
Національний університет „Львівська політехніка”
Інститут Комп’ютерних технологій та автоматики
кафедра ЕОМ
КУРСОВА РОБОТА
з курсу «Мікропроцесорні системи»
на тему: «Проектування мікрокомп’ютера
на базі мікропроцесора РІС12С508А»
ЛЬВІВ 2005
ЗМІСТ
Вступ
4
1. Початковi данi на проектування.
5
2. Архітектура.
6
2.1 Синхронізація виконання програм
9
2.2 Конвеєрна вибірка та виконання команд
10
3. Організація пам’яті
11
3.1 Організація пам’яті програм
11
3.2 Організація пам’яті даних
11
3.2.1 Регістри загального призначення
12
3.2.2 Регістри спеціального призначення
12
3.3 Регістр STATUS
12
3.4 Регістр OPTION
14
3.5 Регістр OSCCAL
15
3.6 Лічильник команд PC
15
3.6.1 Ефект скиду
15
3.7 Стек
16
3.8 Непряма адресація, регістри INDF та FSR
17
4. Порт вводу/виводу
18
4.1 Регістр GPIO
18
4.2 Регістр TRIS
18
4.3 Робота каналу порту вводу/виводу
19
4.4 Програмування порту вводу/виводу
19
4.4.1 Двонаправлений порт вводу/виводу
19
4.4.2 Послідовність операцій з портами вводу/виводу
19
5. Модуль таймера TMR0
20
5.1 Використання зовнішнього джерела тактового сигналу для TMR0
20
5.1.1 Синхронізація зовнішнього сигналу
20
5.1.2 Затримка приросту TMR0
20
5.1.3 Взаємодія регістрів OPTION та TRIS
20
5.2 Подільник
21
5.2.1 Переключення подільника
21
6. Робота з периферійною EEPROM пам’яттю даних
23
6.0.1 Послідовна передача даних
23
6.0.2 Лінія синхронізації
25
6.1 Характеристика шини
25
6.1.1 Умова вільної шини
25
6.1.2 Умова початку передачі даних (START)
25
6.1.3 Умова завершення передачі даних (STOP)
26
6.1.4 Вимоги до передачі даних по шині
26
6.1.5 Підтвердження
26
6.2 Адресація пристрою
26
6.3 Операція запису
27
6.3.1 Запис байту
27
6.4 Підтвердження запису
28
6.5 Операція читання
28
6.5.1 Читання з поточної адреси
29
6.5.2 Читання з потрібної адреси
29
6.5.3 Послідовне читання
29
7. Спеціальні можливості центрального процесора
31
7.1 Біти конфігурації
31
7.1.1 Слово конфігурації для PIC12C508a
32
7.2 Конфігурації генераторів
32
7.2.1 Типи генераторів
32
7.2.2 Кристалічний генератор чи керамічний резонатор
32
7.2.3 Зовнішній кристалічний генератор
33
7.2.4 Зовнішній RC генератор
33
7.2.5 Внутрішній 4МГц RC генератор
34
7.3 Скид
34
7.4 Сторожовий таймер (Watchdog Timer)
35
7.5 Режим SLEEP
35
7.5.1 Пробудження з режиму SLEEP
35
7.6 Програмна перевірка та захист коду
36
7.7 Місця розташування ідентифікаторів (ID)
36
7.8 Послідовне програмування
36
8. Резюме системи команд
37
8.1 Загальні формати для команд
38
8.2 Опис інструкцій
38
9. Електричні характеристики
41
9.1 Часові діаграми і специфікації
41
10. Опис проекту мікрокомп’ютера
43
10.1. Формування зовнішніх пристроїв вводу/виводу
43
11. Використана лiтература та інші джерела
44
Додатки:
Додаток A. Програма ініціалізації
Додаток B. Упаковочна інформація
Додаток C. Схема електрична функціональна
Додаток D. Схема електрична принципова
Додаток E. Перелік елементів
Вступ
PIC12C508а – недорогий, 8-розрядний високоефективний мікроконтролер, який базується на EEPROM/EPROM/ROM CMOS технології. Ядро мікроконтролера має RISC архітектуру із 33 командами, які складаються з одного слова. Всі команди виконуються за один машинний цикл (1 мкс), за виключенням команд розгалуження, що виконуються за два цикли. PIC12C508а мають високу ефективність. Зручна та проста у вивченні система команд дозволяє скоротити час розробки пристрою.
Додаткові особливості PIC12C508а дозволяють зменшити вартість пристрою і вимоги до напруги живлення. Скид після зменшення напруги живлення (POR) і таймер скиду (DRT), звільняють від необхідності у зовнішній схемі скиду. Тактовий генератор мікроконтролера підтримує чотири режими, такі як INTRC – внутрішній RC генератор та LP режим генератора із пониженим енергоспоживанням. Режим енергозбереження SLEEP, сторожовий таймер та захист коду програми покращують надійність системи при зниженні вартості та енергоспоживання пристрою.
PIC12C508а має однократно програмовану пам’ять програм (OTP), що дозволяє знизити вартість мікроконтролера .
Для мікроконтролерів PIC12C508а розроблений повнофункціональний асемблер, симулятор, “С” компілятор та набір інструментальних засобів проектування.
1. Початкові дані на проектування
1. Тип мiкропроцесора - PIC12C508a
2. Постiйна пам’ять: - вбудована
3. Оперативна пам’ять: - вбудована
4. Пiдсистема вводу-виводу (периферійний пристрій): - МАХ232.
2. Архітектура
Висока ефективність мікроконтролерів PIC12C508а досягається за рахунок архітектури ядра, така архітектура застосовується в RISC мікропроцесорах. В PIC12C508а використана Гарвардська архітектура із розділеними шинами доступу до пам’яті програм і пам’яті даних.
Розділення пам’яті програм і пам’яті даних дозволяє використовуавти не 8-розрядні команди або кратні розрядності шини даних. Всі команди мікроконтролера 12-разрядні однослівні. По 12-розрядній шині доступу до пам’яті програм здійснюється вибірка коду за один машинний цикл. Неперервна робота ядра мікроконтролера по вибірці і виконанні кодів програми дає можливість виконувати всі команди за один машинний цикл (1мкс при 4МГц), крім команд галуження. Ядро мікроконтролерів підтримує 33 високоефективних команди.
Всі регістри спеціального призначення відображаються в пам’яті даних, включаючи лічильник команд. PIC12C508а має ортогональну систему команд, що дає можливість виконати довільну операцію з довільним регістром пам’яті даних, використовуючи довільний метод адресації. Це полегшує написання програм для мікроконтролера та зменшує час розробки пристрою. Мікроконтролер містить 8-разрядний АЛП (арифметико-логічний пристрій) із одним робочим регістром W. АЛП виконує арифметичні та булеві операції між робочим регістром і довільним регістром пам’яті даних. Основними операціями АЛП є: додавання, віднімання, зсув та логічні операції. В командах із двома операндами - один операнд завжди робочий регістр W, а другий операнд регістр пам’яті даних або константа. В командах з одним операндом використовується регістр W або регістр пам’яті даних.
8-розрядний робочий регістр W, який використовується в операціях, не відображається у пам’яті даних.
В залежності від виконуваної команди АЛП може впливати на наступні прапорці в регістрі STATUS: ознака переносу C, ознака півпереносу DC, ознака нуля Z. Прапорці C і DC виконують роль відповідних бітів позики при виконанні команди віднімання SUBWF.
Характеристика мікроконтролера:
високошвидкісна RISC архітектура
33 інструкції
всі команди виконуються за один цикл, окрім інструкцій переходу, які виконується за два цикли
тактова частота:
DC - 4 МГц, тактовий сигнал
ВС – 1 мкс, один машинний цикл
пам’ять програм EPROM 512x12
пам’ять даних RAM 25 байт
12-розрядні інструкції (команди)
8-розрядні дані
7 регістрів спеціального призначення
2-рівневий апаратний стек
прямий, непрямий та відносний режим адресації
внутрішній RS генератор 4 МГц із програмним калібруванням
програмування в готовому пристрої (використовуються два виводи мікро-контролера
Периферія:
8 - розрядний таймер/лічильник (ТMR0) з програмованим 8 – розрядним подільником
скидання по включенню живлення (POR)
таймер скидання (DRТ)
сторожовий таймер WDT з власним RС-генератором
програмований захист пам'яті програм
1000000 гарантованих циклів стирання/ запис EEPRОМ пам'яті даних
зберігання інформації в EEPRОМ пам'яті більше 40 років
режим енергозбереження SLЕЕР
вихід з режиму SLЕЕР за зміною вхідного сигналу на вивoді
внутрішні підтягаючі резистори на портах вводу/виводу
внутрішній підтягаючий резистор на виводі -MCLR
вибір режиму тактового генератора:
IMTRC: внутрішній RС генератор 4МГц
ЕХТRС : недорогий зовнішній RС генератор
ХТ: стандартний резонатор
LР: низькочастотний резонатор
СМОS технологія:
високошвидкісна, енергозберігаюча CMOS ЕРRОМ/RОМ технологія
повністю статична архітектура
широкий діапазон напруг живлення
широкий температурний діапазон:
- комерційний від 0‘С до +70‘С
- промисловий від -40‘С до +85‘С
- розширений від -40‘С до +125‘С
• мале енергоспоживання:
- < 2 мА при 5.0В, 4.0МГц
- 15мкА при 3.0В, 32кГц
- 15мкА при 3.0В, 32кГц
Рис.2.1. Розміщення виводів мікроконтролера PIC12C508a
Напруга живлення 3,0-5,5 В
Калібровка генератора 6 біт
Технологія виготовлення 0,7 мікронів
Рис.2.2 Структурна схема
Таблиця 2.1 Призначення виводів мікроконтролерa РIС12С508a
Позначення
виводу
№ виводу
DIP
№ виводу SOIC
Тип I/O/Р
Тип буфера
Опис
GРО
7
7
I/O
ТТL/SТ
Двонаправлений порт вводу/виводу даних при послідовному програмуванні. Може бути програмно включений підтягуючий резистор на вході. Вихід з режиму SLEEP при зміні рівня вхідного сигналу. В режимі послідовного програмування до входу підключений буфер з тригером Шмідта
GР1
6
6
I/O
ТТL/SТ
Двонаправлений порт вводу/виводу, вхід синхронізації при послідовному програмуванні. Може бути програмно включений підтягуючий резистор на вході. Вихід з режима SLEEP при зміні рівня вхідного сигнала. В режимі послідовного програмування до входу підключений буфер з тригером Шмідта
GР2/ТOСКI
5
5
I/O
ST
Двонаправлений порт вводу/виводу . Може використовуватись як вхіда ТОСКІ.
GРЗ/-МCLR/Vрр
4
4
I
ТТL/SТ
Вхідний порт, вхід скиду, вхід напруги програмування. Коли вивід настроєний як -МСLR, то низький рівень сигнала на вході скине мікроконтролер. Напруга на -МСLR/VPP не має перевищувати VDD в нормальному режимі роботи мікроконтролера. Може бути програмно включений підтягуючий резистор на вході. Вихід з режима SLEEP при зміні рівня вхідного сигнала. Підтягуючий резистор завжди підключений, якщо вивід настроєний як -МСLR. Вхідний буфер з тригером Шмідта, коли вивід настроєний як -МСLR.
GР4/ОSС2
3
3
I/O
ТТL
Двонаправлений порт вводу/виводу, вихід тактового генератора. До виводу підключаеться кварцевий або керамічний резонатор (тільки в ХТ і LР режимі, порт вводу/виводу в ін. режимах).
GР5/OSС1/СLКIN
2
2
I/O
ТТL/SТ
Двонаправлений порт вводу/виводу, вхід тактового генератора, вхід зовнішнього тактового сигнала (порт вводу/виводу тільки в INTRC режимі генератора, OSС1 в ін. режимах). До входу підключений буфер ТТЛ в режимі порта вводу/виводу, тригер Шмідта - в ЕХТRC режимі генератора.
VDD
1
1
Р
-
Додатня напруга живлення для внутрішньої логіки і портів вводу/виводу.
VSS
8
8
Р
-
Загальний вивід для внутрішньої логіки і портів вводу/виводу.
Позначення: I = вхід, О = вихід, І/0 = вхід/вихід, Р = живлення, - = не використовується, ТTL= вхідний буфер ТТЛ, SТ = вхід з тригером Шмідта.[3] 2.1 Синхронізація виконання програм Вхідний тактовий сигнал (вивід OSC1) внутрішньою схемою мікроконтролера розділяється на чотири послідовних такти Q1, Q2, Q3 і Q4. Внутрішній лічильник команд (PC) збільшується на одиницю в кожному такті Q1, а вибірка команди з пам’яті програм виконується на кожному такті Q4. Декодування та виконання команди відбувається з такту Q1 до Q4. На малюнку показані цикли виконання команд. Рис.2.1.1. Цикли виконання команд. 2.2 Конвеєрна вибірка та виконання команд Цикл виконання команди складається з чотирьох тактів Q1, Q2, Q3 і Q4. Вибірка наступної команди і виконання поточної суміщені в часі, таким чином, виконання команди відбувається за один цикл. Якщо команда змінює лічильник команд PC (команди галуження, наприклад GOTO), то необхідно два машинних цикли для виконання команди. Цикл вибірки команди починається зі зростання лічильника команд PC в такті Q1. В циклі виконання команди, код завантаженої команди, закидується у регістр команд IR у такті Q1. Декодування і виконання команди відбувається в тактах Q2, Q3 та Q4. Операнд з пам’яті даних читається в такті Q2, а результат виконання команди записується в такті Q4. . Рис.2.2.1 Вибірка і виконання команд
3. ОРГАНІЗАЦІЯ ПАМ’ЯТІ
В мікроконтролері є два види пам’яті: пам’ять програм і пам’ять даних.. За допомогою регістра непрямої адресації FSR можна дістати доступ до всього адресного простору пам’яті даних.
3.1 ОРГАНІЗАЦІЯ ПАМ’ЯТІ ПРОГРАМ
Мікроконтролер PIC12C508a має 12-розрядний лічильник команд PC, здатний адресувати 4К х 12 слів пам’яті програм. Фізично реалізовано тільки перші 512 х 12 (0000h-01FFh). На малюнку показана організація пам’яті програм мікроконтролера. Звернення до фізично не реалізованої пам’яті програм приведе до адресації реалізованої пам’яті 512 x 12. Адреса вектора скиду – 000h. За адресою 01FFh розміщена калібровочна константа для внутрішнього RC генератора. Калібровочна константа не повинна змінюватися при програмуванні мікроконтролера.
Рис.3.1.1 Організація пам’яті програм і стека
ОРГАНІЗАЦІЯ ПАМ’ЯТІ ДАНИХ
Пам’ять даних виконана у вигляді регістрів або комірок ОЗП і розділена на дві функціональні групи: регістри спеціального призначення і регістри загального призначення.
До складу регістрів спеціального призначення входить: регістр TMR0, лічильник команд (PC), регістр STATUS, регістр порту вводу/виводу, регістр адресу при непрямій адресації (FSR). Крім того, регістри спеціального призначення використовуються для керування конфігурацією портів вводу/виводу і параметрами подільника.
Регістри загального призначення застосовуються для зберігання даних і керуючої інформації при виконанні програми.
Мікроконтролер PIC12C508a має 7 регістрів спеціального призначення, 25 регістрів загального призначення.
3.2.1 РЕГІСТРИ ЗАГАЛЬНОГО ПРИЗНАЧЕННЯ
Звернутися до регістрів загального призначення можна за допомогою прямої або непрямої адресації.
Рис.3.2.1.1 Карта пам’яті даних PIC12C508A
3.2.2 РЕГІСТРИ СПЕЦІАЛЬНОГО ПРИЗНАЧЕННЯ
За допомогою регістрів спеціального призначення виконується керування функціями ядра і периферійними модулями мікроконтролера. В цьому розділі будуть описані регістри, які керують функціями ядра мікроконтролера.
Табл.3.2.2.1 Регістри спеціального призначення
3.3 РЕГІСТР STATUS
В регістрі STATUS знаходяться прапорці стану АЛП, прапорці причини скиду мікроконтролера і біт вибору сторінки пам’яті програм. Регістр STATUS може бути адресований довільною командою, як і будь-який інший регістр пам’яті даних. Якщо звернення до регістру STATUS виконується командою, котра діє на прапорці Z, DC і C, то зміна цих трьох бітів командою заблокована. Ці біти скидуються або встановлюються згідно логіки ядра мікроконтролера. Команди зміни регістра STATUS також не діють на біти -TO і -PD. Тому, результат виконання команди з регістром STATUS може відрізнятися від очікуваного. Наприклад, команда CLRF STATUS скине три старших біти і встановить біт Z (стан регістру STATUS після виконання команди 000uu1uu, де u - незмінний біт).
При зміні бітів регістра STATUS рекомендується використовувати команди (MOVWF, BCF і BSF), які не впливають на прапорці АЛП.
Рис.3.3.1 Регістр STATUS (адреса 03h)
R – читання біта
W– запис біта
U – не реалізоване, читається як 0
-n – значення після POR
-x – невідоме значення після POR
Біт 7: GPWUF: біт скиду GPIO
1= скид відбувся при виході з режиму SLEEP за зміною сигналу на вході
0= скид POR або інший вид скиду
Біт 6: Не реалізований, читається як 0
Біт 5: РА0: біт вибору сторінки пам’яті програм (довжина сторінки 512 слів)
1= сторінка 1 (200h-3FFh) – PIC12C509, PIC12C509A, PIC12CR509A, PIC12C519
0= сторінка 0 (000h-1FFh) - PIC12C5xx
Не рекомендується використовувати цей біт для зберігання даних в мікроконтролерах з однією сторінкою пам’яті програм. Це може ускладнити перенос програми на більш потужні мікроконтролери.
Біт 4: -ТО: Ознака переповнення сторожового таймера
1= після POR або виконання команд CLRWDT, SLEEP
0= після переповнення WDT
Біт 3: -PD: Ознака включення живлення
1= після POR або виконання команди CLRWDT
0= після виконання команди SLEEP
Біт 2: Z: Ознака нульового результату
1= нульовий результат виконання арифметичної або логічної операції
0= не нульовий результат виконання арифметичної або логічної операції
Біт 1: DC:Ознака десяткового переносу/позики (для команд ADDWF, SUBWF),
позика має інверсне значення
1= відбувся перенос від молодшого байта
0= не відбувся перенос від молодшого байта
Біт 0: С: Ознака переносу/позики (для команд ADDWF, SUBWF, RRF, RLF),
позика має інверсне значення
ADWF
1= відбувся перенос в cтарший байт
0= переносу не було
SUBWF
1= позики не було
0=відбулась позика старшого байту
RRF або RLF
Біт С завантажується старшим або молодшим бітом регістра, що зсувається
3.4 РЕГІСТР OPTION
Регістр OPTION доступний тільки для запису, зберігає біти керування подільником TMR0/WDT і таймером TMR0. Запис в регістр OPTION виконується виконанням команди OPTION (значення регістра W перезаписується в OPTION). При скиді мікроконтролера всі біти регістра OPTION встановлюються в '1'.
Рис.3.4.1 Регістр OPTION
Біт 7: -GPWU: Дозвіл на вихід з режима SLEEP за зміною сигналу на входах GP0,
GP1, GP3
1= заборона
0= дозвіл
Біт 6: -GPUU: Біт включенння підтягуючих резисторів на входах GP0, GP1, GP3
1= підтягуючі резистори виключені
0= підтягуючі резистори включені
Біт 5: TOCS: Вибір тактового сигналу для TMR0
1= зовнішній тактовий сигнал з виводу T0CKI
0= внутрішній тактовий сигнал FOSC/4
Біт 4: TOSE: Вибір фронта приросту TMR0 при зовнішньому тактовому сигналі
1= приріст по задньому фронту сигналу (з високого до низького рівня) на виводі TOCKI
0= приріст по передньому фронту сигналу (з низького до високого рівня) на виводі TOCKI
Біт 3: PSA: Вибір включення подільника
1= подільник включений перед WDT
0= подільник включений перед TMR0
Біти 2-0: Встановлення коефіцієнта ділення подільника
Значення
000
001
010
011
100
101
110
111
Для TMR0
1:2
1:4
1:8
1:16
1:32
1:64
1:128
1:256
Для WDT
1:1
1:2
1:4
1:8
1:16
1:32
1:64
1:128
3.5 РЕГІСТР OSCCAL
Регістр OSCCAL використовується для калібровки внутрішнього тактового RC генератора 4МГц. Це регістр має 6 калібровочних бітів. Збільшення значення, котре зберігається в регістрі OSCСAL, приведе до збільшення тактової частоти мікроконтролера.
Рис. 3.5.1. Регістр OSCCAL (адреса 05h)
Біти 7-2: СAL5:CAL0: Біти калібрування
Біти 1-0: Не реалізовані, читаються як „0”
3.6 ЛІЧИЛЬНИК КОМАНД PC
При виконанні команди в лічильнику команд PC буде присутня адреса інструкції, котра буде виконана наступною. Значення лічильника команд інкременується в кожному машинному циклі мікроконтролера, якщо виконувана команда не змінює значення PC.
При виконанні команди GOTO в молодші біти PC<8:0> завантажується 9-розрядний операнд команди, а в 9-й біт значення біта PA0 регістра STATUS<5>. Молодші біти лічильника команд PC<7:0> відображаються в регістрі PCL.
При виконанні команди CALL або будь-якої іншої команди, що змінює значення PC (наприклад, MOVWF PCL, ADDWF PCL, BSF PCL,5), операнд або результат команди записується в молодші біти PC<7:0>, біт PC<8> завжди рівний 0, а біт 9 завантажується значенням біта PA0 регістра STATUS<5>.
Рис. 3.6.1. Виконання команди GOTO Рис. 3.6.2. Виконання команди CALL або зміна PCL
3.6.1 ЕФЕКТ СКИДУ
Після скиду всі біти лічильника команд PC встановлені в '1', що означає адресацію останньої комірки в останній сторінці пам’яті програм, де знаходиться калібровочна інформація для внутрішнього тактового генератора. Після виконання команди MOVLW XX лічильник команд переповниться і перейде на адресу 000h.
Після скиду мікроконтролера біт управління сторінками пам’яті програм рівний нулю в регістрі STATUS. Це означає, що вибрана 0 сторінка пам’яті програм. Тому виконана відразу після скиду команда GOTO приведе до адресації 0 сторінки пам’яті програм, доки значення біта PA0 не буде змінено.
3.7 СТЕК
PIC12C508а має 2-рівневий 12-розрядний апаратний стек структури LIFO.
При виконанні команди CALL значення з комірки 1 стека переписується в комірку 2, а в комірку 1 записується поточне значення PC. Якщо було виконано більше двох команд CALL підряд, то в стеку зберігається тільки дві останніх адреси повернення з підпрограми.
При виконанні команди RETLW значення з комірки 1 стека буде завантажено в лічильник команд PC, а значення з комірки 2 переписується в комірку 1 стека. При виконанні більше двох команд RETLW підряд стек буде вміщувати адресу повернення, збережену в комірці 2. Зверніть увагу, що регістр W буде зберігати константу, вказану в команд. Ця команда особливо корисна для збереження таблиць даних в пам’яті програм мікроконтролера. Після будь-якого скиду мікроконтролера (крім POR) вмістиме стеку не змінюється.
3.8 НЕПРЯМА АДРЕСАЦІЯ, РЕГІСТРИ INDF ТА FSR
Для виконання непрямої адресації необхідно звернутися до фізично не реалізованого регістру INDF. Звернення до регістру INDF фактично викличе дію з регістром, адреса котрого вказана в FSR. Непряме читання регістра INDF (FSR=0) дасть результат 00h. Непрямий запис в регістр INDF не викличе ніяких дій (викликає дію на прапори АЛП в регістрі STATUS).
Приклад непрямої адресації:
. В регістрі з адресою 07h збережено значення 10h;
. В регістрі з адресою 08h збережено значення 0Ah;
. Завантажити в регістр FSR значення 07h;
. Читання регістра INDF поверне значення 10h;
. Інкременувати вмістиме регістра FSR на одиницю (FSR=08h);
. Читання регістра INDF поверне значення 0Ah.
FSR - 5-розрядний регістр, що дозволяє сумісно с регістром INDF адресувати всю пам’ять даних. Молодші біти регістру FSR<4:0> використовуються для звернення до пам’яті даних з адресами 00h-1Fh. В мікроконтролері PIC12C508a не реалізовааний поділ пам’яті даних на банки, тому, біти регістра FSR<7:5> не реалізовані і читаються як '1'.
ПОРТ ВВОДУ/ВИВОДУ
З регістром порту вводу/виводу можна виконати операції читання/запису, як і з будь-яким іншим регістром пам’яті даних. Читання регістра порту вводу/виводу (наприклад, MOVF GPIO,W) повертає стан каналів порту незалежно від значення бітів TRIS. При скиді мікроконтролера всі порти вводу/виводу настроюються на вхід так як всі біти регістра TRIS встановлюються в '1'.
4.1 РЕГІСТР GPIO
GPIO - 8-розрядний регістр порту вводу/виводу, в якому реально використовується тільки шість молодших бітів (GP5:GP0). Біти 7 і 6 не реалізовані і читаються як '0'. Канал GP3 працює тільки як вхід. Канали порту вводу/виводу можуть бути задіяні для реалізації інших функцій мікроконтролера. Читання цих каналів буде давати результат '0'. Виводи GP0, GP1 і GP3 мають керуючі резистори і можуть бути настроєні на виведення мікроконтролера з режиму SLEEP при зміні рівня вхідного сигналу. Якщо вивід GP3 використовується в якості входу скиду -MCLR, то резистор завжди включений, а функція виходу з режиму SLEEP заблокована.
4.2 РЕГІСТР TRIS
Регістр направлення каналів порту вводу/виводу завантажується значенням з регістра W при виконанні команди TRIS f. Запис ‘1’ в TRIS переводить відповідний вихідний буфер в 3-й стан. Запис ‘0’ в регістр TRIS визначає відповідний канал як вихід, вмістиме защіпки передається на вивід мікроконтролера. Виключенням є канал GP3, котрий може працювати тільки як вхід і GP2, що керує бітами регістра OPTION. При скиді мікроконтролера всі порти вводу/виводу настроюються на вхід, так як всі біти регістра TRIS встановлюються в '1'.
Рис.4.2.1. Структурна схема одного каналу порту
РОБОТА КАНАЛУ ПОРТУ ВВОДУ/ВИВОДУ
Всі канали, окрім GP3, можуть бути індивідуально настроєні на вхід або вихід. Всі канали порту вводу/виводу не мають вхідних защіпок. Вхідний сигнал повинен бути на вході доки виконується операція читання порту (наприклад, MOVF GPIO, W). Вихідні дані зберігаються в защіпці і залишаються незмінними, доки не будуть перезаписані. Щоб використати канал порту як вихід, необхідно скинути відповідний біт в регістрі TRIS. Для використання виводу як вхід потрібно відповідний біт в регістрі TRIS встановити в '1'.
Табл.4.3.1.Регістри і біти, пов’язані з роботою порту вводу/виводу
4.4 ПРОГРАМУВАННЯ ПОРТУ ВВОДУ/ВИВОДУ
4.4.1 ДВОНАПРАВЛЕНИЙ ПОРТ ВВОДУ/ВИВОДУ
Всі операції запису в порт виконуються по принципу "читання – модифікація - запис". Наприклад, команди BCF і BSF зчитують значення в регістр CPU, виконують бітову операцію и записують результат назад в регістр. Команда BSF GPIO,5 зчитує всі вісім бітів з GPIO в CPU, змінює стан біту 5 і записує результат в вихідні защіпки. Якщо другий двонаправлений канал GPIO (наприклад GP0) настроєний на вхід, то сигнал на виводі буде зчитаний в CPU і записаний в защіпку даних, поверх попереднього значення. Доки GP0 настроєний як вхід, ніяких проблем не виникає. Якщо GP0 буде пізніше настроєний як вихід, значення в защіпці даних може відрізнятись від очікуваного.
4.4.2 ПОСЛІДОВНІСТЬ ОПЕРАЦІЙ З ПОРТАМИ ВВОДУ/ВИВОДУ
Запис в порт вводу/виводу фактично відбувається в кінці машинного циклу, а читання даних виконується на початку циклу. Послідовність команд повинна бути такою, щоб встановилась напруга на виводі порту перш, ніж буде выконана команда читання стан виводів. Якщо можлива така ситуація, розділіть команди запису інструкціями NOP або іншими командами, котрі не звертаються до порту вводу/виводу.
Рис.4.4.2.1.Операції з портом вводу/виводу
МОДУЛЬ ТАЙМЕРА TMR0
TMR0 – таймер/лічильник, має наступні особливості:
. 8-розрядний таймер/лічильник;
. Можливість читання та запису поточного значення лічильника;
. 8-розрядний програмований подільник;
. Внутрішнє або зовнішнє джерело тактового сигналу;
. Вибір активного фронту зовнішнього тактового сигналу.
Блок схема модуля TMR0 показана на малюнку.
Коли біт T0CS скинутий в ‘0’ (OPTION<5>), TMR0 працює від внутрішнього тактового сигналу. Приріст лічильника TMR0 відбувається в кожному машинному циклі (якщо подільник виключений). Після запису в TMR0 приріст лічильника заборонено два наступних цикли. Користувач повинен відкоректувати цю затримку перед записом нового значення в TMR0.
Якщо біт T0CS встановлений в ‘1’ (OPTION<5>), TMR0 працює від зовнішнього джерела тактового сигналу із входу T0CKI. Активний фронт зовнішнього тактового сигналу вибирається бітом T0SE в регістрі OPTION<4> (T0SE=0 – активним являється передній фронт сигналу).
Подільник може бути включеним перед WDT або TMR0, в залежності від стану біта PSA в регістрі OPTION<3>. Якщо біт PSA скинутий в ‘0’, то подільник включений перед TMR0. Не можна прочитати або записати нове значення в подільник. Коли подільник включений перед TMR0, можна вибрати його коефіцієнт ділення 1:2, 1:4,…,1:256.
Рис.5.1 .Блок-схема таймера TMR0
Рис.5.2 Тимчасова діаграма роботи TMR0 від внутр. джерела тактового сигналу(подільник викл.)
Рис.5.3 Тимчасова діаграма роботи TMR0 від внутр. джерела тактового сигналу(подільник 1:2)
5.1 ВИКОРИСТАННЯ ЗОВНІШНЬОГО ДЖЕРЕЛА ТАКТОВОГО СИГНАЛУ ДЛЯ TMR0
При використанні зовнішнього тактового сигналу для TMR0 необхідно зважати на деякі особливості роботи таймера. Активний фронт зовнішнього тактового сигналу синхронізується із внутрішньою тактовою частотою мікроконтролера, із-за чого виникає затримка від отримання активного фронту сигналу до приросту TMR0.
5.1.1 СИНХРОНІЗАЦІЯ ЗОВНІШНЬОГО СИГНАЛУ
Якщо подільник не використовується, зовнішній тактовий сигнал поступає безпосередньо на синхронізатор. Синхронізація T0CKI із тактовим сигналом мікроконтролера ускладнюється з-за опитування виходу синхронізатора в машинні цикли Q2 і Q4. Тому тривалість високого або низького логічного рівня зовнішнього сигналу повинна бути не меншою 2TOSC (плюс невелика затримка внутрішнього RC кола 20нс).
Якщо подільник включений перед TMR0, то на вхід синхронізатора поступає сигнал із асинхронного подільника. Період сигналу T0CKI повинен бути не менший 4TOSC (плюс невелика затримка внутрішнього RC кола 40нс) ділене на коефіцієнт подільника. Високий та низький логічний рівень зовнішнього сигналу повинен бути не менший 10нс.
ЗАТРИМКА ПРИРОСТУ TMR0
Оскільки сигнал з виходу подільника синхронізується з внутрішнім тактовим сигналом мікроконтролера, виникає затримка від отримання активного фронту сигналу до приросту TMR0.
Рис.5.1.2.1 Тимчасова діаграма роботи TMR0 з зовнішнім джерелом тактового сигналу
5.1.3 ВЗАЄМОДІЯ РЕГІСТРІВ OPTION ТА TRIS
Якщо TMR0 настроєний в режимі зовнішнього джерела тактового сигналу, то канал GP2/T0CKI працює як вхід незалежно від стану біту TRIS<2>.
5.2 ПОДІЛЬНИК
8-розрядний лічильник може працювати як подільник TMR0 або вихідний дільник WDT. Для простоти опису цей лічильник завжди будемо називати "подільник". Використання подільника перед TMR0 означає, що WDT працює без подільника, і навпаки.
Коефіцієнт ділення подільника визначається бітами PSA і PS2:PS0 в регістрі OPTION<3:0>.
Якщо подільник включений перед TMR0, любі команди запису в TMR0 (наприклад, CLRF 1, MOVWF 1, BSF 1,x і т.д.) скидають подільник. Коли подільник підключений до WDT, команда CLRWDT скине подільник разом з WDT. Подільник також очищується при скиді мікроконтролера.
Рис.5.2.1 Структурна схема подільника
5.2.1 ПЕРЕКЛЮЧЕННЯ ПОДІЛЬНИКА
Переключення подільника виконується програмним способом, тобто переключення можна зробити під час виконання програми. В прикладі показана рекомендована послідовність інструкцій переключення подільника від TMR0 на WDT для запобігання несподіваного скиду мікроконтролера.
Переключення подільника з WDT на TMR0 показано в прикладі.
Приклад переключення подільника з TMR0 до WDT
CLRWDT ; Скинути WDT
CLRF TMR0 ; Скинути TMR0 і подільник
MOVLW b’00xx1111’ ; Три стрічки (2, 3. 4) повинні бути включені в
OPTION ; текст програми тільки, якщо біти
CLRWDT ; PS<2:0> рівні значенню 000 або 001
MOVLW b’00xx1xxx’ ; Переключити подільник на WDT,
OPTION ; вибирати коефіцієнт ділення
Приклад переключення подільника з WDT до TMR0
CLRWDT ; Скинути WDT і подільник
MOVLW b’xxxx0xxx’ ; Включити подільник перед TMR0 і
OPTION ; вибрати нове значення коефіцієнта ділення
6. РОБОТА З ПЕРИФЕРІЙНОЮ EEPROM ПАМ’ЯТТЮ ДАНИХ
Мікроконтролер має 16 байт енергонезалежної EEPROM пам’яті даних із 1000000 гарантованих циклів стирання/запис і часом зберігання даних не менше 40 років. EEPROM пам’ять даних працює по двонаправленій 2-х провідній шині даних з протоколом I2C. По одній лінії передаються дані (SDA), по другій тактовий сигнал (SCL). Лінії SDA, SCL під’єднані всередині мікроконтролера до EEPROM пам’яті і не мають зовнішніх виводів, як GP0-GP5. SDA, SCL відображаються на 6 і 7 біт регістра GPIO (адреса 06h). Для більшості додатків роботу з енергонезалежною пам’ятю даних можна звести до наступних основних функціям:
; Byte_write: Підпрограма запису байта
; Вхідні дані: Адрес EEPROM EEADDR
; Дані EEPROM EEDATA
; Вихідні дані: Якщо W=01, то запис виконаний
; Якщо W=00, то помилка
; Read_Current: Підпрограма читання байта по поточному адресу в EEPROM
; Вхідні дані: Немає
; Вихідні дані: Дані EEPROM EEDATA
; Якщо W=01, то читання виконано
; Якщо W=00, то помилка
; Read_Random: Підпрограма читання байту з вказаного адресу
; Вхідні дані: Адреса EEPROM EEADDR
; Вихідні дані: Дані EEPROM EEDATA
; Якщо W=01, то читання виконано
; Якщо W=00, то помилка
Необхідно перевіряти повернені коди підпрограмами і повторити операцію запису/читання у випадку виникнення помилки. Код помилки може бути отриманим коли в EEPROM пам’яті виконується цикл запису, довжина котрого рівна близько 4 мс.
6.0.1 ПОСЛІДОВНА ПЕРЕДАЧА ДАНИХ
SDA - двонаправлений вивід, назначений для передачі даних, адреси і прийому даних з EEPROM пам’яті.
При передачі даних змінити рівень сигналу на лінії SDA можна тільки коли на SCL низький логічний рівень. Зміна рівня сигналу на SDA в той час, коли на SCL високий логічний рівень використовується для формування на шині умов START і STOP.
Двопровідний інтерфейс зв’язку з EEPROM пам’ятю даних складається з лінії даних (SDA) і лінії тактового сигналу (SCL). Хоча ці лінії відображені в регістрі GPIO, вони не мають зовнішніх виводів, тільки підключені до внутрішньої EEPROM пам’яті. Робота з лініями SDA і SCL відрізняється від операції з каналами порту вводу/виводу GP0-GP5.
Виводи SCL і SDA завжди являються виходами, що не потребують зміни бітів TRIS кодом програми. Для читання даних з EEPROM пам’яті необхідно щоб на лінії SDA була присутня логічна 1 за рахунок резистора (на лінії SDA внутрішній резистор 100кОм).
SDA:
Внутрішній підтягуючий резистор 100кОм, підключений до VDD
Вихід з відкритим стоком
Завжди вихід
Після скиду на виході 1
SCL:
Повнофункціональний вихідний буфер КМОП
Завжди вихід
Після скиду на виході 1
Ресурси мікроконтролера, які використовуються програмою для роботи з EEPROM пам’ятю даних:
. Пам’ять програм: 77 слів
. Пам’ять даних: 5 байт
. Стек: 1 рівень (Тільки виклик підпрограми. В підпрограмі немає більше переходів на другі підпрограми)
. Час виконання:
- WRITE_BYTE - 328 циклів
- READ_CURRENT - 212 циклів
- READ_RANDOM - 416 циклів
. Порти вводу/виводу: 0 (Викор. не зовнішні канали порту вводу/виводу)
Код цієї програми повинен розміщуватися в нижній половині сторінки пам’яті програм. Малий розмір коду програми вдалось дістати за рахунок використання таблиці вираховуваних переходів на процедури. Для ефективного виконання переходів GOTO використовується команда ADDWF PCL,F, котра діє на 8 молодших розрядів лічильника команд PC, що потребує продовжити виконання програми в першій половині (256 слів) сторінки пам’яті програм.
Рис.6.0.1.1 Структурна схема виводу GPIO6 (лінія SDA)
Рис.6.0.1.2 Структурна схема виводу GPIO7 (лінія SCL)
6.0.2 ЛІНІЯ СИНХРОНІЗАЦІЇ
Вивід SCL використовується для синхронізації обміну даними з EEPROM пам’яттю даних.
6.1 ХАРАКТЕРИСТИКА ШИНИ
Повинен використовуватись наступний протокол шини для зверння до EEPROM пам’яті даних:
. Передача даних може бути ініціазлізована тільки коли шина вільна.
. Під час передачі даних сигнал на лінії SDA не повинен змінюватися доки на SCL високий логічний рівень сигналу.
. Зміна рівня сигналу на SDA, коли на SCL високий логічний рівень, буде інтерпретуватися як формування умови START або STOP.
6.1.1 УМОВА ВІЛЬНОЇ ШИНИ
Шина вільна, коли на виводах SCL і SDA високий логічний рівень сигналу.
6.1.2 УМОВА ПОЧАТКУ ПЕРЕДАЧІ ДАНИХ (START)
Перехід с високого до низького логічного рівня сигналу на лінії SDA, коли на SCL високий рівень сигналу, являється умовою START. Всім операціям на шині повинна попередньо формуватись умова START.
6.1.3 УМОВА ЗАВЕРШЕННЯ ПЕРЕДАЧІ ДАНИХ (STOP)
Перехід з низького до високого логічного рівня сигналу на лінії SDA, коли на SCL високий рівень сигналу, являється умовою STOP. Всі операції на шині повинні завершатися формуванням умови STOP.
6.1.4 ВИМОГИ ДО ПЕРЕДАЧІ ДАНИХ ПО ШИНІ
Після формування умови START на шині присутні достовірні дані, якщо рівень сигналі на лінії SDA не змінюється, коли на SCL високий логічний рівень. Зміна рівня сигналі на лінії SDA необхідно виконувати тільки при низькому логічному рівні на SCL. В одному такті синхронізації передається тільки один біт даних.
Кожний обмін інформацією по шині ініціалізується умовою START, а завершується формуванням умови STOP. Число байт що передаються між умовою START і STOP визначається користувачем і теоретично не обмежено.
6.1.5 ПІДТВЕРДЖЕННЯ
Кожний приймач на шині, якщо виконана умова адресації зобов’язаний генерувати біт підтвердження після прийому кожного байта. Відомий пристрій шини повинен генерувати доповняльний тактовий імпульс для формування біта підтвердження.
Рис.6.1.5.1 Часова діаграма обміну даними по послідовній шині
Рис.6.1.5.2 Часова діаграма підтвердження
6.2 АДРЕСАЦІЯ ПРИСТРОЮ
Після формування умови START шини передає управляючий байт, стану з адреси пристрою і біта читання/запису. Біт читання/запису визначає, яка операція повинна бути виконана на шині. Адреса відомого складається з 4-розрядного коду пристрою (1010), трьох біт, які можуть мати любе значення.
Останній біт управляючого байта визначає тип операції. Коли біт операції рівний 1, то буде виконуватися читання даних. Якщо біт операції рівний 0, то виконується операція запису. Шина постійно перевіряється на відповідність адреси відомого пристрою. Біт підтвердження генерується після отримання управляючого байта, якщо співпала адреса пристрою і не виконується внутрішній цикл запису.
Рис.6.2.1 Структура керуючого байта
6.3 ОПЕРАЦІЯ ЗАПИСУ
6.3.1 ЗАПИС БАЙТУ
Після формування умови START передається управляючий байт, стану з: 4 біти коду пристрою, 3 незначущих біти, біт операції R/W (в даному випадку R/W повинен бути рівний нулю). Ця послідовність вказує на то, що після отримання біту підтвердження (на дев’ятому такті сигналу синхронізації) буде переданий байт адреси комірки в EEPROM пам’яті, до которої буде виконуватися звернення. Тільки молодших чотири біти адреси приймають участь в адресації пам’яті, а старші чотири біти ігноруються. Передавши байт адреси необхідно прийняти підтвердження, після чого передається один байт збережених даних по вказаній адресі. EEPROM пам’ять знову формує біт підтвердження, а ведучий шини генерує умову STOP. Після формування умови STOP ініціалізується цикл запису. Під час циклу запису EEPROM пам’ять не буде генерувати біти підтвердження. Після операцяї запису адреса в EEPROM пам’яті не інкременується, вказуючи на комірку, в яку був виконаний запис.
Якщо сформована умова STOP до передачі всієї послідовності запису, то ніякі дані не будуть записані. Якщо передано більше 8 біт даних перед чим сформована умова STOP, то EEPROM пам’ять очистить попередньо завантажений байт і почне завантажувати дані знову. Якщо передано більше одного байта даних і умова STOP сформована скоріше ніж передані всі 8 біт останнього байта, то ніякі дані не будуть записані. Вбудована в EEPROM пам’ять схема забороняє операцію стирання/запис, якщо напруга живлення VDD нижче встановленого порогу.
Перед і після операції запису шина повинна знаходитися в не зайнятому стані (на SCL і SDA високий логічний рівень сигналу).
Рис.6.3.1.1 Запис байту
ПІДТВЕРДЖЕННЯ ЗАПИСУ
EEPROM пам’ять не буде генерувати біти підтвердження, коли виконується внутрішній цикл запису, що може використовуватися для рішення завершення циклу запису. Як тільки сформована умова STOP ініціалізується внутрішній цикл записуи. Опитування закінчення запису може бути почато негайно, включаючи формування умови START з передачею управляючого байта, в котрому біт R/W=0. Якщо виконується цикл запису, то підтвердження не буде отримано. Якщо підтвердження не було отримано, то умова START і управляючий байт повинні бути передані повторно. Після завершення циклу запису буде сформований біт підтвердження і ведучий може ініціювати нову операцію запису або читання.
Рис.6.4.1 Блок схема перевірки завершення циклу запису
6.5 ОПЕРАЦІЯ ЧИТАННЯ
Операція читання ініціалізується аналогічно запису, за виключенням того, що біт R/W=1. Існує три основних типи операції читання: читання з поточної адреси, читання з потрібної адреси і послідовне читання.
6.5.1 ЧИТАННЯ З ПОТОЧНОЇ АДРЕСИ
У внутрішньому лічильнику EEPROM пам’яті міститься адреса комірки, до котрої було виконано звернення останнього разу, збільшена на оди...