7344

Подсистема дискретного ввода/вывода

Лабораторная работа

Производство и промышленные технологии

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

Русский

2013-01-21

343 KB

12 чел.

PAGE  14

Подсистема дискретного ввода/вывода

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

  1.  Программа работы
  2.  Изучить подсистему дискретного ввода микропроцессора.
  3.  Изучить характеристики субмодулей организующих ввод, вывод и передачу дискретных сигналов.
  4.  Изучить характеристики и порядок управления знакосинтезирующим индикатором.
  5.  Разработать программу в соответствии с вариантом задания
  6.  Провести отладку программы с подключенными внешними устройствами
  7.  Составить отчет по лабораторной работе.
    1.  Пояснения к работе
      1.  Порты дискретного ввода/вывода

В составе микроконтроллера MC68HC908GP32 имеется 5 портов дискретного ввода/вывода. Каждый порт может содержать до восьми линий дискретного ввода/вывода, точное число линий можно узнать из таблицы 2.3. Каждая линия порта может индивидуально настраиваться на ввод или вывод информации ( см. Рис. 2.16)

Рис. 2.16 Организация дискретного ввода микропроцессора и порядок обработки прерывания.

Некоторые порты позволяют подключать к линиям "подтягивающие" резисторы, информация о наличии "подтягивающих" резисторов приведена в таблице 2.3. "Подтягивающие" резисторы позволяют организовать надежный ввод информации с ключей или использовать в качестве источника информации схему с открытым коллектором. Назначение и принцип действия подтягивающих резисторов иллюстрируют Рис. 2.16.2 и Рис. 2.16.2. На Рис. 2.16.2 ключ разомкнут, и ток протекает от источника напряжения к входу порта, падение напряжения на резисторе небольшое (порядка 0,1 В) и на входе МК относительно земли напряжение логической единицы. На Рис. 2.16.3 ключ замкнут и на вход МК соединен с нулевым потенциалом, что соответствует логическому нулю, а резистор ограничивает величину протекающего тока от потенциала +5 В к нулевому потенциалу.

Таблица 2.3 Имена и технические данные портов микропроцессора.

Имя

порта

Количество

линий

Подтягивающий резистор

Адреса обслуживающих регистров

Регистр данных

Регистр направлений

Регистр подтягивающих резисторов

А

8

Есть

0000

0004

000D

B

8

Нет

0001

0005

C

5

Есть

0002

0006

000E

D

6

Есть

0003

0007

000F

E

2

Нет

0008

000С

Каждый порт дискретного ввода/вывода обслуживается как минимум двумя регистрами специальных функций: portX – регистр данных порта, где X имя порта (например для порта А :portA); ddrX – регистр направления передачи данных, где X имя порта.  Если в состав порта входит "подтягивающий" резистор, то добавляется еще порт управления "подтягивающими" резисторами.

Регистр данных порта содержит в себе информацию о состоянии каждой линии порта. Каждый бит этого регистра привязан к линии ввода/вывода порта.

Регистр направления передачи управляет направлением передачи информации. Если бит 0 сброшен, то линия 0 работает на прием информации, и наоборот: если бит 0 установлен, то линия работает на вывод информации. Таким образом, записав управляющее слово в регистр направления передачи можно сконфигурировать линии на ввод или вывод информации.

Регистр управления "подтягивающими" резисторами управляет подключением подтягивающих резисторов, если какой-то бит установлен, значит, к соответствующей линии порта подключен резистор.

  1.  Подсистема внешних прерываний

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

Рассмотрим более подробно порядок обработки прерывания (см Рис. 2.16). Микропроцессор выполняет основную программу, которая находится во Flash памяти. В какой-то момент времени поступил запрос на прерывание ( на входе IRQ сигнал поменял уровень с высокого на низкий), в нашем случае во время выполнения команды LDA #$10. Микропроцессор выполнит эту команду до конца, и перейдет на программу обработки прерывания. Этот переход состоит из следующих действий:

  1.  Сохранит адрес следующей команды за LDA в стеке. Сохранить в стеке значит записать в ОЗУ информацию регистров, адрес ОЗУ определяется указателем стека SP;
  2.  Сохранит значения аккумулятора(А), регистра признаков(CCR), младшего индексного регистра (Х) в стеке;
  3.   Осуществляется переход по вектору прерывания. Вектор прерывания это два байта абсолютного адреса начала программы обработки прерывания. Вектора прерываний хранятся во Flash памяти (см. Рис. 2.1).

