Принципы организации взаимодействия микропроцессора с внешними устройствами



Функционирование микропроцессорной системы, особенно ориентированной на системы управления, во многом определяется взаимодействием микропроцессора с внешними устройствами. Такое взаимодействие может строиться по трем основным схемам:

  • программно управляемый обмен;
  • обмен по готовности внешнего устройства;
  • обмен по прерыванию.

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

Второй механизм обмена (обмен по готовности) предполагает перед началом обмена проверку состояния готовности внешнего устройства.

Обмен производится лишь при положительном результате такой проверки. Этот способ используется в основном в тех случаях, когда микроконтроллер не занят выполнением каких-либо иных задач и его работа строится по циклу "считывание показаний датчика - обработка - выдача управляющих воздействий - считывание показаний датчика - ...".

Обмен по прерыванию предусматривает прерывание естественного порядка выполнения программы в случае запроса на обмен от внешнего устройства, который может поступить на МК в любой момент асинхронно по отношению к работе самого микроконтроллера. Появление запроса ведет к передаче управления специальной программе - обработчику прерывания, которая и выполняет все необходимые для обмена действия, после чего возвращает управление основной программе. Такой способ обмена может быть использован в тех случаях, когда запросы от внешних устройств поступают относительно редко, требуют быстрой реакции на них и в то же время на микроконтроллер возложено решение ряда дополнительных задач, выполнение которых может проходить не в реальном масштабе времени ("фоновые задачи").

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

При вводе по готовности вы постоянно поднимаете крышку чайника, чтобы проверить, не кипит ли вода. Естественно, в это время никакой другой работой заниматься невозможно. Однако при этом момент закипания будет определен достаточно точно.

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

Рассмотрим реализацию этих принципов на примере разработки простейшей системы сбора и обработки информации, построенной на основе микроконтроллера типа МК-51: МПС считывает показания от аналоговых датчиков, преобразует эту информацию в цифровой код, обрабатывает его и фиксирует результат во внешнем устройстве.

Взаимодействие микроконтроллера с аналого-цифровым преобразователем рассмотрим на примере АЦП К1113ПВ1. Его упрощенное условно-графическое изображение, содержащее обозначения только тех входов и выходов, которые используются при работе с МК, приведено на рис. 15.1, а временная диаграмма, иллюстрирующая его работу, - на рис. 15.2. АЦП запускает преобразование "аналог-код" в момент переключения сигнала "Г/П" ("гашение/преобразование") с высокого уровня на низкий. Преобразование осуществляется не более 30 мкс (Tпр < 30мкс). Об окончании преобразования свидетельствует появление сигнала низкого уровня на выходе ГД ("готовность данных"). В этот момент цифровые выходы АЦП (Q) переходят из состояния высокого импеданса в состояние выдачи цифрового кода. Цифровой код на выходе АЦП - 10-разрядный (разряд Q0 - старший). Для выполнения следующего преобразования АЦП требует предварительной подачи сигнала гашения высокого уровня длительностью не менее 10 мкс на вход Г/П (Tг 10мкс). При этом цифровые выходы Q переходят в состояние высокого импеданса, в котором остаются до появления сигнала низкого уровня на выходе ГД.

 

 

Рис. 15.1. Условно-графическое обозначение аналого-цифрового преобразователя К1113ПВ1

 

 

Рис. 15.2. Временная диаграмма работы аналого-цифрового преоб разователя

Ввод по готовности проиллюстрируем на примере построения МПС, решающей следующую задачу.

Микропроцессорная система определяет среднее значение шести последовательных опросов датчика и выводит полученное значение на внешнее устройство через порт P2. Обращение к датчику осуществляется 1 раз в секунду. В промежутках между работой с датчиком МК на выходе P2.7 формирует периодическую последо1вательность импульсов длительностью t= 200 мкс и периодом T = 800 мкс. На время работы с датчиком генерация сигнала на выходе P2.7 приостанавливается.

Структурная схема системы представлена на рис. 15.3. На схеме изображены только те входы и выходы элементов, которые необходимы для понимания взаимодействия устройств и разработки программы. Здесь выход готовности данных аналого-цифрового преобразователя подсоединен к входу P1.5 микроконтроллера. Микроконтроллер запускает АЦП сигналом низкого уровня на выходе Р1.6 и постоянно контролирует состояние входа P1.5. Появление на нем сигнала низкого уровня свидетельствует о том, что преобразование закончено и микроконтроллер может приступить к обработке этих данных.

 

 

Рис. 15.3. Структурная схема микропроцессорной системы с вводом информации по готовности данных

Прежде чем писать программу, обсудим вопрос, ответ на который представляется очевидным: как определить среднее из нескольких значе ние? Ну конечно же так:

 

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

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

 

Однако при этом возрастает количество операций деления и снижается точность вычислений.

