Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие по АТ89С51 изд.вариант 2010-54.doc
Скачиваний:
86
Добавлен:
19.11.2019
Размер:
865.22 Кб
Скачать
      1. Преобразование данных из параллельного кода в последовательный и обратно

Наиболее распространенным применением процедур преобразования параллельной формы в последовательную и обратно является связь с удаленными датчиками, исполнительными механизмами и другими МК по однопроводным и двухпроводным линиям передачи информации.

Для этих целей удобно использовать аппаратные средства микроконтроллера – последовательный порт (см. п. 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 Отправляемого

; значения

; Ожидание установки

; флага готовности

; передатчика

; Сброс флага готовности

; передатчика

; Выход из подпрограммы