После того как программа обработки прерываний завершила свою работу (программа должна заканчиваться командой RTI). Процессор извлечет из стека содержимое регистров, и адрес, куда он должен перейти, чтобы продолжить выполнение основной программы. Этот способ обработки прерываний называется замаскированным прерыванием, т.к. основная программа не замечает, что её выполнение прервали.

В составе микропроцессора имеется два модуля принимающие запросы на прерывания от внешних устройств это модуль IRQ08 и модуль KBI08. Кроме внешних прерываний микропроцессор может обрабатывать прерывания от внутренних устройств, например таймера, АЦП и т.п. Каждый канал прерываний имеет свой приоритет, на случай одновременного запроса прерываний несколькими устройствами или поступления запроса на прерывание в момент обработки другого прерывания. Приоритеты распределяет модуль системной интеграции SIM08, также модуль SIM08 определяет адреса векторов прерываний. Абсолютные адреса векторов прерываний, источники запросов на прерывание представлены в таблице 2.4. Источники прерываний упорядочены по возрастанию приоритета.

Таблица 2.4 Абсолютные адреса векторов прерываний

Источник события прерывания или сброса

Адрес ячейки памяти вектора

Бит  регистра ISRi

Флаг - источник запроса

Условия маскирования

Вектор прерывания по запросу модуля базового таймера TBM08

$FFDC

$FFDD

IF16

TBIF

Глобальная I маска в регистре CCR.

Маска AIEN в регистре ADSCR

Вектор прерывания по запросу модуля аналого-цифрового преобразователя ADC08

$FFDE

$FFDF

IF15

COCO

Глобальная I маска в регистре CCR.

Маска AIEN в регистре ADSCR

Вектор прерывания по запросу модуля сканирования клавиатуры KBI08

$FFE0

$FFE1

IF14

IMASKK

Глобальная I маска в регистре CCR.

Маска IMASKK в регистре KBSCR

Вектор прерывания по запросу передатчика модуля последовательного асинхронного интерфейса SCI

$FFE2

$FFE3

IF13

TC

SCTE

Глобальная I маска в регистре CCR.

Маски SCTIE и TCIE в регистре SCC2

Вектор прерывания по запросу приемника модуля последовательного асинхронного интерфейса SCI

$FFE4

$FFE5

IF12

SCRF

IDLE

Глобальная I маска в регистре CCR.

Маски SCRIE и ILIE в регистре SCC2

Вектор прерывания по событию ошибки обмена в модуле последовательного асинхронного интерфейса SCI

$FFE6

$FFE7

IF11

OR

NF

FE

PE

Глобальная I маска в регистре CCR.

Маски ORIE, NEIE, FEIE, PEIE в регистре SCC3

Вектор прерывания по запросу передатчика модуля последовательного синхронного интерфейса SPI

$FFE8

$FFE9

IF10

SPTE

Глобальная маска I в регистре CCR.

Маска SPTIE в регистре SPSCR

Вектор прерывания по запросу приемника модуля последовательного синхронного интерфейса SPI

$FFEA

$FFEB

IF9

SPRF

OVRF

MODF

Глобальная маска I в регистре CCR.

Маски SPRIE в регистре SPCR и ERRIE в регистре SPSCR

Вектор прерывания по переполнению счетчика временной базы модуля процессора событий TIM2

$FFEC

$FFED

IF8

TOF

Глобальная маска I в регистре CCR.

Маска TOIE в регистре T2SC

Вектор прерывания по событию канала 1 модуля процессора событий TIM2

$FFEE

$FFEF

IF7

CH1F

Глобальная маска I в регистре CCR.

Маска CH1IE в регистре T2SC1

Вектор прерывания по событию канала 0 модуля процессора событий TIM2

$FFF0

$FFF1

IF6

CH0F

Глобальная маска I в регистре CCR.

Маска CH0IE в регистре T1SC0

Вектор прерывания по переполнению счетчика временной базы модуля процессора событий TIM1

$FFF2

$FFF3

IF5

TOF

Глобальная маска I в регистре CCR.

Маска TOIE в регистре T1SC

Вектор прерывания по событию канала 1 модуля процессора событий TIM1

$FFF4

$FFF5

IF4

CH1F

Глобальная маска I в регистре CCR.

Маска CH1IE в регистре T1SC1

Вектор прерывания по событию канала 0 модуля процессора событий TIM1

$FFF6

