Федеральное агентство по образованию бийский технологический институт (филиал)
Вид материала | Документы |
- Федеральное агентство по образованию бийский технологический институт (филиал), 981.77kb.
- Федеральное агентство по образованию Бийский технологический институт (филиал), 2694.55kb.
- Федеральное агентство по образованию бийский технологический институт (филиал), 2134.54kb.
- Федеральное агентство по образованию бийский технологический институт (филиал), 1660.78kb.
- Федеральное агентство по образованию бийский технологический институт (филиал), 1946.38kb.
- Федеральное агентство по образованию бийский технологический институт (филиал), 3460.44kb.
- Решением Ученого совета, 125.93kb.
- Федеральная целевая программа "Развитие электронной компонентной базы и радиоэлектроники", 3538.74kb.
- Бийский технологический институт (филиал), 2586.35kb.
- Министерство образования и науки федеральное агентство по образованию майкопский государственный, 102.13kb.
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.
Контрольные вопросы
- Какая система счисления по умолчанию предполагается компилятором?
Является ли компилятор регистрозависимым?
Допускается ли писать текст программы, начиная с первой колонки?
Как оформляются комментарии?
Обязательно ли ставить точку перед именем директивы?
Что такое макроопределения?
Для чего при инициализации микроконтроллера рекомендуется настраивать все вектора прерываний?
Обязательно ли переопределение указателя стека и очистка внутреннего ОЗУ? Почему?