ОРГАНИЗАЦИЯ АСИНХРОННОГО ПАРАЛЛЕЛЬНОГО ОБМЕНА ДАННЫМИ С КВИТИРОВАНИЕМ на МК AVR

February 24, 2011 by admin Комментировать »

Цель работы – изучение режимов ввода;вывода информации через порты микроконтроллера и организация асинхронного параллельного обмена данными с квитированием.

Асинхронный обмен между микроконтроллером и ВУ можно осуществить различными способами.

Способ с опросом состояния внешнего устройства. При этом способе микроконтроллер считывает из контроллера адресованного ВУ слово состояния (SW) ВУ. Если бит готовности в слове состояния указывает на готовность ВУ к обмену данными, микроконтроллер запускает эту операцию (чтение при вводе или запись при выводе). При вводе данных микроконтроллер посылает ВУ сигнал чтения по линии управления, разрешающий передачу данных, получив который ВУ возвращает микроконтроллеру байт данных. При выводе микроконтроллер выводит в порт данные и посылает управляющий сигнал записи (Строб данных) по линии управления, по которому осуществляется фиксация данных в ВУ. Алгоритмы процедур асинхронного ввода и вывода приведены на рис. 6.6.

Способ с использованием квитирующих сигналов. Этот способ позволяет выполнить обмен между двумя устройствами – ведущим (инициатором обмена) и ведомым.

Напомним, что квитирующими называют сигналы, получаемые от ведомого устройства и используемые для подтверждения действия, инициированного ведущим устройством. Протокол обмена с квитированием рассмотрим на примере обмена микроконтроллера с одним ВУ, непосредственно адресуемым сигналом запроса, поступающим на вход устройства и заменяющим его адрес.

По сигналу запроса микроконтроллера ВУ информирует микроконтроллер о своей готовности, посылая ответный сигнал подтверждения (в более общем случае вместе с ним устройство может

Рис. 6,6, Схемы алгоритмов асинхронного ввода {а) и вывода (б)

вернуть слово состояния ВУ). Приняв его, микроконтроллер получает информацию о готовности ВУ к выполнению обмена. Дальнейшие действия зависят от вида выполняемой транзакции.

Если выполняется передача данных из ВУ, микроконтроллер выводит через порт на шину байт с управляющей информацией, сопровождая его сигналом стробирования. Ведомое устройство, получив управляющую информацию, переходит к подготовке данных для передачи в микроконтроллер и выводит их (и при необходимости информацию о состоянии) на шину данных, вырабатывая сигнал подтверждения данных. Когда ведущее устройство (микроконтроллер), выполнив проверку возвращаемого сигнала, убедится, что данные отправлены, оно осуществляет их прием и сохранение в памяти. После этого ведущее устройство снимает сигнал Строб, извещая о том, что данные получены. Обнаружив сброс строба, ведомое устройство снимает данные (и управляющую информацию о состоянии) и сигнал подтверждения.

Аналогично протекают действия при операции записи данных в ВУ. После подтверждения готовности ведущее устройство выводит на шину байт данных и управляющую информацию. Получив управляющую информацию и установив тип операции обмена, ведомое устройство выполняет прием данных и по завершении возвращает сигнал подтверждения. Приняв его, ведущее устройство может начать подготовку к следующему циклу обмена.

Обмен данными меаду устройством ввода;вывода и микроконтроллером

С учетом возможностей используемого оборудования STK500 и базового микроконтроллера АТх8515 рассмотрим организацию асинхронного параллельного обмена по 4-разрядной шине. В зависимости от задания микроконтроллер осуществляет ввод данных по линиям порта PD3-PD0 или вывод по линиям РВО-РВЗ. Полагаем, что данные представляют собой последовательность двоич- но-кодированных десятичных цифр в упакованном или распакованном формате, сохраняемую при вводе в ячейках памяти SRAM и извлекаемую из ячеек SRAM при выводе. В упакованном виде каждый байт содержит по две десятичные цифры. В распакованном виде каждая цифра занимает младшую тетраду байта, старшая тетрада содержит код 0011.

Инициатором обмена выступает внешнее устройство либо микроконтроллер. В первом случае прежде чем начать обмен микроконтроллер ожидает сигнал запроса от ВУ, затем выставляет сигнал готовности к обмену, принимает или передает данные, снимает сигнал готовности, ожидает снятия запроса от ВУ, после чего продолжает работу.

Во втором случае каждая операция обмена начинается с выдачи микроконтроллером сигнала запроса к ВУ. Обмен осуществляется после приема от ВУ сигнала подтверждения готовности, при поступлении которого МК производит ввод или вывод данных, снимает запрос, ожидает снятия сигнала подтверждения со стороны ВУ и затем продолжает работу.

Обмен управляющими сигналами между МК и ВУ осуществляется при каждой передаче. ВУ вырабатывает сигнал запроса (или ответный сигнал готовности), передаваемый в МК по линии PD.7. МК выдает ответный сигнал готовности (или запрос), выводимый по линии РВ.6. Активное значение управляющего сигнала указывается в задании (И – высокий уровень, L – низкий).