$FFF7

IF3

CH0F

Глобальная маска I в регистре CCR.

Маска CH0IE в регистре T1SC0

Вектор прерывания по запросу модуля формирования тактовой частоты CGM08

$FFF8

$FFF9

IF2

PLLF

Глобальная маска I в регистре CCR.

Маска PLLIE в регистре PCTL

Вектор внешнего прерывания по входу IRQ

$FFFA

$FFFB

IF1

IMASK1

Глобальная маска I в регистре CCR.

Маска IMASK1 в регистре INTSCR

Вектор программного прерывания по команде SWI

$FFFC

$FFFD

  _

  _

Немаскируемое

Вектор сброса

$FFFE

$FFFF

  _

  _

Немаскируемое

  1.  Модуль внешних прерываний IRQ08

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

  •  Программно, путем записи 1 в бит подтверждения прерывания ASK регистра управления внешними прерываниями IRQSCR.
  •  Аппаратно, если запрос на прерывание по входу  был принят и МК перешел на подпрограмму обслуживания прерывания по этому запросу.
  •  Аппаратно, если МК находится в состоянии сброса.

О наличии в системе принятого запроса на внешнее прерывание свидетельствует установленный в 1 флаг IRQF в регистре управления внешними прерываниями INTSCR. Однако установка  флага IRQF в 1 не всегда сопровождается формированием активного уровня сигнала запроса на прерывание в модуль системной интеграции SIM08. Разрешает или запрещает формирование этого сигнала бит маски внешнего прерывания IMASK.

Вход  может быть программно настроен ан один из двух режимов распознавания сигналов запроса:

  •  Динамический режим;
  •  Режим статической защелки;

В динамическом режиме срез сигнала на входе  устанавливает запрос на прерывание. Длительность сигнала низкого логического уровня на входе  должна быть не менее tILIH=50 нс, при напряжении питания 5,0 В и tILIH=125 нс, при напряжении питания 3,0 В. После обработки данного запроса триггер автоматически сбрасывается. Следующий запрос будет воспринят триггером, только если сигнал на входе  установится в 1, а затем опять в 0.

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

Всего один регистр специальных функций используется для программного управления модулем внешних прерываний, формат этого регистра представлен в таблице 2.5

Таблица 2.5 Формат регистра INTSCR

INTSCR

Регистр управления модулем внешних прерываний

Адрес регистра: $001D

Состояние при сбросе: $00

Имя

Описание

7

0

6

0

5

0

4

0

3

IRQF

Флаг запроса внешнего прерывания

Флаг запроса внешнего прерывания устанавливается в 1, если сигнал запроса на прерывание принят, но прерывание еще не обслужено. Бит доступен только для чтения.

2

ASK

Бит подтверждения запроса на прерывание.

Установка этого бита в 1 под управлением программы вызывает очистку триггера запроса на прерывание. Бит доступен только для чтения.

1

IMMASK

Маска внешнего прерывания.

1 – внешние прерывания запрещены;

0 – внешние прерывания разрешены.

Этот бит доступен как для чтения, так и для записи.

0

MODE

Бит выбора режима обработки сигнала внешнего запроса.

1 – вход IRQ работает в статическом режиме

2 – вход IRQ работает в динамическом режиме.

  1.  Модуль сканирования клавиатуры KBI08

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

Функция сканирования клавиатурой является альтернативной функцией порта А, и обеспечивает до восьми линий запросов на прерывание.

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

Входы модуля могут быть программно настроены на один из двух режимов распознавания сигнала запроса:

  •  Динамический режим;
  •  Режим статической защелки.

Работа модуля в каждом из режимов аналогична работе модуля IRQ08 (см. п. 2.3.2.3 выше).

Абсолютные значения векторов прерывания по запросу модуля сканирования клавиатуры приведены в таблице 2.4. Два регистра специальных функций используются для программного управления модулем сканирования клавиатуры, форматы регистров приведены в таблице 2.6 и таблице 2.7

Таблица 2.6. Формат регистра управления модулем сканирования клавиатуры

INTKBSCR

Регистр управления модулем сканирования клавиатуры

Адрес регистра: $001A

Состояние при сбросе: $00

Имя

Описание

7

0

6

0

5

0

4

0

3

KEYF

Флаг запроса прерывания

Флаг запроса прерывания от модуля KBI08 устанавливается в 1, если сигнал запроса на прерывание принят, но прерывание еще не обслужено. Бит доступен только для чтения.

