Заполнение начальной области памяти программ
Заполнение начальной области памяти программ (ячейки с адресами 0000H - 00ххН) должно строго соответствовать принципам функционирования конкретного типа микропроцессора или микроконтроллера. При этом необходимо прежде всего принимать во внимание:
- адрес памяти, с которого начинается выборка команд при включении питания или подачи сигнала "RST" (ли "Reset");
- принципы функционирования системы обработки прерываний, в частности размещение и структуру таблицы векторов перехода на процедуры обслуживания (обработки) прерываний.
Согласно указанным требованиям, заполнение начальной области памяти программ для МК51 следует выполнять в таком виде (рис. 16.7).
Команда (или вектор) стартового перехода представляет собой команду безусловного перехода на метку, которая отмечает первую команду основной программы. Эта команда размещается по адресу 0000H-0002H и нужна для обхода таблицы векторов переходов.
Таблица векторов переходов состоит из пяти блоков по 8 байтов; в каждый блок необходимо записать команду безусловного или условного (например, для прерывания от УАПП) перехода на нужную процедуру. Если процедура обработки конкретного прерывания имеет размер не больше, чем восемь байтов, она может быть размещена непосредственно в соответствующем блоке в таблице векторов перехода. Таблица векторов перехода занимает область ячеек с адресами 0003H...002AH.
Практически начиная с адреса 002BH можно разместить команды основной программы или таблицы констант, которые используются в алгоритмах. В любом случае первая команда основной программы может быть отмечена меткой, ссылку на которую используют в команде стартового перехода.
Основная программа должна начинаться с таких программных блоков:
- инициализация стека;
- выбор текущего активного банка регистров;
- настройка линий портов ввода-вывода на нужные направления передачи данных;
- настройка системы прерываний (разрешение запросов и исходная установка приоритетов);
- настройка таймеров и УАПП.
Вариант программной реализации таблицы векторов перехода по всем прерываниям МК51 представлен ниже. Естественно, в конкретных задачах в таблице должны присутствовать только те вектора (команды перехода), для которых будут формироваться запросы прерываний.
CSEG ; Открытие сегмента кода
org 0 ; Размещение вектора стартового перехода
jmp start ; Переход на начало основной программы
org 0003h ; Размещение вектора перехода по INT0
jmp proc_INT0 ; Переход на обработчик прерывания INT0
org 000Bh ; Размещение вектора перехода по TF0
jmp proc_T0 ; Переход на обработчик прерывания от таймера Т0
org 0013h ; Размещение вектора перехода по INT1
jmp proc_INT1 ; Переход на обработчик прерывания INT1
org 001Bh ; Размещение вектора перехода по TF1
jmp proc_T1 ; Переход на обработчик прерывания от таймера Т1
org 0023h ; Размещение вектора перехода по TI или RI (УАПП)
jb TI,proc_Trans ; Переход на обработчик прерывания от передатчика
jmp proc_Send ; Переход на обработчик прерывания от приемника
org 0030h ; Размещение основной программы
start: . . . . ; Команды основной программы
|