Міністерство освіти і науки України
НУ “ Львівська політехніка “
ІКТА
Кафедра ЕОМ
з дисципліни „Мікропроцесорні системи”
на тему:
“Проектування мікрокомп’ютера”
Львів 2004
Зміст
1.
Вступ...................................................... 4
2.
Основні характеристики RISC процесора...................... 5
Основні особливості................................... 5
Периферійні можливості................................ 5
КМОП технологія....................................... 5
3.
Архітектурний огляд........................................ 6
Опис виводів.......................................... 6
Архітектурні особливості.............................. 7
Блок-схема PIC12C509.................................. 8
Синхронізація схеми і командний цикл.................. 8
Потік інструкцій та конвеєрний режим.................. 9
4.
Організація пам’яті........................................10
Організація пам’яті програм...........................10
4.1.1 Схема пам’яті програм та стеку....................10
Організація пам’яті даних.............................11
Схема пам’яті даних..............................11
Спеціальні функціональні регістри................12
Регістр статусу (Status Register)............12
Регістр опцій (Option).......................13
OSCCAL регістр...............................14
Програмний лічильник (РС)....................15
Стек..................................................16
Непряма адресація.....................................16
5.
Порти вводу/виводу.........................................18
GPIO – регістр вводу/виводу...........................18
TRIS регістр..........................................18
Інтерфейс вводу/виводу................................18
Еквівалентна схема...............................19
Резюме регістрів порта...........................19
Розгляд програмування портів вводу/виводу.............19
Двонаправлені порти вводу/виводу.................19
Приклад команди читання-модифікація-запис........19
Послідовні операції вводу/виводу.................20
6.
Модуль TIMER0 і TMR0 регістр ..............................21
Блок-схема TIMER0.....................................21
Узгодження в часі TIMER0 з внутрішніми тактами ( без дільника).............................................21
Узгодження в часі TIMER0 з внутрішніми тактами (дільник 1:2)..................................................22
Регістри пов’язані з TIMER0...........................22
Використання TIMER0 з зовнішнім тактуванням...........22
Зовнішня cинхронізація..........................22
Затримка при збільшенні TIMER0..................23
Вплив регістра вибору на GP2 TRIS...............23
Узгодження в часі TIMER0 з зовнішніми тактами...23
Дільник...............................................23
Переключення призначення дільника...............23
Блок-схема TIMER0/WDT дільника..................24
7.
Спеціальні можливості центрального процесора...............25
Біти конфігурації....................................25
Слово конфігурації для PIC12C509.............25
Конфігурації генераторів..............................26
Типи генераторів...............................26
Кристалічний генератор чи керамічний резонатор.26
Структура кристалу ( чи керамічного
резонатора) (XT чи LP конфігурація)......26
Використання зовнішніх вхідних тактів (XT
чи LP конфігурація)......................27
Вибір конденсатора для керамічного
резонатора...............................27
Вибір конденсатора для кристалічного
генератора...............................27
Схема зовнішнього кристалічного генератора.....27
7.2.3.1 Схема зовнішнього паралельного
резонансного кристалічного генератора... 28
7.2.3.2 Схема зовнішнього серійного резонансного
кристалічного генератора............... .28
Зовнішній RC генератор.........................28
Внутрішній 4МГц RC генератор...................29
Скид..................................................30
Умови скиду для регістрів................... ..30
Умови скиду для спеціальних регістрів..........30
MCLRE – дозвіл MCLR............................31
Автоматичний скид при включенні (POR)..........31
Спрощена діаграма схеми скиду..........32
Діаграми при включенні живлення........32
Пристрій повторного встановлення таймера (DTR).33
Скид при короткочасному провалі напруги........34
Сторожовий таймер (Watchdog Timer)....................35
WDT період.....................................35
Блок-схема WDT.................................35
Резюме регістрів пов’язаних з WDT..............36
Режим SLEEP...........................................36
7.5.1 Пробудження з режиму SLEEP......................36
Програмна перевірка та захист коду....................36
Місця розташування ідентифікаторів (ID)...............37
Послідовне програмування..............................37
Ініціалізація пристрою................................38
8.
Резюме системи команд......................................40
Загальні формати для команд..........................41
Опис інструкцій......................................41
9.
Електричні характеристики..................................43
Абсолютні максимальні оцінки.........................43
Характеристики системи цифрового керування...........43
Діапазон навантажувальних резисторів.................45
Часові діаграми та технічні характеристики...........45
Додаток 1. Програма ініціалізації
Додаток 2. Упаковочна інформація
Додаток 3. Схема електрична функціональна
Додаток 4. Схема електрична принципова
Додаток 5. Перелік елементів
1. Вступ
PIC12C509 Microchip Technology відноситься до сімейства низьковартісних, високоефективних, 8-бітних, цілком статичних, основаних на EPROM CMOS мікроконтрoлерів. Використовується RISC архітектура із 33 інструкціями. Усі інструкції виконуються за 1 цикл (1ms), за винятком команд галуження, для виконання яких необхідно два цикли. PIC12C509 дозволяє досягнути вищого рівня ефективності аніж конкуренти у тій же ціновій категорії. 12-бітні інструкції дають можливість скоротити код у 2 рази порівняно із 8-бітними мікроконтролерами того ж класу. Просте використання та прості для запам’ятовування інструкцій значно зменшують час розробки.
PIC12C509 обладнані спеціальними можливостями, що зменшує вартість системи та споживану потужність. Power-On-Reset (POR) і Device Reset Timer (DRT) усувають протребу у зовнішній схемі скидання. Існує можливість вибору генератора з чотирьох конфігурацій, включаючи INTRC внутрішній режим генератора і режим збереження потужності LP (Low Power). Економічний режим SLEEP, Watchdog Timer та можливість захисту коду підвищують вартість системи, споживану потужність та надійність.
PIC12C509 доступні в економній версії One-Time-Porgrammable (OTP), яка є придатна для виробництва у будь-якій кількості. Замовник може повністю користуватися лідерством ціни Microchip з ОТР мікроконтролерів поки є користь із гнучкості ОТР.
PIC12C509 забезпучується повноекранним мікроасемблером, програмним симулятором, емулятором внутрішньої структури мікросхемисхеми, ”С” компілятором, логічними інструментальними засобами підтримки, низьковартісним програматором, і повноекранним програматором. Усі інструментальні засоби забезпечуються на IBM PC і сумісних ЕОМ.
Технологія EPROM робить налаштування прикладних програм (коди передавача, настройки приладу, частоти приймача і т.д.) надзвичайно швидким і зручним. Невеликі габарити, як для звичайного так і для поверхневого монтажу, роблять цей тип мікроконтролерів ідеальним для систем з просторовими обмеженнями. Низька вартість, мала споживана потужність, висока ефективність, легкість у використанні та гнучкість вводу/виводу роблять PIC12C509 універсальним навіть у тих галузях, де раніше мікроконтролери не використовувались.
Дана курсова робота базується на документації Microchip, Inc., PIC12C509, 1998.
2. Основні характеристики RISC процесора
2.1 Основні особливості:
використовує 33 простих інструкції;
усі команди виконуються за один цикл (1ms), окрім команд галуження, які є двоциклові;
робоча частота 4 MHz ( командний цикл 1ms );
12 – розрядні інструкції;
8 – розрядні дані;
7 спеціальних апаратних регістрів;
дворівневий апаратний стек;
пряма і непряма адресація даних і команд;
вбудований 4 MHz осцилятор з програмним калібруванням;
2.2 Периферійні можливості
8 - бітний таймер/лічильник з 8–бітним програмованим попереднім дільником;
автоматичний скид при включенні (Power-On-Reset чи POR);
таймер включення при скиді (Device Reset Timer чи DTR);
Watchdog Timer (WDT) з власним вбудованим генератором, що забезпечує підвищену надійність;
програмований захист коду;
економічний режим (SLEEP);
вихід з економічного режиму при зміні рівня на контакті;
вбудовані „слабкі” підтягуючі резистори на I/O контактах;
вбудований підтягуючий резистор на MCLR вході;
вибираючі користувачем біти для встановлення збудження вбудованого генератора:
INTRC – внутрішній 4 MHz RC генератор;
EXTRC – зовнішній низьковартісний RC генератор;
XT – стандартний кварцовий резонатор;
LP – економічний низькочастотний кристал.
2.3 КМОП (CMOS) технологія
економічна , високощвидкісна КМОП EPROM технологія;
статичний принцип в архітектурі;
широкий діапазон напруг живлення;
широкий температурний діапазон:
комерційний: 0°С - +70°С;
індустріальний: -40°С - +85°С;
автомобільний: -40°С - +125°С.
низьке енергоспоживання:
< 2 mA типово для 5V, 4 MHz;
15 mA типово для 3V, 32 KHz;
< 1 mA типове резервування.
3. Архітектурний огляд
3.1 Опис виводів
Рис.3.1 Опис виводів
Таблиця 3.1 Опис виводів
Назва виводу
DIP
Pin#
SOIC
Pin#
І/О/Р
тип
Тип
буферу
Коментарі
GP0
7
7
І/О
TTL/ST
Двонаправлений порт для послідовних даних. Може бути запрограмований на вихід з режиму SLEEP при зміні рівня на контакті або на режим вбудованого виштовху -вального резистора. Вхід через трігер Шмітта, коли використовується послідовний режим.
GP1
6
6
І/О
TTL/ST
Двонаправлений порт послідовних даних. Може бути запрограмований на вихід з режиму SLEEP при зміні рівня на контакті або на режим вбудованого виштовхува- льного резистора. Вхід через трігер Шмітта, коли використовується послідовний режим.
GP2/T0CK1
5
5
І/О
ST
Двонаправлений порт. Може бути налаштований як T0CK1
GP3/MCLR/Vpp
4
4
І
TTL/ST
Вхідний порт / вхід основного скиду / програмована вхідна напруга. Коли вивід сконфігурований як MCLR, тоді активним є низький рівень, який генерує сигнал скиду для пристрою. Напруга на MCLR/Vpp повинна бути вищою ніж на Vdd протягом нормального режиму і коли пристрій входить в програмний режим. Може бути запрограмований на вихід з режиму SLEEP при зміні рівня на контакті або на режим вбудованого підтягуючого резистора. Вхід через трігер Шмітта у MCLR режимі.
GP4/OSC2
3
3
І/О
TTL
Двонаправлений порт / вихід осцилятора. Під’єднаний в режимі стандартного резонатора ( режим XT , LP ; GPІО – у інших режимах).
GP5/OSC1/CLKIN
2
2
І/О
TTL/ST
Двонаправлений порт / вхід осцилятора / зовнішнє джерело тактових імпульсів (GPІО лише у режимі вбудованого RC, OSC1 у всі інших режимах осциллятора). Вхід ТТЛ, якщо GPІО, і тригер Шмітта, якщо режим зовнішнього RC генератора.
Vdd
1
1
Р
-
Напруга живлення
Vss
8
8
Р
-
Загальна земля
Примітки : І – вхід; О – вихід; І/О – вхід/вихід; Р – напруга; TTL – рівні TTL; ST – вхід через тригер Шмідта.
3.2 Архітектурні особливості
Висока ефективність PIC12C509 забезпечується архітектурними особливостями, які характерні для RISC мікропроцесорів. PIC12C509 виокристовує Гарвардську архітектуру, у якій програми та дані доступні по роздільних шинах. Це збільшує ширину смуги частот у порівнянні з Нейманівською архітектурою, де програма та дані вибираються з однієї магістралі. Розділення пам’яті програм та пам’яті даних дозволяє встановлювати розрядність інструкцій відмінну від 8-бітних слів даних. 12-розрядна шина пам’яті програм дає можливість вибирати 12-бітну інструкцію за один цикл. Кожна команда реально виконується за два цикли: вибірка і виконання, але двоступінчастий конвеєр перекриває в часі ці два етапи. Отже, усі інструкції (33) виконуються за один цикл (1ms @ 4MHz) , крім команд переходу.
У табличці вказано об’єм пам’яті програм (EPROM Program) та пам’яті даних (RAM Data).
Таблиця 3.2 Об’єм пам’яті
EPROM
Program
RAM
Data
1024 x 12
41 х 8
PIC12C509 використовує пряму та відносну адресацію для пам’яті даних. Усі спеціальні функціональні регістри, включаючи програмний лічильник , відображаються у пам’яті даних. PIC12C509 має високоортогональну (симетричну) систему команд, що дозволяє виконання будь-якої команди з використанням будь-якого регістру та будь-якого способу адресації. Цей симетричний характер та зміна спеціальної оптимальної ситуації роблять програмування на PIC12C509 простим, однак ефективним.
PIC12C509 містить АЛП та W регістр (Working register – робочий регістр). АЛП – це арифметико–логічний пристрій, який виконує арифметичні та булеві функції між W регістром та будь-яким регістром з регістрового файлу.
АЛП (8-розрядний) виконує додавання, віднімання, зсув та логічні операції. У командах із двома операндами один з перандів знаходиться у W регістрі, а інший або в одному з регістрів загального призначення, або являється безпосереднім значенням. Для однооперандних команд значення знаходиться або у робочому регістрі, або в регістрі загального призначення.
W регістр (Working register) – це 8-розрядний регістр, який використовується для АЛП операцій. Даний регістр не можна адресувати.
У залежності від команди, АЛП може змінювати значення Carry (C), Digit Carry (DC) та Zero (Z) бітів у регістрові статусу. С та DC біти використовують при відніманні для позначення позики та міжтетрадної позики біту відповідно.
3.3 Блок-схема PIC12C509
Рис. 3.2 Блок-схема PIC12C509
3.4 Синхронізація схеми та командний цикл
Синхросигнал (вивід OSC1/CLKIN) усередині мікропроцесора розділяється на 4 для генерації чотирьох тактів Q1,Q2,Q3,Q4, які не перекриваються в часі. Кожен командний цикл (Fetch – вибірка чи Execute - виконання) виконується за 4 такти (Q1-Q4), при чому вибірка наступної інструкції та виконання попередньої суміщаються в часі.
Програмний лічильник збільшується кожні Q1, і наступна інструкція вибирається із пам’яті програм та фіксується у регістрі команд у Q4. Декодування та виконання інструкції реалізується протягом наступного Q1 через Q4.
рис.3.3 Тактові імпульси та потік виконання інструкцій
3.5 Потік інструкцій та конвеєрний режим
Командний цикл складається з чотирьох Q циклів (Q1, Q2, Q3, Q4). Вибірка інструкції та виконання конвеєризовані таким чином, що вибірка команди потребує одного командного циклу тоді як для декодування та виконання використовується інший цикл. Але завдяки конвеєрній обробці кожна команда виконується дійсно за один цикл. Якщо команда змінює програмний лічильник (наприклад GOTO), то для завершення інструкції необхідно два цикли.
Цикл вибірки починається збільшенням програмного лічильника (РС) у Q1. Протягом наступних тактів даного циклу відбувається безпосереднє вибирання команди із пам’яті програм.
У циклі виконання вибрана команда фіксується у регістрі команд (IR) у Q1. Ця команда декодується і виконується протягом циклів Q2, Q3, Q4. Звертання до пам’яті даних відбувається на Q2 (читання операнду), а запис здійснюється протягом Q4 (запис результату).
рис.3.4 Конвеєрне виконання інструкцій
4. Організація пам’яті
Пам’ять пристрою PIC12C509 розділена на пам’ять програм та пам’ять даних. Оскільки пам’ять програм займає більше ніж 512 байт (а саме 1К), то використовується сторінкова адресація. Кожна із сторінок пам’яті програм є доступна через відповідний біт у регістрі статусу. Регістровий файл пам’яті даних містить більше ніж 32 регістри, тому використовується банкова організація пам’яті даних. Банки пам’яті даних доступні через регістровий вказівник FSR (File Select Register).
4.1 Організація пам’яті програм
PIC12C509 пристрій має 12-бітний програмний лічильник (РС), який здатний адресувати 2К х 12 простору пам’яті програм. Фізично використовуються лише перший 1К х 12 (0000h-03FFh). За адресою 0000h знаходиться ефективний вектор скидання, а за адресою 03FFh - значення необхідне для калібрування внутрішнього генератора. Це значення не можна змінювати.
4.1.1 Схема пам’яті програм та стеку
Рис.4.1 Схема пам’яті програм та стеку
4.2 Організація пам’яті даних
Пам’ять даних складається з регістрів чи з байтів RAM пам’яті, тобто визначається регістровим файлом. Регістровий файл розділений на дві функціональні групи : спеціальні функціональні регістри (Special Function Register) та універсальні регістри (General Purpose Register).
Спеціальні функціональні регістри включають TMR0 регістр, програмний лічильник (PC), регістр статусу (STATUS Register), регістри вводу/виводу (порти), регістр вибору файла (FSR). Слід зазначити, що спеціальні регістри можуть використовуватися для контролю конфігурацією портів вводу/виводу та для визначення відношення дільника.
Універсальні регістри використовуються для зберігання даних та інформації необхідної для виконання команд.
Регістровий файл включає 7 спеціальних функціональних регістрів, 25 універсальних регістрів, а також 16 універсальних регістрів, які можуть адресуватися при використанні банкової схеми.
Регістровий файл доступний через FSR регістр з використанням прямої чи відносної адресації.
4.2.1 Схема пам’яті даних
Рис.4.2 Схема пам’яті даних
Примітки: (1) INDF – не є фізичним регістром
4.2.2 Спеціальні функціональні регістри
Спеціальні функціональні регістри (SFR) використовуються центральним процесором та периферією для керування операціями PIC12C509 пристою. Спеціальні регістри підрозділяються на спеціальні функціональні регістри, які пов’язані із функціями ядра, та регістри пов’язані з операціями периферійної системи.
Таблиця 4.1 Спеціальні функціональні регістри
Адреса
Назва
7біт
6біт
5біт
4біт
3біт
2біт
1біт
0біт
Значення
при початковому
скиданні
Значення при зовнішньому скиданні
N/A
TRIS
-
-
- -111111
- -11 1111
N/A
OPTION
Містить біти керування конфігурацією Timer0, Timer0/WDT, wake-up on chahge, weak pull-ups
11111111
1111 1111
00h
INDF
Вміст використовується FSR для адресації пам’яті . Не є фізичним регістром
xxxxxxxx
uuuu uuuu
01h
TMR0
8 біт таймера реального часу чи лічильника
xxxxxxxx
uuuu uuuu
02h
PCL
Молодші 8 біт програмного лічильника (РС)
11111111
1111 1111
03h
STATUS
GPWUF
-
PA0
TO
PD
Z
DC
C
00011xxx
q00q quuu
04h
FSR
Вказівник при непрямій адресації пам’яті
110xxxxx
11uu uuuu
05h
OSCCAL
CAL3
CAL2
CAL1
CAL0
-
-
-
-
0111- - - -
uuuu - - - -
06h
GPIO
-
-
GP5
GP4
GP3
GP2
GP1
GP0
- -xxxxxx
- - uu uuuu
Примітки:
Заштриховані комірки (чи ”-”) – не використовуються ( програмно читаються як ‘0’ )
x – невизначене, u – незмінюване, q – можливі декілька значень
4.2.2.1 РЕГІСТР СТАТУСУ (STATUS REGISTER)
Даний регістр відображає арифметичний стан АЛП, Reset стан, а також біт попередньої вибірки сторінки для пам’яті програм більшої аніж 512 байт.
Регістр статусу може використовуватися як оперенд будь-якою командою із будь-яким іншим регістром. Якщо регістр статусу використовується інструкцією, яка впливає на значення Z, DC та C бітів, тоді їх зміна забороняється. Ці біти встановлюються чи обнулюються відповідно до логіки роботи пристою. Крім того, біти TO та PD не дозволяють перезапису. Отже, результат інструкції, яка використовує регістр статусу як операнд, може бути відмінний від передбачуваного.
Наприклад, CLRF STATUS обнулює три старші біти і встановлює біт Z. Отже, отримаємо значення 000u u1uu (де u – незмінні біти).
Для зміни регістру статусу використовуються команди BCF, BSF, MOVWF , оскільки вони не впливають на Z, DC та C біти.
Призначення бітів регістра статусу
Рис.4.3 Призначення бітів регістра
7 біт : GPWUF : біт скидання регістру GPIO
1 = скидання у результаті виходу з режиму SLEEP при зміні рівня на виводі
0 = скидання при включенні живлення чи зовнішній скид
6 біт : не використовується
5 біт : PA0 – біт попередньої вибірки сторінки пам’яті програм
1 = Сторінка 1 (200h – 3FFh)
0 = Сторінка 2 (000h – 1FFh)
Кожна сторінка має об’єм 512 байт.
4 біт : TO – біт затримки (Time out)
1 = відбувається після включення живлення та після інструкцій CLRWT чи SLEEP
0 = відбувається WDT затримка
3 біт : PD – біт режиму пониженого споживання
1 = встановлюється після включення живлення чи командою CLRWDT
0 = встановлюється командою SLEEP
2 біт : Z – біт нульового результату
1 = результат арифметичної чи логічної операції рівний нулю
0 = результат арифметичної чи логічної операції не рівний нулю
1 біт : DC – біт міжтетрадного переносу чи позики (використовується
командами ADDWF і SUBWF)
ADDWF
1 = перенос між тетрадами відбувся
0 = перенос між тетрадами не відбувся
SUBWF
1 = позика між тетрадами не відбулася
0 = позика між тетрадами відбулася
0 біт : C – біт переносу чи позики(використовується командами ADDWF,
SUBWF, RRF, RLF)
ADDWF
1 = перенос відбувся
0 = перенос не відбувся
SUBWF
1 = позика не відбулася
0 = позика відбулася
RRF чи RLF
Завантажується з LSB чи MSB відповідно.
4.2.2.2 РЕГІСТР ОПЦІЙ (OPTION)
Регістр опцій – це 8-бітний регістр, який використовується тільки для запису і містить керуючі біти для конфігурування Timer0/WDT чи Timer0. При виконанні OPTION інструкцій вмістиме W регістру копіюється у OPTION регістр. RESET відповідно встановлює усі біти даного регістру.
Призначення бітів регістру опцій
Рис. 4.4 Призначення бітів регістру опцій
7 біт : GPWU - дозвіл пробудження при зміні рівня на контакті (GP0,
GP1, GP3)
1 = заборонено
0 = дозволено
6 біт : GPPU – дозвіл на використання навантажувальних резисторів
1 = заборонено
0 = дозволено
5 біт : T0CS – біт вибору джерела тактів Timer0
1 = із виводу ТОСКІ
0 = від внутрішніх командних тактів, Fosc/4
4 біт : T0SE – біт вибору початкового рівня
1 = початковим є низький рівень
0 = початковим є високий рівень
3 біт : PSA – біт призначення дільника
1 = дільник призначений WDT
0 = дільник призначений Timer0
2-0 біт : PS2-PS0 – біти вибору відношення дільника
Значення
бітів
Timer0
WDT
0 0 0
1 : 2
1 : 1
0 0 1
1 : 4
1 : 2
0 1 0
1 : 8
1 : 4
0 1 1
1 : 16
1 : 8
1 0 0
1 : 32
1 : 16
1 0 1
1 : 64
1 : 32
1 1 0
1 : 128
1 : 64
1 1 1
1 : 256
1 : 128
Примітки:
Якщо біт TRIS встановлений в ‘0’ , то режим пробудження при зміні рівня та режим підтягуючого резистора є заборонені.
Якщо біт T0CS встановлений в ‘1’, то GP2 повинен бути введений навіть якщо TRIS GP2=’0’.
4.2.2.3 OSCCAL РЕГІСТР
Регістр калібрування генератора використовується для калібрування внутрішнього генератора (4 MHz). Містить чотири біти для калібрування. Збільшення значення CAL веде до підвищення частоти.
Рис. 4.5 Призначення бітів регістру OSCCAL
біт 7-4 : CAL<3:0> - біти для калібрування генератора
біт 3-0 : не використовується.
4.2.2.4 ПРОГРАМНИЙ ЛІЧИЛЬНИК (РС)
При виконанні певної інструкції програмний лічильник містить адресу наступної команди, яку слід виконати. Програмно доступний байт PCL (PC Latch) відображається на РС <7:0>. Значення РС збільшується на одиницю кожний командний цикл, якщо інструкція сама не змінює вмістиме РС.
Для GOTO інструкції біти РС <8:0> визначаються командним словом GOTO. П’ятий біт регістру статусу, що відповідає за сторінкову адресацію, визначає 9 біт програмного лічильника.
Для CALL інструкції чи будь-якої іншої команди, яка використовує PCL як операнд, молодші 7 бітів РС визначаються командним словом. Восьмий біт РС<8> завжди встановлюється в ‘0’.
Інструкції, які змінюють РСL, наступні : MOVWF PC; ADDWF PC; BSF PC,5.
Оскільки РС<8> обнулюється командою CALL чи змінюється іншою інструкцією, то усі виклики підпрограми чи обчислювальні переходи обмежуються першими 256 байтами будь-якої сторінки пам’яті розміром 512 байт.
рис. 4.6 Завантаження РС при виконанні команд переходу
4.2.2.4.1 Результати скидання
Програмний лічильник є встановленим після скидання, тобто це означає, що РС адресує останнє розташування на останній сторінці, а саме команду калібрування генератора. Після виконання MOVLW XX РС буде вказувати на адресу 00h, і почне виконувати код користувача.
Біт попередньої вибірки у регістрі статусу буде обнулений після скидання, тобто по замовчуванню буде встановлена нульова сторінка пам’яті. Отже, команда GOTO буде автоматично спричиняти перехід на нульову сторінку, поки значення відповідного біта не буде змінено.
4.3 Стек
PIC12C509 пристрій має 12 бітний апаратний стек із LIFO організацією.
Команда CALL поміщає поточне значення стека 1 у стек 2, а потім поміщає поточне значення лічильника програм збільшене на один у стек 1. Якщо виконуються підряд більше ніж дві інструкції CALL, то при цьому зберігаються лише дві останні адреси повернення.
Команда RETLW виймає вмістиме стека 1 і поміщає отримане значення у програмний лічильник, потім копіює вмістиме стеку 2 у стек 1. Якщо виконуються підряд більше ніж дві інструкції RETLW, то при цьому стек буде заповнюватися адресою попередньо записаною у стек 2. Слід звернути увагу, що W регістр буде заповнюватися літеральним значенням визначеним у команді. Це особливо корисно для реалізації таблиць пошуку даних всередині пам’яті програм.
Після будь-якого скидання, вміст стека залишається незмінним. Але лічильник команд PCL буде обнулений.
Примітки:
Немає бітів стану, які б фіксували переповнення стеку.
Немає інструкцій, які б називалися PUSH чи POP. Замість них використовуються команди CALL та RETLW
4.4 Непряма адресація даних
Регістр ІNDF не є фізичним регістром. Адресація ІNDF є фактично адресацією регістра, чия адреса міститься в регістрі FSR ( FSR – це вказівник ). Таким чином здійснюється непряма адресація.
Приклад непрямої адресації:
Регістр 07 з регістрового файла містить значення 10h;
Регістр 08 з регістрового файла містить значення 0Аh;
Завантажують значення 07 у FSR регістр;
При читанні з ІNDF регістра буде повертатися значення 10h;
Збільшують значення регістра FSR на одиницю ( FSR = 08 );
При читанні з ІNDF регістра буде повертатися значення 0Аh.
При читанні з ІNDF самостійно ( коли FSR = 0 ) отримаємо значення 00h. Запис безпосередньо до регістра ІNDF приводить до виконання порожньої команди ( хоча на біти регістру стану можна впливати ).
Проста програма, яка обнуляє RAM в межах адресного простору 10h-1Fh з використанням непрямої адресації показується на прикладі :
movlw 0x10 ;ініціалізує покажчик
movwf FSR ; на ОЗП (RAM)
NEXT clrf ІNDF ;обнулює ІNDF регістр
іncf FSR, F ;збільшує покажчик
btfsc FSR, 4 ;все виконано?
goto NEXT ;ні, очищати наступний
CONTINUЕ
: ;так, продовжити
FSR – 5–бітний регістр. Він використовується разом з регістром ІNDF для непрямої адресації пам'яті даних. Біти FSR <4:0 > використовуються, щоб звертатися до пам'яті даних в межах 00h - 1Fh . FSR <5> використовуться для вибору між банком 0 і банком 1. Біти FSR <7:6 > не виконуються і читаються як '1’.
Рис.4.7 Пряма та непряма адресація
5. Порти вводу / виводу
Як будь-який інший регістр, регістр вводу/виводу (І/О) може використовуватися для запису і читання під програмним керуванням. Слід відзначити, що команди читання ( наприклад, MOVF, GPІ, W ) завжди читають інформацію з І/О портів незалежно від заданих режимів. При скиданні, усі порти вводу/виводу визначені як вхідні ( вхідний порт - у високому імпедансі ), тому що регістри керування вводу/виводу є встановленими.
5.1 GPІО
GPІО –це 8-бітний регістр вводу/виводу. Використовуються тільки молодші 6 бітів ( GP5: GP0 ). Біти 7 і 6 не виконуються і читають як '0' .Будь-ласка зверніть увагу, що GP3 – це вхідний порт. Для встановлення альтернативних функцій І/О використовується слово конфігурації. При дії альтернативних функцій результат читання з портів вводу/виводу буде дорівнювати ‘0’. Порти GP0, GP1, і GP3 можуть бути налаштовані на використання підтягуючих резисторів, а також для реагування на зміну рівнів. Якщо порт 4 сконфігурований як MCLR, то підтягуючий резистор завжди включений і пробудження при зміні рівня для цього порта не допускається.
5.2 TRІS регістр
Регістр керування вихідним драйвером завантажується вмістимим регістра W при виконанні команди TRІS f. "1" в TRІS регістрові переводить відповідний вихідний драйвер у високий імпеданс. "0" – передає вмістиме регістра-фіксатора вихідних даних на обрані порти, якщо дозволяє вихідний буфер. Виключення становить GP3, який може бути лише вхідним портом, і GP2, який керується регістром опції. TRІS регістри призначені лише для запису, а також можуть бути встановлені ( коли заблоковані вихідні драйвери ) після скидання. Слід звернути увагу, що читання відбувається безпосередньо з порта, а не з фіксатора вихідних даних.
5.3 Інтерфейс вводу / виводу
Еквівалентна схема для вхідних/вихідних виводів показується на рис.5.1 . Усі виводи порту, за винятком GP3, який є лише вхідним, можуть використовуватися для обох операцій: введення й виведення. Для введення ці порти не використовують регістрів-фіксаторів. Будь-яке введення повинне бути представлене як читання з використанням команди вводу ( наприклад, MOVF, GPІ, W). Входи використовують регістри-фіксатори і залишаються незмінними, поки відповідний вихідний фіксатор не перезапишеться. Щоб використовувати вивід порту як вихідний, то необхідно, щоб відповідний службовий біт напрямку в TRІS був обнулений (дорівнював 0 ). Для використання порту як вхідного біт TRІS повинний бути встановлений в ‘1’. Кожен І/О вивід ( за винятком GP3 ) може запрограмуватися індивідуально як вхідний чи вихідний.
5.3.1 Еквівалентна схема
Рис. 5.1 Еквівалентна схема порта
5.3.2 Резюме регістрів порта
Таблиця 5.1 Регістри порта вводу/виводу
Адреса
Назва
7біт
6біт
5біт
4біт
3біт
2біт
1біт
0біт
Значення
при автоматичному скидові
Значення при зовнішньому скидові
N/A
TRIS
-
-
- - 11 1111
- - 11 1111
N/A
OPTION
GPWU
GPPU
T0CS
T0SE
PSA
PS2
PS1
PS0
1111 1111
1111 1111
03h
STATUS
GPWUF
-
PAO
T0
PD
Z
DC
C
0001 1xxx
q00q quuu
06h
GPIO
-
-
GP5
GP4
GP3
GP2
GP1
GP0
- - xx xxxx
- - uu uuu
Примітки:
Зафарбовані комірки не використовуються регістрами порта, читайте як ‘0’, - = не використовуваний, читайте як ‘0’, x = невідомий, u = незмінний, q = можливі різні значення.
Якщо в регістрі статусу 7 біт = 1, то скид був спричинений зміною рівня на виводі, інакше 7біт = 0.
5.4 Розгляд програмування вхідних/вихідних портів
5.4.1 Двонаправлені порти воду/виводу
Деякі команди внутрішньо функціонують як читання, яке слідує після операції запису. Команди BCF і BSF, наприклад, читають весь порт у центральний процесор (ЦП), виконують порозрядну операцію і перезаписують результат. Слід бути уважним, коли ці команди застосовуються до порту, який використовуються як вхід/вихід. Наприклад, операція BSF для 5-ого біту GPІО приводить до зчитування усіх вісьмох бітів GPІО у центральний процесор (ЦП), потім відбувається встановлення 5 біту і значення GРІО записується у вихідний регістр–фіксатор. Якщо інший біт GРІО використовується як двонаправлений порт вводу/виводу ( наприклад біт 0 ) і в даний момент він визначається як вхідний , тоді вхідний сигнал представлений на виводі самостійно буде читатися в центральний процесор (ЦП) і перезапишеться в регістр-фіксатор даних цього специфічного виводу, при чому запис відбувається поверх попереднього вмісту. Поки вивід визначений як вхід, то проблем не буде. Однак, якщо біт 0 пізніше перевизначається як вихід, то вміст регістра-фіксатора даних може тепер бути невизначений.
Наступний приклад показує результат двох послідовних команд читання-модифікація-запис ( наприклад, BCF, BSF, і т.д.. ) на порти вводу/виводу.
5.4.2 ПРИКЛАД КОМАНДИ ЧИТАННЯ-МОДИФІКАЦІЯ-ЗАПИС
;Ініціалізація GPІО установок
; GPІО <5:3 > вхідні
;GPІО <2:0 > вихідні
; GPІО фіксатор GPІО вивід
; ------------------- ---------------
BCF GPІО, 5 ; - - 01 -ppp - - 11 pppp
BCF GPІО, 4 ; - - 10 –ppp - - 11 pppp
MOVLW 007h ;
TRІS GPІО ; - - 10 -ppp - - 11 pppp
;
; Зауважимо, що користувач може очікувати, щоб значення виводу було
; --00 pppp. Друга команда BCF змушує GP5 бути зафіксованим як
; значення виводу (високо)
5.4.3 Послідовні операції вводу/виводу
Фактичний запис до порту вводу/виводу відбувається наприкінці командного циклу, у той час як для читання дані повинні бути доступні на початку командного циклу ( див. Рис 5.2 ). Отже, слід бути обережним, коли запис здійснюється після операції читання, при чому використовується той самий порт вводу/виводу. Послідовність команд повинна дозволяти напрузі на виводі стабілізуватися перед наступною командою, яка спричиняє читання файла в центральний процесор (ЦП). Інакше, попередній стан виводу може прочитатися в ЦП швидше чим новий стан. Коли є сумніви, краще відокремлювати ці команди за допомогою NOP чи іншою командою, яка не звертається до цього порту вводу/виводу.
Рис. 5.2 Діаграма послідоаних операцій вводу/виводу
6. Модуль TІMER0 і TMR0 регістр
Модуль Tіmer0 має наступні особливості:
8-бітний регістр TMR0
- використовується для читання і для запису
8-бітний програмований дільник (prescaler)
вибір внутрішнього чи зовнішнього тактування
- вибір рівнів для зовнішньої синхронізації
Режим таймера встановлюється, коли біт T0CS рівний ‘0’( OPTION < 5>). У режимі таймера, модуль Tіmer0 буде збільшуватися кожен командний цикл (без дільника). Якщо у регістр TMR0 здійснюється запис, то збільшення заборонене для наступних двох циклів.
Режим лічильника встановлюється, коли біт T0CS рівний ‘1’ ( OPTION <5>). У цьому режимі, Tіmer0 буде збільшуватися при кожній зміні рівня на виводі TОCKІ. Біт TОSE (OPTION< 4>) визначає початковий рівень. Обнулення біту TОSE встановлює високий рівень. Існують певні обмеження на вхід зовнішньої синхронізації, про які дивіться далі.
Дільник (prescaler) може використовуватися чи модулем Tіmer0, чи модулем Watchdog Timer, але не обома одночасно. Призначення дільника встановлюється програмно за допомогою контрольного біта PSA (OPTION< 3>). Обнулення біта PSA призначає дільник для Tіmer0. Дільник не читається і в нього не можна записати. Коли дільник призначений для модуля а Tіmer0 , тоді можна вибрати наступні значення поділу : 1:2, 1:4, ..., 1:256.
6.1 БЛОК – СХЕМА TIMER0
Рис. 6.1 Блок-схема TIMER0
6.2 УЗГОДЖЕННЯ В ЧАСІ TIMER0 З ВНУТРІШНІМИ ТАКТАМИ (БЕЗ ДІЛЬНИКА)
Рис 6.2 Діаграма узгодження
6.3 УЗГОДЖЕННЯ В ЧАСІ TIMER0 З ВНУТРІШНІМИ ТАКТАМИ ( ДІЛЬНИК 1:2)
Рис 6.3 Діаграма узгодження
6.4 Регістри пов’язані з TIMER0
Таблиця 6.1 Регістри пов’язані з TIMER0
Адреса
Назва
7біт
6біт
5біт
4біт
3біт
2біт
1біт
0біт
Значення
при автоматичному скиді
Значення
при зовнішньому скиді
01h
TMR0
Timer0 – 8-бітний таймер/лічильник реального часу
xxxx xxxx
uuuu uuuu
N/A
OPTION
GPWU
GPPU
TOCS
TOSE
PSA
PS2
PS1
PS0
1111 1111
1111 1111
N/A
TRIS
-
-
GP5
GP4
GP3
GP2
GP1
GP0
- - 11 1111
- - 11 1111
6.5 Використання Tіmer0 із зовнішнім тактуванням
Коли для Tіmer0 використовується зовнішнє тактування, то слід дотримуватися при цьому певних вимог. Зовнішні такти повинні синхронізуватися із внутрішніми тактами (TOSC). Крім того, повинна існувати затримка фактичного збільшення Tіmer0 після синхронізації.
6.5.1 Зовнішня синхронізація
Коли дільник не використовується, то зовнішній тактовий вхід являється і виходом дільника. Синхронізація T0CKІ з внутрішніми тактами (TOSC) виконується шляхом відбору (sampling) виходу дільника на циклах Q2 і Q4 внутрішніх тактів (див. Рис.6). Тому необхідно, щоб для T0CKІ високий рівень тривав принаймні 2TOSC ( невелика RC затримка 20 ns) і тривалість низького рівня також становила не менше 2TOSC ( невелика RC затримка 20 ns).
Коли дільник використовується, тоді зовнішні вхідні такти розділяються асинхронним дільником типу тригерного лічильника так, щоб вихід дільника був симетричним. Для зовнішніх тактів, щоб здійснити вибірку необхідно прийняти до рахунку тригерний лічильник. Тому період для T0CKІ повинен становити принаймні 4TOSC (невелика RC затримка 40 ns), щоб розділити на значення дільника. Єдина вимога до T0CKІ така, щоб тривалість високого і низького рівня не були меншими за мінімальну ширини імпульсу - 10 ns.
6.5.2 Затримка при збільшенні TІMER0
Оскільки вихід дільника синхронізований з внутрішніми тактами, то існує маленька затримка від часу появи зовнішнього такту до часу збільшення Tіmer0 (див. Рис.6).
6.5.3 Вплив регістра вибору на GP2 TRIS
Якщо регістр опцій встановлений для читати TІMER0 із виводу GP2 ,то порт змушений бути вхідним незалежно від значення регістра TRIS.
6.5.4 УЗГОДЖЕННЯ В ЧАСІ TІMER0 ІЗ ЗОВНІШНІМИ ТАКТАМИ
Рис. 6.4 Діаграма узгодження
Примітки:
(1) - Затримка від вхідних тактів змінюється до збільшення Tіmer0 – від 3Tosc до 7Tosc. (Тривалість Q = Tosc). Тому, помилка у вимірі інтервалу між двома фронтами на Tіmer0 вході рівна максимально ±4Tosc.
(2) - Зовнішні такти, якщо не використовується дільник, інакше вихід дільника.
(3) - Стрілки вказують час, коли здійснюється вибірка виходу дільника.
6.6 Дільник (Prescaler/Postscaler)
8-бітний лічильник доступний як для модуля Tіmer0, так і для Watchdog Timer (WDT). Зверніть увагу, що дільник може використовуватися чи Tіmer0, чи модулем WDT, але не обома одночасно. Таким чином, призначення дільника для Tіmer0 означає, що для WDT він не використовується, і навпаки.
Біти PSA і PS2:PS0 (OPTION < 3:0 >) визначають призначення дільника і відношення. Коли дільник призначено для модуля Tіmer0, то всі інструкції запису до регістру TMR0 (наприклад, CLRF...