2

ASKK

Бит подтверждения запроса на прерывание модуля KBI08.

Установка этого бита в 1 под управлением программы вызывает очистку триггера запроса на прерывание. Бит доступен только для записи.

1

IMMASKK

Маска прерывания модуля KBI08.

1 – Прерывания запрещены;

0 – Прерывания разрешены.

Этот бит доступен как для чтения, так и для записи.

0

MODEK

Бит выбора режима обработки сигнала запроса прерывания модуля KBI08.

1 – входы работают в статическом режиме

0 – входы работают в динамическом режиме.

Таблица 2.7 Формат регистра масок для модуля KBI08

INTKBIER

Регистр маски прерывания от клавиатуры

7

6

5

4

3

2

1

0

KBI7

KBI6

KBI5

KBI4

KBI3

KBI2

KBI1

KBI0

Адрес регистра: $001B

Состояние при сбросе$: $00

Имя бита

Назначение бита

KBI7… KBI0

Маска прерывания от клавиатуры

Эти биты назначают соответствующим линиям портов ввода/вывода выполнение альтернативной функции входа запроса на прерывание модуля сканирования клавиатуры

1 – линия работает в режиме входа внешнего запроса на прерывание

0 – линия работает в режиме линии ввода/вывода

  1.  Описание субмодуля контроля дискретных сигналов

В составе стенда имеется субмодуль обеспечивающий контроль дискретных сигналов на выходе МК. Контроль осуществляется с помощью светодиодов. Дискретный сигнал с уровнем логической единицы индицируется светящимся светодиодом, с уровнем логического отсутствием свечения индикатора. Субмодуль позволяет одновременно контролировать до восьми цифровых линий. Каждый индикатор (линия контроля) может подключаться с помощью перемычек на плате модуля к любому цифровому выходу МК. Внешний вид модуля показан на Рис. 2.17.

Рис. 2.17 Внешний вид субмодуля контроля дискретных сигналов

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

  1.  Описание субмодуля имитации дискретных датчиков

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

  1.  Описание жидкокристаллического индикатора DV16230S2F

В лабораторном стенде для вывода разнообразной информации предусмотрен жидкокристаллический алфавитно-цифровой индикатор. Основные технические характеристики индикатора:

  •  Фирма производитель: Data Vision;
  •  Модель DV16230S2FBLY/R;
  •  Количество видимых знакомест: 2 строки по 16 знакомест;
  •  Количество точек на знакоместо: 58;
  •  Набор фонтов: цифры, кириллица, латиница, знаки препинания;
  •  Подсветка: светодиодная, цвет зеленый;
  •  Напряжение питания: 5 В;
  •  Потребляемая мощность: 1020 мВт;
  •  Интерфейс: параллельный, четырех или восьми разрядный, плюс три управляющих сигнала;
  •  Температурный диапазон: 050С

Внешний вид индикатора показан на Рис. 2.18., кодировка и форма встроенных фонтов приведена в таблице 2.8

Рис. 2.18 Внешний вид индикатора

Таблица 2.8 Кодировка встроенных фонтов ЖКИ

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


Таблица 2.9 Инструкции управления индикатором

Инструкция

RS

RW

D7

D6

D5

D4

D3

D2

D1

D0

Описание

Время выполнения

Clear display

0

0

0

0

0

0

0

0

0

1

Очистка дисплея, курсор устанавливается в начальный адрес

1,52 мс

Return home

0

0

0

0

0

0

0

0

1

-

Установка позиции дисплея в начало первой строки

1,52 мс

Entry mode set

0

0

0

0

0

0

0

1

i/d

s

Установка направления движения курсора, выбор направления передачи данных

37 мкс

Display on/off control

0

0

0

0

0

0

1

d

c

b

Включение, отключение индикации, включение отключение отображения курсора, выбор типа курсора.

37 мкс

Cursor or display shift

0

0

0

0

0

1

s/c

r/l

-

-

Движение курсора или дисплея вправо или влево

37 мкс

Function set

0

0

0

0

1

dl

n

f

-

-

Начальная инициализация индикатора

37 мкс

Set DD RAM address

0

0

1

Ad

Ad

Ad

Ad

Ad

Ad

Ad

Выбор адреса ОЗУ для записи или считывания данных

37 мкс

Write data to DD RAM

1

0

Записываемые данные

Запись данных в ОЗУ

4 мкс

В таблице использованы следующие обозначения:

