Организация ввода-вывода при работе с последовательным портом

Страницы работы

Содержание работы

Выполнил:

Студент группы ЭС-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

Похожие материалы

Информация о работе