Таким образом, даже самый простой, казалось бы, вопрос может весьма существенно отразиться на вариантах построения микропроцессорной системы и разработке алгоритмов ее функционирования.

Так как нашей целью является анализ вариантов обмена информацией между МК и внешним устройством, а не иллюстрация вычислительных возможностей микроконтроллера, используем третий вариант решения. Будем считывать с АЦП 5-разрядный код, фактически снижая точность представления показания датчика, но обезопасив себя от возможных переполнений при суммировании 6 показаний: сумма всех показаний ни при каких значениях не выйдет за пределы 8-разрядной сетки. В схеме подключения учтено, что на выходе АЦП старшим разрядом кода является Q0, а в МК разряд 0 - младший.

Отсчет интервала в 1 сек проведем с помощью таймера/счетчика Т/С0, работающего в режиме 2, что обеспечивает его автоматическую перезагрузку, и регистров R1 и R2. Таймер/счетчик настроим на выдачу сигнала переполнения каждые 250 мкс, а с помощью регистров R1 и R2 организуем вложенный цикл для подсчета 4000 вхождений (R1 = 250, R2 =16) в обработчик прерываний.

Временные задержки, используемые при генерации сигнала на выходе P2.7 и сигнала гашения АЦП, выполним с учетом длительности выполнения отдельных команд МК (см табл. 14.3).

Полученная программа приведена ниже.

 

 

;Ввод информации по готовности

.ORG 0H

AJMP Start ; на начало программы

.ORG 0BH

AJMP Int_TC0 ; на обработчик прерывания Т/С0

Курс

206

.ORG 30H

Start: MOV IE,#00000010b ; разрешение прерываний от Т/С0

MOV TCON,#0 ; сброс флагов, останов Т/С0

MOV P0,#00011111b

MOV P1,#01100000b

MOV P2,#00000000b

MOV TMOD,#00000010b ; Т/С0 в режим 2

MOV TL0,#6 ; настройка Т/С0 на 250 мкс

MOV TH0,#6

CLR A ; ?=0

MOV R0,#6 ; количество опросов датчика

MOV R1,#250

MOV R2,#16

SETB TR0 ; запуск T/C0

SETB EA ; разрешение всех прерываний

; Генерация сигнала на выходе P2.7

Cycle: SETB P2.7 ; P2.7 = 1

MOV R3,#100

Delay1: DJNZ R3,DELAY1 ; задержка на t = 200 мкс

CLR P2.7 ; P2.7 = 0

MOV R3,#3 ; Задержка на T–t = 600 мкс

Delay2: MOV R4,#100    

DJNZ R4,$

DJNZ R3,Delay2

AJMP Cycle ; возврат на цикл генерации сигнала

; Обработчик прерываний от таймера

Int_TC0: CLR TR0 ; останов таймера

DJNZ R1,Out_Int ; подсчет количества входов в обработчик

MOV R1,#250

DJNZ R2,Out_Int

MOV R2,#16

Opros: CLR P1.6 ; запуск АЦП

JB P1.5,$ ; ожидание готовности данных

ADD A,P0 ; ?= ? + D

i

SETB P1.6 ; гашение АЦП

MOV R5,#5

DJNZ R5,$

DJNZ R0, Opros ; проверка окончания опроса

MOV B,#6 ; вычисление среднего значения

DIV AB ; D

ср = ?/ n

ANL P2,#11100000b ; вывод результата

207

SETB P2.5 ; строб записи в ВУ

CLR P2.5

CLR A ; восстановление параметров цикла

MOV R0,#6

Out_Int: SETB TR0 ; запуск таймера

RETI ; выход из обработчика

.END

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

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

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

Обращение к датчику осуществляется 1 раз в секунду. В промежутках между работой с датчиком МПС на выходе P2.7 формирует периодическую последовательность импульсов длительностью t = 200 мкс и периодом T = 800 мкс.

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

Программа решения этой задачи имеет следующий вид:

; Программно управляемый ввод

.ORG 0H

AJMP Start ; на начало программы

.ORG 0BH

AJMP Int_TC0 ; на обработчик таймера Т/С0

.ORG 30H

Start: MOV IE,#00000010b ;pазpешение пpеpываний от Т/С0

MOV TCON,#0 ;сбpос флагов, останов Т/С0

MOV P0,#00011111b

Курс

208

MOV P1,#01000000b

MOV P2,#00000000b

MOV TMOD,#00000010b

MOV TL0,#6

MOV TH0,#6

MOV R0,#6 ;количество опросов датчика

MOV R1,#250

MOV R2,#16

MOV R6,#0 ;регистр для хранения максимума

SETB TR0 ;запуск T/C0

SETB EA ;разрешение всех прерываний

; Генерация сигнала на выходе P2.7