i/d=1 Увеличение; i/d=0 Уменьшение

s=1 сдвиг дисплея вместе с движением курсора

s/c=1 сдвиг дисплея; s/c=0 сдвиг курсора

r/l=1 движение вправо; r/l=0 движение влево

dl=1 восьми битный интерфейс; dl=0 четырёх битный интерфейс

n=1 ЖКИ двух строчный; n=1 ЖКИ однострочный

f=1 знакоместо 510 точеск; f=0 знакоместо 58 точек

d, с, b – включение/выключение дисплея, курсора, мерцания курсора

Соответствие адресов ОЗУ индикатора индицируемым знакоместам показано на Рис. 2.19 При управлении индикатором следует учитывать что данные считываются индикатором по заднему фронту управляющего сигнала Е. Поэтому при выводе информации на индикатор следует соблюдать следующую последовательность действий: 1) вывести требуемые данные на линии D0-D7, RS; 2) вывести на линию Е логический ноль; 3) выждать необходимое время (см. таблице 2.9); 4) вывести на линию Е логическую единицу. Только после выполнения всех действий можно выполнять следующую инструкцию. Также следует учитывать что управляющий сигнал R/W с целью уменьшения задействованных с индикатором цифровых линий заземлен, поэтому индикатор только считывает информацию с цифровых линий;

Рис. 2.19  Соответствие адресов ОЗУ индикатора индицируемым знакоместам

Для пояснения методики управления индикатором ниже будет рассмотрен пример вывода текстовой информации.

  1.  Описание субмодуля коммутатора ЖКИ

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

  1.  Примеры программирования.

Для внесения большей ясности приведем три программы иллюстрирующих работу описанных выше модулей.

  1.  Организация дискретного ввода/вывода.

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

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

       org $8000 ; Начальный адрес

       include 'gpregs.inc' ; Загрузка имен регистров спец.

                            ; функций

; Инициализация подтягивающих резисторов

begin:  bset 0,PORTA

       bset 1,PORTA

;Инициализация портов на вывод

       bset 0,PORTC

       bset 1,PORTC        

       bset 2,PORTC        

       bset 3,PORTC

       bset 7,PORTA

       bset 6,PORTA

;Сброс счетчика сторожевого таймера

COP_RES clra

       sta $FFFF        

;Опрос датчиков

       lda PORTA; Чтение состояний всех разрядов порта А

       and #%00000011 ; Выделение двух младших разрядов

;Анализ считанной информации

       cmp #%11; Проверка случая срабатывания обоих

               ; датчиков

       beq bad_t ; Если да то переход к программе останова

;Проверка первого термостата

       cmp #%01 ; Проверка достижения минимальной

                ;температуры

       beq cold

;Проверка второго термостата

       cmp #%10 ; Проверка достижения максимальной

                ; температуры

       bne COP_RES; Если нет то опрос датчиков снова

;Запуск еще одного компрессора

       lda PORTC; Загрузка текущего состояния компрессоров

       and #%1111

       cmp #%1111; Проверка на перегрузку

       beq alarm

;Включение компрессора

       sec        

       rola                

       ora PORTC

       sta PORTC

;Програмная задержка

pause:  lda #$0

pause1: psha        

       lda #$0

       sta $FFFF; Сброс сторожевого таймера

pause2: psha

       lda #$1Е

pause3: dbnza pause3

       pula

       dbnza pause2

       pula

       dbnza pause1

       jmp COP_RES

;Выключение компресса         

cold:   lda PORTC; Загрузка текущего состояния компрессоров

       and #%1111

       lsra

       ora PORTC

       sta PORTC

       jmp pause        

;Отработка случая возможной поломки датчика

bad_t:  bset 7,PORTA; включение сигнальной лампы

       bclr 0,PORTC; Отключение первого компрессора

       bclr 1,PORTC; Отключение второго компрессора

       bclr 2,PORTC; Отключение третьего компрессора

       bclr 3,PORTC; Отключение четвертого компрессора

stoped: nop

       jmp stoped        

;Включение сигнальной лампы перегрузки

alarm:  bset 6,PORTA

       jmp COP_RES

;Инициализация вектора сброса

       ORG $FFFE

       dw begin

В программе встречаются команды для сброса сторожевого таймера, это необходимо делать для повышения надежности системы. Фрагмент программы с метками "pause" выполняет программную задержку примерно 1,5 мин (при тактовой частоте 32,768 кГц) она необходима, для того чтобы исключить одновременные ложные  запуски или остановки всех компрессоров.

  1.  Организация дискретного ввода посредством прерываний

