Выполнил:
Студент группы ЭС-41
Матылицкий И. В.
Лабораторная работа № 6
Организация ввода-вывода при работе с последовательным портом
Цель работы: Изучить возможности реализации ввода-вывода, предоставляемые последовательным портом архитектуры MCS-51.
Индивидуальное задание.
Вариант 2: скорость передачи 600 бит/с.
res = min( val1, val2 ) + val3
Временные диаграммы и описание работы.
Спроектированная система состоит из двух модулей, выполняющих разные функции. Информационный обмен между модулями осуществляется через последовательный порт с заданной скоростью передачи. Для настройки частоты передачи используется таймер 1.
Модуль 1 изначально находится в режиме ожидания готовности данных к считыванию. Как только данные готовы, на линию INT0 подаётся срез сигнала, что вызывает прерывание. При обработке прерывания модуль считывает данные, коммутируя сигналы к параллельному порту P0 с помощью тристабильных буферов. После считывания выставляется запрос на приём по линии P2.7. Как только по линии INT1 приходит подтверждение готовности к приёму, инициируется передача операндов один за одним. Затем модуль ожидает запроса на считывание результата по INT1. Как только приходит запрос, модуль инициирует приём, подтверждая готовность по линии P2.7. После приёма 3-байтный пакет записывается в защёлки блока индикаторов 1.
Модуль 2 изначально находится в режиме ожидания готовности операндов к передаче. Как только операнды готовы к передаче, на линию INT0 подаётся срез сигнала, что вызывает прерывание. При обработке прерывания операнды принимаются через UART (подтверждение-приём), отображаются на блоке индикаторов 2, вычисляется результат по формуле, формируется 3-байтный пакет и передаётся в обратном направлении (запрос-приём подтверждения-передача).
Расчет скорости передачи.
f1,3=(2SMOD/32)*fOVT1 ;
f1,3=600 Гц;
Пусть SMOD=1, тогда:
600=1/16*fOVT1 ;
fOVT1=9600 Гц;
TOVT1=0.0001042 с;
NT= TOVT1/fПОДСЧ;
NT=104
TH1=256-104=151
Листинг составленной программы
Листинг для 1-го устройства (считывание-передача-приём-отображение)
;Reader & transmitter module
BUFFER_VAL1 SET R0 ;буфер данных 1
BUFFER_VAL2 SET R1 ; ... 2
BUFFER_VAL3 SET R2 ; ... 3
ORG 0100h
main:
call init_devices ;инициализация модулей и
;регистров
main_cycle:jmp main_cycle ;ожидание прерывания от
;передатчика
init_devices:
clr EA ;запрет прерываний во
;время инициализации
mov P3, #0FFh ;альтернативные функции порта
;INT0 используется для сигнализации о
;готовности значений ко вводу
;INT1 - ответ калькулятора на запрос
mov P0, #0FFh ;порт - вход для значений
mov P1, #00h ;порт - выход на защёлки монитора
mov P2, #00h ;порт управления
;P2.0 - CLK для защёлки
;позиции 1
;P2.1 - ... 2
;P2.2 - ... 3
;P2.3 - подача на P0 значения 1
;P2.4 - ... 2
;P2.5 - ... 3
;P2.6 - сброс
;P2.7 - запрос у калькулятора/подтверждение
setb P2.6 ;сброс
clr P2.6
mov SCON, #01000000b ;установка UART в режим 1
mov PCON, #10000000b ;без удвоения скорости передачи
;настройка частоты передачи UART
mov TMOD, #00100000b ;установка таймера 1
;в режим 2 (8-битный с перезагрузкой)
mov TCON, #00000101b ;реагировать на срез
;по внешним линиям
;INT0 и INT1
mov TH1, #97h ;перезагружаемое значение таймера
mov TL1,TH1 ;начальная установка счётчика
setb TR1 ;старт таймера
mov IE, #00010001b ;разрешить прерывания от UART и
;по линии INT0
mov IP, #00010000b ;более приоритетно
;прерывание по UART
setb EA ;глобально разрешить прерывания
ret
transmit_values:
setb P2.7 ;запрос на приём операндов
l_wait_ready_transmit:jnb P3.3, l_wait_ready_transmit ;ожидание
;готовности
mov SBUF, BUFFER_VAL1 ;передача 1-го операнда
l_wait_transmit1:jnb TI, l_wait_transmit1 ;ожидание завершения
clr TI
mov SBUF, BUFFER_VAL2 ; ... 2-го
l_wait_transmit2:jnb TI, l_wait_transmit2
clr TI
mov SBUF, BUFFER_VAL3
l_wait_transmit3:jnb TI, l_wait_transmit3
clr TI
clr P2.7
ret
read_values:
clr EA
mov P2, #00h
setb P2.3 ;открытие буфера операнда 1
mov BUFFER_VAL1, P0 ;считывание
clr P2.3 ;закрыть буфер
setb P2.4
mov BUFFER_VAL2, P0
clr P2.4
setb P2.5
mov BUFFER_VAL3, P0
clr P2.5
setb EA
ret
recieve_values:
setb REN ;разрешить приём
;по UART
l_wait_ready_recieve:jnb P3.3, l_wait_ready_recieve ;ожидание запроса
;к приёму
setb P2.7 ;подтверждение готовности
l_wait_recieve1:jnb RI, l_wait_recieve1 ;получение 1-го байта пакета
clr RI
mov BUFFER_VAL1, SBUF
l_wait_recieve2:jnb RI, l_wait_recieve2
clr RI
mov BUFFER_VAL2, SBUF
l_wait_recieve3:jnb RI, l_wait_recieve3
clr RI
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.