Cycle: SETB P2.7 ; P2.7 = 1

MOV R3,#100

Delay1: DJNZ R3,DELAY1 ; задержка на t = 200 мкс

CLR P2.7 ; P2.7 = 0

MOV R3,#3 ; Задержка на T–t = 600 мкс

Delay2: MOV R4,#100    

DJNZ R4,$

DJNZ R3,Delay2

AJMP Cycle ;возврат на цикл генерации сигнала

;Обработчик прерываний от таймера

Int_TC: CLR TR0 ;останов таймера

DJNZ R1,Out_Int ;подсчет количества входов в обработчик

MOV R1,#250

DJNZ R2,Out_Int

MOV R2,#16

CLR P1.6 ;запуск АЦП

MOV R5,#15

M1: DJNZ R5,M1 ;задержка на преобразования сигнала

MOV A,R6 ;сравнение с текущим максимумом

CLR C

SUBB A,P0

JNB A.7,M2

MOV R6,P0 ;замена текущего максимума

M2: SETB P1.6 ;гашение АЦП

MOV R5,#5 ;задержка на гашение АЦП

M3: DJNZ R5,M3

DJNZ R0,Out_Int ;проверка окончания опроса

MOV A,R6

ANL P2,#11100000b ;вывод результата

CLR P2.5 ;строб записи в ВУ

SETB P2.5

MOV R6,#0 ;восстановление параметров цикла

MOV R0,#6

Out_Int: SETB TR0 ;запуск таймера

RETI ;выход из обработчика

.END

Анализ ввода по прерыванию проведем на следующем примере.

Микропроцессорная система определяет минимальное значение показаний 6 датчиков и выводит полученное значение на внешнее устройство. Опрос датчиков проводится непрерывно. Во время выполнения аналого-цифрового преобразования МПС решает другие задачи.

Структура микропроцессорной системы в этом случае имеет вид, представленный на рис. 15.4.

 

 

Рис. 15.4. Структурная схема МПС с 6 датчиками и вводом информации по прерыванию

Изменения по сравнению с рис. 15.3 касаются введения в МПС аналогового мультиплексора и подключения выхода готовности данных АЦП ко входу запроса внешнего прерывания INT0 (вход 2 порта P3) микроконтроллера. Здесь же следует обсудить настройку прерывания по этому входу. Как отмечалось выше, внешние прерывания мик роконтроллера могут быть настроены на установку флага запроса либо по низкому уровню, либо по спаду сигнала на входах INTх. В нашем случае этот сигнал поступает с выхода готовности данных АЦП и переключается с высокого уровня на низкий как раз в момент окончания преобразования. Так что целесообразно настроить установку запроса прерывания по входу INT0 на восприятие среза этого сигнала. К тому же в этом случае запрос будет сбрасываться автоматически при входе в обработчик.

Перед запуском АЦП микроконтроллер должен выдать на адресный вход мультиплексора номер датчика, показания которого будут считаны. Для хранения этого номера в программе используется регистр R2. Для организации сравнения показания первого датчика с текущим минимальным значением в задействованный для этих целей регистр R6занесем при инициализации максимально возможный 5-разрядный код 00011111b.

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

Текст программы с необходимыми комментариями приведен ниже.

; Ввод по прерыванию

.ORG 0H

AJMP Start ; на начало программы

.ORG 3

AJMP Int_INT0 ; на обработчик INT0

.ORG 30H

Start: MOV IE,#00000001b ; разрешение прерываний от INT0

MOV TCON,#00000001b ; сброс флагов, INT0 по срезу

MOV P0,#00011111b

ACALL INIT

SETB EA ; разрешение всех прерываний

M: AJMP M ; фоновая задача

; Обработчик прерываний от INT0

Int_INT0:MOV A,R6 ; сравнение с текущим минимумом

CLR C

SUBB A,P0

JB A.7,M1

MOV R6,P0

M1: SETB P1.6 ; гашение АЦП

MOV R5,#5 ; задержка на гашение

DJNZ R5,$

DJNZ R3,M2 ; проверка опроса всех датчиков

ANL P2,#11100000B ; вывод результата

211

MOV A,R4

ORL P2,A

CLR P2.5 ; строб записи в ВУ

SETB P2.5

ACALL INIT

RETI

M2: INC R2 ; А

др = А

др + 1

ACALL INIT1

RETI ; выход из обработчика

; начальные установки

INIT: MOV R2,#11000000b ; R2<2...0> = <номер датчика>

MOV R6,#00011111b ; регистр для хранения минимума

MOV R3,#6 ; количество датчиков

INIT1: MOV P1,R2 ; выдача номера датчика

CLR P1.6 ; запуск АЦП

RET

.END

 

Занятие 56


Дата добавления: 2022-01-22; просмотров: 64; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!