Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
На колоквіум мікропроцесори.DOC
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
642.05 Кб
Скачать

2.2.7. Програмний лічильник

Програмний лічильник забезпечує доступ до 12-бітних комірок вбудованої постійної пам'яті (EPROM), довжина якої може бути до 2048 комірок.

В залежності від типу PIC, програмний лічильник (PC) і відповідний дворівневий апаратний стек мають ширину від 9 до 11 бітів (див. табл. 2.5).

Таблиця 2.5

Ширина програмного лічильника і стека

Тип МК

Ширина PC (біт)

Ширина стека (біт)

PIC16C54/PIC16C55

9

9

PIC16C56

10

10

PIC16C57

11

11

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

1) при виконанні команди GOTO в програмний лічильник завантажуються молодші 9 бітів (PC<8:0>). У випадку використання PIC16C56 або PIC16C57, в старші два біти програмного лічильника (PC<10:9>) завантажуються біти вибору сторінок PA1 і PA0 (біти 6 і 5 регістра статусу). За допомогою команди GOTO можна переміститись в будь-яке місце будь-якої сторінки пам'яті програм;

2) при виконанні команди CALL у програмний лічильник завантажують-

ся молодші 8 бітів, в той час як дев'ятий біт обнуляється. Значення PC, збільшене на одиницю, буде збережене в стеці. У випадку PIC16C56/PIC16C57, в старші два біти PC (PC <10:9>) завантажуються біти вибору сторінок PA1, PA0 (біти 6 і 5 регістра статусу);

3) команда RETLW вивантажує в програмний лічильник вміст з вершини стека;

4) якщо програмний лічильник задіяний в команді (наприклад, MOVWF 2, ADDWF 2, BSF 2,5), то 8 бітів результату виконання команди будуть завантажені в молодші 8 бітів програмного лічильника. Дев'ятий біт PC буде обнулятися. У випадку PIC16C56/PIC16C57, в старші біти PC<10,9> будуть завантажені біти вибору сторінок PA1, PA0 (біти 6 і 5 в регістрі статусу).

Так як дев'ятий біт програмного лічильника обнуляється при виконанні команди CALL, або команд, що записують свій результат в PC, то виклик підпрограм або здійснення переходу, що вираховується, обмежені першою половиною сторінки програмної пам'яті, тобто першими 256 адресами.

2.2.8. Стек і повернення із підпрограм

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

Команда CALL інкрементує поточне значення програмного лічильника і записує його в стек на рівень 1. При запису на 1-й рівень стека його попереднє значення автоматично записується на 2-й рівень. Якщо викликається більше двох вкладених підпрограм, то тільки дві останні адреси повернення будуть збережені.

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