Скачиваний:
24
Добавлен:
01.05.2014
Размер:
37.38 Кб
Скачать

1.3. Требования по оформлению программ

Для организации связи микроконтроллера с ПЭВМ в ПЗУ прошита программа "Монитор", которая позволяет читать и записывать информацию из(в) контроллера, запускать программу пользователя и выполнять ее в пошаговом режиме и с точками останова. В связи с этим, накладываются некоторые ограничения на использование ресурсов микроконтроллера: файлового регистра и внешнего ОЗУ, которые будут описаны ниже.

1.3.1. Регистровый файл

Микроконтроллер 8XC196KC имеет регистровый файл объёмом 488 байт, размещенный по адресам 1Ah-1FFh. "Монитор" использует для своей работы 6 байт файлового регистра с младшими адресами (1Ah-1Fh). Использование их программой пользователя может привести к непредсказуемым последствиям.

1.3.2. Стек

"Монитор" инициализирует стек с адреса 200h и помещает в него адрес возврата из программы пользователя (2222h). При выполнении программы пользователя в пошаговом режиме либо с точками останова, "Монитор" использует текущее состояние стека, поэтому, чтобы избежать потери информации, необходимо резервировать под стек на 4 байта больше требуемого.

1.3.3. Точка возврата

Как уже было сказано, перед запуском программы пользователя "Монитор" инициализирует стек с адреса 200h и помещает в него адрес возврата - 2222h. Таким образом, чтобы завершить программу необходимо выполнить команду RET. В случае, если пользователь использует свой стек, программа может быть завершена двумя способами:

1) поместить в стек значение 2222h и выполнить команду RET.

2) выполнить команду дальнего перехода LJMP 2222h

1.3.4. Внешнее ОЗУ

Для загрузки и выполнения программ пользователя микроконтроллер должен иметь внешнее ОЗУ. Внешнее ОЗУ расположено по адресам 8000h-FFFFh.

1.3.4.1. Область данных "Монитора"

Область памяти внешнего ОЗУ с адресами 8060h-809Fh зарезервирована под "Монитор". Она необходима для сохранения состояния регистров специального назначения и программы пользователя.

1.3.4.2. Вектора прерываний

Для того чтобы пользователь мог использовать систему прерываний, все ее вектора (за исключением TRAP-прерывания, адрес вектора 2010h) вынесены в область внешнего ОЗУ. Вектора прерываний размещаются с такими же смещениями относительно базового адреса (8000h), как и в ПЗУ (базовый адрес 2000h).

1.3.4.3. Размещение информации пользователя

Для размещения программ и данных доступно все адресное пространство ОЗУ, за исключением тех областей, которые были описаны выше (адреса 8000h-809Fh). Рекомендуется начинать программу с адреса 8100 h.

1.4. Пример программы

$nolist ;Подавление распечатки

$include (8096.inc) ;Описание идентификаторов специальных ;регистров

$list ;Возобновление распечатки

;*********************************************************

rseg at (30h) ; Начальный адпес размещения сегмента ;регистров

Pattern_ptr: dsw 1 ;Выделение слова для указателя на таблицу

Data: dsb 1 ;Выделение байта данных

n_Loop: dsb 1 ;Выделение байта для счетчика циклов

;*********************************************************

cseg at 8100h ; Сегмент кода программы

сlr Pattern_ptr ;Инициализация указателя таблицы

clrb n_Loop ; Инициализация счетчика циклов

loop: ldb ioport1, PATTERN_TABLE[Pattern_ptr]

jbc ios1, 5, $ ; Ожидание выполнения

; Выбираем байт из таблицы

ldb Data, PATTERN_TABLE[Pattern_ptr]

scall Serial_Out ;Подпрограмма передачи данных по последовательному каналу

; Вычисляем указатель на таблицу

inc Pattern_ptr

and Pattern_ptr, #07h

djnz n_Loop, loop

ret ;

;***********************************************************

; Таблица состояний выводимых данных на порт 1 и

; соответственно на восемь светодиодов

;************************************************************

PATTERN_TABLE:

dcb 00000000b

dcb 10000001b

dcb 11000011b

dcb 11100111b

dcb 11111111b

dcb 11100111b

dcb 11000011b

dcb 10000001b

;*********************************************************

$nolist

$include (work.inc)

$list

END ;Конец программы

Соседние файлы в папке Лабораторные работы по МПС