Микропроцессоры и микроконтроллеры

 
 
 
«Обучение программированию не может научить быть экспертом, также как и изучение кистей и красок не может превратить кого-либо в художника.»
Eric S. Raymond
Русский | Українська


Микропроцессоры и микроконтроллеры :: Принципи програмування MSC-51 :: Заповнення початкової області пам'яті програм

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

Заповнення початкової області пам'яті програм (комірки з адресами 0000H - 00ххН) має строго відповідати принципам функціонування конкретного типу мікропроцесора або мікроконтролера. При цьому необхідно насамперед брати до уваги:

rn

- адреса пам'яті, з якого починається вибірка команд при вмиканні живлення або подачі сигналу "RST" (чи "Reset ");

rn

- принципи функціонування системи обробки переривань, зокрема розміщення і структуру таблиці векторів переходу на процедури обслуговування (обробки) переривань.

rn

Згідно з зазначеним вимогам, заповнення початковій області пам'яті програм для МК51 слід виконувати в такому вигляді (мал. 16.7).

rn

rn

Команда (або вектор) стартового переходу представляє собою команду безумовного переходу на позначку, яка відзначає першу команду основної програми. Ця команда розміщується за адресою 0000H-0002H і потрібна для обходу таблиці векторів переходів.

rn

Таблиця векторів переходів складається з п'яти блоків по 8 байтів; в кожен блок необхідно записати команду безумовного або умовного (наприклад, для переривання від УАПП) переходу на потрібну процедуру. Якщо процедура обробки конкретного переривання має розмір не більше, ніж вісім байтов, вона може бути розміщена безпосередньо у відповідному блоці в таблиці векторів переходу. Таблиця векторів переходу займає область комірок з адресами 0003H ... 002AH.

rn

Практично починаючи з адреси 002BH можна розмістити команди основної програми або таблиці констант, які використовуються в алгоритмах. У будь-якому випадку перша команда основної програми може бути відзначена міткою, посилання на яку використовують у команді стартового переходу.

rn

Основна програма повинна починатися з таких програмних блоків:

rn

- ініціалізація стека;

rn

- вибір поточного активного банку регістрів;

rn

- налагодження ліній портів вводу-виводу на потрібні напрямку передачі даних;

rn

- налагодження системи переривань (дозвіл запитів і вихідна установка пріоритетів);

rn

- настройка таймерів та УАПП.

rn

Варіант програмної реалізації таблиці векторів переходу за всіма переривання МК51 представлений нижче. Природно, у конкретних завданнях в таблиці повинні бути присутні тільки ті вектора (команди переходу), для яких будуть формуватися запити переривань.

rn

CSEG; Відкриття сегмента коду

rn

org 0; Розміщення вектора стартового переходу

rn

jmp start; Перехід на початок основної програми

rn

org 0003h; Розміщення вектора переходу по INT0

rn

jmp proc_INT0; Перехід на обробник переривання INT0

rn

org 000Bh; Розміщення вектора переходу по TF0

rn

jmp proc_T0; Перехід на обробник переривання від таймера Т0

rn

org 0013h; Розміщення вектора переходу по INT1

rn

jmp proc_INT1; Перехід на обробник переривання INT1

rn

org 001Bh; Розміщення вектора переходу по TF1

rn

jmp proc_T1; Перехід на обробник переривання від таймера Т1

rn

org 0023h; Розміщення вектора переходу по TI або RI (УАПП)

rn

jb TI, proc_Trans; Перехід на обробник переривання від передавача

rn

jmp proc_Send; Перехід на обробник переривання від приймача

rn

org 0030h; Розміщення основної програми

rn

start:. . . . ; Команди основної програми