Разработаем программу выполняющую тот же алгоритм что и в п. 2.3.2.10. однако обслуживание термостатов будем производить с помощью подпрограмм обслуживания прерываний. Приведем текст программы реализующий этот алгоритм:

       org $9000 ; Начальный адрес

       include 'gpregs.inc' ; Загрузка имен регистров спец. функций

; Инициализация модуля KBI

begin:  cli; Запрещаем все прерывания

;Устанавливаем маску линий обслуживающих прерывания

       lda #%00000011; Запросы на прерывание принимают

                     ; только разряды 0 и 1

       sta INTKBIER

;Инициализируем модуль

       bclr 0,INTKBSCR; Лини работают в динамическом режиме               

       bclr 1,INTKBSCR; Разрешаем прерывания от модуля KBI

       sei ;Разрешаем все прерывания      

;Инициализация портов на вывод

       bset 0,PORTC

       bset 1,PORTC

       bset 2,PORTC

       bset 3,PORTC

       bset 7,PORTA

       bset 6,PORTA

; Ожидание запроса на прерывание

COP_RES clra

       sta $FFFF; Сброс счетчика сторожевого таймера

       jmp COP_RES

;Подпрограмма обработки прерывания от модуля KBI             

;Опрос датчиков

int:    lda PORTA; Чтение состояний всех разрядов порта А

       and #%00000011 ; Выделение двух младших разрядов

;Анализ считанной информации

       cmp #%11; Проверка случая срабатывания обоих

               ; датчиков

       beq bad_t ; Если да то переход к программе останова

;Проверка первого термостата

       cmp #%01 ; Проверка достижения минимальной

                ;температуры

       beq cold     

;Запуск еще одного компрессора

       lda PORTC; Загрузка текущего состояния компрессоров

       and #%1111

       cmp #%1111; Проверка на перегрузку

       beq alarm

;Включение компрессора

       sec

       rola

       ora PORTC

       sta PORTC

       rti

;Выключение компресса

cold:   lda PORTC; Загрузка текущего состояния компрессоров

       and #%1111

       lsra

       ora PORTC

       sta PORTC

       rti

;Отработка случая возможной поломки датчика

bad_t:  bset 7,PORTA; включение сигнальной лампы

       bclr 0,PORTC; Отключение первого компрессора

       bclr 1,PORTC; Отключение второго компрессора

       bclr 2,PORTC; Отключение третьего компрессора

       bclr 3,PORTC; Отключение четвертого компрессора

       cli; запрет прерываний

stoped: nop

       jmp stoped

;Включение сигнальной лампы перегрузки

alarm:  bset 6,PORTA

       rti

;Инициализация вектора прерывания от модуля KBI

       org $FFE0

       dw int        

;Инициализация вектора сброса

       org $FFFE

       dw begin        

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

  1.  Вывод текстовой информации на ЖКИ

В предыдущих примерах индикация аварийных режимов осуществлялась с помощью сигнальных ламп, однако последние научные исследования доказывают, что текстовая информация лучше понимается оператором и снижает количество ошибок операторов в аварийных ситуациях. Поэтому доработаем текст программы, приведенный в п. 2.3.2.11 . и осуществим сигнализацию аварийных режимов выводом текстовых сообщений на ЖКИ. В случае перегрузки на дисплее должна появиться надпись "Перегрузка", а при подозрении на выход из строя одного из термостатов, надпись "Термостат умер!". Для этого необходимо включить в текст программы после фрагмента инициализирующего модуль KBI, фрагмент инициализирующий ЖКИ. Приведем этот фрагмент:

;Резервирование памяти ОЗУ микропроцессора

buff:   equ $50

hign:   equ $51

low:    equ $52

;Инициализация портов на вывод

       lda #$FF

       sta DDRB; Инициализация порта B на вывод

       sta DDRD; Инициализация порта D на вывод

       sta PTB ; вывод в порт B числа 255

       clra

       sta PTD ; вывод в порт D числа 0

; Инициализация ЖКИ

;Function set Функция выбора

       lda #%000010;Выбираем четырёх разрядный интерфейс

       jsr write; Передача информации на ЖКИ

       lda #%000010;Выбираем четырёх разрядный интерфейс

       jsr write; Передача информации на ЖКИ

       lda #%001000;Двухстрочный индикатор

       jsr write; Передача информации на ЖКИ

       ; Display on/off

       clra

       jsr write; Передача информации на ЖКИ

       lda #%001111;Дисплей включен, курсор мигающий

                   ;квадрат

       jsr write; Передача информации на ЖКИ

