- •Содержание
- •Список сокращений
- •Введение
- •Структура микроконтроллера
- •Процессор микроконтроллера
- •Адресное пространство микроконтроллера
- •Подключение erom и eram к микроконтроллеру
- •Периферийные устройства микроконтроллера
- •Параллельные порты ввода-вывода
- •Таймер-счетчик т/с0
- •Таймер-счетчик т/с1
- •Последовательный порт
- •Контроллер прерываний
- •Система команд микроконтроллера
- •Общие сведения о языке Ассемблер для микроконтроллеров стандарта mcs-51 и о программном пакете фирмы 2500 a.D.
- •Синтаксис языка Ассемблер
- •Определители основания системы счисления
- •Макроопределения
- •Сообщения о некоторых ошибках ассемблирования
- •Рекомендуемая процедура инициализации микроконтроллера
- •Типичные применения микроконтроллеров
- •Ввод информации с датчиков
- •Опрос двоичного датчика
- •Ожидание события
- •Ожидание импульсного сигнала
- •Устранение дребезга контактов
- •Подсчет числа импульсов
- •Подсчет числа импульсов за интервал времени между двумя событиями
- •Подсчет числа импульсов за заданный промежуток времени
- •Опрос группы двоичных датчиков
- •Ввод информации с матричной клавиатуры
- •Вывод управляющих сигналов из микроконтроллера
- •Формирование статических сигналов
- •Формирование импульсных сигналов
- •Генерация меандра
- •Формирование сигнала с заданной скважностью
- •Вывод и отображение информации
- •Динамический вывод информации на дисплей из семисегментных индикаторов
- •Реализация функций реального времени
- •Программное формирование временной задержки
- •Формирование временной задержки с использованием таймеров
- •Измерение временных интервалов
- •Преобразование кодов
- •Преобразование унитарного кода в двоичный позиционный
- •Преобразование двоичного позиционного кода в унитарный
- •Преобразование кодов из одной системы счисления в другую
- •Преобразование данных из параллельного кода в последовательный и обратно
- •Цифро-аналоговое преобразование
- •Аналого-цифровое преобразование
- •Метод последовательного приближения
- •Метод двойного интегрирования
- •Операции с памятью
- •Тестирование озу
- •Программа тестирования пзу
- •Обмен данными по шине i2с
- •Общие положения и введение в логику работы шины i2с
- •Пример обмена данными по шине i2c
- •Приём данных по протоколу Centronics
- •Литература
Макроопределения
LABEL: EQU VALUE – присваивает имени LABEL значение VALUE. VALUE может быть другим символом или разрешенным математическим выражением. При компиляции, в тексте программы перед компиляцией все имена LABEL заменяются величиной VALUE.
Сообщения о некоторых ошибках ассемблирования
Ошибка:
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.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.
Контрольные вопросы
Какая система счисления по умолчанию предполагается компилятором?
Является ли компилятор регистрозависимым?
Допускается ли писать текст программы, начиная с первой колонки?
Как оформляются комментарии?
Обязательно ли ставить точку перед именем директивы?
Что такое макроопределения?
Для чего при инициализации микроконтроллера рекомендуется настраивать все вектора прерываний?
Обязательно ли переопределение указателя стека и очистка внутреннего ОЗУ? Почему?