На рис. 6.7 приведена диаграмма сигналов, которыми обмениваются ВУ и микроконтроллер при вводе данных по запросу ВУ. Оба сигнала управления – Зпр ВУ (запрос от ВУ) и Подтв МК (подтверждение готовности от МК) характеризуются высоким уровнем активности (Н).

Поскольку отладочная плата не имеет переключателя с двумя устойчивыми состояниями (О и 1), с помощью которого можно сформировать потенциальный сигнал от ВУ, его функцию выполняют с помощью кнопки, вырабатывающей при каждом нажатии импульс, преобразуемый затем программой в потенциал, выводимый на светодиод индикации запроса.

На рис. 6.8 приведена схема взаимодействия кнопочного регистра SW платы STK500, программного модуля обработки кнопки, портов PD и РВ микроконтроллера и линейки светодиодов LED. Схемой предусмотрена индикация вводимых данных от кнопок SW0-SW3 с помощью светодиодов LED0-LED3 (на рис. 6.8 не показаны), сигнала запроса (LED7) и подтверждения готовности (LED6). Для этого необходимо на отладочной плате соединить 10- проводными шлейфами PD и SW, порт РВ и LED.

Длина цифровой последовательности задается значением либо хранится в регистре R0, либо определяется по начальной цифре передаваемой последовательности (НЦ), либо специальным символом конца обмена (ССКО), например *, ASCII-код которого равен $2А, а также по сигналу окончания обмена низкого уровня (COO L) на входе 4 порта PD (PIND.4). После завершения передачи цифровой последовательности управление передается на начало программы.

Пример программы ввода, согласно варианту 6 задания (табл. 6.2), рассмотрен ниже. Микроконтроллер осуществляет ввод упакованных чисел 4-разрядным параллельным кодом по линиям порта PD3-PD0. Начальный адрес памяти SRAM – $0170. Адресация ячеек памяти осуществляется через регистр Z с постинкрементом содержимого регистра. Длина вводимой последовательности – четыре цифры. Инициатор обмена – внешнее устройство, роль которого исполняет оператор, формирующий с помощью кнопки SW7 запрос по линии PD.7.

Программа 6.2

;Программа 6.2 ввода четырех 2-10 цифр с упаковкой и ;квитированием ввода в память SRAM по адресам ;0x0170,0x0171

;SWO – SW3 – кнопки ввода 2-10 цифры ;LEDO – LED3 – индикаторы 2-10 цифры ;SW7 – кнопка запроса от оператора ;LED7 – индикатор запроса от оператора ;LED6 – индикатор подтверждения от МК ;Установить шлейфами соединения: PD-SW, PB-LED

.include "8515def.inc"    ;файл определений для AT90S8515

;.include "m8515def.inc"  ;файл определений для ATmega8515

.def temp = rl6           ;временный регистр

.def in_dig = rl7         ;вводимая цифра (операнд)

.def sw_cod = rl8         ;код состояния замкнутой кнопки

.def in_data = г22        ;формируемый байт данных

.def count = г23          ;счетчик цифр одного байта

.def count_seq = г2 4     ;счетчик цифровой

; последовательности

.def reg_led = г25        ;регистр состояния

; светодиодов

.Вывод порта PD***

.equ int_vu = 7           ;запрос от кнопки оператора .Выводы порта РВ***

.equ led_int = 7          ;индикатор запроса от кнопки

.equ ack_mk = 6           ;индикатор подтверждения от МК .macro in_sw

sbic PIND, @0         ;проверка кнопки SW

rjmp quit             ; и установка