Этот фрагмент  программы использует подпрограмму вывода информации на ЖКИ, ее необходимо добавить в конец программы приведенной в п. 2.3.2.11. Ниже приведен текст этой подпрограммы:

; подпрограмма вывода информации на жки

write:  sta PTD ; Вывод информации

       bclr 1,PTB; установка сигнала готовности

; Программная задержка

       lda #$1

write1: deca

       nop

       bne write1

       bset 1,PTB; сброс сигнала готовности

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

При разработке программ работающих с ЖКИ учитывалось что линии данных индикатора и линия RS подключены к младшим разрядам порта D микропроцессора, а линия Е подключена к 1 линии порта В.

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

Print:  mov X+,buff ; Пересылка данных из таблицы в буфер

                   ;данных, увеличение HX

; Проверка достижения конца таблицы

       lda #$FF ; Загрузка в аккумулятор маркера окончания

       CMP buff ; Сравнение

       beq end  ; переход если равны

; Выделение старших четырех битов

       lda buff ; Загрузка в аккумулятор текущего значения

                ; из таблицы

       and #%11110000; выделение старших битов

       lsra; сдвиг старших битов влево на четыре позиции

       lsra

       lsra

       lsra

       sta hign; сохранение старших битов в памяти

       lda buff; Загрузка в аккумулятор текущего значения

               ; из таблицы

       and #%00001111; выделение младших битов

       sta low; сохранение младших битов в памяти

;Вывод информации на ЖКИ

;Старшие биты

       lda hign; Загрузка в аккумулятор старших разрядов

       ora  #%00100000 ; И сигнала RS

       jsr write ; Вывод на ЖКИ

;Младшие биты

       lda low; Загрузка в аккумулятор младших разрядов

       ora  #%00100000; И сигнала RS

       jsr write ; Вывод на ЖКИ

       jmp loop1

end:    rts

Теперь изменим фрагмент программы включающий контрольную лампу "поломка термостатов", заменим строку "bad_t bset 7,PORTA" фрагментом:

bad_t:  clra; очистка дисплея

       jsr write; Передача информации на ЖКИ

       lda #%000001;

       jsr write;

       ldhx #str1; Загрузка адреса начала текстовой строки

       jsr print ;Переход на подпрограмму вывода строки

В конец программы (приведенной в п. 2.3.2.11) добавляем таблицу, содержащую текст сообщения, приведем её текст:

str1:  db $54;"Т"

      db $65;"е"

      db $70;"р"

      db $BC;"м"

      db $6F;"о"

      db $63;"с"

      db $BF;"т"

      db $61;"а"

      db $BF;"т"

      db $20;пробел

      db $79;"у"

      db $BC;"м"

      db $65;"е"

      db $70;"р"

      db $21;"!"

      db $FF; Маркер окончания строки

Для индикации перегрузки доработаем программу, приведенную в п. 2.3.2.11. Заменим фрагмент программы с метки "alarm":

alarm:  clra; очистка дисплея

       jsr write; Передача информации на ЖКИ

       lda #%000001;

       jsr write;

       ldhx #str2; Загрузка адреса начала текстовой строки

       jsr print ;Переход на подпрограмму вывода строки

       rti

В конец программы (приведенной в п. 2.3.2.11) добавляем таблицу, содержащую текст сообщения, приведем её текст:

str2:  db $A8;"П"

      db $65;"е"

      db $70;"р"

      db $65;"е"

      db $B4;"г"

      db $70;"р"

      db $79;"у"

      db $B7;"з"

      db $BA;"к"

      db $61;"а"

      db $FF; Маркер окончания строки

  1.  Варианты индивидуальных заданий.

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

Вариант 1. Разработать программу, осуществляющую управление насосом. Задача управления поддержание уровня воды в резервуаре. Для контроля уровня воды установлено два датчика, датчик достижения верхнего уровня и датчик нижнего уровня. Двигатель насоса снабжен системой автоматического пуска. К каким портам подключены датчики, уточняет преподаватель. Также необходимо организовать индикацию состояния насоса (работает/не работает) какими средствами организовать индикацию задает преподаватель.

