Федеральное агентство по образованию бийский технологический институт (филиал)

Вид материалаДокументы

Содержание


3.2Сообщения о некоторых ошибках ассемблирования
Can't open input file
Can't find filename.obj
SYNTAX ERROR (Синтаксическая ошибка.)
Multiply defined symbol
Relative jump too large
Illegal register
Illegal label 1st character
3.3Рекомендуемая процедура инициализации микроконтроллера
Контрольные вопросы
Подобный материал:
1   2   3   4   5   6   7   8   9   10   ...   14

3.2Сообщения о некоторых ошибках ассемблирования


Ошибка:

CAN'T CREATE OUTPUT FILE - DISK MAY BE FULL

(Невозможно создание выходного (результирующего) файла – возможно, диск полон.)

Значение: либо возможно, что диск действительно полон, либо операционная система не позволяет, чтобы одновременно было бы открыто необходимое число файлов.

Ошибка:

CAN'T OPEN INPUT FILE

(Невозможно открытие входного файла.)

Значение: Операционная система не допускает одновременное открытие необходимого числа файлов.

Ошибка:

CAN'T FIND FILENAME.OBJ

(Файл с именем <имя файла>.OBJ не обнаружен.)

Значение. Имя объектного файла (файла с расширением имени .OBJ) не существует, либо операционная система не допускает одновременного открытия необходимого числа файлов.

Ошибка:

SYNTAX ERROR (Синтаксическая ошибка.)

Значение: обычно эта ошибка возникает из-за пропущенной запятой или круглой скобки.

Ошибка:

ILLEGAL ADDRESSING MODE

(Неверный режим адресации.)

Значение: адресация операнда с использованием данной формы адресации в данной команде недопустима.

Ошибка:

MULTIPLY DEFINED SYMBOL

(Символ уже описан.)

Значение: данный символ уже описан ранее. Например, две метки с одинаковым именем.


Ошибка:

UNDEFINED SYMBOL

(Символ не определен.)

Значение: символ не был описан в период выполнения первого прохода Ассемблера. Например, команда ссылается на отсутствующую метку.

Ошибка:

RELATIVE JUMP TOO LARGE

(Слишком далекий относительный переход.)

Значение: результирующий адрес перехода находится на другой странице. Часто возникает при адресации далекой метки командой SJMP.

Ошибка:

ILLEGAL REGISTER

(Недопустимое использование регистра.)

Значение: для данной команды недопустимо использование указанного регистра.

Ошибка:

ILLEGAL LABEL 1ST CHARACTER

(Неверен первый символ метки.)

Значение: Метка должна начинаться с алфавитного символа.

Ошибка:

MISSING LABEL

(Пропущена метка.)

Значение: в данной команде требуется присутствие метки.

3.3Рекомендуемая процедура инициализации микроконтроллера


Сразу после сброса микроконтроллера практически всегда необходимо выполнить инициализацию микроконтроллера. При инициализации микроконтроллера может быть использована процедура, приведённая в листинге 3.1.


Листинг 3.1 – Процедура инициализации микроконтроллера




.ORG 0000H

; Адрес начала программы




JMP BEGIN

; Переход к основной части

; программы




.ORG 0003H

; Адрес обработчика

; прерываний по входу INT0




JMP EXT0

; Переход на процедуру

; обработки прерываний по

; входу INT0




.ORG 000BH

; Адрес обработчика

; прерываний от таймера

; T/C0




JMP TIMER0

; Переход на процедуру

; обработки прерываний от

; таймера T/C0




.ORG 0013H

; Адрес обработчика

; прерываний по входу INT1




JMP EXT1

; Переход на процедуру

; обработки прерываний по

; входу INT1




.ORG 001BH

; Адрес обработчика

; прерываний от таймера

; T/C0




JMP TIMER1

; Переход на процедуру

; обработки прерываний от

; таймера T/C0




.ORG 0023H

; Адрес обработчика

; прерываний от

; последовательного порта




JMP SERIAL

; Переход на процедуру

; обработки прерываний от

; последовательного порта

BEGIN:


CLR EA



; Запрет всех прерываний


CLEAR:

MOV R0, #7FH

MOV @R0, #00H

DJNZ R0, CLEAR

; Очистка оперативной

; памяти микроконтроллера




MOV SP, #30H




; Переопределение дна стека

; Здесь должна находиться

; основная программа





JMP $

; Останов программы

; (команда перехода «сама на

; себя»)


EXT0:






RETI



; Здесь может находиться

; процедура обработки

; прерывания от входа INT0

; Команда выхода из

; прерывания


EXT1:






RETI



; Здесь может находиться

; процедура обработки

; прерывания от входа INT1

; Команда выхода из

; прерывания

TIMER0:





RETI



; Здесь может находиться

; процедура обработки

; прерывания от таймера

; T/C0

; Команда выхода из

; прерывания

TIMER1:





RETI



; Здесь может находиться

; процедура обработки

; прерывания от таймера

; T/C1

; Команда выхода из

; прерывания

SERIAL:





RETI



; Здесь может находиться

; процедура обработки

; прерывания от

; последовательного порта

; Команда выхода из

; прерывания


В данной процедуре выполняется определение векторов и процедур всех прерываний. Эта процедура позволяет исключить все возможные последствия «случайного попадания» в область векторов прерывания.

Сброс флага EA необходим для запрета всех прерываний до момента инициализации всех переменных, используемых как основной программой, так и подпрограммами обработки прерываний.

Очистку оперативной памяти микроконтроллера рекомендуется выполнять тем программистам, которые привыкли «рассчитывать» на нулевые значения впервые используемых регистров и ячеек памяти.

Переопределение дна стека рекомендуется выполнять, если предполагается активная работа со стеком (команды POP, PUSH, CALL, ACALL, LCALL, RET). Данная операция необходима и при использовании аппаратных прерываний, т.к. при прерывании адрес программы, которая была прервана, сохраняется в стеке и извлекается из стека при выходе из прерывания по команде RETI.

Контрольные вопросы
  1. Какая система счисления по умолчанию предполагается компилятором?

Является ли компилятор регистрозависимым?

Допускается ли писать текст программы, начиная с первой колонки?

Как оформляются комментарии?

Обязательно ли ставить точку перед именем директивы?

Что такое макроопределения?

Для чего при инициализации микроконтроллера рекомендуется настраивать все вектора прерываний?

Обязательно ли переопределение указателя стека и очистка внутреннего ОЗУ? Почему?