- •Содержание
- •Список сокращений
- •Введение
- •Структура микроконтроллера
- •Процессор микроконтроллера
- •Адресное пространство микроконтроллера
- •Подключение erom и eram к микроконтроллеру
- •Периферийные устройства микроконтроллера
- •Параллельные порты ввода-вывода
- •Таймер-счетчик т/с0
- •Таймер-счетчик т/с1
- •Последовательный порт
- •Контроллер прерываний
- •Система команд микроконтроллера
- •Общие сведения о языке Ассемблер для микроконтроллеров стандарта mcs-51 и о программном пакете фирмы 2500 a.D.
- •Синтаксис языка Ассемблер
- •Определители основания системы счисления
- •Макроопределения
- •Сообщения о некоторых ошибках ассемблирования
- •Рекомендуемая процедура инициализации микроконтроллера
- •Типичные применения микроконтроллеров
- •Ввод информации с датчиков
- •Опрос двоичного датчика
- •Ожидание события
- •Ожидание импульсного сигнала
- •Устранение дребезга контактов
- •Подсчет числа импульсов
- •Подсчет числа импульсов за интервал времени между двумя событиями
- •Подсчет числа импульсов за заданный промежуток времени
- •Опрос группы двоичных датчиков
- •Ввод информации с матричной клавиатуры
- •Вывод управляющих сигналов из микроконтроллера
- •Формирование статических сигналов
- •Формирование импульсных сигналов
- •Генерация меандра
- •Формирование сигнала с заданной скважностью
- •Вывод и отображение информации
- •Динамический вывод информации на дисплей из семисегментных индикаторов
- •Реализация функций реального времени
- •Программное формирование временной задержки
- •Формирование временной задержки с использованием таймеров
- •Измерение временных интервалов
- •Преобразование кодов
- •Преобразование унитарного кода в двоичный позиционный
- •Преобразование двоичного позиционного кода в унитарный
- •Преобразование кодов из одной системы счисления в другую
- •Преобразование данных из параллельного кода в последовательный и обратно
- •Цифро-аналоговое преобразование
- •Аналого-цифровое преобразование
- •Метод последовательного приближения
- •Метод двойного интегрирования
- •Операции с памятью
- •Тестирование озу
- •Программа тестирования пзу
- •Обмен данными по шине i2с
- •Общие положения и введение в логику работы шины i2с
- •Пример обмена данными по шине i2c
- •Приём данных по протоколу Centronics
- •Литература
Преобразование данных из параллельного кода в последовательный и обратно
Наиболее распространенным применением процедур преобразования параллельной формы в последовательную и обратно является связь с удаленными датчиками, исполнительными механизмами и другими МК по однопроводным и двухпроводным линиям передачи информации.
Для этих целей удобно использовать аппаратные средства микроконтроллера – последовательный порт (см. п. 1.3.4). Порт может работать в двух режимах: в режиме сдвигающего регистра и режиме универсального асинхронного приёмопередатчика.
Работа последовательного порта в режиме сдвигающего регистра предполагает синхронную выдачу и приём битов информации (рисунок 4.20).
Внешнее устройство, принимающее информацию, должно «защёлкивать» биты по переднему фронту сигнала на выходе TXD, выдающее – устанавливать данные по заднему фронту.
Выдача информации в этом режиме может быть реализована следующим образом (листинг 4.32).
|
|
Рисунок 4.20 – Организация последовательного синхронного обмена между микроконтроллером и периферийным устройством |
Листинг 4.32 – Программа выдачи информации микроконтроллером
|
ORG 0000H |
; Адрес начала программы |
NEXT: |
MOV IE, #00H MOV SCON, #00H
MOV P0, #FFH MOV A, P0 SETB P1.0
MOV SBUF, A
JNB TI, $ CLR P1.0
CLR TI JMP NEXT |
; Запрет всех прерываний ; Настройка последовательного ; порта контроллера на режим ; синхронной передачи ; Настройка порта P0 на ввод ; Чтение данных из порта P0 ; Разрешение внешнему ; устройству приёма данных ; Запись данных в регистр SBUF ; (при этом автоматически ; начинается выдача данных) ; Ожидание завершения передачи ; Запрет внешнему устройству ; приёма данных ; Сброс флага конца передачи ; Переход на начало цикла |
Процедура приёма данных аналогична процедуре выдачи (листинг 4.33).
Листинг 4.33 – Программа приёма информации микроконтроллером
|
ORG 0000H |
; Адрес начала программы |
NEXT: |
MOV IE, #00H MOV SCON, #10H
SETB P1.0
JNB RI, $ MOV A, SBUF MOV P0, A CLR P1.0
CLR RI JMP NEXT … |
; Запрет всех прерываний ; Настройка последовательного ; порта контроллера на режим ; синхронного приёма ; Разрешение внешнему ; устройству на передачу данных ; Ожидание завершения приёма ; Чтение данных из регистра SBUF ; и их выдача в P0 ; Запрет внешнему устройству ; передачи данных ; Сброс флага конца приёма ; Переход на начало цикла |
Режим универсального приёмопередатчика удобно использовать для асинхронной выдачи и асинхронного приёма информации по последовательному каналу связи (например, по интерфейсу RS-232). Описание работы последовательного порта в режиме универсального приёмопередатчика приведено в п. 1.3.4.
Программа, реализующая прием байта данных, его инвертирование и выдачу обратно (подобная процедура часто используется для тестирования физических линий связи), реализована следующим образом (листинг 4.34).
Листинг 4.34 – Программа, демонстрирующая асинхронный обмен информации через последовательный порт
FOSC:
BR: COUNT:
|
.EQU 18432000
.EQU 9600 .EQU 256-(FOSC/(BR*192)) |
; Частота кварцевого ; резонатора ; Скорость обмена (бод) ; Число, загружаемое в ; таймер-счетчик T/C2 |
|
.ORG 0000H |
; Адрес начала программы |
CICLE:
|
MOV TMOD, #20H
MOV SCON, #50H
ORL PCON, #80H
MOV TH1, #COUNT MOV TL1, TH1 CLR TI
CALL READ CPL A
CALL SEND JMP CICLE |
; Настройка T/C2 в режим ; с автоперезагрузкой ; Настройка ; последовательного порта ; Установка бита 7 ; регистра PCON (бит ; влияет на скорость ; передачи) ; Загрузка регистров T/C2
; Сброс флага готовности ; передатчика ; Сброс флага готовности ; приёмника ; Вызов процедуры приёма ; Инвертирование ; полученного байта ; Вызов процедуры выдачи ; Переход на начало цикла |
; ПОДПРОГРАММЫ |
||
; Подпрограмма асинхронного приёма |
||
READ:
|
JNB RI, $
MOV A, SBUF
CLR RI
RET |
; Ожидание установки ; флага готовности ; приёмника ; (устанавливается при ; получении символа) ; Считывание в ; аккумулятор принятого ; байта ; Сброс флага готовности ; приёмника ; Выход из подпрограммы |
; Подпрограмма асинхронной выдачи |
||
SEND: |
MOV SBUF, A
JNB TI, $
CLR TI RET |
; Загрузка в регистр ; SBUF Отправляемого ; значения ; Ожидание установки ; флага готовности ; передатчика ; Сброс флага готовности ; передатчика ; Выход из подпрограммы |