bid sw_cod, (Э0           ; бита замкнутой кнопки eor in_dig,sw_cod

rcall OUTLED           ; с индикацией quit: nop .endmacro in_sw

.org $000 rjmp init

.¦к-к-к Инициализация ^^^

INIT: Idi temp, low(RAMEND) ;установка

out SPL, temp                ; указателя стека

Idi temp, high(RAMEND)       ; на последнюю

out SPH, temp                ; ячейку ОЗУ

Idi ZL, 0x70                 ;0x0170 – начальный адрес

Idi ZH, 0x01                 ; памяти данных

ser temp                     ;настройка

out DDRB, temp               ; порта PB на вывод

clr temp                     ;настройка

out DDRD, temp               ; порта PD

ser temp                     ; на

out PORTD, temp              ; ввод

clr sw_cod

clr in_dig                   ;очистка операнда

set                          ;T=1 (SREG)

Idi count,0                  ;обнуление счетчиков Idi count_seq, 0

^Начало цикла передачи одной цифры^^^ ;Инициализация регистра светодиодов (7,6 биты): ;начальные значения сигналов запроса и подтверждения ;по условию задания равны О loop: Idi reg_led,ObOOOOOOOO

rcall OUTLED                 ;вывод

wait: sbic PIND,int_vu          ;ожидание запроса rjmp wait

bid sw_cod,int_vu            ;установка бита запроса rcall OUTLED

bid sw_cod, ack_mk           ; установка бита подтверждения

rcall OUTLED                 ;вывод на индикатор

; подтверждения от МК

WAIT_SW7_2:

in_sw О                      ;ввод 4-разрядного кода данных in_sw 1 in_sw 2 in_sw 3

sbic PIND, int_vu            ;ожидание повторного нажатия

rjmp WAIT_SW7_2              ; кнопки SW7 bid sw_cod,int_vu

rcall OUTLED                 ;сброс запроса

inc count_seq                ;увеличиваем счетчики цифр

inc count

cpi count, 2                 ;если счетчик равен двум, то

breq IN_DIG2                 ; переходим к записи 2-й цифры,

mov in_data, in_dig          ;иначе сохраняем 1-ю цифру St Z, in_data rjmp RES_ACK_mk

IN_DIG2: swap in_data

or in_data, in_dig ;запись второй цифры

; в упакованном формате St Z+, in_data      ; в память данных

Idi count, О RES_ACK_mk:

bid sw_cod, ack_mk

rcall OUTLED              ;сброс подтверждения от MK

Сброс данных clr in_dig   ;очистка для записи

; новых значений cpi count_seq, 4    ;если счетчик меньше четырех, то

brne loop                 ; переход к новому циклу ввода

rjmp init                 ;закончен ввод четырех цифр

Индикация ввода *** OUTLED:eor reg_led, sw_cod ;с учетом предыдущего значения com reg_led  ;инвертирование для вывода

out PORTB, reg_led            ; на светодиоды

com reg_led                   ;обратное инвертирование

clr sw_cod

rcall DELAY                   ;для исключения повторного

ret                           ; нажатия

Задержка *** DELAY: Idi г19,10 Idi г20,255 Idi г21,255 dd:dec г21 brne dd dec г20 brne dd dec rl9 brne dd ret

Задание L Составить программу на языке Ассемблер AVR для заданного варианта. Выполнить отладку программы в отладочной среде AVR Studio 4. Загрузить программу в микроконтроллер и проверить ее работу в STK500.

Обмен данными между микроконтроллерами

Обмен данными между двумя микроконтроллерами по параллельному интерфейсу может быть выполнен по протоколу с квитированием в случае занятости одного из них обслуживанием внешнего устройства. Протокол обмена рассмотрим на примере с двумя микроконтроллерами, когда один из них – МК1 – выполняет передачу данных в микроконтроллер МК2.

Для выполнения одного сеанса передачи в микроконтроллере МК1 следует предусмотреть следующие действия:

1)  посылку сигнала запроса в микроконтроллер МК2;

2)  ожидание сигнала, подтверждающего готовность МК2;

3)   при получении ответного сигнала вывод очередного байта (или тетрады) на шину данных;

4)   изменение сигнала запроса, используемое как признак присутствия данных на шине;

5)   ожидание сигнала, подтверждающего прием данных микроконтроллером МК2;

6)  выход из сеанса передачи.

За рамками сеанса связи микроконтроллер МК1 может выполнять любую работу, например подготовку очередного байта (или тетрады).

Микроконтроллер МК2 после инициализации ожидает поступления сигнала запроса на один из входов внешнего прерывания. При поступлении запроса осуществляется вызов обработчика прерывания, в котором следует предусмотреть следующие действия:

1)      возвращение запрашивающему микроконтроллеру МК1 сигнала подтверждения готовности к обмену;

2)  ожидание сигнала о присутствии данных на шине;

3)  прием данных и сохранение в пямяти;

4)    возвращение микроконтроллеру МК1 сигнала подтверждения приема;

5)  выход из прерывания.

После приема байта (тетрады) микроконтроллер МК2 возвращается к выполнению прерванной программы.

Задание 2. Разработать проект, осуществляющий передачу из МК1 в МК2 многоразрядного двоично-десятичного числа, например код номера телефона, по 4-разрядной шине.

В качестве исходного кода можно использовать данные, поступающие от оператора с кнопочного регистра, либо код, хранимый в программной памяти микроконтроллера МК1, обращение к которой начинается по сигналу от кнопки Start.

Микроконтроллер МК2 постоянно находится в режиме бесконечного цикла. После завершения приема он осуществляет в целях контроля последовательный вывод числовой последовательности на светодиодную линейку.

Подготовить и отладить программы для обоих микроконтроллеров, используя AVR Studio 4. Проверить работу схемы на модели, используя симулятор программы ISIS Proteus 6. Загрузить обе программы в микроконтроллеры двух STK500. Выполнить необходимые соединения между микроконтроллерами. Проверить работу схемы на макете.

Оставить комментарий

микросхемы мощности Устройство импульсов питания пример приемника провода витков генератора выходе напряжение напряжения нагрузки радоэлектроника работы сигнал сигнала сигналов управления сопротивление усилитель усилителя усиления устройства схема теория транзистора транзисторов частоты