Вариант 2. Разработать программу, осуществляющую ступенчатый пуск двигателя (3-5 ступеней, точное количество задает преподаватель). Пуск двигателя осуществляется в функции тока, для контроля тока в системе установлено реле тока, контакты которого замыкаются при снижении тока ниже переключающего. Микропроцессор должен постепенно вывести все пусковые сопротивления, посредством подачи высокого логического уровня на реле. Также необходимо предусмотреть индикацию на какой ступени пуска находиться двигатель с помощью ЖКИ. Куда подключено реле тока и реле выводящие пусковые сопротивления задает преподаватель.

Вариант 3. Разработать программу, осуществляющую управление строительным подъемником. Работа подъёмника заключается в подъеме и спуске грузов. Подъем груза осуществляется после нажатия кнопки "пуск", движение вверх или вниз определяется местонахождением корзины подъемника (вверху или внизу). Для контроля местоположения корзины в системе предусмотрено два путевых выключателя. Для пуска двигателя предусмотрено два реле, вверх и вниз. также необходимо предусмотреть индикацию состояния системы: стоянка, движение вверх, движение вниз. куда подключаются датчики, кнопка управления и реле управления двигателем, а также способ индикации задает преподаватель.

  1.  Контрольные вопросы
  2.  Расскажите, какими способами можно организовать ввод дискретной информации в микроконтроллер.
  3.  Назовите основные характеристики жидкокристаллического индикатора.
  4.  В программе опроса внешних датчиков через прерывания (см. п. 2.3.2.11) заложена ошибка, которая заключаться в том что дополнительные компрессоры не запустятся при резком увеличении температуры, чем это обусловлено, и как с этим бороться.
  5.  Приведите порядок конфигурирования субмодулей используемых в данной лабораторной работе.


 

А также другие работы, которые могут Вас заинтересовать

82103. Алгоритм ориентирования сверхлегкого БПЛА по данным бортового фото-видео регистратора 1.45 MB
  В современном мире для решения задач мониторинга местности все чаще стали применятся беспилотные летательные аппараты БПЛА которые могут выполнять поставленную им задачу например полет по маршруту по заданным точкам в автоматическом режиме.
82104. СОБЫТИЙНЫЙ МЕНЕДЖМЕНТ В РАЗВИТИИ ТУРИСТИЧЕСКОЙ ИНДУСТРИИ РЕГИОНА (НА ПРИМЕРЕ ВОЛОГОДСКОЙ ОБЛАСТИ) 594 KB
  Важно также учитывать влияние глобальных процессов, таких как социальная мобильность, медиатизация и урбанизация, на преобразования, происходящие в регионах. Эти процессы интересны тем, что они приводят к интенсификации взаимосвязей между центральными и региональными системами.
82105. Электрогидравлический привод подачи фрезерного станка 1.61 MB
  Отсчет перемещения стола 10 относительно станины 9 осуществляется линейным индуктосином 11, который является индуктивным датчиком перемещения. Измерение осуществляется за счет сдвига вектора магнитной индукции при перемещении движка индуктосина относительно основной шкалы...
82106. Система автоматического регулирования температуры жидкости в системе охлаждения двигателя 858.5 KB
  Построение желаемой ЛАЧХ системы и оценка качества САР. Коррекция САР и расчет параметров корректирующего устройства Расчет переходной характеристики скорректированной САР Заключение. Для получения характеристического уравнения найдем главную передаточную функцию замкнутой САР.
82107. Электрогидравлический следящий привод с объемным регулированием 1.16 MB
  В систему также может подключаться с помощью выключателя 17 датчик угловой скорости 15 вала гидромотора. Сигнал от датчика обратной связи поступает на усилитель-сумматор, который определяет ошибку регулирования (где - управляющее напряжение) и усиливает сигнал ошибки.
82108. Электрогидравлический следящий привод с машинным управлением 923 KB
  В данной курсовой работе рассматривается электрогидравлический следящий привод с машинным управлением. Электрогидравлический следящий привод с машинным управлением (рисунок 1) имеет силовую часть, состоящую из регулируемого насоса 11 и гидродвигателя 12, и управляющую часть.
82111. Электрогидравлический следящий привод с дроссельным управлением 1.31 MB
  Датчик скорости: Постоянные времени и коэффициенты передач Функциональная схема электрогидравлического следящего привода с машинным управлением САР является регулированной системой по ошибке и многоконтурной по числу обратных связей. Данная схема САР состоит из: сравнительного элемента...