Основные понятия и определения МПТ
Имеется 2 подхода при разработке цифровых электронных схем:1. на основе “жесткой硬的” логики逻辑性,合理性;2. на основе программируемой логики.
АЛУ − арифметико-логическое算术逻辑的 устройство;УУ − устройство управления;ПЗУ − постоянная память;ОЗУ − оперативная память内存储器;Регистры − для хранения данных;УУВВ − предназначено用途 для связи с внешними устройствами.
Микропроцессор (МП) − это программно-управляемое устройство обработки цифровой информации, выполненное в виде одной или нескольких БИС.
МП комплекс − это набор БИС, достаточных для построения МП системы. В этот набор входят МС управления, ввода-вывода, МС памяти и др.
МикроЭВМ − это устройство обработки цифровой информации, выполненное на основе МП средств. Процессор микроЭВМ выполнен на МП.
Существует 2 класса микроЭВМ:1. Универсальные;2. Специализированные.
Универсальные микроЭВМ предназначены для решения широкого класса научных задач. Характерно высокое быстродействие, большой объем памяти, большой набор внешних устройств.
Специализированные микроЭВМ применяются для цепей управления, контроля различных технологических объектов и систем. Имеются средства сопряжения с объектом (с внешними устройствами).
В МПС можно выделить микроконтроллер (МК). Для него характерно: МК ориентированы на выполнение узкого класса задач управления и контроля
различными объектами. МК работает по одной программе, которая храниться в ПЗУ. МК имеют простую схему команд, ориентированную на управление.
1
Процессор
АЛУ
1УУРегистры ПЗУ ОЗУ
Память
Устройствоуправления
ввода вывода
Внешние устройства
УУВВ
Основные характеристики и типы МП
МП характеризуется:1. Тип микроэлектронной технологии: ТТЛ, ТТЛШ, n-МОП, КМОП, ЭСЛ, И2Л.2. Разрядность обрабатываемых данных.3. Быстродействие МП определяет скорость выполнения операций. С быстродействием
связана тактовая частота МП.4. Объем адресуемой памяти.5. Тип устройства управления:
схемное управление − система команд неизменима, закладывается заводом-изготовителем; микропрограммное управление − программы управления МП разрабатывает пользователь.
МП делят на 2 класса:1. МП с фиксированной разрядностью обрабатываемых данных и неизменимой системой
команд.2. МП с изменяемой разрядностью обрабатываемых данных и микропрограммным
управлением, т.е. с изменяемой системой команд.
Первый МП создан в 1971 году фирмой Intel (4-хразрядный). В 1973 году создан 8-разрядный МП Intel i4004.
В дальнейшем Intel: i8008, i8080, i8085.
МП такой структуры называется многокристальным.Типы МП (Intel, Motorola, Zilog):
1) Intel i8080A, i8085A (аналог КР580ВМ80А);2) Intel i80C85A (аналог КР1821ВМ85А) − 8-разрядные МП;3) Intel i8086 (аналог КР1810ВМ86), i80186, i80286 − 16-разрядные МП;4) i80386, i80486 − 32-разрядные;5) Pentium (К589 − ТТЛШ; К1800 − ЭСЛ; К1801, К1804 − ТТЛ).
Общие принципы построения МПС
1. Комплексное использование аппаратных и программных средств.2. Модульный принцип построения.3. Магистральный принцип построения.
Модульный принцип − любую систему можно разбить на отдельные модули, выполняющие строго определенные функции (модуль памяти, модуль ввода-вывода и т.д.).
УСТРОЙСТВО МИКРОПРОГРАММНОГО УПРАВЛЕНИЯ
Секция 1 Секция 2 Секция n
Системная магистраль
2
Магистральный принцип − все модули соединяются между собой через системную магистраль (или шину) − это набор проводников, по которым передается информация и сигналы, необходимые для работы МП.
Существует 3 вида сигналов:1) обрабатываемые данные;2) адреса;3) сигналы управления.
Читать из памяти и записывать в память может только МП. Связь МП системы с внешними устройствами осуществляется с помощью портов ввода-
вывода. Запись в порт − МП доставляет данные в порт для вывода. Аналогично операция чтения из порта называется вводом данных.
Взаимосвязь между отдельными модулями МП системы осуществляется с помощью комплекса аппаратных и программных средств, которые называются интерфейсом.
По системной шине передается информация 3-х видов: адреса (коды) устройств, ячеек памяти, портов ввода-вывода; данные, которые передаются между устройствами; сигналы управления, которые организуют работу устройств.
Поэтому шину разбивают на три составляющих:1. Шина адреса − ША (А0…А15).2. Шина данных − ШД (Д0…Д7).3. Шина управления − ШУ.
Такая система называется МП система с 3-шинной структурой. Каждая из шин работает независимо друг от друга и по каждой шине передается своя информация.
Память в МПС делится на внутреннюю (п/п) и внешнюю (магнитную). Внутренняя память по функциям делится на оперативную и постоянную. МП может только читать из постоянной памяти. Оперативная память − энергозависимая (теряется при выключении), МП может читать и писать в оперативную память.
Структурная схема МПС с 3-шинной структурой:
ВУ − внешнее устройство;УВВ − устройство ввода-вывода (дисплей, принтер);ША − однонаправлена;ШД − двунаправленная (МП может принимать и передавать данные);ШУ − формируется МП.
Модульпроцессора
ОЗУ ПЗУ Порт ввода Порт вывода
ВУ
ШУ
ШД
ША
3
Основные операции, выполняемые в МПС с 3-мя шинами
Существует 7 видов операций:1. Запись в память.2. Чтение из памяти.3. Вывод в порт.4. Ввод из порта.5. Обработка запросов прерывания.6. Прямой доступ к памяти.7. Межрегистровый обмен данными.
Все эти операции осуществляются при выполнении программы. Для 3-х шиной структуры характерно то, что 3 шины работают независимо.
Сигналы управления:1. запись в память − MEMW (черта означает, что активный уровень
− низкий);2. чтение из памяти − ;3. запись УВВ − (используется для записи в порт);4. чтение из порта − .
В МПС некоторые сигналы могут находиться в 3-х состояниях:L − низкий уровень;H − высокий уровень;Z − высокоомное состояние.
U
t0
MEMR активный − низкий
А1 активный − высокий
ША
Адрес стабилен (сигнал не изменен)
Адрес не стабилен
Z − состояние
Неизвестное состояние
4
Запись данных в память
МП выставляет на ША адрес ячейки памяти, когда адрес стабильный − выставляются данные, когда данные стабильны МП вырабатывает строб, по нему происходит запись данных в память.
Чтение из памяти
При чтении из памяти МП выставляет на ША адрес ячейки, когда адрес стабилен вырабатывается строб, который производит чтение из памяти и на ШД появляются данные из памяти, которые считывает МП во внутренние регистры.
Запись в порт (вывод)
CS
IOW
OUT
Данные из МП
Адрес ячейкиША
ШД
MEMW
Начало записи
Конец записи
Адрес ячейкиША
Данные из ячейкиШД
MEMR
Данные из МП
Адрес портаША
ШД
IOW
Начало вывода
Конец вывода
5
Чтение из порта (ввод)
Обработка запросов прерывания
ISR − подпрограмма обработки прерывания. Каждое внешнее устройство имеет свою подпрограмму обработки прерывания, которая располагается в памяти. Начальный адрес обработки прерывания называется вектором прерывания.
Система обработки прерываний должна: подавать запрос прерывания; сообщать МП векторы прерывания; при поступлении нескольких запросов одновременно производить арбитраж.
Арбитраж позволяет определить какое устройство обслужить при нескольких запросах, для этого применяется метод приоритетов. Используется контроллер приоритетных прерываний (КПП).
IRQ1, IRQ2 − запросы прерывания;− подтверждение прерывания;
INT − запрос прерывания в МП.
Адрес портаША
Данные из портаШД
IOR
Модуль процессора
КПП
ATNI
INT
IRQ1 IRQ2
Код вектора прерывания
ШД
INT
IRQ
ШД КВП
INTA
6
Прямой доступ к памяти
При обмене данными между ОЗУ и внешними устройствами данные передаются по цепочке:
При чтении удобно использовать прямой доступ к памяти:
Время передачи сокращается примерно на порядок. Процессор исключается из режима обмена и предоставляет системную шину КПДП.
Межрегистровый обмен данными − данные пересылаются внутри МП между его регистрами и не передаются на системную шину.
Кэш-память − память, которая используется как дополнительные регистры.
Микропроцессор КР580ВМ80А (ВМ80)
Этот процессор является аналогом процессора i8080А. Он выполнен по n-МОП технологии на кристалле площадью примерно 3 см2. Выпускается в DIP-корпусе.
Основные характеристики: 8-разрядная шина данных; 16-разрядная шина адреса (это позволяет обращаться к 65536 ячеек памяти); тактовая частота fT = 0,5…2,5 МГц (оптимальная частота 2 МГц; быстродействие − 400 тыс. операций в секунду; требует 3-х источников питания: основное +5 В; вспомогательное +12 В и −5В; ток потребления 200 мА.
ОЗУ Портввода-вывода
Процессор ВУ
Запись в ОЗУ
Чтение из ОЗУ
ОЗУ КПДП ВУ
Контроллер прямого доступа к памяти
7
F1 и F2 − входы 2-х последовательностей тактовых импульсов, частотой fT;READY − вход сигнала готовности (“1“ − МП работает, “0“ − МП переходит в режим
ожидания);RESET − вход сигнала начальной установки (сброса);INT − вход сигнала запроса прерывания;HOLD − вход сигнала запроса захвата (используется при прямом доступе к памяти);D0 ÷ D7 − выводы шины данных (имеют 3 состояния и двунаправленные);GND − общий вывод (земля);A0 ÷ A15 − выводы шины адреса;INTE − разрешение прерывания (“1“ − прерывания разрешены, “0“ − прерывания запрещены);HLDA − подтверждение захвата;DBIN − характеризует в каком режиме работает шина данных (“1“ − работает на прием, “0“ −
работает на вывод); − запись (если низкий уровень то МП записывает данные в память или в порт);
WAIT − “1“ − МП находится в режиме ожидания, “0“ − МП работает;SYNC − вход сигнала синхронизации;UCC − присоединение основного источника питания +5 В;UBS − присоединение вспомогательного источника питания +12 В;UCS − присоединение вспомогательного источника питания −5 В.
Внутренняя структура
Основные блоки МП:1. Арифметико-логический блок (АЛУ, регистры), выполняет все арифметические и
логические операции.2. Блок регистров (регистры: W, Z, B, C, D, E, H, L; схема инкремента-декремента; SP −
указатель стека);3. Регистр команд и дешифратор команд;4. Буфер ША и ШД (согласуют по нагрузке внутренние устройства МП с внешними);5. Схема управления и синхронизации.
Регистры T, W, Z программно недоступные, динамические (работают на определенных частотах), выполнены на конденсаторах.
А 01
15
INTEHLDADBIN
WAIT
SYNC
UCC
UBS
UCS
F1F2
READYRESET
CPU
INT
HOLD
D
0 1 7
GND
Сигналы управления
Сигналы управления
D0 ÷ D7
ШД
A0 ÷ A15
ША
8
T − регистр врем. хранения;АЛУ − арифметико-логическое устройство;F − регистр флагов;A − аккумулятор;DA − десятичная коррекция аккумулятора.
Программная модель МПС
Программная модель − это набор программно доступных элементов, которые обмениваются информацией под действием команд МП.
1. МП2. Память3. Порты ввода-вывода
Модель регистров:
Буфер ШД
Д0÷Д78
Регистр команд
Дешифратор команд
Схема управления и
синхронизации
W Z
C
E
L
B
D
H
SP
Инкрем./Декрем.
Регистр адреса
T
DA F
AАЛУ
8Внутренняя ШД
Буфер ША1616
А0÷А15
A [8] F [8]
C [8]
E [8]
L [8]
B [8]
D [8]
H [8]
PC [16]
SP [16]
INTE [1]
Регистры специального назначения
Регистры общего назначения, могут использоваться в парах
Регистры специального назначения
9
Разряды 5, 3, 1 − не используются.Если в разряде регистра флагов “1”, то флаг установлен, если “0”, то флаг сброшен.S − флаг знака (“1” − результат отрицательный, “0” − результат положительный).Z − флаг нулевого результата (“1” − результат операции = 0, “0” − результат операции
ненулевой). AC − флаг вспомогательного переноса (“1” − есть перенос из 3 в 4 разряд аккумулятора, “0” −
переноса нет).P − флаг паритета (четности) (“1” − четное число, “0” − число нечетное).CY − флаг переноса (“1” − если произошел перенос из старшего разряда регистра − это
признак переполнения регистра (аккумулятора)).РС − счетчик команд − здесь находится адрес ячейки памяти к которой обращается МП.SP − указатель стека. Стек − это особая область оперативной памяти, адресация которой
происходит через указатель стека.INTE − триггер разрешения прерывания (“1” − прерывания разрешены, “0” − прерывания
запрещены).
Программная модель памяти
Программная модель памяти − это упорядоченная и пронумерованная последовательность 8-разрядных регистров, называемых ячейками памяти. Номер ячейки памяти называется ее адресом. Число ячеек памяти в системе определяется разрядностью ША МП (m − число разрядов шины адреса, 2 m − число адресов).
Для ВМ80 m = 16, 216 = 65536 = 64 К, К = 1024.
Для характеристики памяти используют 2 понятия: адресное пространство памяти − это максимальное количество ячеек памяти, к которым
может обратиться МП, определяется разрядностью ША. рабочее пространство памяти − реальное число ячеек памяти. Количество ячеек
определяется МС, на которой она реализуется. Рабочее пространство по выполняемым функциям делится на блоки.
Для удобства ввели понятие карта памяти − это графическое изображение рабочего пространства памяти с указанием выполняемых функций в системе.
S 0 AC 0 P I CYZ
7 6 5 4 3 2 1 0
Флаги: F
[8]
[8]
[8]
[8]
[8]
[8]
0000H
0001H
0002H
0003H
FFFEH
FFFFHH
10
Программная модель портов ввода-вывода
Программная модель портов ввода-вывода − это упорядоченная пронумерованная последовательность 8-разрядных регистров.
Количество портов ввода-вывода определяется разрядностью адреса порта, который выдает МП (используется только 8 разрядов). Максимальное количество портов 28 = 256.
Общее число портов ввода-вывода − 512. Реальное число меньше.
Анализ работы МП ВМ80
При выполнении программ процессор работает по определенным правилам, которые можно изобразить в виде блок-схемы:
ПЗУ (программа Монитор)
ПЗУ пользователя
ОЗУ пользователя
Свободнаяобласть
1 К
1 К
1 К
64 К
0000
03FF0400
07FF0800
0BFF0C00
FFFF
УМК:
[8]
[8]
[8]
[8]
[8]
[8]
[8]
[8]
Порты ввода Порты вывода
0001
FE
FF
0001
FE
FF
11
Машинные такты и циклы
МП является синхронным устройством. Работа всех его внутренних схем тактируется с помощью внешних тактовых импульсов. Эти импульсы поступают извне на входы F1 и F2.
Требования к импульсам:1. амплитуды импульсов: 8 ÷ 12 В.;2. импульсы F1 и F2 не должны пересекаться во времени;3. частота тактовых импульсов: 0,5 ÷ 2,5 МГц.
Параметры импульсов:
Т − называется машинным тактом Т = 1/fT
Машинный такт − это минимальный промежуток времени, на который разбивается работа всех внутренних устройств МП. Любая команда выполняется за строго определенное число тактов.
Машинный цикл − это промежуток времени выполнения команды, в течение которого МП обращается к памяти или портам. Любая команда может выполняться за 1 ÷ 5 циклов. Порядок их следования нумеруется:
М1 М1 М2 М1 М2 М3 М1 М2 М3 М4 М1 М2 М3 М4 М5
Пуск
Загрузить в РС число 0000Н
Чтение кода команды из памяти
Декодирование команды
Исполнение команды
Команда последняя?
Остановка МПИнкремент РС
Да
Нет
T
F2
F1
>50 нс >10 нс >70 нс
>220 нс
БИС КР580ГФ24
t
t
12
Существует 10 видов машинных циклов (в ВМ80):1. Извлечение кода команды;2. Чтение данных из памяти;3. Запись данных в память;4. Извлечение из стека;5. Запись данных в стек;6. Ввод данных из порта;7. Вывод данных в порт;8. Цикл обслуживания прерывания;9. Останов;10. Обслуживание прерывания в режиме останова.
“Извлечение кода команды” имеется в любой команде и всегда 1-ый по счету.Каждый машинный цикл разбивается на 3 ÷ 5 тактов. В каждом такте МП делает определенные
действия: в первых 3-х тактах происходит обмен данными с памятью или портами; 4-ый и 5-ый такт используются для внутренних операций МП.
MOV r1, r2 − пересылка из регистра в регистр.
MOV r, M − пересылка из регистра в память (с косвенной адресацией);MOV M, r − пересылка из памяти в регистр
Слово состояния процессора
В МП ВМ80 имеется 2 вывода для сигналов управления: − запись;
DBIN − состояние ШД (ввод или вывод).Метод мультиплексирования (разделения во времени): в один момент времени МП выводит
информацию о своем внутреннем состоянии, в другой момент времени ШД используется для
Т1 Т2 Т3 Т1 Т2 Т3 Т4 Т1 Т2 Т3 Т4 Т5
Машинные такты
М1
Т3 Т4Т2Т1 Т5
Чтение кода из памяти
Пересылка между
регистрами
М1
Т3 Т2Т2Т1 Т3
Чтение кода команды из памяти
Обмен регистра с памятью
Т4 Т1
М2
Чтение содержи-мого HL
и перенос
в регистр
13
ввода и вывода информации. Информация о внутреннем состоянии МП, выводимая на ШД и называется слово состояния процессора.
Слово состояния выводится кратковременно, в течение одного такта. Поэтому надо запомнить слово состояние на период машинного цикла. Для этого используется внешний регистр слова состояния.
В первом такте машинного цикла по фронту импульса F2 МП выставляет на ШД слово состояния, одновременно вырабатывается импульс на выводе SYNC МП. Длительность сигнала слова состояния − 1 машинный такт. Для запоминания слова состояния в регистре используется вентиль “И − НЕ”, на выходе которого вырабатывается сигнал. Низкий его уровень открывает регистр и в него записывается новое слово состояния.
Назначение отдельных разрядов слова состояния:
Разряд ШД Обозначение сигнала Назначение сигнала
RG D0
D1
D2
D3
D4
D5
D6
D7
DI
C Х
CPU D0-D7
SYNC
F1ТТЛ
STBST,
к ШД8
8
Слово состояния
Слово состояния
T1 T2 T3
F1
F2
SYNC
D0−D7
STB ST,
Старое СС Новое ССВыход Рг СС
14
D0D1D2D3D4D5D6D7
INTA
STACKHLTAOUTM1INP
MEMR
Подтверждение прерыванияЗапись − вывод
СтекПодтверждение останова
ВыводЦикл чтения кода
Вводчтение
− для ввода кода прерывания МП
Реализовывать эти логические функции можно с помощью логических микросхем.Пример построения схемных сигналов:
`
Временные диаграммы сигналов МП
В первом такте МП по срезу импульса F1 выставляет на ША содержимое РС − это адрес ячейки памяти, где храниться код команды. Затем содержимое РС инкрементируется. В этом же такте по фронту F2 выдается импульс на выходе SYNC и одновременно на ШД поступает слово состояния. Из этого слова формируется сигнал управления для данного машинного цикла. Во 2-ом такте по фронту сигнала F2 на шину данных поступает содержимое ячейки памяти − это код команды. Этот код команды считывает МП по срезу сигнала F1 в такте Т3. Сигналы управления памяти формируются из сигнала DBIN и сигнала СС. Сигнал MEMR управляет памятью. В такте Т4 МП декодирует принятый код и определяет команду, которую он должен выполнить. Если команда не требует обращения к памяти, то в 5-ом такте она выполняется. На 4-ом такте этот цикл заканчивается.
D0
D1
D4
D6
D7
&
1
&
2
&
3
&
5
&
4
1
DBIN
1
1 1
INTA
MEMR
MEMW
IOW
IOR
+ 5 В
К155ЛА8INTA
OUT
INP
MEMR
WOWO
DBIN
WR
CPU
Рг. СС
15
Во 2-ом такте каждого машинного цикла по срезу сигнала F2 МП анализирует входы READY и HOLD. Если в этом моменте READY = 0 МП переходит в режим ожидания, если HOLD = 1 МП переходит в режим захвата.
Режимы работы МП
1. Начальная установка МП (НУ) − после включения электропитания триг. регистр находится в произвольном состоянии, в том числе и РС, поэтому МП может начать выполнение программы с произвольного адреса, поэтому происходит сброс МП. Для этого имеется вход RESET − вход НУ.
При этом происходит следующее:1. РС сбрасывается в 0: (PC)←0000H.2. Сбрасывается триггер разрешения прерываний: (INTE)←0, т. е. прерывания
запрещаются3. Триггер захвата сбрасывается в 0: (HLDA)←0.
Когда RESET = 0 МП начинает работу: содержимое РС выдается на ША и МП читает код из 0-ой ячейки памяти (здесь должна быть первая команда программы).
2. Режим ожидания − для нормальной работы МП надо чтобы READY = 1. Во 2-ом такте каждого машинного цикла МП проверяет состояние входа READY. Если в момент среза импульса F2 READY = 0, то МП переходит в режим ожидания. В этом режиме МП не производит никаких действий. В режиме ожидания на выходе WAIT = 1. В этом режиме МП постоянно анализирует состояние входа READY, и как только появляется высокий уровень − МП продолжает выполнение прерванной программы. Этот режим необходим для согласования МП с медленными устройствами.
3. Режим захвата − МП отключается от управления системной шиной и отдает ША и ШД контроллеру прямого доступа к памяти. Для перехода в этот режим контроллер устанавливает HOLD = 1 . МП во 2-ом такте каждого машинного цикла анализирует этот вход и если там 1, то
Адрес ячейки памяти
T2 T3 T4
F1
F2
ША
MEMR
T1
ШД СС КК
SYNC
DBIN
RESET
0tНУ
t
tНУ ≥ 3Т Т = 1/fT
16
МП переходит в режим захвата, переводя ША и ШД в Z − состояние. МП в этом режиме следит за входом HOLD и как только там будет 0 МП продолжает выполнение прерванной программы.
4. Режим прерывания − чтобы перейти к подпрограмме прерываний надо чтобы они были разрешены. Это определяется триггером INTE, если INTE = 1 − прерывания разрешены, если INTE = 0 − прерывания запрещены. Для разрешения прерывания имеется команда EI, а для запрещения команда DI.
Внешние устройства подают высокий уровень на вход INT:
Если INTE = 1, то МП заканчивает выполнение текущей команды и сбрасывает в 0 триггер INTE. Закончив выполнение команды, МП переходит к машинному циклу обслуживания прерывания. В этом цикле:
1. МП помещает содержимое РС в стек, в РС содержится адрес предыдущей команды − это адрес возврата в основную программу;
2. Из СС формируется сигнал управления INTA. По этому сигналу внешнее устройство передает на ШД код команды RST N (N = 0, 1,…,7). МП считывает этот код и определяет адрес подпрограммы прерывания.
3. В РС загружается полученный адрес подпрограммы, и она выполняется.4. В конце подпрограммы прерывания находится команда возврата RET. По этой команде
МП извлекает из вершины стека адрес возврата и заносит его в РС − происходит возврат к основной программе.
RST N VVV Адрес ISR, HEXRST 0RST 1RST 2RST 3RST 4RST 5RST 6RST 7
000001010011100101110111
00000008001000180020002800300038
INT
tзапрос
прерывания
1 V V V 1 I 11
7 6 5 4 3 2 1 0
RST N
17
В этом машинном цикле адрес не используется и на ШД образуется слово состояния − вырабатывается строб INTA. С помощью строба на ШД поступает адрес команды RST N.
5. Режим останова − команда останова HLT, после выполнения этой команды МП переходит в режим останова − МП не выполняет никаких действий, содержимое РС неизменимо, МП переводит буферы ША и ШД в 3-е состояние, на выходе МП WAIT = 1. В этом режиме МП может находиться бесконечно долго. Выти из режима останова можно 2-мя методами:
1. Подачей запроса прерывания на вход INT − если прерывание разрешено (INTE = 1), то МП выходит из режима останова и переходит к подпрограмме обработки прерывания, если прерывание запрещено, то этот метод не срабатывает.
2. Подачей сигнала начальной установки на вход RESET − при этом МП начнет выполнение программы с нулевого адреса. Этот метод всегда срабатывает.
Построение отдельных модулей МПС
Модуль центрального процессора; Модуль памяти; Модуль ввода-вывода; Модуль прерывания.
Модули строятся по типовым схемам с применением БИС, которые входят в МП комплекты (МПК КР580 − центральный МП КР580ВМ85А).
Модуль процессора: играет главную роль в системе, основная задача − формирование системной шины. Ядро модуля − МП. Существует 3 причины по которым МП ВМ80А не может быть ядром МПС:
1. Для работы МП необходимо 2 последовательности тактовых импульсов с амплитудой около 12 В.
2. МП имеет малую нагрузочную способность выводов: I0вых ≤ 2 мА, I1
вых ≤ 50 мкА.
RST 0
RST 1
RST 2
RST 3
RST 4
0000
0008
0010
0018
0020
Адрес не используется
T2 T3 T4
F1
F2
ША
ШД
INTA
T1 T5
СС RST
18
Нагрузочная способность выводов МП позволяет работать только на одну ТТЛ нагрузку. Необходимо усилить выводы МП по току. Для этого ставят буферные элементы (или усилители). Для шин такие усилители называются шинными формирователями.
3. В МП ВМ80А недостаточно сигналов управления. Необходимые сигналы управления формируются из СС МП с помощью логических схем.
Реализовывать модуль процессора можно на разных БИС различными методами.КР580ВМ85А − МП;КР580ГФ24 − БИС системного генератора;КР580ВА86 − БИС 2-направленного 8-разрядного шинного формирователя (высокая
нагрузочная способность I0вых ≤ 32 мА);
КР580ВК28(ВК38) − БИС системного контроллера, обеспечивающего формирование 2-напрвленой 8-разрядной ШД и формирование сигналов управления:
1. чтение и запоминание в памяти;2. ввод и вывод в порты;3. подтверждение прерывания.
Используя эти МС можно реализовать модуль процессора на 5 МС (см. рис. ниже). Диод служит для быстрого разряда конденсатора при скачках питания.
− разрешение шины (при прямом доступе к памяти);TF − буфер направления (TF = 1, то А → В; TF = 0, то А ← В).
1UВХ UВЫХ
IВХ IВЫХ
I0ВХ ≤ 1,6 мА
I1ВХ ≤ 40 мкА
Генератортактовых
импульсов
F1
F2
Формирователь ША
Формирователь ШД
Формирователь ШУ
МП
А0−А15
D0−D7
DBIN
WR
А0−А15
D0−D7
ШУ
16 16
8
19
R1 ≈ 10 КОм, С1 ≈ 10 мкФ, tНУ > 1/fТ
Модуль памяти: память МП делят на внутреннюю (резидентную) и внешнюю.Внутренняя память − обычно на полупроводниковых МС. Внешняя память − магнитная или
оптическая.По выполняемым функциям внутреннюю память делят на постоянную (ПЗУ) и оперативную
(ОЗУ).ПЗУ − память только для чтения, энергонезависима. ОЗУ − для чтения и записи,
энергозависима.Модуль памяти делят на 2:
модуль ПЗУ; модуль ОЗУ.
Модуль ПЗУ (ROM):1. Масочное ПЗУ − программируется на заводе-изготовителе, достоинство −
дешевизна.
20
GX1
X2
Ready
Reset
Sync
А 01
15
D0−D7
HLDAINTEWAITDBIN
SYNC
F1
F2
READY
RESET
CPU
INT
HOLD
F1
F2
Ready
Reset
F2ТТЛ
SC B01
7HOLD
A 0 1 7
DBIN
WR
BUSEN
MEMR
MEMW
IOR
IOW
INTA
DD1 КР580ГФ24 DD2 КР580ВМ80А
DD3 КР580ВК28
+ 5 В
ZQ1
R1
R2
C1SB1ШУ
F2ТТЛ Reset
ШУ
8D0D1 D7
ШДМП
ШУМП
A
0
1
7
TF
OE
F ↔
B
0
1
7
A
0
1
7
TF
OE
F ↔
B
0
1
7
+ 5 В
+ 5 В
DD4 КР580ВА86
DD5 КР580ВА86
А0
А1
А7
А8
А9
А15
А0
А1
А7
А8
А9
А15
ШДМП
2. Программируемое ПЗУ (ППЗУ) − однократно программируемое, процесс записи называется прожиганием. Достоинство − невысокая стоимость. Недостаток − однократность программирования.
3. Репрограммируемое ПЗУ (РПЗУ) − стираемое ПЗУ: с УФ стиранием и с электрическим стиранием.
Основные параметры МС ПЗУ
1. Информационная емкость МС −это количество бит информации, которую может одновременно хранить МС [бит] − N.
Структура запоминающей матрицы:
N = n ∙ m, где n − разрядность ячейки памяти (4, 8, 16); m − количество ячеек памяти. N определяет внутреннюю структуру запоминающей матрицы.
N = 4096 битN = 1К ∙4 битN = 512 ∙ 8 битВыходные буферы согласовывают нагрузочную способность памяти с нагрузочной
способностью МС.
− разрешение выхода − управляет выходными буферами: если = 0, то буферы закрыты; если = 1, то буферы в Z − состоянии.
− выбор МС − этот сигнал открывает выходные буферы.2. Время выборки адреса tв (или tва)
n n-1 2 1
1
2
3
m-1
m
ячейка памяти
Дешифратор адреса
Схема управления
Запоминающая матрица
Выходные буферы
А0
А1
Ак
CS
OE
D0 D1 Dn
21
tв − это промежуток времени между поступлением адреса и появлением данных на выходе МС. tв ≈ (10 ÷ 100) мсек.
ППЗУ серии К556, КР556: технология ТТЛШ; быстродействие tв ≈ 10 мсек.; потребл. знач. мощность от источника питания + 5 В.
Тип ИМС Емкость, бит Тип выходного буфераКР556РТ4
РТ5РТ6РТ7РТ11РТ12РТ13РТ14РТ15РТ16РТ17РТ18
256 х 4512 х 82К х 82К х 8256 х 41К х 41К х 42К х 42К х 48К х 4512 х 82К х 8
ОКОКТСОКТСОКТСОКТСТСТСТС
ОК − открытый коллектор; ТС − 3 состояния.Условное графическое обозначение КР556РТ11 (рис. 1) и КР556РТ6 (рис.2 ):
РПЗУ серии К573 и КР573 (с УФ стиранием, выходы этих МС − ТС).Тип ИМС Емкость, бит Напряжение питания, ВК573РФ1
РТ2РТ3РТ4
КР573РФ5РТ6РТ7РТ9
1К х 82К х 84К х 168К х 82К х 88К х 832К х 8128К х 8
+ 5, − 5, + 12+ 5+ 5+ 5+ 5+ 5+ 5+ 5
Условное графическое обозначение КР573РФ5:
Адрес
CS
Выход данных
tв
А0
1
7
◊D00123
CS1
CS2
Ucc
GND
PROM 1K
Рис. 1
Входы связаны
по И
А01
910
◊D001
7
CS1CS2CS3
Ucc
GND
PROM 16K
Рис. 2
Входы связаны
по И
22
= 1, на D0 − Z-состояние;= 0, на D0 − Z-данные.
МС оперативной памяти : 1. МС статических ОЗУ2. МС динамических ОЗУ
В статических ОЗУ в качестве запоминающего устройства используются статические триггеры, построенные на транзисторах. Достоинства: простота управления, высокая помехоустойчивость, возможность бесконечно долгого хранения информации при наличии питания. Недостатки: малая информационная емкость, высокая потребляемая мощность от источника питания.
Статические ОЗУ применяются при небольшой требуемой емкости оперативной памяти (≈ несколько десятков Кбайт), используются в простых МПС (микроконтроллеры).
В динамических ОЗУ элементарная ячейка памяти представляет собой конденсатор, который записывает и хранит заряд.
RЗИ ≈ 1012 Ом; CЗИ ≈ 1 ÷ 2 пФ; tРАЗР ≈ 3 ÷ 4 мсек.При каждом считывании такой ячейки конденсатор разряжается. Процесс восстановления
называется регенерацией. Для регенерации применяется специальное устройство − контроллер регенерации динамического ОЗУ.
Достоинства:1. простота конструкции;2. малая мощность, потребляемая от источника питания;3. невысокая стоимость.
Недостатки:1. сложность управления;2. высокий уровень помех.
Применение − когда требуется большая емкость.МС с УФ стиранием имеют на корпусе окошко, через которое кристалл облучают
ультрафиолетовым светом − при этом открытые транзисторы закрываются.В МС с электрическим стиранием для стирания подаются импульсы тока.Достоинство − возможность многократно стирать и записывать информацию. Недостаток −
дороговизна.К132 − ТТЛШ, К541 − И2Л, К537 (КР537) − КМОП:
1. характерно очень малое энергопотребление (IПОТ ≈ 10 мкА);
А01
910
◊D001
7
CSOEUPR
Ucc
GND
EPROM 16K
Вход программ. (подается импульс при работе + 5 В)
R
+ UИП
C
ИЗ
Вых
Вх
CЗИ
23
2. для резервирования питания подсоединяют гальваническую батарейку;3. выходные буферы с ТС.
Существует 2 группы МС по методу выполнения линий ввода-вывода данных: с раздельными линиями ввода-вывода; с общими (совмещенными) линиями ввода-вывода данных.
Тип ИМС Емкость, бит Линии ввода-выводаКР537РУ1
РУ2РУ3РУ6
КР537РУ8РУ9РУ10РУ13РУ14РУ17
1К х 14К х 14К х 14К х 12К х 82К х 82К х 81К х 44К х 18К х 8
раздельные−−//−−−−//−−−−//−−общие−−//−−−−//−−−−//−−
раздельныеобщие
Условное графическое обозначение КР537РУ3 (с раздельными линиями ввода-вывода):
− разрешение записи ( = 0 − запись; = 1 − чтение ).= 0 − запись, = 1 − чтение.
DI DO Режим работы100
х01
хDIх
ZZ
DO
ХранениеЗаписьЧтение
Условное графическое обозначение КР537РУ10 (с общими линиями ввода-вывода):
DIO − совмещенные линии могут работать на ввод и вывод данных. − управление выходными буферами.
DIO Режим работы1000
х011
хх10
ZDIZ
DO
ХранениеЗапись
Чтение без выдачиЧтение с выдачей
Принцип построения внутренней памяти МПС
А01
1011
◊
D0
DICSWE
Ucc
GND
RAM 4K
RW/
А01
910
◊DIO
01
7
CSWEOE
Ucc
GND
RAM 16K
24
В МПС внутренняя память разделяется на постоянную и оперативную и размещается в области адресного пространства МП. Память имеет страничную организацию. Число ячеек в странице памяти определяется типом МС памяти, т. е. их емкостью. Выбор страниц осуществляется адресным селектором: AS.
Для сопряжения с ША и ШД используют буферы (внутренние и внешние).
26 = 64 страницы, 1024 ячейки = 1К памяти.Такая организация памяти упрощает построение схем.
А15 А14 А13 А12 А11 А10 А9 А8 … А1 А0 HEX Страница0 0 0 0 0 00 0 0 0 0 0
…0 0 0 0 0 0
0 0 … 0 00 0 … 0 1
…1 1 … 1 1
00000001…
03FF
0−ая страница
0 0 0 0 0 1…
0 0 0 0 0 1
0 0 … 0 0…
1 1 … 1 1
0400…
07FF
1−ая страница
0 0 0 0 1 0…
0 0 0 0 1 0
0 0 … 0 0…
1 1 … 1 1
0800…
0BFF
2−ая страница
Выбор страницы осуществляется с помощью адресного селектора, который выполняется на дешифраторах.
Построение модуля ПЗУ
А15 А14 А13 А12 А11 А10 А9 А8 А7 А6 … А1 А0
Поле адресов страниц Поле адресов внутри страницы
ША
ШУ
16
8
CS A0–A9 ПЗУ (1Кх8) DO
AS
Вых. буфер
ШД
10
6
8
8
CS
CS A0–A9 ОЗУ (1Кх8) DI DO
AS
Буфер ввода-вывода DIO
10
6
8
CSMEMR
Структура ПЗУ Структура ОЗУ
MEMR
MEMW
DC 0
1
2
3
4
5
6
7
A
0
1
2
&
A0
A1
A2
“0”
“0”
“1”
CS0
CS1
CS2
CS3
CS4
CS5
CS6
CS7
25
МС ПЗУ делятся по типу выхода: выходные буферы с ОК; выходные буферы с ТС.
МС может иметь вход .1 вариант − модуль ПЗУ с буферированием данных (выходные буферы с ОК, нет
управляющего входа ).
2 Вариант − модуль ПЗУ без буферирования данных. Если выходные буферы имеют ТС, то можно обойтись без МС буферирования.
1-ая схема:
AS
ROM А
D0
CS
ROM CS
D0
A
F DI ◊ D0
OE
ША
ШД МПС
Внутр. ШД
DD1
DD2
DD3
16
8
8
Шинный формирователь
CS2
CS1
MEMR
Внутр. ШД
CS1
Адрес 1 Адрес 2
Данные из DD1 Данные из DD2
Дан. из DD1 Дан. из DD2
ША
ШД МПС
CS2
MEMR
AS
ША
ROM А ◊ D0
CS
ROM CS ◊ D0
A
DD1
DD2
8
ШД МПС
CS2
CS1
MEMR
1
1asCS2
asCS1DD3
DD4
8
26
2-ая схема: с использованием управляющего вывода (для МС КР573) :
Построение модуля ОЗУ
1. С раздельными линиями ввода-вывода: 1Кх1, 4Кх1. Каждая МС хранит отдельный бит: D7, D6,…,D1, D0. МС не имеет входа , при выборе МС ( = 0) информация из ячейки памяти поступает на выход.
1-ый метод: с использованием буфера для связи выходов МС с ШД системы (КР537РУ2, N=4Кх1).
CS1
Адрес 1 Адрес 2ША
Дан. из DD1 Дан. из DD2ШД
CS2
MEMR
asCS1
asCS2
AS
ROM А
OE D0
CS
ROM CS
OE D0
A
ША DD1
DD2
16
8
8
CS2
CS1
MEMR 8
MEMR
27
Емкость модуля N = 4Кх8. DD9 − шинный формирователь, служит выходным буфером.= 0 − запись данных;= 1 − чтение из DD1 ÷ DD8;
= 0 − чтение из ОЗУ.2-ой метод: стробирование сигнала выбора .
Режим100
х0х
хх0
101
100
ХранениеЗапись в ОЗУ
Чтение из ОЗУ
А01
1011
◊
D0
DICSWE
Ucc
GND
RAM 4K
ША
А01
1011
◊
D0
DICSWE
Ucc
GND
RAM 4K
A
0
1
7
TF
OE
F ↔
B
0
1
7
+ 5 В
DD9
D0
D1
D7
D0
D1
D7
DD2DD1
А0
А11
А0
А11
CS
ШД D0 D1
MEMR
ШД МПС
MEMW
WE
CS
MEMW 1
1 &MEMR
CSas
28
2. С общими линиями ввода-вывода: МС с входом (разрешение вывода). МС имеют байтовую организацию. КР537РУ8, РУ9, РУ10, РУ17 (N = 4Кх8 = 32 Кбит.
= 0 для 0000H ÷ 07FFH= 0 для 0800H ÷ 0FFFH= 0 для 1000H ÷ 17FFH
Адрес ОЗУ: 0800H ÷ 17FFH
Построение двухстраничного модуля памяти
Если требуется ОЗУ и ПЗУ небольшой емкости (несколько Кбайт), то можно обойтись 1 страницей ПЗУ и 1 страницей ОЗУ и исключить дешифратор адреса страниц. При этом селектором страницы будет некоторый разряд ШД.
1) А15 − селектор страницы (при А15 = 0 это ПЗУ, при А15 = 1 это ОЗУ).
WE
CS
MEMW 1
1 &MEMR
CSas
А01
1011
◊
D0
DICSWE
Ucc
GND
RAM 4K
ШАDD1
А0
А11
CS
ШД D0
А01
1011
◊
D0
DICSWE
Ucc
GND
RAM 4K
DD2
А0
А11
D1D0 D1
DD8
D7
А01
1011
◊
D0
DICSWE
Ucc
GND
А0
А11
RAM 4K
D7
WE
DC 0
1
2
3
4
5
6
7
A
0
1
2
&
A11
A13
+5 В 5
CS0
CS1
MEMW
А01
910
◊DIO
01
7
CSWEOE
Ucc
GND
RAM 16K
А01
910
◊DIO
01
7
CSWEOE
Ucc
GND
RAM 16K
КР1533ИД7 DD1 DD2
MEMR
A0A0
A10A10
D0D0
D7D7
ШД МПС
ША
29
Адреса ПЗУ: 0000Н ÷ 07FFH ОЗУ: 8000H ÷ 87FFH
2) А11 − селектор страницы (при А11 = 0 это ПЗУ, при А11 = 1 это ОЗУ).Адреса ПЗУ: 0000Н ÷ 07FFH ОЗУ: 8000H ÷ 0FFFH
Модуль ввода-вывода
1
А01
910
◊D001
7
CSOEUPR
Ucc
GND
EPROM 16K
А01
910
◊DIO
01
7
CSWEOE
Ucc
GND
RAM 16K
ШД МПС
DD1 КР573РФ5 DD2 КР573РУ10
DD3КР1533ЛН1
ША
MEMW
MEMR
A0
A10
A15(А11)
D0
D7
D0
D7
A0
A10
A15(А11)
Повторный слой ПЗУ
ОЗУ
Повторный слой ПЗУ
ПЗУ
Повторный слой ОЗУ
2 К
2 К
2 К
2 К
2 К
07FF0800
0000
7FFF8000
0FFF
87FF
FFFF
ОЗУ
Повторный слой ОЗУ
Повторный слой ПЗУ
ПЗУ
Повторный слой ПЗУ
2 К
2 К
07FF0800
0000
0FFF
FFFF
Повторный слой ОЗУ
30
МПС связывается с внешними устройствами через порты ввода-вывода.Порт − это адрес устройства, из которого МП получает информацию или в которое МП
выводит данные. Это 8-разрядный регистр.Недостаток − невозможно изменять функции программно. Это неудобно при работе со
сложными внешними устройствами. Поэтому применяются более сложные порты на интерфейсных БИС.
В модуле ввода-вывода 3 основных элемента:1. адресный селектор, который декодирует адрес порта2. сам порт ввода или вывода3. схема управления порта.
Методы адресации портов:1. ) с раздельным полем адресов памяти и портов;
При обращении к портам: (IN port или OUT port), (port) = 00H … FFH.При работе с памятью: и .При работе с портами: и .Достоинство − максимальное использование адресного пространства МП, т. е. возможно
максимальное число ячеек памяти и портов ввода-вывода.Недостаток − для работы с портами имеется только 2 команды:
ввод: IN port (A) ← (port); вывод: OUT port (port) → (A).
2. ) с общим полем адресов памяти и портов − для работы с памятью и портами используются одинаковые команды, т. е. не разделяют программно ячейки памяти и порты. Для фактического разделения памяти и портов используют один из разрядов:
Признак: А15 = 0 − адрес ячейки памяти; А15 = 1 − адрес порта.
А15 А14 А13 А12 А11 А10 А9 А8 А7 А6 … А1 А0ШД
15 … 8 7 … 0
Поле адресов ячеек памяти 64 К А7 А6 … А1 А0
ША
7 … 0
Адрес порта
Поле адресов портов ввода 256
Поле адресов портов вывода
256
А15 А14 А13 А12 А11 А10 А9 А8 А7 А6 … А1 А0ША
31
Достоинство − одинаковые команды для работы с портами и памятью.Недостаток − уменьшение адресного пространства памяти.
Реализация модуля ввода-вывода прираздельном поле адресов памяти и портов
Существует 2 метода кодирования адреса:1) С использованием позиционного двоичного кода (возможно максимальное число адресов −
256)00000000 = 00H00000001 = 01H…11111111 = FFH
Чтобы декодировать этот код применяются дешифраторы (используют частичное декодирование), что может привести к ошибке при работе схемы. 1110000 - 00000000 =
А7 А6 А5 А4 А3 А2 А1 А0 HEXх х х 0 0 0 0 0х х х 0 0 0 0 1
…х х х 0 0 1 1 1
00H01H…
07HПолное декодирование с 2-мя дешифраторами:
Поле адресов портов 32 К
Поле адресов памяти 32 К
7FFF 8000
0000
FFFF
А15 А14 А13 А12 А11 А10 А9 А8 А7 А6 … А1 А0ША
15 … 8 7 … 0
Адрес порта
DC 0
1
2
3
4
5
6
7
A
0
1
2
&
A0
A1
A2
А3
А4
“1”
CS00H
CS01H
CS06H
CS07H
ША КР1533ИД7
32
Адреса: 00…99 (должны быть в двоично-десятичном коде).Достоинство − полное декодирование адреса.
2) С использованием унитарного двоичного кода (используется только один 0 или одна 1).А7 А6 А5 А4 А3 А2 А1 А0 HEX0 0 0 0 0 0 0 10 0 0 0 0 0 1 00 0 0 0 0 1 0 00 0 0 0 1 0 0 00 0 0 1 0 0 0 00 0 1 0 0 0 0 00 1 0 0 0 0 0 01 0 0 0 0 0 0 0
01H02H04H08H10H20H40H80H
Используются инверторы, которые ставятся в линию, где адрес − 1.
Такой метод называется линейным выбором портов.Применение позиционного двоичного кода позволяет получить максимальное число портов
(256), но требует сложных схем дешифраторов. Использование унитарного двоичного кода упрощает декодирование, однако максимальное число портов = 8.
1
1
1
А7
А1
А0
ША
CS01H
CS02H
CS80H
33
CS91H
DC 0
1
2
3
4
5
6
7
8
9
1
2
4
8
DC 0
1
2
3
4
5
6
7
8
9
1
2
4
8
1
1
CS00H
А0
А1
А2
А3
А4
А5
А6
А7
ШАКР1533ИД6
Декодирует младшую тетраду
Декодирует старшую тетраду
Схемотехника модуля ввода-вывода
Для порта ввода используются регистры, у которых выходы имеют 3 состояния
Порт вывода должен запоминать (фиксировать) выводимые данные.8-ми разрядные регистры КР580ИР82 − без инверсии на выходе, КР580ИР83 − с инверсией на
выходе:
DI ◊
D0
Ucc
GND
RG
к ШД МПС
от ВУ8
8
CS
IOR
ША
CS
Адрес порта
Данные из порта
ШД
IOR
IN Port
DI ◊
D0
Ucc
GND
RG
ШД МПС к ВУ
88
CS
IOW
ША
CS
Адрес порта
Данные из МПС
ШД
IOWСтарые данные Новые данныеD0
OUT Port
DI0
1
7
◊D00
7
STB
OE
Ucc
GND
RG
34
Высокая нагрузочная способность: I0ВЫХ ≤ 32 мА, I1
ВЫХ ≤ 5 мА.Эти регистры выполнены на основе 8 D-триггеров ( со статическим управлением) −
прозрачные фиксаторы.STB − строб (или тактовый вход), управляет входами D − триггеров (при STB = 1, DO = DI;
при STB = 0, триггеры запоминают данные на DI).ОЕ − управление выходными буферами ( при = 1, DO = Z; при = 0, DO = 1 или 0).
Диапазон чисел: 0,7∙10-19 ≤ |Х| ≤ 0,92∙1019
КР1533 – серия ТТЛШ
КР1533ИР33
Порт ввода:
Ст. Б Мл. Б S mСМ
Б3Б2Б1
Знак мантиссы
порядок мантисса
35
DI
STB
D0
С
ОЕ
Iвых0 ≤ 20 mAIвых1 ≤ 2 mA
1
STB=1D0
01
7
DI01
7
STB
OE
RGШД
Д0
Д1
Д7
От ВУ
+5 В
Порт вывода:
Адрес:Один порт ввода – 01HОдин порт вывода – 80HЛинейный выбор
Организация модуля ввода – вывода с общим полем адресов памяти и портов.
Если А 15 = 0, то адрес яч. памяти А15 = 1, то адрес порта
36
1
0OE D0
01
7
DI01
7
STB
OE
RG
Д0Д1
К ВУ
Д7
Д0Д1
Д7
ШД
IOWCS
Д0
Д1
Д7
КР1533ЛЛ1+5 В
11
D0
01
7
DI01
7
ОЕ
С
КР1533ИР33
ШДД0
Д1
Д7
От ВУ
КР1533ЛН1ША
А0
А7
IOR
КР1533ЛЕ1
11
D0
01
7
DI01
7
С
OE
RG
КР1533ИР33
IOW
К ВУ
IN portНе используются
OUT port
Соответственно стробы IOR и IOW тоже не вырабатываются.
Для раб. с порт.: STA, LDA, STAX, LDAX, MOV
Стробы: Порт ввода – 8001HПорт вывода – 8003H
A15 A14 A13 A12 A11 A10 A9 A8 … A2 A1 A0 HEX 1 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 1 1
8001 8003
Ввод из порта 8001H в аккумулятор LDA 8001H; ( A )( 8001H )37
Адреса яч. памяти
Адреса портов
32К
32К
0000
7FFF8000
FFFF
ША
А0А1А2
А3А1
А15
DI01
7
ОЕ
STB
Д0
Д1
Д7
1
D0
01
7
RG
КР580ИР82
ШДД0
Д1
Д7
От ВУ
1
D0
01
7
DI01
7
STB
OE
RG
MEMW
К ВУ
+5 B
01234567
DCA012
&
MEMR
КР1533ИД7
H8001CS
H8003CS
Ввод из порта 8001H в регистр С
LXI H, 8001HMOV C, M; ( C ) ( 8001H )
Вывод из аккумулятора в порт 8003H
STA 8003H; ( 8003H ) ( A )
Вывод из регистра Д в порт 8003H
LXI H, 8003HMOV M, Д; ( 8003H ) ( Д )
Построение модуля прерывания.
В МПС предусм. режим, когда по запросу ВУ МП прерывает выполнение основн. программ. и переходит к подпрограмме обслуживания прерывания ( ISR ).
Для выполнения подпрограммы прерывания необходимо:- Прерывание должны быть разрешены ( МП реагирует на запрос к прерыва -нию – высокий
уровень на входе INT МП ).- Прерывание могут быть разрешены и запрещены программой:EI – команда разрешения прерывания.DI – команда запрещения прерывания.- Прерывание автоматически запрещается:1. После начальной установки МП, т.е. после выполнения RESET.2. При входе в подпрограмму обработки прерывания. Если прерывание разрешены, то МП заканчивает выполнение очередной команды и
переходит к машинному циклу обслуживания прерывания:1.) МП помещает в стек содержимое РС ( это адрес команды, кот. он должен был
выполнять – это адрес возврата в основ. програм. )2.) Из словосостояния для машинного цикла вырабатывается строб –
подтверждение прерыванию – этот строб использ для сообщения МП адреса подпрогр. обработки прерывания. Адрес обработки прерывания наз. вектором прерывания.
2 метода 1. Невекторный – при этом сообщается указатель вектора прерывания (RST N) 2. Векторный – использ. команда CALL addr. Суть 1 – го метода – по стробу INTA на ШД сист. Поступает команда RST N, в кот.
содержится указатель вектора прерывания.
RST N 7 6 5 4 3 2 1 01 1 + + + 1 1 1
Указатель вектора прерыв.
+ + +RST 0 --- 0 0 0RST 1 --- 0 0 1
……………….RST 7 --- 1 1 1 Это уровень прерывания
38
Адрес прерывания: N – 8 – десятичное число
RST N
1 1 +
+
+
1 1 1 Регистр команд
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
РС 0 0 0 0 0 0 0 0 0 0 + + + 0 0 0
Если, например, RST 1, то 111001111 и РС=0008Н
После выполнения подпрограммы прерывания МП должен возвратиться в основную программу, поэтому подпрограмма ISR должна заканчиваться командой RET, по которой МП извлекает и РС, адрес возврата в осн. программу. Перед командой RET должна стоять команда EI.
Как только прерывание разрешены и происходит возврат в основную программу, МП анализирует вход INT, если ШТЕ = 1 будет бесконечный цикл обслуживания прерываний.
39
DI RG01 D02 03 14 2 5 36 47 5 6 STB 7OE
+5 В
ШД МПСКР580ИР82
Д0Д1Д2Д3Д4Д5Д6Д7
“1”“1”“1”“1”
“1”“1”
“1”
INTA
DI RG
D0
OEМодульпроцессораINT INTA
S T
DC
R
&
К ШД
INT
“1”
+5 B
C1 +
IRQ
INT
R1C1 – служит для запрещ. прерыв. при включ. электропитания. На практике часто необходимо обслуж. несколько ВУ, т. е. каждое ВУ должно иметь свою
подпрограмму обслуживания прерывания, поэтому возможно подача сразу нескольких запросов на прерывание.
Процедура анализа запросов наз. орбитражём. Имеется несколько методов:- приоритетный – каждому запросу присваивается свой номер, и первым запросом
обслуживается тем, кот. имеет больший приоритет. МС КР580ВН59 – позволяет программно установить приоритеты 8 запросов, установить
порядок. Недостатки МП ВМ80:1. Необходимость 3 – х источников питания.2. Необходимость 2 – х тактовых последователей, импульсов амплитудой 12В3. Сложность организации прерывания.4. Сложность организации сигналов управления.
Улучшенный i 8085 А – n – МОП I 80C85 A – КМОП
КР1821ВМ85А
Микропроцессор ВМ85.40
DIP – технология Характеристики:1. работает при одном напряжении, питания +5В.2. имеет внутр. тактов генератор, внутрен. такт. Частота 0,5 – 3 мГц3. удобная система прерывания 4. отрабатывает сигнал управления системой5. имеет возможность последовательного ввода и вывода данных6. имеет такую же систему команд, как и ВМ80, но добавлены 2 команды.
X1, X2 – выводы для присоед. времязадающей цепочки ( кварцевый генератор ). – вход сигн. нач. установки. RESOUT - выход сигн. нач. установки. READY – вход сигн. готовности SID – вход последов. данных. SOD – выход посл. данных.
TRAP RST 7.5RST 6.5 Входы запросов прерываний.RST 5.5INTR
HOLD – вход запроса захвата AD0…AD7 – совмещённые линии данных и мл. байтва адреса.UCC
+5B входы питания
GND
0B
41
X1 CPU UCC
X2 GND
RESIN CLK
READY SOD
SID S0 S1TRAP I0 / MRST 7.5RST 6.5 ALERST 5.5 WRINTR RD INTAHOLD HLDAAD RESOUT01 A… 87 …. 15
CLK – выход сигн. тактов частоты S0 сигналы состояния МП. S1 I0 / M – сигн. обращения к портам или к памяти, если I0 / M = 1 – к портам I0 / M = 0 – к памяти ALE – разрешение фиксации адреса.
стробы записи чтения
– строб подтверждения прерывания HLDA – сигн. подтверждения захвата A8…A15 – линии вывода ст. байта адреса. Чтобы ША была 16 – разр. к линиям АД присоед. внешн. регистр для фиксации адреса.
МП имеет внутр. тактов. генератор, част. кот. определяет внешн. времязадающая цепочка.
FCLK = 0.5…3 мГцF ZQ =1…6 мГц
Пример: маш. Цикл записи в память: MOV M, B
42
DI RG D0
C
А8…А15 СРU
АД0…АД7
ALE
8
8 8
8
8
A8...A15
D0…D7
A0...A7
1
Генератор тактовых
импульсов
Д Т
С
ZQX1
X2
X1
X2
L C
X1
X2
fг
fсlk
X1
R
+5 B
fвнеш
В 1 – ом маш. такте выдаётся ст. байте адр. на мен. А8…А15, на АД0 – АД7 выдаётся мл. байт адр. в течении такта Т1. Одновременно выраб. строб ALE и по срезу строба во внеш. регистре запоминается мл. байт адреса. Во 2 и 3 тактах на линии АД0 – АД7 выводятся из МП. По стробу WR эти данные записываются в память. На выводе IO / M – низк. уровень, т. е. сигн. подтвержд. обращ. к памяти.
Система прерываний МП ВМ85.Наименование
выводаПриоритет Адрес перехода при
прерывании (адрес ISR)Активный сигнал для выбора
TRAP 1 0024 H Перепад (01) или высокий уровень
RST 7.5 2 003C H Перепад (01)RST 6.5 3 0034 H
Высокий уровеньRST 5.5 4 002C HINTR 5 согласно коду RST N
Все запросы прерываний принято делить на 2 вида:- маскируемые- немаскируемые
Маскируемые наз. запрос, кот. можно программно запрет или разрешение. Если прерыв. невозможно запретить программно оно наз. немаскируемым. TRAP – вход запроса немаскир. прерывания. Остальные прерывания наз. маск. Немаскир. прерыв. использ. для реакции МП на аварийныеситуации. Приоритет устанав. Порядок обслуж. прерываний при одновременном их поступлении. Чтобы представить как распологаются вектора прерываний в памяти составные табл.
43
T1 T2 T3
CLK
A8 –A15
AD0-AD7
ALE
Старший байт адреса
Данные из МПМл. байт адреса
Фиксация младшего байта
01
0000Н RST 0
0008H RST 1
001CH RST 2
0018H RST 3 0020H RST 4
0024H TRAP
0028H RST 5
002CH RST 5.5
0030H RST 6 0034H RST 6.5
0038H RST 7
003CH RST 7.5
TRAP и RST – называют аппаратными векторными прерываниями (не треб. дополнит. МС).
Ввод и вывод последовательных данных.
SID – вводSOD – выводИспользуются команды МП: RIM и SIM.
“ 1 ” в 6 – ом разр. аккум. разрешает вывод данных. SIM – установить маску прерывания использует содержимое аккумулятора и используется для:1. Программирование масок аппаратных прерываний: RST 7.5; RST 6.5; RST 5.5.2. Для сброса триггера защёлки, воспринимающего фронт сигн. по входу RST 7.5.3. Для вывода данных на выход SOD – данные на этом выводе запоминаются на триггере
защёлки.
SID
RIM
1 x ….. x
0 1 х ….. х
SIM
МП
SOD
44
МП
“1”
До выполнения После выполнения
Аккумулятор
7 6 0
ПослеДо
Аккумулятор
7 6 5 0
“0”
Пример: требуется разрешить прерыв. по вх. RST 7.5 и RST 6.5, выполнить сброс триггера RST 7.5, запретить прерыв. по вх. RST 5.5. MVI A, 00011001 B SIMВывести “1” на вывод SOD: MVI A, 11000000 B SIM RIM – чтение маски прерывания.
Пример: прочитать данные со входа SID. RIM ANI 10000000 B; в разряде Д7 данные со входа SID.
Построение модуля центрального процессора МП ВМ85.
Для работы МП в сист. необх.:1. Обеспечить синхронизацию тактов генератора. 2. Обеспечить начальную установку МП. 3. Сформировать ША, ШД и ШУ.
ZQ1 – служит для задания тактов частоты МП: FCLK=1/2 fZQ FZQ=1…6 мГц
45
SOD SOE X RST7.5 MSE M7.5 M6.5 M5.5
7 6 5 4 3 2 1 0Аккумулятор
Вывод данных в SOD
Разрешение вывода “1”
Разрешение установки маски (“1”)
Сброс триггера RST 7.5 (“1”)
Маски прерывания (“1” – маска установлена)
SID I7.5 I6.5 I5.5 IE M7.5 M6.5 M5.5
Маски прерывания (“1” – маска установлена)
Флаг разрешения прерывания (“1” - разрешено)
Прерывание в ожидании
Данные со входа SID
X1
X2READY
RESIN
TRAPRST7.5RST6.5RST5.5INTR
HOLD
CPU
VD1
SB1
R1
+5 B
10K
+ C1
10mk
ZQ1
R2 4.7k
Запросы прерыва-ния
R1, C1, VD1 – для создан. сигн. начальн. установки при включении электропитания. TЗАР> ЗТ
SB1 – для нач. установки в произвольный мом. Времени. VD1 – для быстрого разряда рез – та R1 при пропадании напряжения питания. R2 - через него подаётся высок. уровень на вход Ready т. е. создаётся сигнал готовности.
Если хотябы один из запросов на прерывание не присоединён, его надо соединить с общей шиной. HOLD = 0 – т. е. запрос захвата шине используется.
Формирование ШУ: В МПС для работы ус – в необходимо 4 системных сигнала ( для управления памятью и портами ) МП ВМ80 формирует:
Сигнал RD WR IO / M01
01
10
10
00
11
КР1533 ( 74ALS ): IВХ 0 ≤0,2 mA IВХ !≤10 mkA
К155 ( 74 ): IВХ 0 ≤1,6 mA
IВХ 1 ≤40 mkA
Формирование ША : 1. мл. байт адреса выдаётся на совмещённую шину АД0 – АД7 и он должен запоминаться в спец.
регистре.2. Необходимо обеспечить высокую нагруз. способность ША, для этого ставяться буферные эл –
ты, кот. усиливают вых. токи МП. IВЫХ 0≤2 mA IВЫХ 1≤50 mkA
Вых. буферы – регистры или шинные формирователи.
Регистры: КР1533ИР3346
1
1
1
1
1
RD
WR
IO/
КР1533ЛЛ1
MEMR
MEMW
IORКР1533ЛН1
ИР22
IВЫХ 0 ≤20 mAI ВЫХ 1≤100 mkA
Шин. Формир.: КР1533АП5
DD2 – служит защёлкой мл. байта адреса и одновременно усиливает сигнал по току, формирует мл. разряды ША. DD1 – служит усилителем сигналов ст. байта адреса, формирует ст. байт ША.
Формирование ШД: ШД двунаправлена. Для формирования сигналов ШД использует спец. МС – двунаправленные шинные формирователи:КР1533АП6: IВЫХ 0 ≤ 20 mA I ВЫХ 1 ≤ 100 mkA
47
DI RG0 D01 0… 17 ….. 7COE
DI RG0 D01 0… 17 ….. 7COE
ША МПС
А8915
017
ALE
DD1
DD2
A8A9
A15
A0
A1
A7
A F B01 0… 17 ….. EAB 7OE
ШД МПС
АД017
RD
КР1533АП6
Д0Д1
Д7
Направление передачи сигн. определяется сигналом на входе EАВ:
Если EАВ = 1, то А В Если Е АВ = 0, то А В
Имеется воз – ть переводить буферы в Z – состоянии: при ОЕ = 1, то Z – сост. Когда МП читает дан., то В А, когда записывает – А В ( для этого использ. вых. RD ) Можно исключить 2 – направ. буфер ШД и формирователь старш. Байта адреса ( если нагрузка на шине мала ) Кроме токовой нагрузки для МП важна ёмкостная: CН ≤ 150 пФ Если ёмкость превышает, то импульсы вместе прямоугольных становяться искажёнными:
Например, у КР1533: CВХ = 10 … 20 пФ С МОНТ = 50 пФ
Система команд МП.
МП имеет 244 команды. Отличных – 78. По ф – циям:1. Команды перемещения данных.2. Команды арифметические.3. Команды поразрядной обработки данных.4. Команды передачи управления.5. Команды управления МП.
Команды хранятся в памяти МП. Каждая команда – это комбинация двоичных данных. Но удобнее использовать 16 – ричный формат. Операнды – это могут быть данные или адреса памяти и портов. По фориату команды: 1 – байтные 2 – байтные 3 - байтные
48
КОП
КОП Дан. или адр.
15 8 7 0
7 0
Б1 Б2
КОП Ст. байт Мл. байт
23 Б1 16 15 Б2 8 7 Б3 0
Адреса или данные
Adr
Adr+1
Adr+2
Б1
Б3
Б2
Мл.б.
Ст.б.
Адреса или данные
Способы адресации – определяют методы операндов:1. Непосред. адресация – данные указываются непосредственно в команде.2. Прямая адресация – в команде указывается адрес ячейки памяти, где нах. или куда будут
пересылаться данные.3. Регистровая прямая – в команде указываются название регистров, где нах. данные.4. Косвенная регистровая – адрес яч. памяти нах. в регистровой паре ( чаще всего HL ).5. Стековая – используется при работе со стеком – адресация ячеек стека идёт через указатель
стека SP.
Команды перемещ. дан. хар – но, что дан. только перемещаются из одного объекта в др. ( дан. при перемещении копируются ). А) Команды пересылки, загрузки, запоминания и обмена. Б) Команды операций со стеком. В) Команды ввода – вывода. Если дан. перемещ. между регистр. – это пересылка; если из памяти в регистр – это пересылка рег., перемещ. из рег. в память – это запоминание.
- перемещение данных- обмен данными - R произвольный регистр - ( R ) содержимое регистра - RP регистровая пара- ( RP) содержимое регистровой пары- М ( Адрес ) содержимре ячейки памяти с адресом - М ( HL ) содержимое ячейки памяти, адрес который нах. в рег. паре - D8 или d8 8 – разр. данн. ( 1 – байт. )- D16 или d8 16 – разр. дан. ( 2 – байт. )- А16 или ADR 16 – разр. адрес- PORT адрес порта
А) MOV, MVI, LXI, LDA, STA, LDAX, STAX, LHLG, SHLD LHLG, SHLD XCHG – ( HL ) ( DE ) MOV R1, R2 ( R1 ) ( R2 ) R1, R2: A, B, C, D, E, H, L, M7 6 5 4 3 2 1 00 1 D D D S S SКод ком.
Код прие-мника
Код источ-ника
0111 1101 = 7DHMOV A, L ( A ) ( L )
000 – В001 - С010 - D011 - E
49
100 - H101 - L110 - M111 – A
Ком пересылки не действуют на флаги МП. Б) Стек – оюл. опер. памяти, адресация кот. осущ. с помощью рег. – указателя стека.
Для определения вершины стека надо загрузить указатель стека и указать адрес вершины стека: LXI SP, 100A H
Команды для раб. со стеком: PUSH RP – занести в стек содержимое регистровой пары.
PUSH H ( HL ) PUSH B ( BE ) PUSH D ( DC ) PUSH PSW ( PSW ) = ( A ), ( F )При занесении в стек:
1. Указатель стека декрементируется : ( SP ) ( SP ) – 1 : 1009H 2 . Старший регистр пары заносится в ячейку по новому адресу ( SP ) ( H ) ( 1009 H ) ( H ) 3. Указатель стека вновь декрементируется: 1008H. 4. Заносится по этому адресу мл. регистр пары ( SP ) ( L ) ( 1008H ) ( L )
PUSH PSW ( A ) ( F ) = 33H, 02H
1. ( SP ) ( SP ) – 1 1007H 2. ( SP ) ( A ) ( 1007H ) ( A ) 3. ( SP ) ( SP ) – 1 1006H 4. ( SP ) ( F ) ( 1006H) ( F )
POP RP – извлечь из вершины стека 16 – разр. данные и помещаем в рег. пару. Извлечь надо в обратном порядке: PUSH H PUSH PSW …………..
50
SP
1007
1008
1009
100А XXXX Вершина стека
Адрес ОЗУ
( HL ) = 5522 H
1008 221009 55100А
(L) – новая вершина стека(Н)
SP
SP 1006 02H1007 33H
(F) – новая вершина стека(A)
POP PSW POP H POP PSW 1. МП перемещает из верш. стека содержимое в регистр пары ( F ) ( SP ): ( F ) (1006H) 2. Указатель стека инкреминтируется : ( SP) ( SP ) + 1: 1007H3. Дан. из вершины стека пересыл. в старший рег. пары: ( А ) ( SP ) : ( A ) ( 1007H )4. Указ. стека вновь инкреминтируется: 1008H
POP PSW – изменяет флаги МП
В) Команды ввода и вывода: IN PORT – ( A ) ( PORT ) OUT PORT ( PORT ) ( A )2. A ) команды сложения 8 разр. чисел ( ADD, ADC, ADI, ACI ) Б ) команды вычесления 8 – разр. чисел ( SUB, SBB, SBI ) В ) команды сложения 16 – разр. данных DAD – данные складываются с регистровой парой овой парой . DAD H – ( HL ) ( HL ) + ( HL ) DAD B – ( HL ) ( HL ) + ( BC ) DAD D – ( HL ) ( HL ) + ( DE ) DAD SP – ( HL ) ( HL ) + ( SP ) Г ) команды инкремента ( INTR, INX ) Д ) команды декремента ( DCR, DCX ) Е ) команды десятичной коррекции данных ( DAA )
3. A ) ком. Логические: ANA ANI - лог. И ORA, ORI – лог. искл. ИЛИ CMA - лог. НЕ Б ) ком. cдвига: RLC, RRC, RAL, RAR В ) ком. сравнения CMP, CPI: CMP R – сравнен. с рег. CMP M – сравн. с ячейками памяти CPI – сравн. с непоср. данными 0, то Z = 1 ( А ) – ( R ) = < 0, то CY = 1 > 0, то Z = 0 , CY = 0Г) команды операции с флагом переноса: STC: (CY) 1 и CMC: (CY) ( )
3 группы: А) Ком. перехода Б) Ком. вызова подпрограммы В) Ком. возврата из подпрограмм 2 вида:- безусловные команды – выполняются всегда- условные ком. – выполняются при истинности усл – ия, указанного в ком.
Условие – это состояние флагов МП.
Условие выполнения команды
Флаг ( признак ) Мнемоника
51
Равенство 0Неравенство 0
ПереносНет переносаНечётность
ЧётностьПоложительностьОтрицательность
Z =1Z = 0
CY = 1CY = 0P = 0P = 1S = 0S = 1
ZNZC
NCPEPOPM
Команды перехода: А ) безусловные: JMP ADR; в РС загружается адрес, указанный в команде: ( PC ) ADR
PCHL ; ( PC ) ( HL ) Б ) условные: Jcond ADR; (где cond – это мнемоника: JZ, JNZ, JC, JNC, JPE, JPO, JP, JM)
1. МП проверяет флаг, котор. указан в усл – е истинно, то ( PC ) ADR; а если ложно, то команда игнорируется: ( PC ) ( PC ) + 3 Команды вызова подпрограмм: А ) безусловные Б ) условные
А. CALL ADR
1. МП заносит в стек содержимое РС – это будет адрес возврата из подпрограммы – PUSH PC
2. В PC заносится адрес, указанный в команде – JMP ADR
ADR – это первая команда подпрограммы – 0000Н….FFFFHRST N N = 0, 1, 2, 3, 4, 5, 6, 7ADR = N * 8 ( десятичное число )
Команда Адрес п .п.RST 0RST 1RST 2RST 3RST 4RST 5RST 6RST 7
08162432404856
0000H0008H 0010H 0018H 0020H0028H 0030H0038H
Б. Ccond ADR (где cond – мнемоника условия)
1. проверяется флаг, указанный в команде: если усл – ие истинно, то выполняется вызов п. п. по адресу, указанному в команде ( в стек заносится содержимое РС и в ( РС ) ADR )
3. если усл –ие ложно, то команда вызова игнорируется: ( PC ) ( PC ) + 3
52
КОП Ст. б Мл. б
Б1 Б2 Б3
Адрес
Команды возврата из п. п. : А ) безусловные
Б ) условные
А. RET возврат
МП извлекает из вершины стека 16 – разр. число и помещает его в РС, при этом происходит возврат в основную программу: 1. ( РС ) ( SP ) 2. ( SP ) ( SP ) + 1 3. ( PCH ) ( SP ) 4. ( SP ) ( SP ) + 1
Б. Rcond (где –cond - мнемоника условий)
1. проверяется флаг МП – если усл – ие истинно, то выполняется команда возврата ( из стека загружается РС – адрес возврата )
2. если усл – ие ложно, то команда возврата игнорируется: ( PC ) ( PC ) + 1
5 EI – ком. разрешить прерыван. ( т. е. разрешает МП реагировать на сигналы по входу INT) EI – вызывает установку внутр. триггера INTE 1 ( т. е. прерывание разрешены ) DI – запрещение прерываний ( т. е. МП не реагирует на запросы прерыв., поступающие на вход INT ), триггер INTE 0 NOP – пустая команда ( не производит никаких действий ) – использ. для выполнения задержек и для лотание дыр в программе. HLT – останов МП – ША и ШД переходят в Z – сост., т. е. МП отключается от системной шины. Выход: – запрос прерывания
- сигнал нач. установки
Язык Ассемблера.
Это язык символического кодирования, он позволяет заменить действительные данные или адреса символическими языками, этот язык удобен для компьютера. Этот язык наз. языком низкого уровня (или машинно – зависимым). Для каждого МП нужен свой язык. Сущ. языки высокого уровня(алгоритмические), котор. не зависят от МП. Достоинства Ассемблера – позволяет max использовать возможности МП, программы быстрые и короткие. Недостатки - требует высокой квалификации программиста. Все программы сост. Из предложений (строки на экране компьютера). Каждое предложение разбивается на поля:Метка операция операнды комментарийИспользуются символические имена:- постоянные имена- имена пользователя
Постоянные имена – это мнемокоды команд, название регистров и определённых операций. Имена пользователя – те, кот. даёт сам пользователь. Имена сост. из посл – ти лат. букв и цифр, начало – буква, число букв – 32: ABBA ABBA _ ACA
53
MET1 В поле метки стоит имя, кот. явл. символич. адресом яч. памяти. Признак метки двоеточие после имени.
АВВА: Операция 1. Мнемокод команд.
3. Псевдокоманды Ассемблера ( это указания Ассемблеру )
В поле операнды:1. имена регистров МП2. данные в какой – либо сист. счисления:
если 10 сист. – 12 или 12Д если 8 сист. – 12Q
если16 сист. – 12Н ( если начинается с буквы надо ставить 0 АВН 0АВН)
ASCII код для кодирования буквенно – цифровой инф –ии (используется апостроф) – ‘ C ’3. символ. имена данных или ячеек памяти
АВВА TEMP
4. различные символы, арифметич. и лог. операций +, -, /, *, NOT, AND, OR,…
Комментарий – описываются действие, выполняемые в данном предложении, отделяется ; , не воспринимается транслятором.
Псевдокоманды Ассемблера.
Псевдокоманда – это указание транслятору. Псевдокоманды не выполняются МП. ORG, END, EQU, SET, DB, DW, DS, MACRO, ENDM, ORG. < Метка: > ORG Выражение Скакого адреса начинается размещение программы. ORG 100H Если ORG отсутствует в начале программы, то по умолчанию нач. адрес программы – 0000Н < Метка: > END конец программы имя EQU выражение присваивает символич. имени какое – либо значение CONST EQU 25H MEM EQU 2000H Имена EQU не должны переопределяться программой Имя SET выражение CONST SET 25H ……….. CONST SET 45H Возможно изменение имени. < Метка: > DB список резервирует 1 яч. памяти и записывает в неё значение из списка. TABLE: DB, 01H, 07H, 0ABH < Метка: > DW выражение Резервирует 2 соседние ячейки и размещает в них 2 – х – байтовое число из списка < Метка: > DS выражение Резервирует в памяти определённое число ячеек, которые определяются выражением ( при этом в
выделенные ячейки никаких значений не заносится ) BASE : DS 100
54
ORG 1000H Base : DS 100
DELAY – имя п. п. задержки ……. П. п. задержки NUM + EQU 100 ORG 50H DELAY : MVI C, NUM LOOP : NOP DCR C JNZ LOOP; цикл если ( С ) = 0 RET; возврат из п. п. END; конец программы MACRO и ENDM используются для создания макроср – в. часто в прогр. есть отдельные фрагменты, котор. часто повторяются – их записывают как макрокоманды.
Имя MACRO программы ……….. ENDM RCHANGE : MACRO R1, R2 MOV A, R1 MOV R1, R2 MOV R2, A ENDM Обмен ( В ) и ( С ) – RCHAHGE B, C XCHANGE: MACRO X1, X2 PUSH X1 PUSH X2 POP X1 POP X2 ENDM Обмен между ( ВС ) и ( DE ) XCHANGE B, D
Методика разработки программного обеспечения.
2 класса средств:
1. Аппаратные2. Программные ( ПО )
Этапы разработки ПО:
1. Определить и проанализировать задачу.2. Составить алгоритм реш – ия задачи.3. Составить структурную схему ( блок – схему ) алгоритма.
55
1000BASE100
4. Записать программу на языке Ассемблера.5. Транслировать программу в машинные коды.6. Занести коды программы в память МПС.7. Отладить программу.8. Документировать программу.
На 1 – ом этапе уточняются отдельные детали задачи (на разговорном языке). Задача разбивается на блоки. Методы задания алгоритмов:
1. Словестный.2. Табличный метод – использование таблиц для сравнения ( пример – таблица истинности )
С помощью формул – при использ. комбинационных схем.
Графический метод – задание алгоритма с помощью геометрических фигур, называемых блоками. Последовательность блоков и соединительных линий образуют структурную схему или блок – схему (БСУ ).
Алгоритмы : 1. Линейные2. Разветвлённые3. Циклические.
Линейные алгоритмы не содержат усл – ий, имеют 1 ветвь и изображ. лин. посл – тью связанных друг с другом блоков. Разветвлённый алгоритм содержит 1 или несколько логических условий, может иметь несколько ветвей обработки. Проверка усл – ий – это проверка флагов. Пример: в МПС поступает 1 – байтн. число со знаком. Если оно полож. – выводится в 1 –ый порт, если отрицат. – во 2 – ой порт.7 6 5 4 3 2 1 0SS = 0 – положительное
56
Блок обработки
Начало
Конец
Блок обработки п. п.
Блок ввода и вывода
Блок условий
Нет Да
1
S = 1 – отрицательное
PORT – Порт вводаOPORT1 и OPORT2 порт вывода
IN IPORT; ввод данных ORA A; установка флагов JP MET1; переход на MET1, если S = 0 OUT OPORT2; вывод HLT MET1: OUT OPORT1; вывод HLT Цикл алг. содерж. 1 или нескол. циклов. Цикл – это посл –ть повторяющихся команд. Имеется счётчик цикла или переменная – показывает сколько раз должен повторяться цикл.
N = 1…256 раз – в качестве счётчика цикла использ. любой из регистров.…MVI C, NUMBER; загрузить счётчик циклаLOOP: NOP NOP DCR JNZ LOOP; цикл если ( С ) 0N = 1…65536 – использ. регистр. пару ( BC, DE, HL )
57
Начало
Ввод из порта
S = 0
Вывод в порт 1Вывод в порт 2
Конец
Загрузить счётчик циклов
Блок обработки
Модификация переменного цикла
Счётчик цикла > 0
Тело цикла
… LXI B, NUMBER; загруз. счётч. Цикла LOOP: NOP NOP и т. д. 1. Проверить на 0 рег. В и если истинно, то проверить рег. С:
LXI B, NUMBER LOOP: NOP NOP DCX B MOV A, B CPI 0 JNZ LOOP; цикл, если ( В ) 0 MOV A, C CPI 0 JNZ LOOP; цикл, если ( С ) 0
( В ) = 000000001 ( С ) = 100000000 100000001
Процедура обработки данных.
МП обрабатывают разные данные.
Массивы – это набор эл – ов данных одинаковой длины, кот. расположены в области смежных ячеек памяти.
58
Начало
Инициализация
Обработка
Модификация
Эл – нт послед.
Конец
BASE
Эл –нт 0 BASE – адрес начального эл – та массиваIND - индекс массива
Эл – нт 1 ADR = BASE + IND – адрес текущего эл – та…………. R – число байт
Эл – нт N ADR = BASE + k * IND
Для операций с массивами использ. 2 вида переменных:- указатель яч. памяти POINTER ( PTR )- счётчик, в кот. содержится индекс массива COUNTER
Пример: поиск max числа в массиве 1 – байтн. целых чисел без знака
Длина массива в ячейке LENGTH В качестве счётчика – рег. В Указатель памяти – рег. пара HL Нач. адрес массива – BASE
БСА:
LDA LENGTH; пересылка длины мас. MOV B, A ; рег. В – счётчик LXI H, BASE ; HL – указатель памятиNEW MAX: MOV A, M NEXT: DCR B JZ DONE; переход, если (В) = 0 INX H CMP M
59
Начало
Инициализация: ( HL ) BASE( BC ) ( LENGTH )
( A ) (( HL ))
( B ) ( B ) - 1
B = 0
( HL ) ( HL ) + 1
( A ) < (( HL ))
Конец
Да
Да
Нет
Нет
СY=1
JC NEWMAX; если (CY) = 1 JMP NEXT DONE: HLT; останов
Для хранения переменных можно использовать ячейки памяти (если не хватает регистров)
LXI H, BASE SHLD PTR LXI A, NUMBER STA COUNT ….. LHLD PTR; загрузить указатель памяти LDA COUNT; загрузить счётчик MOV B, A … SHLD PTR; запоминание эл – ов MOV A, B STA COUNT
60
PRTPRT1 + 1
COUNT
ячейки хранения адреса
яч. хранения счётчика эл – ов
Датчик
D0 0 1 … 7 8 9
DI RG D001… …7 7
DI RG D00 0 1 1… …7 7
ШД МПС
Х(t)
л/# Д0Д1
Д7
Д0Д1
Д7
Порт 1
Порт 2
BASE XXXX XXXX мл. б.
0000 00ХХ ст. б.
PTR указатель памятиPTR+1COUNT счетчик
Инициализация LXI H, BASE SHLD PTR; запоминание указателя памяти MVI A, LENGTH; загрузить число эл – ов STA COUNT; заполнить счётчик …… CYCLE: LHLD PTR IN PORT 1; ввод мл. б. кода АЦП MOV M, A INX H IN PORT 2; ввод ст. б. кода АЦП ANI 00000011 B, выделить разр. D1, D0 MOV M, A INX H SHLD PTR LDA COUNT PCR A STA COUNT INZ CYCLE DONE:
Виды программного обеспечения ( ПО ) МПС.
2 вида : 1. прикладные2. системные программы.
Прикладные прогр. выполн. числовую и символьн. обраб. Данных Прикл. прогр. разраб. пользователь. Систем. програм. Организует работу внутр. уст – в. Совок – ть сист. программ образуют операционную систему ( ОС ). Имеются стандартные ОС: MS DOS, WINDOWS и др. Они разрабатываются проффесионалами ОС занимают большой объём памяти. ОС для простых МПС ( типа микроконтроллеров ) проще, чем универс. ОС. В памяти они могут занимать до нескольких Кбайт. Простые ОС делят на 2 группы: 1 – ая группа выполняет связь сист. с внешн. устр – ми. Программы, выполняющие ввод – вывод ( связь с ВУ ) наз. драйверами. 2 – ая группа выполнят связь с оператором. Используется язык директив. Такие простые ОС часто наз. мониторами.
Подпрограммы как средства модульного программирования.
Часто встречается посл – ти команд, кот. выполняют одну ф – цию, используя разные данные. Эти посл – ти организуют в подпрограмме котор. может вызываться из основн. программ. Подпрогр. – это законченный сегмент ( или модуль ) прграммы, кот. можно вызвать любое число раз. 273
61
Достоинства : 1. Сложную прогр. можно разделить на небольшие модули, разработка кот. может
производиться различными программистами.2. Каждую подпрогр. можно отладить отдельно.3. Подпрограмма сокращает длину общей программы.4. Отлаженные подпрогр. можно хранить в библиотеках и использовать в разных задачах.
Недостатки : 1. вызов и возврат подпрогр. затрачивает время, поэтому маленькие подпрогр. неэффективны. Вызов подпрогр. осуществляется командой: CALL SUBR адрес
При вызове подпр. МП заносит в вершину стека содержимое РС ( адрес след. команды за командой CALL ) – это адрес возврата.
RET – команда возврата ( при этом из вершины стека МП извлекает 2 – байтовое число и помещает в РС и происходит возврат в основ. программу ) Необходимо, чтобы подпрогр. не меняла содержимое регистров, кот. использ. в основн. программе. Для этого надо сохранить содержимое регистров:
1. сохранить в стеке содержимое регистр. перед вызовом подпрогр., после восстановить.2. В самом начале самой подпрогр. занести в стек содержимое регистров и перед выходом из
подпрогр. восстановить содержимое этих регистров.
SUBR: PUSH PSW; занести в стек ( A, F ) PUSH B; занести в стек ( В, С ) …… POP B; восстановить ( B, C ) POP PSW; восстановить ( А, F ) RET SUBR1: ……. DCR A RZ; возврат, если ( А ) = 0 INI B POP D POP H регистры не восстанавливаются RET SUBR1: …… DCR A JZ EXIT; выход, если ( А ) = 0 INX B EXIT: POP D POP H RET
Чтобы подпрогр. правильно использовать необходимо произвести спецификацию, в кот. указывается:
1. входн. прог – мы подпрогр., т. е. где наход. данные, обрабатываемые подпрогр.2. выходные пар – ры подпрогр., т. е. где будут размещаться рез – ты работы под – мы.3. Какие регистры будут использ. в подпрогр.
В Ассемблере спецификац. размещается в комментариях в начале подпрограммы:
62
...
...
...
N Б1 Б0
+
СY
Слогаемое 1
Слогаемое 2
Результат
; подпрогр. сложения 2 – х целых чисел ( двоичных ) формата 8 * N; входн. пар – ры: регистры В, С – адрес мл. байта слогаемого 1; HL – адрес мл. байта слогаемого 2; рег. Е – кол – во байт N числа; выход. пар – ры: регистры В, С – адрес мл. байта рез – та; CY – признак переполнения суммы; используются все регистры
Возможно ситуация, когда после вызова подпр., она вызывает др., а следующ. ещё одну. Такие подпрограммы наз. вложенными.
Способы передачи пар – ов : 1. Передача пар – ов через яч. памяти ( через адреса яч. памяти ). К этим адресам может
обращаться и основн. и подпрогр.Такие пар – ры наз. глобальные ( общедоступные )
Недостаток – искажение пар – ов и трудность обнаружения виновника.2. С помощью регистров МП – можно передать как данные, так и адреса яч. памяти.
Недостаток – малое кол – во регистров. Такие пар – ры наз. локальными.3. Передача пар – ов через стек – перед вызовом подпрогр. основн. прогр. заносит в стек пар –
ры, кот. будут использ. в подпрогр., после она вызывает из стека пар –ры. Осн. прогр. LXI H, PARAM1 PUSH H LXI H, PARAM2 PUSH H LXI H, PARAM3 PUSH H CALL SUBR
SUBR : POP H SHLD ADRRET POP H; в ( HL ) PARAM3 POP H; ( DE ) PARAM2 POP D; ( BC ) PARAM1 ………
63
SP
ADR
PARAM3
PARAM2
PARAM1
Стек ОЗУ
Адрес возврата ADR
ADRRETADRRET+1
LHLD ADRRET PCHL; возврат из подпрогр. Достоинство – быстрота и неогран. число пар – ов.
Иерархическая организация подпрограмм.
Для упрощения структуры программы удобно использовать иерархию подпрограмм, есть основн. прогр., из котор. вызыв. подпрограммы, котор. делят на несколько уровней:
Применение таблиц.Таблица – обобщ. одномер. массив, эл – ты кот. могут иметь различ. длину.
1. Таблицы адресов – эл – ми явл. 16 – разр. адреса яч. памяти.
Каждое сообщение заканчивается спец. знаком – символом конца – терминатором: NUUL = 00000000
64
Основная программа
n/n-1 n/n-2
n/n-3 n/n-4 n/n-5 n/n-6
1 уровень
- 2 уровень
Таблица сообщений
Таблица адресов
номер сообщ.
Сообщение 0
Сообщение 1
Сообщение 2
0
1
2
Adr 0
Adr 1
Adr 2
Adr 0
Adr 1
Adr 2
NULL
NULL
NULL
Пуск ….. Стоп
Пуск
0 1 2
При нажатии клавиши происходит её ид - ия
Порт ввода ( KEY BORD )
SB1
SB2
SB3
DI0
1
2
RG
Нажатию любой клавиши соответствует свой код, и следовательно своя п. п. SB Код П / п 1 00H SUBRO 2 01H SUBR1…………………………..
1.ввод с клавиатуры данных и сравнен. последов. с кодом ( известным ) клавиши, в случае рав – ва мы определили какая клавиша нажата и переходит к п / п.
IN KEYBORD CPI 00H; сравнение с кодом SB1 SZ SUBR 0; CPI 01H; сравнение с кодом SB2 CZ SUBR 1; …………… такая прогр. может быть очень громадной 2.использ. табл. адресов:
IN KEYBORD ADD A; удвоение MOV E, A MVI D, 0 ; ( DE ) ( A ) LXI H, TABLE ; ( HL ) нач. адрес табл. DAD D ; ( HL ) ( HL ) + ( DE ) MOV D, M ; ( D ) Ст. б. адреса INX H MOV E, M ; ( E ) Мл. б. адреса XCHG ; ( DE ) ( HL ) PCHL ; Переход к п / п
65
TABLE Адрес SUBR 0
Адрес SUBR 1
Адрес SUBR 2
Применение таблиц для преобразования кодов:
Двоичный код HEX Символ 7 6 5 4 3 2 1 00 0 1 1 1 1 1 1 3F 00 0 0 0 0 1 1 0 06 1...................................................................
0 1 1 1 1 1 1 1 7F 81 0 0 0 0 0 0 0 80 ,
00000000 = 00Н
; П / п преобразование двоичного кода; Символа в 7 – сегментный код; Вх. пар – ры рег. А – двоич. код симв.; Вых. пар – р рег. А – 7 – сегментн. Код CONVERT: MOV E, A MVI D, 0; ( DE ) ( A ) LXI H, TABLECOD DAD D ; ( HD ) ( HL ) + ( DE ) MOV A, M; чтение кода из табл. RET ; Табл. 7 – сегмент. кодов TABLECOD ; DB 3FH; Код “ 0 ” DB 06H; Код “ 1 ” ……… DB 71H; Код “ F ”
2. вычисление ф – ций с помощью таблиц:
Y = X2 x = 0, 1, …, 10X Y
DEC HEX DEC HEX0 00 0 001 01 1 012 02 4 043 03 9 094 04 16 105 05 25 196 06 36 247 07 49 31
66
7 6 5 4 3 2 1 0
a
f b ge c d h
8 08 64 409 09 81 5110 0A 100 64
; П / п вычисление ф – ции Y = X2
; Вх. пар – ры: рег. С – число Х; Вых. пар – р: рег. Е – рез – т У KVADRAT: MVI B, 0; ( BC ) – число х LXI H, TABLE DAD ; ( HL ) ( HL ) + ( BC ) MOV E, M ; чтение у RET; Таблицы квадратов TABLE: DB 00H, 01H, 04H DB 09H, 10H, 19H DB 24H, 31H, 40H DB 51H, 64H
4.Таблицы переходов: слож. прогр. сост. из нескольких моделей. Обычно каждый модуль содержит п / п, кот. могут вызываться из др. модулей. Это делается с помощью команды CALL Adr JMP Adr
Программирование цифровых вычислительных устройств.
Числа делятся на виды:1. целые2. дробные
Могут быть : - без знака- со знаком
Целые числа делят на :- двоичные- десятичные ( в двоично – десятичном коде )
Дробные числа: - c фиксированной запятой ( ф3 )- с плавающей запятой ( пз )
Число могут иметь размер 1, 2, 3, … и т. д. байт
Арифмитические операции с целыми числами без знака.
67
Табл. переходовГлавн. Прогр
CALLSUBR 1
CALLSUBR 2
JMPSUBR 1A
JMPSUBR 2B
SUBR 1A
SUBR 2A
SUBR 1
SUBR 1
Обратный код – инверсия каждого двоичного числа: [ A ]ОБР = [ A ]ПР
использ. для выполнения операции вычитания. Дополнительный код: [ A ]ДОП = [ A ]ОБР + 1 LDA MEM ; MEM – адрес числа в ком. CMA STA MEM ; число в обр. коде INR A STA MEM ; число в доп. Коде 00Н = 0 FFH = 255
Увеличение разрядности чисел резко уменьшает производительность МП ADD – сложение SUB – вычитание
ADC – сложение с учётом переноса Пример: ; п / п сложение 2 – х целых беззнаковых ; двоичных чисел формата 8 * N ; N – число байт ; вх. пар – ры: рег. В, С – адрес мл. б. слог. 1 ; рег. HL – адрес мл. б. слогаемого 2 ; рег. Е – кол – во N байт числа ; вых. пар – ры рег. ВС – адрес мл. б. суммы ; CY – признак переполнения суммы
ADD8N: MOV D, E; сохранить рег. Е PUSH B; сохранить адрес 1 XRA A; ( CY ) 0 ; многобайтное двоичное сложение
68
0 1 0 1 0 1 0 0
7 6 5 4 3 2 1 0
Число двоичное в прямом коде.
Б3 Б2 Б1 Б0
31 24 23 16 15 8 7 0
Б1 Б0
15 8 7 0 Б0 Adr
Б1 Adr+1
Б1 Б0
Б1 Б0
- 1 слог.
- 2 слог.
CY
CYCLE : LDAX B ; ( A )адрес ВС ( SBB M ) ADC M ; сложить ( вычесть ) STAX B ; запомнить INX B INX H DCR E JNZ CYCLE ; цикл, если ( Е ) 0 ; восстановление регистров MOV E, D POP B RET
Умножение и деление:
1010 - Мж * 1101 - Мн
1010 - частное произведение 0000 1010 1010 _ 10000010 - произведение ( рез – т ) разряды: 8 * 8 = 167 * 16 = 24
16 * 16 = 32
При делении получается целое и целый остаток
Быстрое умножение и деление двоичных чисел.
Использ. команды сдвига 00000100 = 4 сдвиг 00001000 = 8
00010000 = 16 при сдвиге влево происходит умножение на 2: Aрез. = А исх. * 2N
N – число сдвигов
Рез – т будет правильный, если не произошёл перенос из старшего разряда 00001000 = 8 00000100 = 4 00000010 = 2 т. е. при сдвиге вправо происходит деление на 2: Арез. = Аисх / 2N
00001001 = 9 сдвиг через перенос
У = х * 6 = 4 * х + 2 * хУ = 10 * х = 8 * х + 2 * хУ = 6,5 * х = 4 * х + 2 * х + х / 2 Пример: исходное однобайтное число поступает в порт. Надо * 6,5 и записать в память
IPORT – адрес порта ввода SAVE – адрес яч. памяти IN IPORT ; ( A ) x
69
MOV C, A ; ( C ) X RLC ; ( A ) = 2 * x MOV B, A ; ( B ) 2 * x RLC ; ( A ) = 4 * x ADD B ; ( A ) = ( A ) + ( B ) = 6 * x MOV B, A ; ( B ) = 6 * x ORA A ; ( CY ) 0 MOV A, C ; ( A ) ( C ) = x RAR ; сдвиг вправо ( А ) = х / 2 ADD B ; ( A ) ( A ) + ( B ) = 6.5 * x STA SAVE ; запомнить Число должно быть меньше 255 !
Упакованный формат удобен для хранения чисел в памяти, но не удобен для ввода и вывода чисел. Неупакованный формат
Преобразование десятичного числа из неупаков. Формата в упаков. наз. упаковкой десятичн. чисел. Обратное преобразование наз. распаковкой десятичн. чисел.
1
70
1 0 0 0 1 0 0 1
7 6 5 4 3 2 1 0
Ст. Т Мл. Т
диапазон 0…99
0 1 0 0 0 1 0 1 1 0 0 0 1 0 0 1
15 8 7 0
4 5 8 9
Б1 Б0
Adr 1000 1001
Adr + 1 0100 0101
0 0 0 0 1 0 0 1
Ст. Т Мл. Т
цифра
0 0 0 0 1 0 0 1
0 0 0 0 1 0 0 0
1 0 0 0 1 0 0 1
Мл. ц.
9
Ст. ц.
8
Ст. ц. Мл. ц.
Сложение десятичных чисел
ADD – слож. двоичных чисел DAA – десятич. коррекц. аккумулятора Пример ; П / п сложения десятичн. чисел ; Вх. пар – р : рег. ВС – адрес Мл. б. слог. 1 ; Рег. HL – адрес Мл. б. слог. 2 ; Рег. Е – кол – во байт N ; Вых. пар – р : рег. ВС – адрес суммы ; CY – признак переполнения суммы
ADD10N: MOV D, E PUSH B XRA A ; сложение ВСD – чисел CYCLE: LDAX B ADC M ; двоичное сложение DAA ; десятичная коррекция STAX B INX B INX H ; проверка конца цикла DCR E JNZ CYCLE ; если ( Е ) 0 ; выход MOV E, D POP B RET
Для вычитания коррекция не применяется поэтому так нельзя отнимать.
71
Мл. ц. Байт 0
Б1
Ст. ц. Б2
1 0 0 1 1 0 0 0 0 1 0 1 0 1 0 0 0 0 1 1 0 0 0 1
Ст. ц. Мл. ц. 9 8 5 4 3 1
Б2 Б1 Б0
Вычитаемое преобр. в дополн. код и производится сложение. Умножение и деление десятичных чисел очень сложно. Поэтому такие программы неиспользуются. Для необходимости производят преобразование десятичных чисел в двоичные, затем производят необходимые действия, а затем осуществляют обратное преобразование.
Преобразование двоичных чисел в десятичные и наоборот.
Преобраз. 2 – х – разряд. десятичн. число в эквивалентное двоичное
; Вх. пар – р : рег. А – двоич. – десят. число; Вых. пар – р : рег. А – эквивал. двоичн. число
PR 102 : ; распаковка дв. – дес. число MOV B, A ; копия дв. – дес. число ANI OFH ; выделить Мл. ц. MOV C, A ; MOV A, B ; ANI OFOH ; выделить Ст. ц. RRC ; Ст. ц. * 10 MOV B, A ; в рег. в – Ст. ц. * 8 RRC RRC ; Ст. ц. * 2 ADD B ; Ст. ц. * 10 ADD C ; в рег. А – двоичн. число RET
72
PR 102
Выделить Мл. ц.
Выделить Ст. ц.
Вычислить 10 * Ст. ц.
Сложить 10 * Ст. ц. + Мл. ц.
Выход
1 0 0 1 1 0 0 1 0 1 0 1 0 1 0 1
Ст. ц. Мл. ц. Двоичное число 9 9
Ст. Ц. 0 0 0 0 0 0 0 0 Ст. Ц
RRC RLC Ст. Ц. * 8 RLC RRC RLC RRC Ст. Ц. * 8 Ст. Ц. + 2
Преобразование 1 – байтного двоичного числа в эквивалент. десятичном
; Вх. пар – р : рег. С – двоичное число ; Вых. пар – р : рег. HL – 3 – разр. десятичн. число
PR810 : LXI H, O MVI B, 8 ; счётчик циклов ; сдвиг влево CYCLE: MOV A, C RLC MOV C, A ; дв. – дес. удвоение суммы MOV A, L ADC L DAA MOV L, A MOV A, H ADC H DAA MOV H, A ; проверка конца цикла DCR CYCLE RET
Операции с целыми двоичными числами со знаком !
S = 0 – положит. число S = 1 – отриц. число
1) прямой код – ст. разряд – знаковый, остальные разряды – этомодули числа.
0 1 1 1 1 1 1 1 = + 127 1 1 1 1 1 1 1 1 = - 127
возможно появление 2 – х видов нуля: положит. и отриц.
2) обратный код
если S = 0 обр. код совпадает с прям. S = 1 обр. код = инверсии
0 1 0 1 0 1 0 1 – прямой код 73
1 1 1 1 1 1 1 1
0 0 1 1 0 1 0 1 0 1 0 1
2 5 5
= FF
S
7 6 5 4 3 2 1 0
S
обр. код числа
0 1 0 1 0 1 0 1 – обр. код
1 0 1 0 1 0 1 0 – прямой код 1 1 0 1 0 1 0 1 – обр. код
возможность появления 2 – х видов нулей.
3) дополнительный код
S = 0 – доп. код совпад. с прям. код S = 1 – [ AДОП ] = [ AОБР.] + 1 = [ ]ПР + 1
Достоинство – слож. и вычит. выполняется одинаково ; имеется только один нуль.
Недостаток – громоздкость получения доп. кода ( особенно для многобайтных чисел ) [ A ]ДОП = [ A ]ОБР + 1 = [ ]ПР + 1 [ A ]ПР = [ ] = [ AДОП ] + 1
- 1 = 1 0 0 0 0 0 0 1 – пр. код инверсия 0 1 1 1 1 1 1 0+ 1 0 1 1 1 1 1 1 1 = ошибка 1 1 1 1 1 1 1 1 = FFH
П / п преобраз. однобайтных чисел из прям. кода в дополнит. и наоборот
; Вх. рар – р : рег. А – исх. число ; Вых. пар – р : рег. А – вых. число
DOP : MOV C, A RLC JC PREOBR ; если S = 1 MOV A, C RETPREOBR : MOV A, C CMA ; инверсия числа INR A ; ( A ) ( A ) + 1 RET
74
S
доп. код числа
АЦП
Порт 1 IPORT 1
Порт 2 IPORT 2
S
Ст. б. Мл. б.
15 0
X(t)
МлБ
СтБ
МлБ s СтБ доп.код
; П / п преобраз. из прям. кода в допол. ; Вх. пар – ры : IPORT 1 – ввод Мл. б., IPORT 2 – ввод Ст. б. ; Рег. HL – адрес Мл. б. доп. кода в ОЗУ
DOP 2 : IN IPORT 2: Ввод Ст. б. RLC JC PREOBR ; если S = 1 IN IPORT 1 ; ввод Мл. б. MOV M, A INX H IN IPORT 2 ; ввод Ст. б. MOV M, A RET PREOBR: IN IPORT 1 : ввод Мл. б. CMA ADI 1 MOV M, A ; запомнить в ОЗУ IN IPORT 2 ; ввод Ст. б. CMA ACI O ORI 80 ; установить S = 1 MOV M, A RET
1) С использованием специального порта состояний – кода ВУ выставляет данные, оно записывает в определённые ячейки порта “ 1 ”
75
POP 2
Ввод Мл. б.
Ввод Ст. б.
инверсия
инкремент
Запись в ОЗУ
Выход
Если D7 = 1 – данные имеются D7 = 0 – данных нет
MAIN : LXI H, BASE MVI C, 100 ; загрузить счётчик WAIT : IN PORTSTAS ; ввод состояния ANI 1000 0000 B ; выделить D7 JZ WAIT ; цикл ожидания CALL DOP 2 ; ввод данных и преобразование DCR C ; JNZ WAIT ; цикл, если ( С ) 0 HLT ; остановить МП
76
Порт состояния PORT STAS
от ВУ D7
MAIN
инициализация
Ввод из PORT STAS
D7 = 1
DOP 2
Декремент счётчика
( С ) = 0
Конец
Нет
Нет
Да
Да
Мл. б. BASE Доп. Код S Ст. б.
2) Использование запросов прерывания.
RST 7 – команда прерыв. вектор прерывания : 0038 H ORG 0000H JMP MAIN ; переход к главн. программе ORG 0038H ; вектор прерывания CALL DOP 2 DCR E JNZ NEXT ; если ( С ) 0 JMP EXIT NEXT : EI RET ORG 0100H MAIN : LXI H, BASE MVI E, 100 EI ; разрешить прерываниеWAIT : JMP WAIT ; зацикливаниеEXIT : HLT
Дробные числа.
1. С фиксированной запятой ( ФЗ ) 2. С плавающей запятой ( ПЗ )
Целые числа > 0
Дроьные числа < 1, но > 0 ( если число > 1 – то переполнение ) ПЗ : X = X * RM
Где: м – порядок, Х – мантисса, R – основание.М и Х – могут быть и положит. и отрицат..
77
МП
INT
Появились данныедля ввода
7 6 5 4 3 2 1 0 1) , - число целое
7 6 5 4 3 2 1 02) - смешанное число
целая дробная часть часть 7 6 5 4 3 2 1 03) , - дробное число
В МП ВМ80, ВМ85 : Занимает 1 байт Х = 2 – 3 – байта
д. б. нормализована ( в старшем разряде д. б. 1 ) Мантисса это число с ФЗ
Арифметические операции с числами с ПЗz = x ∙ y = x ∙ 2 mx ∙ y ∙ 2 my = x ∙ y ∙ 2 mx + my
z = = x ∙ 2 mx / y ∙ 2 my = ∙ 2 mx – my
Сложение:
MULFL
Умножение мантисс в формате с ФЗ
Сложение порядков в формате целых чисел
Нормализация мантисс
Коррекция порядка
Выход
78
Ст. б. Мл. б.
7 6 5 4 3 2 1 0
Sm Порядок Мсм.
М + 27 = + 128 - 64 0 63
Мсм - 27 = - 128 0 127 Мсм = м + 64
15 8 7 0
мантисса
БИС параллельного интерфейсаКР580ВВ55А (i8285A)
Имеет пластмассовый корпус и потребляет ≈ 125 мА.
ADDFL
Выровнять порядки
Сложение мантисс в формате с ФЗ
Нормализация мантисс
Коррекция порядка
Выход
A0A1
PIO
CS
D
0 1 7
UccGND
RDWR
RESET
PA
0 1 7
PB
0 1 7
PC
0 1 7
79
Порты А, В, С. Порт С разделен на старший и младший. Все порты управляются программно.Буфер данных имеет 3 состояния.А0, А1 − адрес.RESET − переводит все порты на ввод.РУС − регистр управляющего слова, которое посылает МП. По сигналу RESET РУС
сбрасывается в 0.
МС может работать в 3-х режимах:0 − режим простого ввода- вывода. Порты работают на прием-выдачу параллельных данных;1 − стробируемый ввод-вывод. Работают порты А и В, порт С используется для управления;2 − двунаправленный ввод-вывод. Работает только порт А.
ППА − программируемый параллельный адаптер.Программирование − запись в РУС управляющего слова, которое определяет режим работы.
Применяется 2 вида управляющих слов:1. УССРР − управляющее слово режима работы. Каждый разряд отвечает за
строго определенную функцию.
MVI A, РУСOUT РУС
Буфер данных
Схема управ-ления
РУС
Порт PCH
8 4(PC4 ÷ PC7)
Порт PA
8 8(PA0 ÷ PA7)
Порт PCL
8 4(PC0 ÷ PC3)
Порт PB
8 8(PB0 ÷ PB7)
D0
D7
A0
A1
RESET
CS
RD
WD
ШД
8
8
D7 D5 D4 D3 D2 D1 D0D6
Всегда “1”
Реж. 0Реж. 1Реж. 20
0101
х Порт РА и РСH
РА(7÷0)ВводВывод1
0
РС(7÷4)ВводВывод1
0
10
ВводВывод
РС(3÷0)
01
Режим 0Режим 1
10
ВводВывод
РВ(7÷0)
80
Пример: настроить адаптер на работу со следующей конфигурацией: порт А − ввод, порт В − вывод, ст. т. порта С − вывод, мл. т. порта с − ввод. Все порты работают в режиме 0.
A0 A1 Регистры ППА0011
0101
РАРВРС
РУС
= 1 → все выводы адаптера в Z − состоянии;= 0 → адаптер включается в работу.
А7 А6 А5 А4 А3 А2 А1 А0 Регистры Адресахххх
хххх
хххх
хххх
хххх
1111
0011
0101
РАРВРС
РУС
04Н05Н06Н07Н
MVI A, 91HOUT 07H
;ввод из порта РАIN 04H
;вывод в порт РВOUT 05H
2. Можно управлять отдельными битами порта СУСУСБ − управляющее слово установки сброса битов. Определяет работу только РС.
1 0 1 0 0 0 10
7 6 5 4 3 2 1 0
УС: = 91Н
A0A1
PIO
CS
D
0 1 7
UccGND
RDWR
RESET
PA
0 1 7
PB
0 1 7
PC
0 1 7
ШД
1
ША
ШУ
А0
А2
А1
Reset
IOR
IOW
81
Пример: установить в “1” 2-ой бит порта СУС: 0000 0101 = 05НMVI A, 05HOUT РУС
Выходные буферы портов имеют следующую структурную схему:
Пример: установить в “1” 2-ой бит порта АIN PAORI 0000 0100BOUT PAПример: инвертировать 3-ий бит порта СIN PCXRI 0000 0100BOUT PC
Адаптер имеет невысокую нагрузочную способность:I0
ВЫХ ≤ 2 мАI1
ВЫХ ≤ 40 мкА
БИС последовательного интерфейса КР580ВВ51А
При последовательной передаче данных информация передается последовательно бит за битом. Необходимо устройство для преобразования параллельного кода в последовательный (на передающей стороне) и последовательного в параллельный на приемной стороне.
D7 D5 D4 D3 D2 D1 D0D6
Всегда “0”
0000111
1 0 0 1 1 0 0 1 10101010
1РС0
РС1
РС2
РС3
РС4
РС5
РС6
РС7
01
Сброс в 0Установка 1
х х х
ШД
1
2
8Выход
8 8
8
Служит для чтения состояния выхода
82
Важнейший параметр − скорость (частота) передачи − определяет количество передаваемых бит в секунду [бит/с]. Эта величина называется Бод = бит/с.
Интервал, когда уровень неизменный ТП = 1/VП , VП − скорость передачи, ТП = 1/fП , fП
− частота передачи.
Используется передача младшими разрядами вперед:
Коды:1. 5-элементный или МТК (международный телеграфный код). 25 = 32 сообщения.
Используется 3 регистра: верхний, средний и нижний.2. Американский код для передачи последовательных данных ASCII − 7-элементный,
для передачи используется 7 битов: 27 = 128. 8-ой бит используется как контрольный. Такой код недостаточен для русского алфавита.
3. КОИ−8 (или КОИ−7) − код для обработки информации.
При передаче по линии связи могут возникнуть искажения, поэтому важны защита кодов и способы обнаружения ошибок: контроль паритета (четности) − для четного паритета сумма всех битов должна быть четной, для нечетного соответственно нечетной. Позволяет исправить 90 % ошибок.
При передаче используют 2 принципа передачи: асинхронный и синхронный.
МПС Передатчик Приемник МПС
Передающая часть Приемная часть
Л. С.
Параллельный кодПоследовательный код
Параллельный код
ТП
D7 D5 D4 D3 D2 D1 D0D6
1 0 0 1 1 0 0 1
D0 D1 D2 D3 D4 D5 D6 D7
ТП
Время
83
Асинхронный − передача каждого символа заключается в рамку из старт-бита и стоп-битов (может быть 1 или 2). Начало передачи определяется старт-битом. Приемник, получив его производит синхронизацию генератора. При отсутствии передачи в Л. С. − высокий уровень. В конце передачи передатчик выдает стоп-биты (высокого уровня). Приемник, получив их, заканчивает прием данных.
Достоинства:1. Большая надежность передачи данных.2. Низкие требования к стабильности генераторов передатчика и приемника.
Недостатки:1. Большая избыточность.2. Невысокая скорость передачи.
Используется для передачи на большие расстояния.
Синхронный − перед началом передачи в линию связи посылают специальное сообщение (наз. синхросимволы) чтобы информировать приемник о начале передачи и синхронизировать работу генераторов. Приемник, обнаружив синхросимволы начинает прием данных сплошным потоком без перерыва.
Достоинство: большая скорость передачи.Недостатки:
1. Т. к.. синхронизация осуществляется только вначале передачи массива данных, то высокие требования к генератору.
2. Меньшая помехозащищенность.Используется при передаче данных на небольшие расстояния (внутри сиситемы).
Передатчик ПриемникЛ. С.
Г1 Г2
D0 D1 D2 D3 D4 D5 D6 D7 D8
1 0 0 1 1 0 1 0 0
Старт-бит Стоп-биты
Бит паритета
Рамка
Четн. паритет
1-ый синхросимвол 2-ой синхросимвол
1-ый символ
Данные
2-ой символ
84
Внутренняя структура БИС КР580ВВ51А
ПСА − программируемый связной адаптер.УСАПП (USART) − универсальный синхронный-асинхронный приемник-передатчик. БИС позволяет преобразовывать параллельный код в последовательный и обратно. Может
работать в двух режимах передачи. Имеет пластмассовый корпус, 28 выводов, питание однополярное.
− сигнал выбора (идентификации): = 1 −
передаются управляющие слова; = 0 − передаются данные. − выбор кристалла: = 1 − выбор МС; = 0 − Z-состояние.
CS
SIO
CLK
D
0 1 7
UccGND
RDWR
RESET
T x D
T x C
T x RDY
T x E
R x D
R x RDY
R x C
SYNDET
DSR
DTR
RTS
CTS
Буфер данных
РУС
Буфер передат-
чикаT x DD0
D7
Схема управ-ления и синхро-низации
DC/
CS
RESET
RDWR
CLK
Внутренняя ШД
8
8
Схема управ-ления
модемом
DTRDSRCTS
RTS
Буфер приемни-
каR x D
Схема упр-я
передатч. C x T
T x RDY
T x E
Схема упр-я
приемн. C x R
R x RDY
SYNDET
85
− строб чтения− строб записи
CLK − для подачи синхроимпульсов (для синхронизации генераторов адаптера) ≈ 2 МГцRESET − сигнал начальной установки (сбрасываются регистры управляющих слов и МС м. б.
запрограммирована)T x D − передаваемые данныеT x RDY − сигнал готовности передатчика, (T x RDY = 1 − буфер передатчика пуст)T x E − передатчик пуст, т. е. закончил работу
− сигнал синхронизации передатчика, определяет частоту передатчикаR x D − принимаемые данныеR x RDY − готовность приемника (R x RDY = 1 − принял и преобразовал последовательные
данные)− сигнал синхронизации приемника, определяет частоту приемника
SYNDET − определитель синхронизации, является выходным в асинхронном режиме и синхронном режиме при внутренней синхронизации
Программирование БИС ВВ51А
Это во внутренние регистры управляющих слов.Управляющие слова бывают 2-х видов: инструкции режима и инструкции команд.Инструкции режима − определяют режим работы МС − число передаваемых бит, скорость
передачи, наличие паритета и т. д. Указывается 1 раз (инициализация).Инструкция команд − для непосредственного управления передачей и приемом.
Имеется 2 отдельных регистра: регистр управления РУС и регистр данных DAN. = 1 − данные передаются в РУС = 0 − данные передаются в DAN
Порядок записи и чтения информации:
OUT РУС − запись в регистр управляющих слов
Начальная установка УСАПП
Инструкция режима
1-ый символ синхронизации
2-ой символ синхронизации
Инструкция команды
Данные
Инструкция команды
Сигнал
Примечание: аппаратная или программная1
1
1
1
1
0
1
Только для синхрогенер.
86
OUT DAN − запись в регистр данныхIN DAN − чтение из регистра данных
Формат инструкции асинхронного режима работы
fС − импульсы, синхронизирующие работу передатчика.Если 1:1, то частота передачи равна частоте синхронизации (fП = fС); 1:16, то fП = fС/16; 1: 64, то fП = fС/64.Для повышения надежности связи рекомендуется 1:16 или 1:64.
Формат инструкции синхронного режима работы
D7 D5 D4 D3 D2 D1 D0D6
Запрещено1 бит
1,5 бита2 бита0
011010
1 Число стоп-битов
00
5 бит1
06 бит0
17 бит1
18 бит
Длина слова
Четный паритет−1 Нечетный паритет−0
1−Разрешить контроль паритета 0−Запретить
10
1:10
11:161
11:64Скорость обмена
T x D
T x C
VП или fП [бит/с]
fС
D7 D5 D4 D3 D2 D1 D0D6
00
5 бит1
06 бит0
17 бит1
18 бит
1 − Четный паритет 0 − Нечетный паритет
1 − Один символ 0 − Два символа
1 − Внешн. синхрон. 0 − Внутр. синхрон.
1 − Разрешить контроль паритета 0 − Запретить контроль паритета
“0” “0”
87
Формат инструкции команды
Если D1 = 1, то = 0. Активный уровень − низкий (отрицательная логика).
Пример: произвести начальную программную установку адаптера:УС: 0100 0000 = 40НMVI A, 40HOUT РУС
Пример: задать асинхронный режим работы со следующими параметрами: 2 стоп-бита, контроль на четность, длина слова 8 бит, коэффициент деления частоты синхроимпульса = 16:УС: 1111 1110 = FEHMVI A, FEHOUT РУС
Пример: задать синхронный режим работы со следующими параметрами: 1 символ синхронизации с кодом 7EH = 0111 1110В, синхронизация внутренняя, контроль на четность, длина слова 8 бит:
УС: 1011 1100 = ВСНMVI A, ВСНOUT РУСMVI A, 7ЕНOUT РУС
Слово состояния адаптера: при работе адаптер формирует информационное слово, которое отражает работу его внутренних элементов; МП в любой момент времени может прочитать это слово: IN РУС.
Формат слова состояния
D7 D5 D4 D3 D2 D1 D0D6
1−Прогр-ая установка сигнала =0 0−=1
1−Поиск синхросимвола разрешен 0−Поиск синхросимвола запрещен
1−Программнаяая НУ (сброс) УСАПП 0 −Нет программной НУ
1 − Сброс флага ошибок 0 − Нет сброса
1−Прогр-ая устан. вых-а передатчика в 0 0−Нормальная работа
1−Прием разрешен 0−Прием запрещен
1−Прогр-ая уст-ка сигнала =0 0−=1
1−Передача разрешена 0−Передача запрещена
88
FE, OE, PE − флаги ошибок.Пример: выполнить опрос готовности передатчика и в случае его готовности загрузить в него
байт из массива с адресом BASE:WAIT: IN РУС ; чтение слова состояния RRC ; сдвиг вправо JNC WAIT ; цикл ожидания LDA BASE ; чтение символа из массива в (А) OUT DAN ; вывод символа в регистр данных
Пример: выполнить опрос готовности приемника и в случае его готовности записать принятый байт в ячейку памяти MEM:
WAIT: IN РУС RRC RRC JNC WAIT IN DAN ; чтение символа STA MEM ; запись в память
CS
SIOШД
D
0 1 7
UccGND
CLK
RD
WR
RESET
T x D
T x C
T x RDY
T x E
R x D
R x RDY
R x C
SYNDET
DSR
DTR
RTS
CTS
В Л.С.
&А0
А7
D0
D7
f2 ттл
RESET
IOW
IOR
ШУ
А0
ША
Делитель частоты
Генератор синхроимпульсов
89
D7 D5 D4 D3 D2 D1 D0D6
DSR
SYNDET
FE (1−ошибка формата) формата
OE (1−переполнение буфера) PE (1−ошибка паритета)
TxE (конец передачи, передатчик пуст )
RxRDY (готовность приемника )
TxRDY (готовность передатчика)
А7 А6 A5 A4 A3 A2 A1 A0 HEX код Регистр1 1 1 1 1 1 1 11 1 1 1 1 1 1 0
FFFE
РУСDAN
VП : 110, 150, 300, 600, 1200, 2400, 4800, 9600, 19200 [бит/с].При КДЕЛ = 1:16, VП = 1200 [бит/с], fC = 1200 ∙ 16 = 19200 Гц.При fCLK = 2МГц, КДЕЛ = 2000000/19200 = 104,1
Передатчик при отсутствии передачи импульсов передает в линию высокий уровень.Закончив прием импульсов, адаптер вырабатывает флаги (в случае ошибок) и производится
преобразование в параллельный код. VП МАХ = 9600 [бит/с].Достоинство синхронного режима − высокая надежность передачи, низкие требования к
стабильности генератора.Недостаток − низкая скорость передачи (для устранения используют асинхронный режим
передачи).
БИС программируемого таймера КР580ВИ53 (i8253)
Счетчик 16 разрядный. Напряжение питания +5 В. Работает на вычитание. Счет может быть двоичным, либо двоично-десятичным. Признак окончания счета − изменение на выходе OUT.
CLK − тактовый входGATE − управляющий входБуфер данных связывает БИС таймера с внутренней ШД.Регистр управляющих слов содержит слово, управляющее работой счетчика.
CLK0GATE0
Буфер данных
РУС
D0
D7
Схема управ-ления
A0
A1
Внутренняя ШД
8
CS
RD
WRСчетчик 2
(СТ2)
OUT 2
CLK 2
GATE 2
Счетчик 1 (СТ1)
OUT 1
CLK 1
GATE 1
Счетчик 0 (СТ0)
OUT 0
CLK 0
GATE 0
24 13
121
90
Может работать в 6 режимах:Режим 0 − программируемая задержка;Режим 1 − ждущий мультивибратор (одновибратор);Режим 2 − делитель частоты;Режим 3 − генератор прямоугольных импульсов (меандр);Режим 4 − программно-управляемый строб;Режим 5 − аппаратно-управляемый строб.Адресные входы определяет счетчик, к которому обращается МП:
А1 А0
0 00 11 01 1
СТ0СТ1СТ2РУС
Программирование таймера
Режимы работы таймера задаются управляющим словом
A0A1CS
PT
RDWR
D
0 1 7
OUT0
OUT1
OUT2
CLK0GATE0
CLK1GATE1
CLK2GATE2
ШД
D0
D7
IOR
IOW
Входы управления
ШУ
1
ША А0
А3
fCLK = 0 ÷ 2 МГц
D7 D5 D4 D3 D2 D1 D0D6
СТ0СТ1СТ2
Запрещено00110101
00хх1
1 0 0 1 1 0 001010
1Реж.0Реж.1Реж.2Реж.3Реж.4Реж.5
ЗащелкиваниеТолько мл. байтТолько ст. байт
Мл. байт→ст. байт001
1 0 1 0 1
Способ записи или
чтения
01Двоичный код
Двоично-десятичный код
91
Программирование заключается в следующем:1. запись во внутренний регистр РУС управляющего слова (для всех 3-х регистров по одному
адресу);2. запись в каждый счетчик начального значения числа (N).
А7 А6 A5 A4 A3 A2 A1 A0 HEX код Внутр. регистр0 0 0 0 0 0 0 10 0 0 0 0 1 0 10 0 0 0 0 1 1 00 0 0 0 0 1 1 1
04050607
СТ0СТ1СТ2РУС
Пример1: настроить счетчик СТ0 на режим 1, в мл. байт загрузить число 13Н, счет двоичный.УС: 0001 0010 = 12НMVI A, 12HOUT 07HMVI A, 13HOUT 04H
Пример 2: те же условия, но число двухбайтное 1513Н.УС: 0011 0010 = 32НMVI A, 32HOUT 07HMVI A, 13HOUT 04HMVI A, 15HOUT 04H
Пример 3: произвести начальную установку таймера при следующих условиях:СТ0, режим 5, число 1513НСТ1, режим 1, число 06НСТ2, режим 2, число 0ВНВсе счетчики работают как двоичныеУС0: 0011 1010 = 3АНУС1: 0101 0010 = 52НУС3: 1001 0000 = 90Н
MVI A, 3АHOUT 07HMVI A, 52HOUT 07HMVI A, 90HOUT 07HMVI A, 13HOUT 04HMVI A, 15HOUT 04HMVI A, 06HOUT 05HMVI A, 0ВHOUT 06H
Иногда при работе требуется определить содержимое счетчика в произвольный момент времени, т. е. программно определить состояние счетчика:
92
1. Приостановить работу счетчика − остановить работу счетчика можно 2-мя способами: а) заблокировав подачу счетных импульсов на вход CLK б) подать запрещающий сигнал на вход GATE = 0.
2. Без останова работы счетчика (чтение на “лету”)
Чтение содержимого счетчика происходит по команде IN CT(0, 1, 2), где СТ(0, 1, 2) − адрес счетчика, который считается. Чтение производится также, как запись.
Пример: прочитать содержимое счетчика с блокированием счетных импульсов, в управляющем слове D4, D5 = 1, Сч0.
MVI A, 00H ; на D0 = 0OUT PORT_OTKL ; импульсы прекратилисьIN CT0MOV C, A ; сохранение мл. байтаIN CT0MOV B, A ; сохранение ст. байтаMVI A, 01HOUT PORT_OTKL ; запустить СТ0
В регистр надо записать специальное управляющее слово, в котором D4, D5 = 0, остальные разряды остаются первоначальными.
Пример: прочитать “на лету” содержимое СТ0, управляющее слово 32Н = 0011 0010Н. УС: 0000 0010 = 02НMVI A, 02HOUT 07H ; запись УСIN 04HMOV C, A ; сохранение мл. байтаIN 04HMOV B, A ; сохранение ст. байта Программирование:Режим 0
D0012∙∙∙7
RG & РТCLK0
GATE0
OUT0
fCLK
“1”
PORT_OTKL
tзд
TCLK
4 3 2 1 0
Разрешение счета
CLK
WR
GATE
OUT
93
tзд = n ∙ TCLK TCLK = 1/fCLK
После загрузки УС на выходе OUT = 0. Счет разрешается когда OUT = 1. Изменение счетчика происходит по срезу импульса CLK, когда в счетчике 0 на входе OUT = 1.
Режим 1 − счетчик генерирует одиночный импульс
tк = n ∙ TCLK
Запись происходит перепадом 0→1 на входе GATE. Когда счетчик обнуляется на выходе OUT = 1.
Режим 2
ТВЫХ = n ∙ TCLK
fВЫХ = fCLK /n
Режим 3
tк = tп = Т/2При четном числе, загруженном в счетчик, на его выходе прямоугольные сигналы, у которых
равны по времени высокий и низкий уровни. Если же число нечетное, то высокий уровень будет больше на величину периода счетных импульсов.
tк
OUT
TВЫХ
4 3 2 1 0
CLK
WR
GATE
OUT
43 2 1 0
ТВЫХ
tк tп
Т
U
t
94
Режим 4
tзд = n ∙ TCLK
tи = TCLK
ТВЫХ
TCLK
4 3 2 1 0
CLK
WR
4
3 2
OUT
n=4
1)
ТВЫХ
TCLK
5 4 3 2 1
CLK
WR
5
0 4
OUT
n=5
2)
tзд
TCLK
4 3 2 1 0
CLK
WR
OUT
n=4
GATE=1
tи
95
Режим 5 − запуск счетчика выполняется с помощью сигнала (перехода) GATE
Применение МП в системах управления и контроля
Такие системы содержат: Объект управления или контроля Устройство управления Исполнительное устройство
xЗ(t) − задающая величинаU(t) − возмущающее воздействиеМикроконтроллер (МК) − на основе МП. МК работает с цифровыми сигналами (ТТЛ уровень).Сигналы:
1. аналоговый2. дискретный (двоичный)
АЦП (аналого-цифровой преобразователь) − преобразователь аналогового сигнала в цифровой код.
ЦАП (цифро-аналоговый преобразователь) − обратный АЦП.
tзд
4 3 2 1
CLK
WR
GATE
OUT
40 1 2 3
n=4
Запуск счетчика
Исполнительное устройство
Объект управления Датчик
Исполнительное устройство
U(t)
y(t) x(t)
xЗ(t)
U(t)аналог.
t
U(t)дискрет.
t
96
Работа МК с дискретными сигналами
Типовые программы (процедуры) управления и контроля (используются при работе с дискретными датчиками (кнопки, реле, переключатели) и с дискретными исполнительными устройствами (сигналы только двух видов − светодиоды, лампочки, реле, двигатели переменного тока):
1. опрос двоичного датчика2. ожидание события3. формирование управляющего сигнала4. формирование временной задержки
Опрос двоичного датчика − сигналы датчика можно разделить по характеру датчика на контактные и бесконтактные.
Опрос состоит в том, что МП опрашивает состояние датчика и зависимости от состояния происходит переход к какой-то ветви программы.
ЦАП Преобразователь уровня 1
Исполнительное устройство 1
Преобразователь уровня 2
Исполнительное устройство 2
Объект управления
Датчик 1 Преобразователь уровня
АЦП
Датчик 2 Преобразователь уровня
МКX1(t)
X2(t)Y1(t)
Y2(t)
y2(t)
y1(t)
аналог.
дискрет.
τ1(t)
τ2(t)
аналог.
дискрет.
RG DO
0 1 ∙ ∙ ∙ 7
DI 0 1 2 3 4 5 6 7
IPORT
ШД
+5 В
R
K
UВХ
Ввод из порта
Выделить разряд D1
D1 = 1 ?
Метка М1 Метка М2
OPROS
Да Нет
97
OPROS: IN IPORT ANI 0000 0010B ; выделить D1 JZ M2 ; если D1 = 0 M1: … ; если D1 = 1 ∙ ∙ ∙ M2: …
Ожидание события (ожидание появления определенного сигнала) − МП опрашивает состояние датчика в цикле до тех пор, пока на выходе датчика не будет заданного сигнала.
U
t
L−ур. H−ур.
Появление Н− уровня
Статические сигналы
U
t
Появление L− уровня
Импульсные сигналы
Положительный импульс Отрицательный импульс
RG DO
0 1 ∙ ∙ ∙ 7
DI 0 1 2 3 4 5 6 7
IPORT
ШД
+5 В
R
K
UВХ
Ввод из порта
Выделить разряд D2
D2 = 1 ?
WAIT_H
Да
Нет
Выход
98
CALL WAIT_HWAIT_H: IN IPORT ANI 0000 0100B ; выделить D2 JZ WAIT_H ; цикл ожидания RET ; выход
WAIT_L: IN IPORT ANI 0000 0100B ; выделить D2 JZ WAIT_L ; цикл ожидания RET ; выход
Борьба с дребезгом контактов
При использовании контактных элементов появляется дребезг (многократное срабатывание)
Для борьбы:1. аппаратный метод − используются RS − триггеры или триггер Шмидта
2. программный метод:а) подсчитывается число переключений контакта.
Ввод из порта
Выделить разряд D2
D2 = 0 ?
WAIT_L
Да
Нет
Выход
+5 В
R
K
UВЫХ(t)
t
UВЫХ(t)
При замыкани
и
При размыкании
R
S
TR1 4,7 K
R2 4,7 K+ 5 B
SB1
99
Время дребезга зависит от типа контакта: для реле небольшой мощности ≈ 20 ÷ 30 мс, для кнопок ≈ 10 мс, для герконовых реле ≈ 2 мс.
б) когда программа обнаружила срабатывание контакта, выполнение ее приостанавливается на время большее времени дребезга.
WAIT_L: IN IPORT ANI 0000 0010B JNZ WAIT_L ; цикл, если D1 = 1 CALL DELAY ; п/п задержки на tзд RET
Формирование управляющих сигналов
Виды управляющих сигналов:1] Статические
RG DO
0 1 ∙ ∙ ∙ 7
DI 0 1 2 3 4 5 6 7
IPORT+5 В
R
K
UВХ
Конт. сработал ?
DEBOUNCE
Да
Нет
Выход
п/п задержки
RG DO
0 1 ∙ ∙ ∙ 7
DI 0 1 2 3 4 5 6 7
IPORT+5 В
R
K
UВХ
tзад > tдр
RGDI
OPORT
UВЫХD0 0 1 2 3 4 5 6 7
УМ (преобразователь
уровней)
Исполнительное устройство (нагрузка)
UПИТ
100
VKL: MVI A, 01H OUT OPORT ; вывод D0 = 1OTKL: MVI A, 00H OUT OPORT ; вывод D0 = 0OTKL: XRA A ; сброс (А) OUT OPORT ; вывод D0 = 0
2] Импульсные (однократные и периодические) (см. далее)
Методы управления отдельными линиями порта ввода
2) Программный − выводимые данные запоминаются в ячейке памяти, перед новым выводом в порт читается содержимое порта и при необходимости маскируются ненужные разряды.
XRA AOUT OPORT ; гашениеSTA MEM ; запоминание в ячейке MEM…LDA MEM ; чтение состояния портаORI 0000 0001B ; установить D0 = 1OUT OPORT ; зажигается красная лампочкаSTA MEM…
UВЫХ
t
“Включить” VKL
UВЫХ
t
“Выключить” OTKL
RGDI
OPORT
DO
RGDI
IPORT
DO
Выводы
К ШД
К ШД1)
D00123∙∙
RGU1 (красная)
U2 (зеленая)
101
LDA MEMORI 0000 0100B ; установить D2 = 1OUT OPORT ; зажигается зеленая лампочкаSTA MEM…LDA MEMANI 1111 1110 ; D0 = 0OUT OPORT ; гаснет красная лампочкаSTA MEM; изменить свечение (проинвертировать D2)LDA MEMXRI 0000 0100 ; D2 ← OUT OPORTSTA MEM
3) если в качестве порта вывода − адаптер ВВ55
; Погасить лампочкиXRA AOUT PA ; вывод в порт РА; Зажечь краснуюIN PA ; читаем состояние выходов порта РАORI 0000 0010B ; D1 = 1OUT PA
2] Формирование импульсных управляющих сигналов
XRA AOUT OPORT ; вывод D1 = 0MVI A, 02HOUT OPORT ; вывод D1 = 1CALL DELAY ; задержка на tИ
XRA AOUT OPORT ; вывод D1 = 0
ШД ВыходыPA0123∙∙
PIO
U1 (красная)
U2 (зеленая)
U(t)
t
tи
U(t)
t
tи
D00123∙∙
RGUВЫХ(t)
102
MEANDER: MVI A, 02H OUT OPORT CALL DELAY XRA A OUT OPORT CALL DELAY JMP MEANDER
MEANDER: XRI 02H OUT OPORT CALL DELAY JMP MEANDER
Формирование временных задержек
1) Программный − МП выполняет определенный участок в цикле программыDELAY: MVI C, 10LOOP: NOP DCR C JNZ LOOP RETДостоинство: не требует дополнительных аппаратных затрат.Недостаток: во время задержки МП не выполняет никаких других программ.Если задержка большой длительности, то эффективность работы падает. Поэтому такой метод
используется при задержке мкс ÷ мс.2) Аппаратный − используют таймеры (программируемые). Задача: на выходе порта сформировать сигнал длительностью 10 мс. МП − К1821ВМ85А,
таймер − КР580ВИ53.
tи = tп = T/2tи tп
T
103
Адреса таймера: СТ0 − 04Н, СТ1 − 05Н, СТ2 − 06Н, РУС − 07НАдрес порта: 0000 1000В = 08НУС: 0011 0010В = 32НMVI A, 32HOUT 07H ;загрузить УС в таймерMVI A, 20HOUT 04H ; загрузить мл. байт в СТ0MVI A, 4ЕHOUT 04H ;загрузить ст. байт в СТ0MVI A, 01HOUT 08H ; вывод 1 в разряд D0EI ; разрешение прерыванийMVI A, 0EHSIM ; содержимое (А) заносим в регистр прерываний, т. е. разрешить прерывание по… ;RST 5.5ORG 002CH ; вектор прерывания по RST 5.5MVI A, 00HOUT 08H ; вывод 0 на D0RET
Управление дискретными нагрузками от МПС
Все виды нагрузок можно разделить по виду потребляемого тока:
OUT0
t
tзд
A0A1CS
PT
RDWR
D
0 1 7
OUT0
GATE0CLK0
1
ША А0
А2
RST5,5
CPU
CLK
RGDI
OPORT
UВЫХ
D0 0 1 2 3
COE
11A3
IOW
fCLK = 2 МГц TCLK = 0,5 мкс
tзд = n ∙ TCLK
n = 10 мс/5 мкс = 20∙103 = 4Е20Н
104
1. нагрузка постоянного тока − светодиоды (СИД), индикаторные лампочки, электромагнитные реле, динамики.
2. нагрузка переменного тока − осветительные лампы, магнитные пускатели, электронагревательные элементы.
1)СИД: АЛ307(А, Б. В, Г), (А, Б. В, Г) − цвет свеченияIСР ≤ 20 мА∆ UПР = 1…3 ВПорт вывода − КР 580ИР82 − без инверсии, КР 580ИР83 − с инверсиейI1
ВЫХ ≤ 1 мАI0
ВЫХ ≤ 32 мА
КР1533ИР33 (23)I0
ВЫХ ≤ 20 мАКР580ВВ55А − параллельный адаптерI1
ВЫХ ≤ 2 мАI0
ВЫХ ≤ 40 мАНадо использовать усилители тока − буферные элементы:
DO0123∙∙
RG“0” − горит
“1” − не горит
+5 В
R1
VD1
1
1
инвертор
повторитель
К155ЛН3 (6НЕ)I0
ВЫХ ≤ 40 мА
К155ЛН4
PA012…
PIO
горит
не горит
+5 В
R1
VD11
PB0123…
1
+5 ВR2
VD2
“1”
“1”
“0”
“0”
“0”
“0”
“1”
“1”
горит
не горит
PA0123∙∙
PIO+5 В
R4
VD1
R5
VT1
105
, т. к. Iпр = Iк
U1ВЫХ ≈ 2,4 В
∆UБЭ = 0,7 В
Электромагнитное реле постоянного тока: РЭС9, РЭС10, РЭС22, РЭС32
UРАБ = 6; 12; 15; 24 ВIРАБ = …RОБМ = …
КД105, КТ503При срабатывании реле VD − в обратном включении и не оказывает влияния
Громкоговорители (динамики):
RОБМ = 4…8 Ом
НР НЗ П (тройник)
К
DO0123∙∙
RGUП
VD1
R1VT1
K1 e
DO0123∙∙
RG
VT1R1
&
ЗГ
BA1
+UП
UЗГ
U1
UВЫХ
106
РВЫХ = 0,5; 1; 2;…UФ = 220 ВUЛ = 380 В
Необходимо обеспечить гальваническую развязку:1.
Но экономически не выгодно из-за использования трансформатора2. использование оптоэлектрического прибора:
IВХ = 15…20 мАIВЫХ = 50…200 мАИспользуется фототиристор АОУ103(А, Б, В) − переменное напряжение , которое
прикладывается к вых. цепи.
D00123∙∙
RGR1 VS
EL
Uc
Запрещена
Uc
TV
UВЫХUВХ
IВХ IВЫХ
UВЫХUВХ
IВХ IВЫХ
UСV1
1
R
+5 В
EL
UС
UС
107
Применяется также симистор:
2)Оптоэлектронное реле:
U = класс ∙ 100, В
3-хфазное реле переменного тока, нереверсивное:
UС
V1
1
R
+5 В
EL
V1
1
R
+5 В
UС
ELVS1
“0”“1”
КУ202Н Т2−10
1UС
V1
R1
+5 В
EL
V2
R2
+5 В
VS1
~UВХ
IВХ
5П19. 10ТС−1−4−А1(Б1, Б2)
ток, А: 1; 3; 10; 20
Класс: 4; 6; 8
108
Сопряжение АЦП с МПССопряжение ≡ интерфейсАЦП выпускается в виде МС. Характеризуются большим количеством параметров. При
сопряжении важны 2:1. разрядность цифрового входа АЦП, nАЦП
2. Быстродействие АЦП − время преобразования tПР, мкс (от момента запуска АЦП до момента появления цифрового кода).
Тип АЦП nАЦП tПР, мксК572ПВ1К572ПВ3К1107ПВ1К1107ПВ2К1108ПВ1К1108ПВ2К1113ПВ1
12868
10(8)1210
110…1507,50,10,1
0,9(0,7)2,030
Все АЦП по быстродействию делят на 2 группы:1) быстрые;2) медленные;КР580ВМ80: при fT = 2 МГц, Т = 0,5 мкс, fK = 3…5 мкс
Основные сигналы, с которыми работают АЦП:1. сигнал запуска (Start, ST)2. конец преобразования (Data Ready, DR)3. выходные сигналы (Data Output, DO)
На выходе АЦП − буферы с тремя состояниями. Имеется спец. сигнал и вывод для управления выходными буферами − разрешение буфера (Output Enable, OE).
Имеется сигнал для подачи тактовой частоты от внешнего генератора (CLK).AI − вход для подачи аналогового сигнала.
UВХ
IВХ А1
А2
В1
В2
С1
С2
5П36.30ТС−10−6−Г1(Г2, Д1, Д2)
ток, А: 10; 20; 40; 80
Класс: 4; 6; 8; 10; 12
EL KM EK HL
109
a − стартb − начало преобразованияb ÷ с − преобразованиес − конец преобразованияd − на выходе появляется цифровой коде − завершение вывода
Интерфейс быстрых АЦП с МПС
1) nШД ≥ nАЦП
− выбор порта для запуска АЦП − выбор порта разрешения выдачи кода АЦП
Запуск: OUT PORT1
^/# D0 0 1 2 … 9
OE
AI CLK
ST
DR
0 1 2 3 4 5 6 7 8 9
a b
c
d e
tпр
Выход. кодDO
DR
ST
CLK
МПШД
IOW
IOR
DA
1
1
Адресный селектор
SEL1
SEL2
АЦП AI
ST
OE DO
UВХ
8
ША Адрес PORT1
ST
110
Вывод данных: IN PORT2
Программное управление АЦП:OUT PORT1 ; запуск АЦПIN PORT2 ; чтение кода АЦП
Задержки позволяют согласовывать быстродействие АЦП и МПС.2) nШД < nАЦП − код разбивают на 2 байта и записывают в буферные регистры; МП считывает
сначала мл. байт, затем ст. байт.
OUT PORT1 ; запуск ЦАПIN PORT2 ; чтение Мл. Б. кодаIN PORT3 ; чтение Ст. Б. кода
К1108ПВ1:
UП1 = +5 В, UП2 = −5,2 В.AI − вход аналогового сигналаGA − аналоговая земляGD − цифровая земляST − вход запускаERD − разрешение чтение выходного кода
ША Адрес PORT2
DO Код
8МПШД
IOW
IOR
DA
1
1
Адресный селектор
SEL1
SEL2 1
SEL3
АЦП AI
ST
OE DO
UВХ
RG DI ◊ D0
OE
RG DI ◊ D0
OE
8
8
Мл. Б
Ст. Б
^/# D0 0 1 2 … 9
AI GA GD STERDSE10/8
C DR
111
SE10/ → 0 АЦП − 8-ми разрядный → −5,2 В АЦП − 10-ти разрядныйС − вход синхронизацииDR − готовность данных
Схема интерфейса с 8-разрядным АЦП
А7 А6 A5 A4 A3 A2 A1 A0 HEX код
1 0 0 0 0 0 0 01 0 0 0 0 1 0 1
8081
DD2.1 − для формирования импульса запускаDD2.2 − формирование сигнала разрешения выхода
OUT 80H; Запуск АЦПIN 81H; Чтение кода АЦП
Интерфейс с 10-разрядным АЦП
0 1 2 3 4 5 6 7 8 9
tпр
ST
CLK
Код АЦПDO
DR
DC 0
1
2
3
4
5
6
7
A
0
1
2
&
A2
DD2.1
С1
ША
^/# D0 0 1 2 … 9
AI GA GD STERDSE10/8
C DR
1
1
SEL80H
SEL81H
IOW
IORDD2.2
КР1533ЛЛ1
DD1 КР1533ИД7
A1
A0
A3
A4
A7
UВХ ШД
К1108ПВ1
112
DD1: КР1533ИД7DА2: К1108ПВ1DD2: КР1533ЛЛ1DD4: КР1533ИР33 − мл. байтDD5: КР1533ИР33 − ст. байтOUT 80H ; запуск АЦПIN 81H ; чтение мл. байта кода АЦПMOV C, AIN 82H ; чтение ст. Байта кода АЦПANI 0000 0011В ; выделить D1, D0MOV B, A ; в регистровую пару ВС − код АЦП
Интерфейс медленных АЦП с МПС
После запуска АЦП надо ожидать момента появления данных на выходе АЦП.DR − готовность данных (“1” − данные готовы).
1. С программным опросом готовности данных.2. С прерыванием программы по сигналу DR.
1) Асинхронный метод с квитированием: после запуска АЦП МП постоянно опрашивает вывод DR, в случае готовности данных происходит считывание кода.
К1113ПВ1:
DC 0
1
2
3
4
5
6
7
A
0
1
2
&
A2
DD2.1
ША
1
1
SEL80H
SEL81H
IOW
DD4
DD1 КР1533ИД7
A1
A0
A3
A4
A7
С1
^/# D0 0 1 … 7 8 9
AI GA GD STERDSE10/8
C DR
UВХ
DA1 К1108ПВ1
DD2.3
1
IOR
SEL82H
-5,2 В
DI01…7
◊D00
7
С
OE
Ucc
GND
RG
DI01…7
◊D00
7
С
OE
Ucc
GND
RG
+5 В
+5 В
ШД
DD5
Запуск АЦП
Данные готовы?
ADCONV
Да
Нет
Выход
Чтение кода АЦП
113
В/ − гашение tИ ≥ 2 мкс.
ADCONV: MVI A, 01H OUT 80H; D0 ← 1 XRA A OUT 80H; D0 ← 0 (запуск АЦП)
TEST: IN 82HANI 1000 0000B; выделить D7JNZ TEST; цикл, если D7 = 1IN 81H; чтение мл. байта кодаMOV C, AIN 82H; чтение ст. байта кодаANI 0000 0011B; выделить D1, D0MOV B, A; в регистровой паре ВС − код АЦП
^/# D0 0 1 2 … 9
AI
GA
GD
В/
UП1
UП2DR
+ 5 В
− 15 В
0 1 2 3 4 5 6 7 8 9
tпр
CLK
Код АЦПDO
tиB/
DC 0
1
2
3
4
5
6
7
A
0
1
2
&
A2
ША
IOR
DD1
A1
A0
A3
A4
A7
DD3.1
1
1
SEL81H
SEL82H
IOW
^/# D0 0 1 … 7 8 9
AI
DR
DD3.2
1
Т D
C
SEL80H
ШДD0
DD2 КР1533ТМ2
UВХ
DD4
DI01…7
◊D00
7
С
OE
Ucc
GND
RG
DI01…7
◊D00
7
С
OE
Ucc
GND
RG
+5 В
+5 В
ШД
DD5
D0
D7
D0
D1
Мл. Б
Ст. Б
КР1533ИР33
114
1]
UВХ МАХ = 10,24 В, при однополярном входном сигнале.UВХ МАХ = ± 5,12 В, при двухполярном входном сигнале.Ширина дискреты: 210 = 1024
∆U = = 10 мВ.
28 = 256 → UВХ МАХ = 28 ∙ 10 мВ = 2,56 В, т. е. в 4 раза уменьшается ширина сигнала.
2]
UПОР = 22 ∙ ∆U = 4 ∙ 10 мВ = 40 мВ.Не уменьшает диапазон входного сигнала, но увеличивает в 4 раза UПОР.
ADCONV: MVI A, 01H OUT 80H XRA A OUT 80H ; запуск АЦП CALL DELAY ; задержка на 30 мкс IN 81H ; чтение кода АЦП RET2) Программа запускает АЦП и продолжает свою работу. Сигнал готовности служит запросом
прерывания и по этому запросу МП переходит к обработке подпрограммы, считывает данные, запускает АЦП и происходит возврат к основной программе.
DO012∙∙789
DO012∙∙789
UВХ
UПОР
t
DO012∙∙789
RG ШДD0 0 1 2 3 ∙ ∙ ∙ 7
COE
D0 0 ∙ ∙ 5 6 7 +5 В
115
fCLK = 2 МГц TCLK = 0,5 мкс
МП не ждет готовности данных. Недостаток − дополнительные аппаратные затраты.
Сопряжение ЦАП с МПС
Наиболее важны 2 параметра ЦАП для сопряжения с МП:1. разрядность входного кода (nЦАП)2. быстродействие ЦАП (tУСТ, мкс) − это время от подачи на вход ЦАП кода до момента
появления на выходе установившегося сигнала.
Запуск АЦП
Разрешить прерываеие
Продолжение осн. программы
Чтение кода АЦП
Запуск АЦП
Разрешить прерываеие
Продолжение осн. программы
Подпрограмма обработки
прерывания
Начало
АЦП
DR
Модуль процессора
INT
Модуль прерывания Вектор прерывания
INT
DR
Вектор прерывания
(ШД) Код
116
Параметры типовых ЦАП:
Тип ЦАП nЦАП tУСТ, мксК572ПА1К572ПА2К594ПА1К1108ПА1К1118ПА1К1118ПА2
10121212810
5153,50,40,020,08
При подключении ЦАП к МПС надо, чтобы код на входе поступал одновременно на все разряды; подавать побайтно нельзя, т. к. на выходе ЦАП будут большие помехи и tУСТ значительно увеличится.
КР572ПА1 − 10-разрядный АЦП:
UВХ
(код)
t
UВЫХ
ttУСТ
Порт вывода мл. байта кода
Порт вывода ст. байта кода
88
44
8
Буфер с тремя
выходными состояниями
ОЕРазрешение вывода кода
Порт вывода ст. байта кода
код
12 UВЫХ
ШД
117
DA2 − преобразует токовый сигнал в напряжениеDD3 − порт вывода мл. байта кода (адрес 80Н)DD4 − порт вывода ст. байта кода (адрес 81Н) − одноразрядный порт на триггере для разрешения выдачи кода (адрес 82Н).DACONV − п/п ЦАПLXI H, DATACALL DACONV
DACONC: MVI A, 01H OUT 82H ; запрет выдачи кода MOV A, M ; чтение мл. байта из ОЗУ OUT 80H ; запись мл. байта кода INX H MOV A, M ; чтение ст. байта из ОЗУ OUT 81H ; запись ст. байта кода XRA A ; D0 ← 0 OUT 82H ; разрешение выдачи кода на ЦАП RET
Устройство сбора и распределения данных
Для уменьшения помех используют фильтры и нормирующие схемы. Эти устройства называются: УСД (устройство сбора данных) − многоканальное устройство преобразования аналогового сигнала в цифровой код и УРД (устройство распределения данных) − многоканальное устройство преобразования цифрового сигнала в аналоговый код.
УСД:1. параллельный метод построения2. последовательный (мультиплексный) метод построения
1) для каждого аналогового сигнала отдельный канал:
DC 0
1
2
3
4
5
6
7
A
0
1
2
&
A2
ША
1
1
SEL80H
SEL81H
IOWDD1
КР1533ИД7
A1
A0
A3
A4
A7
1
SEL82H
IOW
DD3
DI01…7
◊D001
7 С
OE
RG
DI01…7
◊D001
7 С
OE
RG
DD4
ШД
ШД
Т D
C
ШД
D0
DD2
#/^
IOC
I1
I2
DI 0 1 7 8 9
∞
DA1
DA2
UВЫХ
118
НУ − нормирующее устройство, приводит сигналы к уровням, требующимся для работы с АЦП.
УВХ − устройство выборки и хранения, запоминает мгновенные значения сигналов на время равное времени преобразования.
ФНЧ − для подавления сетевых помех.Достоинство:
высокие требования к частоте высокое быстродействие низкий уровень помех
Недостаток: дороговизна.
2) ставится один АЦП и аналоговый мультиплексор (коммутатор), который переключает аналоговые каналы:
Достоинство: дешевизна схемы.Недостатки:
высоки требования к быстродействию АЦП значительный уровень помех
УРД:1. параллельный метод построения2. последовательный (мультиплексный)
1)
ФНЧ НУ УВХ АЦПХ1 Х1
ФНЧ НУ УВХ АЦПХn Хn
ШД
ФНЧ НУХ1
ФНЧ НУХn
УВХ АЦПХ
ШД
Аналоговый коммутатор
ЦАП ФНЧy1
ЦАП ФНЧ
ШД
yn yn
y1
119
Достоинство: высокая точность преобразования низкий уровень помех
Недостаток: дороговизна.2)
Достоинство: низкая стоимость.Недостаток: большой уровень помех.В качестве коммутаторов применяют КР590КН2(3, 4, …, 8) − на КМОП-структуре.
UП1 = +15 ВUП2 = −15 ВUВХ = 0…10 ВUВХ = −5…+5 ВЕ = 0 → все ключи разомкнуты (rРАЗ = 1012 Ом, rЗАМК ≈ 1012 Ом).
А2 А1 А0
0 0 00 0 1
…1 1 1
y = x1y = x2
…y = x8
ЦАП
ШД ФНЧ
ФНЧ
Аналоговый коммутатор
y1
yn
SW
КР590КН6
Аналоговый сигнал
x1x2…x8
A012
E
Y
Цифровой сигнал (ТТЛ)
120
Организация связи МПС с оператором.
Используется клавиатуры и дисплей.Подключение линейного дисплея на ССМИ (семисегментный индикатор).ССДИ – семисегментный светодиодный индикатор.Достоинства: дешево, большая яркость.Недостаток: большая потребляемая мощность.
АЛС321А(Б, В, Г)АЛС324А(Б, В, Г)АЛС333А(Б, В, Г)АЛС339А(Б, В, Г)
По виду соединения диодов:— С общим катодом;— С общим анодом.
Параметры СДИ:1. Потребляемый токIпр.ср≤20 мАIпр.имп≤300 мА (при tимп≤10 мс, скважность Q≥10)2. Падение напряжения.
пр=2…3,5В
Для работы индикатора требуется семисегментный код:1. использование специальных преобразователей кодов (из двоичного в семисегментный) – К514ИД1 (общий коллектор) и К514ИД2 (общий анод).
R1-R7 ограничивают токи, протекающие через выходные транзисторыR1-R7 = 110…330 Ом.
121
a
f g b
e d c h
AVD
K
0
a
b
h
БГ(ОА)
0
a
b
h
А, В(ОК)
KP514ИД1
HG1
Двоично-десятичный код
1 - разрешение
R0123
E
x/y abcdefg
abcdefg0
2. Программная перекодировка – для каждого сегмента выделяется свой разряд в семисегментном коде.
Д7 Д6 Д5 Д4 Д3 Д2 Д1 Д0 НЕХ Символ0 0 0 0 0 1 1 0 06 10 1 0 1 1 0 1 1 5В 2
1 0 0 0 0 0 0 0 80 ,
В ПЗУ должны быть коды отображаемых символов, программа выбирает из ПЗУ этот код в соответствии с двоичным кодом требуемого символа.; подпрограмма перекодировки; регистр А – двоичный код символа; регистр А – семисигментный код символа
CROSSCOD: MOV C,AMVI B,00h В регистровой паре ВС – двоичный кодLXI H,TABLECODDAD B (HL) (HL)+(BC)MOV A,M Чтение кода символаRET
TABLECOD DB 3Fh Код символа «0»DB 06h Код символа «1»
DB 71h Код символа «F»
122
KP514ИД2
АЛС339БR
0123
E
x/y abcdefg
abcdefg05 В
a
f g b
e d c h
D7 D6 D5 D4 D3 D2 D1 D0
1 – Свечение0 - Затемнение
HG1АЛС339ARG Д0
0123…7
1
1
1
5 B
5 B
5 B
К155ЛП9
HG1АЛС339БRG Д0
0123…7
1
1
1
К155ЛН3
+5 В
R1
R8
Управление индикаторами линейного дисплея.
1. статический метод2. динамический (мультиплексный)
Статический метод.
Все индикаторы постоянно включены в работу.Для управления используют:
1. дешифраторы семисегментного кода2. программную перекодировку.
123
Ц4 Ц3 Ц2 Ц1
аb…g
x/y0123
аb…g
x/y0123
HG1
HG2
D00123
4567
RG
OPORT1
аb…g
x/y0123
аb…g
x/y0123
HG3
HG4
D00123
4567
RG
OPORT2
ОЗУ:
DATAДАННЫЕ 1
ДАННЫЕ 2
Ц1
Ц4 Ц3
Ц2 Ц1
Ц4 Ц3
Ц2
DISPLAY – подпрограмма управления дисплеем
DISPLAY LXI D,DATA Начальный адрес массиваLDAX D В (А) код для Ц1, Ц2OUT OPORT1 Вывод на HG1, HG2INX DLDAX D В (А) код для Ц3, Ц4OUT OPORT2 Вывод на HG3, HG4RET
OPORT1: для HG1OPORT2: для HG2OPORT3: для HG3OPORT4: для HG4
124
Буферные элементы HG3
HG4
D00123
4567
RG
OPORT4
Буферные элементы HG1
HG2
D00123
4567
RG
OPORT1
Двоичный код символа 1
Двоичный код символа 2
Двоичный код символа 3
Двоичный код символа 4
ОЗУ
DATA
DISPLAY LXI D,DATA Начальный адрес массиваLDAX D В (А) код для символа 1CALL CROSSCODE Подпрограмма перекодировкиOUT OPORT1 Вывод на HG1INX DLDAX D Чтение кода символа 2CALL CROSSCODEOUT OPORT2
OUT OPORT4RET
Достоинства:1. простота программной реализации2. простота схемной реализации
Недостатки:1. большой потребляемый ток:
Iпотр = Iср*8*4 = 20*8*4 = 640 мА2. большое число соединительных проводов
n = 8*4+1 = 333. число индикаторов ≤ 4
Динамический (мультиплексный).
В каждый момент времени горит только 1 индикатор.
Чтобы не было мерцания надо напряжение подавать сначала на сегменты, затем на электроды:
125
Un-1 U1Un
СДВИГОВЫЙ РЕГИСТР
Семи-сегмент-ный код
D0
D1
D2
D3
Данные для вывода находятся в ОЗУ в соседних ячейках:
126
tсв
tзатем tзатем
Буфер
HG4
D0012…7
RG
PORT_SEGM
D001234
RG
PORT_SСАN
… … … …
аbс
h
К4 К3 К2 К1
HG4 HG4 HG4
C1
C2
C3
C4
DATA HG1
HG2
HG3
HG3
Погасить все индикаторы
Чтение данных для сегментов
Перекодировка
Вывод в PORT_SEGM
Вывод кода сканирования в PORT_SCAN
Задержка на время tсв
Tscan = tсв ≤ 50 мсD7 D6 D5 D4 D3 D2 D1 D00 0 0 0 0 0 0 1
0 0 0 0 0 0 1 0
0 0 0 0 0 1 0 0
0 0 0 0 1 0 0 0
Подпрограмма сканирования дисплея
DISPLAY XRA AOUT PORT_SCANMVI B,00000001 Начальный код сканированияPUSH BLXI D,DATA Начальный адрес
AGAIN LDAX D Чтение кода символаCALL CROSSCODE В (А) семисегментный кодOUT PORT_SEGMPOP B Чтение кода сканированияMOV A,BOUT PORT_SCAN Включение индикатораCALL DELAY Подпрограмма задержки на tсвCPI 00001000JZ DISPLAY Если да, идти на началоRLC Сдвиг кода сканированияMOV B,APUSH BINX D Адрес следующего символаJMP AGAIN Зацикливание
Недостаток: микропроцессор не выполняет никакой другой работы.
Программа управления дисплеем с использованием таймера.
127
DISPLAY
Подпрограмма обработки прерывания состоит в выборе кодов в порт сегментов и порт сканирования, после выбора – возврат в основную программу.
Программа инициализации дисплея
INIT_DISPLAY:
XRA A
OUT PORT_SCANMVI A,00000001BPUSH PSWLXI D,DATAEI Разрешение прерывания
ORG XXX Вектор прерывания
Подпрограмма обработки прерываний.DISPLAY: XRA A
OUT PORT_SCAN Погасить дисплейLDAX D Чтение кодаCALL CROSSCODE ПерекодировкаOUT PORT_SEGMPOP PSW Чтение кода сканированияOUT PORT_SCAN Зажечь индикаторCPI 00001000B Индикатор последний?JZ AGAIN Да, идти на ссылкуRLC Сдвиг влевоPUSH PSW Запомнить новый кодINX D Адрес следующего символаEIRET
AGAIN XRA AOUT PORT_SCANMVI A,00000001BPUSH PSWLXI D,DATAEIRET
В зависимости от видов использованных индикаторов:1. Индикаторы с ОК.
128
Генератор (таймер)
Модуль процессораINT (RST)
Модуль прерывания
Векторпрерываний
tсв
2. индикаторы с ОА.
Достоинства:1. меньше потребляемый ток.2. меньшее число соединительных проводов.3. меньшее количество портов и буферных элементов.
Недостаток – сложность программного обеспечения и опасность разрушения индикаторов при остановке сканирования.Iпр = 15…20 мА
Интерфейс дисплея с клавиатурой.
Клавиатуры делятся:1. простейшие2. более сложные.
Два вида клавиатур:1. кодирующие
129
a
h
1
1
1
+5 B
От порта PORT_SEGM
От порта PORT_SCAN
K155АП9
K155ЛН3
a
h
1
+5 B
От порта PORT_SEGM
От порта PORT_SCAN 1
VT1KT209KT503
R2300
R1
300
R
150...300
2. некодирующие
Кодирующие клавиатуры.
Каждой клавише соответствует определённый вход порта ввода, узнать положение клавиши можно опрашивая вход порта.
R1 – R8 1...4,7 kOm
Нажата Унитарный код Позиционный код
SA1 11111110 00000000SA2 11111101 00000001SA3 11111100 00000010
SA8 01111111 00000111
Преобразование унитарного кода в позиционный.1. табличный метод2. метод сдвигов унитарного кода
Табличный метод.
130
123
8
SA14 5
3 62 71 8
SA1 SA2 SA8
Без фиксации:
С фиксацией:
SA1
DI01
7
R1SA1 R2 ...
SA2
SA8 R8
+5 B
RG
DI01
7
+5 B
RG
Основан на том, что в ПЗУ имеется таблица кодов: каждому унитарному коду соответствует позиционный.
IN IPORTCMACPI MASKJZ EXIT
При выходе выбирается позиционный код, соответствующий данной маске.MASK1 EQU 00000001BMASK2 EQU 00000010B MASK8 EQU 10000000B
IDENTIF1:
IN IPORT
CMA Инверсия кодаCPI MASK1JZ EXIT1CPI MASK2JZ EXIT2
CPI MASK8JZ EXIT8MVI B,0FFH Если не нажата ни одна клавишаRET
EXIT1 MVI B,00HRET
EXIT2 MVIB,01HRET
EXIT8 MVI B,07H
Метод сдвигов унитарного кода.
Исходный код после инверторов сдвигается вправо через перенос (если нажата клавиша, то флаг переноса = 1).
131
IDENTIF2 IN IPORTMVI B,0MVI C,8CMA ИнвертироватьORA A Сброс CY
SHIFT RARJC EXITINR BDCR CJNZ SHIFTMVI B,OFFH
EXIT RET
В регистре В – двоичный позиционный код.
Если возможно нажатие нескольких клавиш, то надо после программы идентификации проверить (А) и если там не 0, то было нажато два или более клавиши.К переключателям с фиксацией относится декадные переключатели: номеронабиратели.
132
IDENTIF2
Ввод из порта
Инвертировать код
Загрузка в (С) = 8
Очистить счетчик сдвигов регистра В
Сдвиг вправо
CY=1?
Декремент регистра С
Инкремент регистра В
CY=1?
Выход
Выход
Да
Да
Нет
Нет
Цифра Код 23 22 21 20
0 0 0 0 01 0 0 0 1 9 1 0 0 1
Ak: СтЦ МлЦ
В случае клавиш без фиксации надо уловить момент, когда кнопки нажимаются:1. Программа ожидает нажатие клавиши. Программа сначала ожидает нажатие клавиши,
затем защита от дребезга, затем программно ожидает отжатия клавиши, затем идентификация нажатой клавиши.
KEYBOARD IN IPORTCMAORA A Установить флаги
133
+5 ВSA1 20 = 1
SA2 21 = 2
SA2 22 = 4
SA2 23 = 8
DI01234567
RG
R1 R4
R5 R8
МлЦ
СтЦ
SA1
SA2+5 В
+5 В
Iвх0 ≤ 1,6 мА
Uвх0 = 1,6*300 = 0,48 В
Uвх0max ≤ 0.8 B
R1 – R8 = 300 Om
KEYBOARD1
DELAY
WAIT_OFF
IDENTIF
WAIT_ON
Возврат
JZ KEYBOARD Цикл ожиданияPUSH PSWCALL DELAY
WAIT IN IPORTCMAORA AJNZ WAIT Ожидание нажатияCALL IDENTIFRET
IDENTIF POP PSW
Недостаток: МП постоянно ожидает нажатия клавиши.
2. Периодически вызывается подпрограмма ввода кода из порта, период должен быть достаточно малым, частота опроса порта не менее 10 раз в секунду.
Неудобство – надо периодически вызывать эту программу.
3. С использованием прерывания программы:
134
KEYBOARD2
Ввод из порта
Инвертировать код
Загрузка в (С) = 8
Сдвиг вправо
CY=1?
Выход Да
Нет
Выход
DI01
7
RG
&
+5 B
SB1
SB2
SB8
t
Сигнал, поступающий на вход запроса прерывания микропроцессора
Достоинство – отсутствие потерь времени на ожидание нажатия клавиши.Недостатком кодирующих клавиатур является большое число входов портов. В случае большого числа клавиш используют не кодирующие клавиатуры.
Не кодирующие.
Контакты клавиш присоединяются к матрице, образованной пересечением вертикальных и горизонтальных линий.
Идентификация нажатой клавиши осуществляется методом сканирования: на один ряд подается код сканирования (бегущий «0»), а с другого ряда снимается байт возврата – если не нажата ни одна клавиша в байте возврата 1, если нажата клавиша 0, в соответствующем разряде.
Программируемый контроллер КР580ВВ79 с клавиатурой и дисплеем.
Функционально БИС делится на две части:— Клавиатурная (управляет работой клавиатуры или матрицы датчиков)— Дисплейная
Имеется оперативная память (восемь ячеек – восемь байтов): в режиме ввода датчиков – как обычная ОЗУ; в режиме работы с клавиатурой – как регистр FIFO.Дисплейная часть рассчитана на работу с семисегментными индикаторами. Имеется ОЗУ для вывода данных на индикаторы (шестнадцать ячеек).
135
KEYBOARD3
DELAY
WAIT_OFF
IDENTIF
RET
Ввод из порта
Д – выводы шины данных;АО – шина адреса;СS – выбор МС;RD – строб чтения;WR – строб записи;СLK – сигнал для тактовых импульсов fmax = 2 mГц;RESET – вход сброса начальной установки «1» - во всех регистрах 0;Ucc – питание +5 В;SND – земля;RL0 ... RL7 – линия возврата (байт возврата при опросе клавиатуры);SHIFT – линия сдвига;CTRL/ - линия управления или стробирования;SL0 ... SL3 - линия сканирования (вырабатывается сканирующий код);DSPA0 ... DSPA3 – младший такт линии управления;DSPB0 ... DSPB3 - старший такт линии управления;BD – вывод бланкирования (гашения дисплея);IRQ – вывод сигнала запроса прерывания.
Программирование КР580ВВ79.
Программная модель контроллера:
0000 Ячейка 0 Ячейка 1 000
136
017
A0CS
RDWRCLK
RESET
UccGND
PKDCRL0RL1
RL7SHIFTCTRL/
SL0
SL3DSPA0
DSPA3DSPB0
DSPB3
BDIRQ
Регистр управления слова Регистр словосостояния
Регистр данных
А0 = 1
А0 = 0
8 8
0001 Ячейка 1 Ячейка 2 001
ОЗУ дисплеяОЗУ
клавиатуры / портов вывода
1111 Ячейка 15 Ячейка 8 111Команды для управления контроллера:
1. общие (используются во всех режимах);2. управляющие дисплеем;3. управляющие клавиатурой (портами ввода).
Тип команды НаименованиеОбщие — установка режимов работы
— программа очистки— управление частотой сканирования.
Команды управления дисплеем — чтение из ОЗУ дисплея— запись в ОЗУ дисплея— бланкирование – запрет записи.
Управление клавиатурой (портами ввода)
— чтение ОЗУ клавиатуры (портов ввода)— установка режима ошибки – сброс
прерывания.
Команды установки режимов работы.
7 6 5 4 3 2 1 00 0 0 Д Д К К К
Типкоманд
Управление
дисплеем
Управлениеклавиатурой
Д Д0 0 Восьми позиционный дисплей Ввод слева1 0 Ввод справа0 1 Шестнадцати позиционный
дисплейВвод слева
1 1 Ввод справа
Пример ввода числа 245 слева: 2 2 …4 2 4 …5 2 4 5 …
Пример ввода числа 245 справа:… 2 2
… 2 4 4… 2 4 5 5
К К К Примечание0 0 0 Режим ввода с клавиатуры с обнаружением двух
и более нажатых клавишКодирование SL0 … SL3
0 0 1 Декодирование SL0 … SL3
0 1 0 Режим ввода с клавиатуры без блокирования ввода одновременно нажатых клавиш
Кодирование SL0 … SL30 1 1 Декодирование SL0 …
SL31 0 0 Опрос восьми портов ввода Кодирование SL0 … SL3
137
1 0 1 Декодирование SL0 … SL3
1 1 0 Режим стробируемого ввода Кодирование SL0 … SL31 1 1 Декодирование SL0 …
SL3
Кодирование – на линейное кодирование вырабатывается двоичный код (бегущий ноль).
Декодирование – с выхода контроллера идет действительный код сканирования (бегущая 1).
Программная очистка.
7 6 5 4 3 2 1 01 1 0 Д Д Д F 0
F – сброс регистра слова состояния и сброс сигнала запроса прерывания.0 – бит общей очистки FIFO, ОЗУ дисплея.
Д Д Д Примечание0 0 Х Запись в ОЗУ нулей (гашение индикаторов)0 1 0 Запись в ОЗУ кода пробела0 1 1 Запись в ОЗУ единиц (горение всех сегментов)
Код пробела: 20Н = 00100000В
Управление частотой сканирования.
7 6 5 4 3 2 1 00 0 1 Р Р Р Р Р
138
А012
Д001234567
SL0
SL0
SL0
SL0
Р – коэффициент деления.
Условные регистры:РУС – при А0 = 1DAN – при А0 = 0
Пример: произвести инициализацию контроллера со следующими параметрами: произвести ввод данных с клавиатуры с блокировкой, шестнадцати позиционный дисплей, ввод слева, частота сканирования 5 кГц, частота синхронизации 2 мГц.7 6 5 4 3 2 1 00 0 0 0 1 0 0 0fclk – 2 мГцf1 = 2000/100 = 20 кГцf2 = fskan = 5 кГцКдекг = 4
INIT1 MVI A,001H Управляющее словоOUT РУСMVI A,008H Команда режимаOUT РУСMVI A,24H Установка частоты сканированияOUT РУС
Чтение из ОЗУ дисплея.
7 6 5 4 3 2 1 00 1 1 АI А А А А
Признак команды
Адрес ячейки ОЗУ дисплея
АI – бит автоинкремента адресации (автоматически увеличивает адрес после каждой команды чтения).
139
Kдел1 = 100 Kдел2 = 2 ... 31f clk f scan
7 6 5 4 3 2 1 0
Ячейка 0
Ячейка 1
Ячейка 15
0000
0001
1111
Запись в ОЗУ дисплея.
7 6 5 4 3 2 1 01 0 0 АI А А А А
Пример: составить программу чтения кода символа, отображается на пять позиций дисплея.01100101 = 65Н
MVI A,65HOUT РУСIN DAN ; в регистре А – содержимое ячейки 0101
Пример: составить программу для вывода «,» на вторую позицию дисплея.01100010 = 62Н
MVI A,62H;OUT РУС;IN DAN; ORI 10000000B ; установить Д7 = 1MOV C,A;MVI A,82H; – 10000010ВOUT РУС ; команда записиMOV A,C;OUT DAN;
Бланкирование – запрещение записи.
При вводе информации данные помещаются в ОЗУ ввода:1. режим опроса портов ввода (можно опрашивать восемь восьмиразрядных портов ввода,
данные из каждого порта помещаются в ОЗУ ввода).
000 Ячейка 0001 Ячейка 1
111 Ячейка 7
7 6 5 4 3 2 1 00 1 0 АI Х А А А
Адрес ячейки ОЗУ ввода
2. режим опроса клавиатуры, (ОЗУ организована по принципу FIFO – прочитать можно только верхушку регистра; при каждом нажатии данные записываются снизу).
0 1 0 Х Х Х Х Х
Пример: прочитать код нажатой клавиши.MVI A,40HOUT РУСIN DAN
140
Слово состояние контроллера.
Для чтения слово состояния: IN РУС.
7 6 5 4 3 2 1 0DU S/E 0 U F N N N
Количество символов в FIFO (количество заполненных ячеек)
F – флаг: «1» - FIFO заполнено полностью.U – флаг переопустошения: при попытке чтения из пустого FIFO/0 – флаг переполнения FIFO: если FIFO заполнено и поступает новый код.S/E – флаг ошибки многократного нажатия.DU – флаг: ОЗУ дисплея недоступно – вырабатывается после выполнения общих команд (после команды очистки).
Методы ввода данных с клавиатуры.
1. с использованием опроса прерывания.2. с программным опросом слова состояния.
С использованием опроса прерывания.
В контроллере есть вывод (IRQ) на котором установлена «1», при нажатии клавиши – это сигнал для микропроцессора, что надо ввести код нажатой клавиши.При переходе к подпрограмме обслуживания прерывания код читается из FIFO. По команде возврата из подпрограммы, запрос прерывания сбрасывается.
ORG XXXXHVVOD PUSH PSW
MVI A,40HOUT РУС Чтение FIFOIN DAN Чтение кода клавишиCALL OBR Подпрограмма обработки кодаPOP PSWEIRET
VVOD2 IN РУС Ввод слово состоянияANI 00001111B Выделение младшего разрядаJZ VVOD2 Цикл ожиданияMVI A,40HOUT РУС
141
ПККД
IRQ
Модуль процессора
INT
Модуль прерывания
Вектор прерывания
IN DAN В (А) код нажатой клавиши
Достоинство – отсутствие дополнительных аппаратных затрат.Недостаток – программа зацикливается пока не нажата клавиша.Пример: шести позиционный дисплей, клавиатура из двадцати четырех клавиш.
0 1 2 3 Q1
Q2
4 5 6 7 Q3
Q4
8 9 А В Q5
Q6
С D E F Q7
Q8
A7 A6 A5 A4 A3 A2 A1 A0 HEX Примечание1 1 1 1 1 1 1 0 FE Регистр данных DAN1 1 1 1 1 1 1 1 FF Регистр управляющего слова РУС
Так как на дисплее шесть индикаторов – то режим кодирования, надо подключить дешифратор.
142
5 4 3 2 1 0
HG6 HG1
&
D017
A0CSRDWR
RESETCLK
PCKD
ША А0 А1 А2
А7
ШД Д0 Д1
Д7
ШУ reset F2 ттл
RL0RL1
RL7
“1”
“7”
“8”
“9”
“F”
“Ф2”
“Ф1”
“Ф1”
“0”
0123456
DC012
X
0 1 2 3 4 5 6
SL0SL1SL2SL3
“1”KP1533ИД7
Код клавиши Название0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 1 1
… …0 0 0 0 1 0 0 0 8
… …0 0 0 0 1 1 1 1 F0 0 0 1 0 0 0 0 Q10 0 0 1 0 0 0 1 Q2
… …0 0 0 1 0 1 1 1 Q8
Общая характеристика языков программирования.
Существуют две группы:— Машинно-ориентированные (языки низкого уровня).— Алгоритмические.
Ассемблер относится к первой группе.Достоинство:
— Максимальное использование ресурсов МП.— Программы быстрые и короткие.
Недостатки:— Сложность программирования.— Программа не структурирована.
143
0abcdefgh
0abcdefgh
D001234567
RGDI01234567
STBOE
DSPB0DSPB1DSPB2DSPB3
DSPA0DSPA1DSPA2DSPA3
IRQ “1”
KP580ИР83
R7
R14
12345678
12345678
HG2HG1
1
+5 B
R2
0
+5 B
R1
Алгоритмические языки не зависят от типа микропроцессора:— Фортран (FORTRAN) для математических вычислений.— Алгон (ALGON).— Кобол (COBOL) – для обработки экономической информации.— Бейсик (BASIC) – для начинающих.— Фокал (FOCAL).— Паскаль (PASCAL) – для учебных целей, профессионального програмирования.— СИ (C) – автор Денис Ричи для любых МП.
Бьярн Строуструн – перемоделировал язык Си в Си++ (объектно-ориентированное программирование). С-Builder – модернизация С++ (построитель).В настоящее время выпускаются программные пакеты. Для языка Си используются программные пакеты двух фирм:Microsoft и Borland International.Программные пакеты:
— Turbo C— Turbo C++— Borland C++
Все языки высокого уровня делятся на два класса:— Интерпретирующие;— Компилирующие;
Basic – интерпретирующий язык: после запуска программа выполняется построчно. Интерпретатор переводит программу в машинный код.Достоинство – интерпретатор занимает мало памяти.При работе компиляторов программа просматривает весь текст и переводит в машинные коды, после этого программа выполняется.Достоинство – программы выполняются быстро.Недостаток – сложность программ компиляторов.Borland C++ включает:
1. интегрированная среда разработки (IDE).2. компилятор.3. компоновщик (редактор связи).4. библиотеки заголовочных файлов.5. библиотеки функций.6. программы – утилиты.
Turbo C 3.1. – работает под MS DOS, процессор i80386, 1Мб ОЗУ, 10 Мб дисковой памяти.Интегрирующая среда:
— редактор теста;— программа работы с файлами;— компиляция, компоновка, отладка.
Расширение программ:— для Си это .с— для Си++ это .ссp.
Компилятор: bc.exeЕсли компиляция прошла успешно, то создается объектный файл с расширением .obj.Компоновщик: link.exe.Он связывает объектный файл с библиотечными, результатом является файл с расширением .ехе являющийся исполнительным файлом.
Структура простейшей программы на языке Си.144
/* Программа приветствия hello.cpp*/#include <stdio.h>main ( )puts (“Hello, programmer”); // вывод на экранreturn 0;
1. Комментарий: /* */ для Си многострочных// для С++ однострочные2. Главная функция: main ( ) – в скобках параметры.3. Функция puts ( ) выводит данные на экран дисплея. Данные ограничиваются “ ”; - конец каждого оператора (строки программы).4. Функции ввода вывода находящиеся в библиотеках, чтобы обратится к библиотеке надо
компилятору сообщить заголовочный файл (.h); для этого в начале программы имеется директива include/ признак директивы #.
Stdio.h – файлы ввода – вывода.5. return 0 – в конце программы (нормальное выполнение).6. - начало и конец функции.
По умолчанию функция возвращает целое число.Если функция ничего не возвращает (void main), то оператор return не нужен.
Представление информации в языке Си.
— Константы;— Переменные.
Константы – значения не могут быть изменены.Все константы могут быть строковыми, символьными, целыми, вещественными.Константа Формат ПримерСимвольная Символ, заключенный в апостроф. `A`, `!`Строковая Последовательность символов, заключенных в двоичные
кавычки.“Hello”
Целая — Десятичная последовательность цифр не начинающаяся с 0.
— Восьмеричная последовательность цифр, начинающаяся с 0.
— Шестнадцатеричная последовательность шестнадцатеричных цифр, начинающихся с 0х (0Х)
25, 56
0750xfe0XFE
Вещественная — Десятичный [цифра].[цифра].— Экспоненциальный [цифра]Ее+-[цифра]
15., 15.254e7, 5.1E-8
Два метода задания констант:1. использующий макроопределение (макросы).2. типизированный.
1. #define имя константы, значение.#define DAYS_IN_WEEK 7#define CHARACTER `A`#define PHONE “77-25-45”
145
2. const тип_данных имя_константы = значение;
const int DAYS_IN_WEEK = 7;
Типы данных.
1. Целые – int.2. Символьные – char.3. Вещественные – float (одинарной точности).4. Вещественные с двоичной точностью.
Int i char по умолчанию со знаком.Unsigned int (char) – без знака.Занимает в памяти от 1 до 10 байт.
Форматы:Тип данных Размер, байт Диапазон
Char 1 -128…127Unsigned char 1 0…255
Int 2 -32768…32767Unsigned int 2 0…65535
Long 4 -2147483648…2147483647Unsigned long 4 0…4294967295
Float 4 3.4*10-38…3.4*1038
Unsigned float 8 1.7*10-308…1.7*10308
Long double 10 3.4*10-4932…3.4*104932
Переменные.Выделение памяти происходит автоматически.
Int i; // Определение целой.Float x;Int i1, i2, i3;Int i1,i2=45, i3=1245;
Имена переменных состоят из последовательности символов (букв и цифр), начинается с буквы или знака подчеркивание, внутри имени допускается только знаки подчеркивания. Заглавные и строчные буквы различаются, количество символов в имени – 32.Принято имена переменных писать строчными буквами.Запрещено в качестве имен использовать ключевые слова – это:
Auto Do For Short VoidBreak Double Goto Signed VolatileCase Else If Sizeof UnionChar Enum Int StaticConst Entry Long Struct
Continue Extern Register SwitchDefault Float Return Typedef
Строковые переменные и константы.146
Для работы со строками Си использует одномерные массивы (один элемент – один символ), признак конца строки \0 (он занимает один байт).
Char client [10];Char client [ ] = “Иванов”;
Char client [5] = “Иванов”;
Строковые константы можно определять:1. С помощью константы макроопределения #define:
#define client “Иванов”;2. С помощью типизированной константы:
Const char client = “Иванов”;
Escape последовательности.
Чтобы использовать клавиши в программе, то есть еscape символ, а за ним escape код.
Escape символ \
Escape последовательности:Последовательность Название Функция
\а Звонок Звук\f Перевод страницы Начало нового экрана\n Новая строка Начало новой строки\t Табуляция Переход к следующей позиции табуляции\’ Апостроф\” Кавычки
147
Иванов\0
Иван\0
Элементарный ввод вывод в Си.
Особенность Си – отсутствие в языке операторов ввода – вывода, вместо них используют библиотечные функции.Устройства ввода – вывода это клавиатура и дисплей (консоль).Бывает:
— Неформатированный— Форматированный.
Функции неформатированного ввода – вывода:1. функции ввода – вывода символов:
putchar ( ) - не переводит строку.Getchar ( )
/*putgetch.cpp Иллюстрация ввода – вывода */#include <stdio.h>#define initial ‘H’main ( )char letter = ‘G’;char in_letter;putchar (initial);putchar (letter);putchar (‘\a’);putchar (‘\n’);in _letter = getchar ( );putchar (in_letter);putchar (‘n’);return 0;
putgetch.exeHG звонок_X_
2. функции ввода – вывода строки:puts ( ) – выводит строку с переходом на новую строку.Gets ( ) – вводит строку, символы которой набираются с клавиатуры, ввод заканчивает ENTER.
/* getsputs.cpp Имитация ввода – вывода */#include <stdio.h>main ( )char name [20];char full_name [80];puts (‘Введите ваше имя’);gets (name);puts (“Ввод подтверждается”);puts (name);puts (“Введите ваше ФИО”);gets (full_name);puts (“Ввод подтверждается”);puts (full_name);
148
return 0;
3. Функции форматированного ввода – вывода позволяет обрабатывать несколько переменных, выполнять преобразование данных;
Printf ( ) – выводит данные на экран.Scanf ( ) – принимает данные с клавиатуры.
Функция printf ( ) выводит на экран строку символов до знака %ХХХ.ХХХ – тип выводимых данных (спецификация)%d – целое число.%f – вещественное число.%c – символ.%s – строка.
Printf ( ) – не переводит строку.
/*print.cpp Имитация вывода*/#include <stdio.h>main ( )int a=5, b=7, c;c=a+b;printf (“Сумма равна %d \n”,c);return 0;
При выводе вещественных чисел по умолчанию выводится шесть знаков после запятой:
…float a=1.2, b=1.44, c;c=a+b;printf (“Сумма равна %d \n”,c);…
на экране будет: сумма равна 2.639999
Чтобы изменить:Printf (“Сумма равна %2f \n”,c);Тогда будет только 2 знака после запятой.
/*inout2.cpp Программа ввода – вывода */#include <stdio.h>main ( )int a,b,c;printf (“Введите два целых числа:”);scanf (“%d %d”,&a, &b);c=a+b;printf (“Результат равен %d \n”, c);return 0;
149
Если в программе используется несколько функций scanf, то во входном буфере остается символ перевода строки и каждый раз при выполнении последующей функции scanf этот символ считывается и программа работает неправильно. Поэтому надо очищать входной буфер.Fflush (stdin) – функция, очищающая буфер, ее надо ставить перед функцией scanf.Gets ( ) – вводит данные в виде строки.Atoi ( ) – преобразует строку в данные типа int.Atof ( ) – преобразует строку в данные типа вещественные.
Они в заголовочном файле stdlib.h
/*inout3.cpp */#include <stdio.h>#include <stdlib.h>main ( )char name [80]; age_str [80]; weight_str [80];int age;float weight;printf (“Введите ваше имя:”);gets (name);printf (“Привет %s! \n” name);printf (“Какой ваш возраст?”);gets (age_str);age=atoi (age_str);printf (“А какой у вас вес?”);gets (weight_str);weight = atof (weight_str);printf (“Подтверждаю ввод, возраст - %d, вес - %2f \n”, age, weight);return 0;
gethch ( ) – вводит символ с клавиатуры и не отображает его на экране, нажатие ENTER не надо, это функция возвращает тип char.Часто это функция используется для ввода значений, например из какого та списка.puts (”для продолжения нажмите ENTER”);Getch ( ) – находится в заголовочном файле conio.h.
Операция и выражения в языке Си.
Выражение – это последовательность операций операндов и разделительных символов.Операнды – переменные, константы и более сложные выражения.Два вида:
— Унарные (1 операнд).— Бинарные (2 операнда).
По виду действий:— Арифметические;— Поразрядно логические;— Сдвига;— Логические;— Отношения.
150
Арифметические операции: +, -, /, *, %, ++, --% - определение остатка от деления.
Int a=5, b=2, c;C=a%b; //c=1 – остаток от деленияC=b%a; //c=2
++ - инкремент (+1)-- - декремент (-1)
формы операций:— Префиксная – операнд располагается справа от знака операции: ++i.— Постфиксная - операнд располагается слева от знака операции: i++.
Для инкремента: в префиксной форме сначала операнд увеличивается на 1, а затем вычисляется выражение. В постфиксной форме выражения операнд подставляется в выражение, производится вычисление и только потом значение увеличивается на 1.
Int a=0, b=1, c, d;C=a++; // c=0, a=1;D=++b; // b=2, d=2;
Поразрядные логические операции.& - логическое И (AND) - логическое ИЛИ (OR)^ - логическое исключающее ИЛИ (XOR)~ - логическое НЕ (NOT)
все эти операции поразрядные.
Операции сдвига:<< - сдвиг влево на число разрядов справа от операнда (выдвигаемые разряды теряются).>> - сдвиг вправо (выдвигаемые разряды теряются).
Используются:— Для быстрого умножения и деления.— Для преобразования форматов.
Логические операции и операции отношения, используются для формирования логических выражений.TRUE -1 и FALSE – 0.= = - равно.!= - не равно.< – меньше.> - больше.<= - меньше или равно.>= - больше или равно.&& - логическое И. - логическое ИЛИ.! – логическое НЕ.
…var1=15, var2=0;!var1; //’=0!var2; //=1
151
var1var2; //=1var1&&var2; //=0
Преобразование типов в выражении.
Операнды могут быть различных типов, компилятор преобразует данные к одному типу перед вычислением.Порядок преобразований: операции приводятся к старшему (более длинному) типу:
Long doubledoubleFloat
Unsigned longLong
Unsigned intInt
CharМожно самим указать тип переменной: (type).
Int a=8, b=5;Float var1, var2;Var1 = a/b; // var1=10Var2 = (float)a/(float)b; // var2=1,6
Приоритет операции и порядок их выполнения: необходимо ставить круглые скобки.В компиляторе используется ускоренное вычисление логических выражений: вычисление прекращается тогда, когда результат уже ясен.Выражение_1&&(выражение_2 выражение_3); если Выражение_1=0, то результат = 0.
Операции управления вычислительным процессом.
— Ветвление;— Циклическое повторение;— Передача управления в определенное место программ.
Оператор if . If (выражение)Оператор_1;ElseОператор_2;
Если (выражение) истинно выполняется оператор_1, если ложно оператор_2.
If (выражение)оператор_1;оператор_12;else
152
оператор_13;
/*ifelse.cpp */#include <stdio.h>#include <conio.h>main ( )char ch;puts (“Будите продолжать? Введите y/n”);if ((ch=getch ( ) = = ‘n’)puts (“Конец работы”);elseputs (“Работа продолжается”);return 0;
Оператор switch . Switch (целое_выражение)case константа_1: оператор_1;break;case константа_2: оператор_2;break;…break;default: оператор_(n+1)
/*switch.cpp*/#include <stdio.h>main ( )int k;printf (“Введите целое число в пределах от1 до 4 для выбора”);scanf (“%d”,&k);switch (k)case 1: printf (“Выбор 1\n”);break;case 2: printf (“Выбор 2\n”);break;case 3: printf (“Выбор 3\n”);break;case 4: printf (“Выбор 4\n”);break;default: printf (“Вводи значение правильно \a\n”);return 0;
Оператор цикла.
While ...Do ... while
While позволяет организовать цикл с предусловием:
153
While (условие) оператор;
Проверяется условие, и если оно истинно, то выполняется оператор, если неистинно, то оператор игнорируется.
While (условие)оператор_1;оператор_n;
/*while.cpp*/#include <stdio.h>main ( )int dlina=0;puts (“Введите произвольную строку, затем нажмите Enter”);while (getchar ( )!=’\n’)dlina ++;printf (“Длина строки равна %d\n”, dlina);return 0;
do ... while – оператор цикла с постусловием:
doоператор;while (условие);
Сначала выполняется оператор, затем проверяется условие, если оно истинно, то оператор выполняется ещё раз (до тех пор, пока условие не будет ложным).
Doоператор_1;оператор_n;while (условие);
#include <stdio.h>#include <conio.h> // Описание функции getch ( )#define ESC 27 // Код символа ESCmain ( )float a, b, res;doputs (“Введите два числа”);scanf (“%f%f”, &a, &b);res=a*b;printf (“Произведение a*b равно %f \n”, res);puts (“Нажатие клавиши ESC завершить работу”);while (getch ( )!=ESC);
154
return 0;
пример программы, которая зацикливается:int i=0;while (i<60);printf (“i=%d \n”);i++;
Оператор цикла FOR .
Позволяет организовать определённое число повторений циклов.For (выражение_1; выражение_2; выражение_3)Оператор;
Выражение_1 определяет начальное значение параметра цикла.Выражение_2 это условие окончания цикла.Выражение_3 заданное изменение параметра цикла.
оператор_1;оператор_n;
#include <stdio.h>main ( )int repeat;for (repeat=1; repeat<=10; repeat++)printf (“%d \n”, repeat);return 0;
Функции языка Си.
Программы на языке Си могут иметь от 1 до нескольких функций. Функция это логически самостоятельная именованная часть программы, которой можно передавать параметры и которая может возвращать какое-то значение.Формат определения функции:Возвращаемый_тип имя_функции (тип параметр_1, … тип параметр_n)описание данных;оператор_1;оператор_n;return (выражение);
Если функция не возвращает ничего, то вместо возвращаемого типа пишется void, тогда в теле функции оператор return не нужен.Если возвращаемый тип не указан, то по умолчанию int.
155
Имя функции любое, разрешённое в языке Си.В ( ) список параметров или аргументов, через запятую, для каждого параметра указывается тип.Если никакие параметры не передаются, то:Имя_функции (void)Имя_функции ( )
Пример функции:Int mul (int a, int b)return;
void output (float x)printf (“Значение x=%f \n”, x);
int input ( ) //или int input (void)int i;puts (“Введите целое число:”);scanf (“%d”, &i);return i;
Функция должна быть определена раньше, чем она использовалась в программе.Использование прототипов (он указывает тип возвращаемого функцией значение и типы параметров, используемой в функции).Формат прототипа:Возвращаемый_тип имя_функции (тип параметр_1, … тип параметр_n);
Int mul (int a, int b);Void output (float x);Int input ( );
#include <stdio.h>int sqr (int x); // прототипmain ( )int t=10;printf (“Квадрат числа %d равен %d \n”, t, sqr (t));return 0;
int sqr (int x) // определение функцииx=x*x;return x;
x – формальный параметр.t – фактический параметр.
Библиотечные функции.Среда помощи – F1.
156
Заголовочные файлы - .h (в них содержатся прототипы функций):Stdio.h – для функций ввода вывода.Conio.h – для работы с клавиатурой.Dos.h – функции ОС ДОС.Math.h – математические функции.Sound (unsigned int) – звук, частота которой задается параметром, Гц.Nosaund ( ) – нет звука.Delay (unsigned int) – задержка в мсек.Int kbhit – возвращает 0, если не нажата ни одна из клавиш, если клавиша нажата – возвращает код этой клавиши.
/*sound.cpp*/#include <stdio.h>#include <dos.h> //прототипы функцийsound ( ), nosound ( ), delay#include <conio.h> //прототип функции kbhit ( )main ( )unsigned freq;printf (“Введите значение частоты (целое от 50 до 5000)”);scanf (“%d”, &freq);while (!kbhit ( ))sound (freg);delay (2000);nosound ( );delay (1000);return (0);
Функции для работы с портами ввода вывода.Inportb – ввод байта из порта ввода.Outportb – вывод байта.Inport – ввод слова (два байта).Outport – вывод слова.
Они находятся в dos.h.Unsigned char inportb (unsigned port);
Port – адрес порта ввода (0 … 65535), эта функция возвращает без знаковое символьное значение.Void outportb (unsigned port, unsigned char value);Port – адрес порта вывода.Value – значение, которое выводится.
#include <stdio.h>#include <dos.h>main ( )unsigned char result;unsigned port=0; //адрес портаresult = inport (port);printf (“Принятый байт из порта %d равен0x%x \n”, port, result);return 0;
157
#include <stdio.h>#include <dos.h>main ( )char value =’C’unsigned port = 0; //адрес портаoutport (port, Value);printf (“Значение %С послано в порт %d \n”, value, port);return 0:
В conio.h содержатся следующие функции:Inp – ввод байта.Outp – вывод байта.Inpw – ввод слова.Outw – вывод слова.
Пример: управление каналом звука.SPEAKER – символ, имя канала звука.
Счетчик СТ2 обеспечивает частоту звука (работает в режиме генератора меандра).По входу GATE можно разрешить (1) или запретить (0) счет.Для работы вентиля (&) на D1 = 1.Адрес СТ2 =42h.Адрес PYC =43h/Д2 … Д7 – менять нельзя!
/*speaker.cpp Программа генерации звука*/#include <stdio.g>#include <dos.h> // Прототипы функций inportb ( ), outportb ( ), delay ( )#include <conio.h> //Прототип функции kbhit ( )#define CTRL_PT 0x43 //регистр РУС#define CTRL_WD 0x66 //управляющее слово для СТ2#define N_LOW 0х26 //младший байт числа N#define N_HIGH 0x11 //старший байт числа N#define CT2 0x42 //адрес СТ2#defineSYST_PRT 0x61 //адрес системного портаmain ( )
158
D00127
RG
Системные функции
Системный порт, адрес 61 h
CLKGATE
CT2
CT1
CT0
OUT2
OUT1
OUT0
f = 1.9318 MГц&
Таймер i8254
ВА
unsigned char ch1, ch2;outportb (CTRL_PT, CTRL_WD); //Вывод УС с РУСoutportb (CT2, N_LOW); //загрузка младшего байта числа в СТ2outportb (CT2, N_HIGH); //загрузка старшего байтаch1=inportb (SYST_PRT);ch2=ch1; //создание копииch2=ch2 0x3 //Установить D0=1,D1=1while (!kbhit ( ))outportb (SYST_PRT, ch2); //есть звукdelay (1000); //задержка на 1 секундуch2=ch2&0xfd; // 0xfd = 1111 1101outportb (SYST_PRT, ch2); //звук нетdelay (1000);ch2 = ch20x2; // установка D1=1outport (SYST_PRT, ch1);return 0;
Звук заканчивается когда нажимается любая клавиша.Программа не меняет Д1 … Д7.
Для формирования звука надо сформировать меандр:
Счетчик должен работать в режиме 3 (генератор прямоугольных импульсов).Fзв = 440 Гц (нота Ля первой октавы)N=fвх/fзв = 1931800 / 440 = 4390,45 1126hФормат управляющего слова: счетчик двоичный, загрузить два байта.01110110b = B6h.
Видимость переменных.
Важное значение имеет место в программе, где происходит описание переменных. От этого места зависит доступ к переменной.Переменные:
— Глобальные.— Локальные.
К глобальным относятся те переменные, доступ к которым возможен из любого места программы (переменная «видна» из любого места программы).К локальным переменным доступ может осуществляться в пределах одной части программы, которая называется блоком видимости переменной.Глобальные переменные объявляются вне любых функций. Локальные могут объявляться только сразу после левой фигурной скобки () – это соглашение относится и к функциям и к любым ветвлениям в программе.
Int global;
159
Void second ( ) unsigned lokal_2;...void first ( )long lokal_1;...char lokal_3;...
Локальные переменные не занимают постоянно память.Компилятор языка Си разделяет переменные в свободной ОЗУ.
ОЗУСвободная часть.
Heep (куча)Системные программы.
Классы хранения переменных.
По способу хранения переменных в памяти они делятся на классы:1. Автоматические – переменные, для которых память выделяется по мере
необходимости. Они присутствуют лишь в том блоке, где объявлены.2. Регистровые – переменные хранятся во внутренних регистрах микропроцессора
(сверхоперативная память), используются только внутри блока.3. Статические – переменные, для которых память выделяется один раз и они
существуют на протяжении всей программы.4. Внешние – переменные, к которым требуется доступ, но они объявлены как
статические в других функциях (возможно в другом модуле) или как глобальные (в другом модуле программы).
Модули можно компилировать по отдельности: упрощается написание и отладка программы (прочитать текст модулей после компиляции нельзя).Auto – для автоматических переменных.Regicter – для регистровых переменных.Static – для статических переменных.Extern – для внешних переменных.
Формат: класс тип имя.По умолчанию локальные переменные – с классом auto, глобальные переменные – static, если указан класс переменной, но не указан тип, то по умолчанию int.Размещение переменных в регистрах позволяет получить максимальную скорость программы, но при этом нарушается работа компиляторов.
Пример:Static int a;Double z;Static b;Auto int c; //ошибкаFunc ( )
160
int d;auto char e;static double i;
Файл first.c Файл second.cInt a;Void F1 (void)Static int b;...Void F2 (void)Extern int b;...
Extern int b;Int c;Void F3 (void)Extern int a...Void F4 (void)...
Переменная F1 F2 F3 F4A Доступна Доступна Доступна Недоступна B Доступна Доступна Доступна ДоступнаC Недоступна Недоступна Доступна Доступна
Операции присвоения.
1. Простое присваивание.Е1=Е2Е1 – переменная.Е2 – выражение любого типа.Пример: i = 3. 2. Составные операции присваивания.Х = х + 3У = у * 3
Формат Применение Описание+ = E1+ =E2 Присвоить сумму
Е1=Е1 + Е2- = E1- =E2 Присвоить разницу
Е1=Е1 - Е2/ = E1/ =E2 Присвоить частное
Е1=Е1/Е2* = E1* =E2 Присвоить произведение
Е1=Е1 * Е2
161
% = E1% = E2 Присвоение остаткаЕ1=Е1 % Е2
<<= E1<<=E2 Присвоение результата сдвига влевоЕ1=Е1 << Е2 (Е2 число сдвигов)
>>= E1>>=E2 Присвоение результата сдвига вправоЕ1=Е1 >> Е2
= E1 =E2 Присвоение результата поразрядного ИЛИЕ1=Е1 Е2
& = E1& =E2 Присвоение результата поразрядного ИЕ1=Е1 & Е2
^ = E1^ =E2 Присвоение результата поразрядного исключающего ИЛИЕ1=Е1 ^ Е2
Условная операция.
Е1 ? Е1 : Е2;Е1 – выражение целого или вещественного типа.Е2, Е3 – должны совпадать по типам (могут быть любого типа). Выполнение данной операции зависит от Е1:
— Если Е1 истинно (отличное от 0), то выполняется Е2.— Если Е1=0, (ложно) то выполняется Е3.
Пример:Int a=4, b=3, c;C = c>b?a*a+b*b:0;
C = a*a+b*b = 25
Операция sizeof (определение размера).
Результатом является размер (в байтах) типа или переменной в памяти.Если применяется к массиву, то эта операция возвращает размер массива в байтах, который он занимает в памяти.
Пример:Int i,r;Char ch;Long double ff;r = sizeof int; //r=2r = sizeof i; //r=2r = sizeof long double; //r=10
Указатели.
Являются очень сложными.Объявление переменной, выделяет в памяти ячейки. Можно определить в какую ячейку компилятор займет данные:Int i;I = 35;&iprintf (“Адрес %d \n”, &i);
162
Указатели – это особый вид переменной которая хранит адрес переменной какого либо типа (то есть номер ячейки памяти, где находятся данные)Указатели объявляются: тип*имя_указателя.Тип – тип переменной, на которую указывает указатель.
Пример: int *iptr;Float *fptr;
Если переменная определенна, она должна на что то указывать: Int *iptr;Int i;Iptr = &i;
Пример:#include <stdio.h>main ( )int i=35;int *iptr;iptr = &i;printf (“Значение переменной”, i);
Массивы Это располож. вплотную друг за другом в памяти эл-ми одного типа.Тип имя_массива[кол-во] Целочисленное беззнаковоеInt array [40]
Св-ва массива:1.Все эл-ты имеют один тип2.Все эл-ты расположены в памяти друг за другом; индекс первого эл-та=0.3.Имя массива явл. Указателем-константой=адресу начала массива( т.е. мл.б. первого эл-та массива ) При описании массива мл.б. выполнена инициализация его эл-ов:1.Инициализация по умолчанию( производится компилятором только для статических или внешних массивов ) – все эл-ты массива заменяются нулями.2.Явная инициализация эл-ов( после описания массива помещается список нач. знач. Эл-ов заключенный в {}) Сущ. 2 формы явной инициализации:1.Явное указание числа эл-ов массива и список нач. знач.( возможно с меньшим числом эл-ов ):int array [10] = { 1,2,3,4,5 }; array [0] = 1; array [1] = 2; ….. array [4] = 5;а) Для статич. и внешн. массивов:array [5] = 0;…..array [9] = 0;б) Для автомат. массивов знач. неиниц-их эл-ов будет случайным:array [5] = ?;…..
163
array [9] = ?; Если число эл-ов массива меньше, чем в описке иниц-ии, то, компилятор выдаст ошибку. 2. Только , со списком нач. значений( компилятор сам определяет кол-во эл-ов по списку иниц-ии)char array []= { ‘A’, ‘B’, ‘C’, ‘D’}; Доступ к отдельным эл-ам массива мл. б. 2 способами:1.С помощ. индекса2.Спомощ. указателя 1 Для ссылки на эл-т указывается его порядковый номер в массиве.Main () {int a[] = { 1,2,3,4,5 };int index = 0, first, last, bad;first = a [ index ]; // first = 1;last = a [ index+4 ]; // last = 5;bad = a [ index+6 ]; // bad – случайное В языке CI отсутствует контроль за границами массива. Этот контроль можно делать специально в программе, например, с помощью sizeof. В случае применения к массиву рез-т – число байт, кот. занимает массив в памяти. Int array [] = { 1,2,3,4,5,6,7 }; Int members;Members = sizeof ( array ) / sizeof ( int ); Рез-т = 7 эл-ов.
2 Т.к. имя массива – это указатель на мл. б. 1-го эл-та, то используя операцию * можно выполнить доступ к любому из эл-ов массиваarray [ i ] и *( array+i )array = & array [ 0 ];# include < stdio.h ># define num 10main () {int array [ num ];int index; // прим. Индексации к мас.For ( index = 0 ; index < num >; index ++)Array [ index ] = index*10; // Применение арифметики указателей;for ( index = 0, index < num >; index++)printf ( “ Эл-ты %d = %d \ n ”, index, *(array+index)); // Применение индексации к указ.Int * iptr;Iptr = array;For ( index = 0; index < num >; index++)Printf( эл-нт %d = %d\n”, index, iptr [ index ]);Return 0; } Язык CI поддерживает многомерные массивы. Размерность массива dimension – это число индексов, использ. Для ссылки на конкретный эл-т массиваInt array [10] [20];
Столбцы СтрокиInt array [3] [3] = {00,01,02, 10,11,12,
164
20,21,22 };int array [3] [3] = {{ 00,01,02 } { 10,11,12} { 20,21,22 };
Массивы и функции
Массив мл.б. передан целиком из одной ф-ии в др. , но процессы передачи отличаются от передачи простых. Передаются нач. адрес массива ( указатель на нач. эл-т массива, а не сами эл-ты). Программа не контролирует целостность массива ( знач. могут меняться ). Пример: определить номер min эл-та массива – случайные.
Int rand () – генерирует случ. число целого типа.Находится в < stdlib.h ># include < stdio.h > # include < stdlib.h ># define DLINA 10int min_index ( int sp[ ], int ras ) {int i, miniindex = 0; m;m = sp [ miniindex ];for ( i=1; i<ras; i++ )if ( sp[ i ] < m )
{m = sp [ i ];miniindex = i; }return miniindex; }main () {int k, list [ DLINA ];for ( k=0; k<DLINA; k++ ) {list [ k ] = rand ();printf ( “ Элемент %d=%d\n”, k, list[ k ]); }k = miniindex ( list, DLINA ),printf ( “ Минимальный элемент %d = %d \ n ”, k, list [ k ]);return 0; }
Строки Строкой наз. массив символов. При описании строк вводится понятие “ строковый литерал ” – это послед – ть любых символов заключенных в двойные ковычки. Строк. литерал в яз. CI размещ. в памяти как массив эл-ов типа char, в конце кот. помещается символ ‘ \ 0 ’ ( терминатор-конец строки )‘ Адам ’
165
‘ \ о ’
‘ м ’
‘ а ’
‘ д’
‘а’
Т.к. в кач-ве символов использ. коды ASCII – их называют строки в формат ASCIIZ Адрес, первого символа строков. литерала может использоваться по-разному:Char array [ ] = “ Слово ”;Char array [ 6 ] = “ Слово ”;Char array [ 6 ] = { ‘ c ’, ‘ n ’, ‘ o ’, ‘ в ’, ‘ o ’, ‘ \ o ’ }Char *string = “ Слово ”;Char *string 1;String 1 = “ Литерал ”
Операции со строками- поиск строки, символа- сравнение символов- перестановка Функции для работы со строками нах. в < string.h >
Ф - цияОписание
Strcat()
Strcmp ()Strcmp ()
Strcpy ()
Strdup ()Strlen ()
Добавляет символы из одной строки в конец другойСравнивает две строкиСравнивает две строки без учета регистров символов.Копирует одну (или строк, литерал ) в другую строку.Дублирует строку.Определяет длину строки.
Определение длины строки: Strlen ()
# include < stdio.h ># include < string.h >main () {char name [ 40 ];int count;puts ( “ Введите ваше имя: ”);gets “( name );count = strlen (name);printf ( “ Строка % s содержит % d символов \ n ”, name, count );return 0; }Сравнение двух строк:Strcmp () – сравнивает 2 строки, кот. явл. аргументами этой ф-ии и возвращает 0, если строки равны и не 0, если строки неравны.
166
….If ( strcmp ( name1, name2) == 0 )Puts ( “ Строки равны ”);ElsePuts ( “ Строки не равны ” );….Присваивание строк:
…..char name [ 20 ]…..strcpy () – копирует строку, либо строк. литерал:strcpy ( name, “ СЭМ ”);…..strcpy ( name 1, name 2 );
Слияние строк:
Символы, содержащиеся в одной строке, добавляются в конец другой, при этом сдвигается первый символ ‘ \ o ’ в конец объединенной строки.Strcat () В ф-ции 2 аргумента# include < stdio.h ># include < string.h >main () {char name 1 [ 40 ], name 2 [ 20 ];
strcpy ( name 1, “ Адам ” );strcpy ( name 2, “ и Ева ”);strcat ( name 1, name 2);puts ( name 1 );return 0; }Рез-т: Адам и Ева.
Массивы строк.
Организуются также как и массивы др. типа.Char name [ 10 ] [ 20 ];
строки Max число симв. в строке
Язык CI позволяет вводить и выводить строки целиком:
Gets () – ВводPuts () – Вывод# include < stdio.h >main () {char name [ 10 ] [ 20 ];int index;for ( index = 0; index<10; index++);gets ( name [ index ] );
167
for ( index = 0; index<10; index++)puts ( name [ index ] );return 0; }
Массивы – указатели.
Массивы могут иметь любой тип, в т. ч. они м. б. указателями ( для компактного располож. в памяти строк и структур – удобны для динамич. выделения памяти) Массив – указатель д. б. описан ( при описании может выполняться иниц – ия его эл-ов )Char *messages [ 10 ]; Указатель из массива содержит адрес первого эл-та строки. Часто массивы иниц-ся:Char *messages [] = { “ Не открыт файл ”, “ Ошибка диска ”, ” Ошибка ввода ”, ” Тайм – аут ” };
Типы, определяемые пользователем.
Переименование типов:
Typedef – ключ. слово позволяет присвоить базовому типу новое имя.Typedef тип новое_имя_типа;Байт – 8 бит – unsigned charСлово – 16 бит – 32 бита – unsigned long…..typedef unsigned char BYTE;typedef unsigned int WORD;typedef unsigned long DWORD;
….BYTE b1,b2, b3;…..WORD w1, w2;
Структуры:
Структурой или структ. переменной наз. объединение одной или более переменных, возможно разных типов, имеющей одно имя, отдельные составные части структ. переменной наз. полями.1. Обозначается место в памяти, где распологаются инф-ция – это место наз. структ. переменной.2. Правило формирования структ. переменной, кот. используется компилятором для выделения области в памяти и организации обращения к ее памяти: это наз. шаблонами. Структ. переменная д. б. описана: 1.Задание шаблона структуры.2.Собственно описание структ. переменной. Синтаксис задания шаблона:Struct имя_шаблона {тип 1 имя_поля;тпп 2 имя_поля;….Тип n имя_поля; };struct BOOK { char name [ 20 ]; // ФИО автора
168
char title [ 44] ; // Названиеint gear; // Год изданияfloat price; // Цена }; Указание шаблона не приводит к выделению памяти.для выдел. памяти надо определить структ. переменную ( тип определяется шаблоном )Struct BOOK dog_book;20+44+2+4=70 байтsizeof ( struct BOOT ) – возвратит результат 70 байт. Доступ к памяти структуры производится с помощью операции ‘ .’Сначала указ. Имя структ. переменная . имя поляDog_book . gear = 1998;Strcpy ( dog_book . title, “ Белый Бим Черное ухо” ); Разрешается выполнять иниц-ию структурной переменной.Struct BOOK dog_book = { “ Траепольский Г.Н. ”,” Белый Бим Черное Ухо”, 1980,2,78};Typedef struct { ;char name [ 20 ];char name [ 44 ];int gear;float price; }BOOKS;BOOKS dog_book; child_book;
Указатели на структурную переменную.
Typedef struct {char name [ 20 ];char title [ 44 ];int gear;float price; }BOOKS;main () {BOOKS first_book, *ptr;Ptr = & first_book;First_book = gear = 1992;Strcpy ( first_book = name, “ Толстый Л.Н. ”)ж….
Массивы структурных переменных.
Typedef struct {char name [ 20 ];char title [ 44 ];int gear;float prite; }BOOKS;BOOKS library [ 50 ];Int index;Library [ index ]. Gear = 1990;BOOKS *ptr;Ptr = & library;
169
( ptr + index ) – gear = 1992;
Использование структур в функциях.
1.Передача по значению при вызове ф-ии пар-ры записываются в стек, при выходе из ф-ции – пар-ры восстанавливаются. 2.По ссылке ( использование указателей ) в ф-цию, передается только адрес структуры. Недостаток – ф-ция может изменить данные. Достоинство – быстрая работа.2. # include < stdio.h > # include < string.h > typedef struct {…. }BOOKS;void example ( BOOKS *first );main () {BOOKS ret;Example ( & ret );Printf ( “ % -20s % -40; Год издания % d, Цена -%2а”, ret – name, ret – title, ret – gear, ret – price );Return 0; } void example ( BOOKS * first ) {strcpy ( first – name, “ Толстой Л.Н. ” );strcpy ( first – title, “ Крайцерова соната ” );first – year = 1990;first – price = 5.25; На экране: Толстой Л.Н. Крайцерова соната год издания 1990 цена 5,25
Операции с файлами.
Файл – порция данных, имеющая уникальное имя. При работе с файлами используют понятие “ потока ”. Т.е. язык CI рассматривает данные в виде потока, поступающ. Последовательно друг за другом. Буфер – участок памяти, кот. использ. при обмене данные между файлами и программой.Stdin – входной поток ( с клавиатуры )Stdout – стандартный поток вывода ( дисплей )Stderr – станд. Поток сообщения об ошибках ( дисплей )Stdprn – вывод на принтерStdaux – станд. поток вспомогательного устройства. При операции с файлами использ. понятие “ файловая структура ”, FILE. В ней несколько полей кот. определяют все действия с файлами. Чтобы использовать файлов. Структуру на неё надо создать.FILE * имя_указателя;FILE * fp;FILE * fin, * fout;Fopen () – открытие файла в < stdio.h >Int fopen ( “ имя_файла ”,” режим_доступа ” ) R – файл только для чтения W – для записи ( все имеющиеся данные стираются ) A – для добавления данных
170
R+} для чтения и для записи W+} T – текстовый режим доступа к файлу B – двоичный режим доступа к файлу Ф-ция fopen () возвращает значение: если произошла ошибка, то возвращает null – файл не открытFILE * fp;Fp = fopen ( “ Мой_файл ”, “ W ” );Fp = fopen ( “ a: \ myfiledat ”, “ W ” );If (( fp = fopen ( “ myfile ”, “ W ”)) = NUUL ) {puts ( “ Не возможно открыть файл ” );return 1; } Закрытие файла осуществляется ф-цией:Fclose ( имя_указателя );FILE *fp;….Fclose ( fp );Fcloseall () – закрывает все открытые файлы При чтении или записи в файл использ. спец. указатель чтение_записи.
0 1 2 3 4 5 6 7 + + +Начало Конец
Указатель определяет номер байта при чтении или записи, при достижении конца файла возвращается символ EOF, поэтому программа должна контролировать появление этого символа. При записи система автоматически определяет конец файла.
Обмен инф-ции с файлами.
Приём инф-ции с файла – чтение ( ввод ), передача инф-ции в файл – запись (вывод ).Все операции чтение – записи делят. на 4 группы.1. Операции посимвольного ввода – вывода.2. построеового ввода – вывода.3. Форматированного ввода – вывода.4. Блокового ввода – вывода.1. производят запись или приём одного символа.Fgetc () – чтение из файлаFputc () – запись в файлInt fputc ( символ, указатель_на_файл ); Эта ф-ция возвращает код символа, а если ошибка – EOF Пример:# include < stdio.h >main () { FILE *fp;Char letter;If (( fp = fopen ( “ myfile ”,” W ” )) == NULL ); {puts ( “ Невозможно открыть файл ” );return 1; }
171
do }letter = getchar (); }fputc ( letter, fp );while ( letter ! = ‘ \ n ’ );fclose ( fp );return 0; }int fgetc ( указатель_на_файл );ф-ция извлекает из файла символ и возвращает его, если ошибка возвращает – EOF Пример:# include < stdio.h >main () {FILE *fp;Char better;If (( fp = fopen ( “ myfilo ”, “ r ” ) / == NULL ) {puts ( “ Невозможно открыть файл ” );return 1; }while ( better = fgetc ( fp ) ! = EOF )printf ( “ % c ”, better);fclose ( fp );return 0; }int feof ( указатель_на_файл )возвращает не 0, если конец файла достигнут и 0 в противном случае.Fputc.cppA: \ fputc.cpp Пример: копирование# include < stdio.h >main () {File *in, *out;If (( in = fopen ( “ fputc.cpp ”, “ r ” )) ==NULL ) {puts ( “ Невозможно открыть файл fputc.cpp” );return 1; }if // out = fopen ( “ a: \ fputc.cpp ” )) = NULL ) {puts ( “ Невозможно открыть файл a: \ fputc.cpp ” );return 1; } while ( ! feot ( in ))fputc ( fgetc ( in ), out );fclose ( out );return 0; }2 .fputs () – запись в файл строкиfgets () – чтение из файла строки.Int fputs ( строка указатель_на_файл );
172
Записывает в файл строку до тех пор, пока не будет ‘ \ o ’ ( сам этот символ в строку не вносится). Если при записи был достигнут конец файла, то эта ф-ция возвращает NULL. Пример: / *fputs.cpp * /# include < stdio.h ># include < string.h >main () {FILE *fp;Char name [ 40 ];If (( = fopen ( “ myfile ”, ” W ” )) == NUUL ) { puts ( “ Невозможно открыть файл ” );return 1; } printf ( “ Введите имя ” )gets ( name);while ( strlen ( name ) > 0 ) { fputs ( name, fp );fputs ( “ \ n ”, fp );printf ( “ Введите имя : ” );gets ( name ); }/ * для выхода – нажать Enter * / fclose ( fp);return 0; }int fgets ( строка, длина_строки, указатель_на_файл ); Длина_строки – число символов, кот. надо считать Ф-ция возвращает символы строки и возвращает NULL в случае, когда достигнут конец файла или прочитано указанное число символов. Пример: / *fgets.cpp * /# include < stdio.h >main () {FILE * fp;Char name [ 40 ];If (( fp = fopen ( “ myfilo ”, ” r ” )) ==NUUL ) {puts ( “ Невозможно открыть файл ” );return 1; }while ( name, 40, fp ) ==NUUL )gets ( name );fclose ( fp );return 0; }3 Ф-ции форматированного ввода-вывода;fprintf () – ф-ция формат. записи аысфта () – ф-ция формат. чтенияште азкштеа ( указатель_но_файл, форматная строка, список_аргументов )форматн. строка – текст и идентификаторы В случае неуспешной записи в файл возвращает EOF
173
Int fscanf ( указатель_на_файл, форматная_строка, список_аргументов ) Пример: / * fprintf.cpp * /# include < stdio.h ># include < string.h >main () {FILE * fp;Char filename [ 15 ];Char product [ 20 ];Float cost;Int quantity;Printf ( “ Введите имя файла, которой хотите создать: ” );Gets ( name );If (( fp = fopen ( name, “ W ” )) ==NUUL )) {printf ( “ Невозм. Откр. Файл %s \ n”, name );return 1; }printf ( “ Введите назв. товара ” ); gets ( product );while ( strlen ( product ) > 0 ) {printf ( “ Введите стоимость товара: ” );fflush ( stain );scanf ( “ % f ”, & cost );printf ( “ Введите кол-во товара: ” );fflust ( stdin );scanf ( “ % d ”, & quantity );fprintf ( fp, “ % s % f % d “, product, cost, quantity );printf ( “ Введите название товара: ” );fflust ( stdin );gets ( product ); }fclose ( fp );return 0; }/ * fscant.cpp * / # include < stdio.h >main () {FILE * fp;Char name [ 15 ];Char product [ 40 ];Float cost;Int quantity;Printf ( “ Введите имя файла: ” );Gets ( name );If (( fp = fopen ( name, “ r ” )) ==NUUL ) {printf ( “ Невозм. открыт. файла % s \ n ”, name );return 1; }while ( fscanf ( fp, “ % s % f % d ”, product, & cost, & quantity )=(EOF) {printf ( “ Название товара: % s \ n ” , product );
174
printf ( “ Стоимость % 2 f \ n ”, cost );printf ( “ Кол-во % d \ n ”, quantity ); }fclose ( fp );return 0; }fscanf () не позволяет читать строки с пробелами. При вводе или выводе файла в формате, несоотв. спецификатору, эти ф-ции выдают ошибки.
Часть 3
Разработать МК для управления насосом напорной башни.
Двигатель включ. и выключ. магнитным пускателем, катушка кот. питается от сети 380 В и 50 mA. Датчиком уровня воды явл. попловковый датчик. Двигатель имеет датчик темп-ры, кот. сбрасывает при достижении определённой темпер. обмоток статора. МК должен отключать двигатель от сети при перегреве и подавать сигнал ~ 1 Гц МП – КР1821М85А ПЗУ – КР573РФ5 ОЗУ – КР573РУ10 Порты – регистры серии КР15331.Разработка структурной схемы МК:
175
Квч
насос
Кнч
Кт
Км
380 В
Модульпроцессора
опторазвязка
Датчик температур Кт
ПЗУ2 кбайта
ОЗУ 2 кбайта
Порт ввода
опторазвязка
опторазвязка
Датчик Кнч
Датчик Кву
Порт вывода
опторазвязка
опторазвязка
Ус-ль
Динамик
Системная шина ( ША, ШУ, ШД )TRAP
2. Разработка принципиальной схемы2.1 Модуль центрального процессора
2.2. Модуль памяти
При А 11 = 0 – ПЗУ
А 11 = 1 – ОЗУ
176
TRAP
RST 7.5RST 6.5RST 5.5INTRHOLD
1
X1
X2
READY
RESIN
TRAP
ZQ1
R2+ 5В
ША
А0
А1
А15
ШД
Д0
Д1
….
…..
Д7
MEMR
IOW
ШУ
Кт
-Uп2
R1
C1+Uп2
+5В
V1
CPU
А ROM01…10
CS DD1
А RAM01…10
CS DD21
КР573РФ5 КР573РУ10ШАША
А11
ПЗУ
ОЗУ
00002Кбайта
2Кбайта
07FF
0800
0FFF
2.3. Модуль ввода
177
+Uп2
ДI RG Д0
0 01 12 ….…7 7
C
OE ДД5
1
1 11
+5B КР1533ИР33
ШД
Д0
Д1
…..
Д7+5ВКну
-Uп2+5В
+Uп2ДД3
ДД4А0
IOW
Кву
-Uп2
Адрес порта ввода 0000,0001 = 01 H
2.4. Модуль вывода
Адрес порта ввода 0000,0010 = 02H Выходы порта: Д 0 = 1 – пускатель включён
Д 1 = 1 – включ. лампа Д 2 = 1 – включ. звук
2.5. Выбор блока питания
178
ДI RG Д0
0 01 12 2… ….7 7
C
OE ДД5
11
1
1
&
11
КР8533ИР33 ~380В
V1ДД4
ШД
Д0+5В
КМ1
ДД5 Д7ДД2
ДД3
А1 VL1 ~220B
ВА1
Uп3 +5В
IOW
Разработка ПО МК
179
ALARM
Выключить двигатель
Вывод прерыв. звуков и свеиов.
сигнала
+Uп3
+5В
ДА1К142ЕН5АSA1
FU1
+ ++ +
C10C3...
C2C1~220B
ДА2К142ЕН8Е+Uп2
-Uп2
Ввод сигна- лов от датчика уровня
PUMP
Кну зам.
Включ. насос
Ввод датчиков от сигналов уровней
Кну зам.
Отключить насос
Да
Нет
Да
Нет
Детальная блок – схема главной программы работы МК: Детальная блок – схема п.п прерывания
Детальная блок – схема п.п прерывания
180
ALARM
Вывод нулей в OPORT
Вывод 03H в OPORT
Задержка на 500 мс
Вывод нулей в OPORT
Задержка на 500 мс
ПУСК
Инициализация: загрузить SP,Вывести нули в порт OPORT
Ввод из IPORT
Д0=1
Задержка на 50 мс
Вывод 01H в OPORT
Ввод из порта IPORT
Д1=1
Задержка на 50 мс
Вывод нулей в OPORT
Нет
Да
Нет
Да
; Программа работы МК IPORT EQU; Адрес порта вводаOPORT EQU 02H; Адрес порта выводаSTACK EQU 0FFFH; Адрес вершины стека ORG 0000HPUMP: JMP INIT ORG 0024H; вектор прерыв. по TRAP JMP ALARM ORG 0100HINIT: LXI SP, STACK; загруз. указ. стека XRA A; OUT OPORTWAIT1: IN IPORT ANI 00000001B; выделить Д0 JZ WAIT1; если Д0 = 0 CALL DEL50MS; вызов п.п задержки MVI A, 01H OUT OPORT; включить насосWAIT2: IN IPORT ANI 00000010B; выделить Д1 JZ WAIT2; если Д1 = 0CALL DEL50MSXRA AOUT OPORT; выключить насос JMP WAIT1; зацикливание ; обработчик прерыванияALARM: XRA A OUT OPORT; выключить насос MVI A, 03H; OUT OPORT CALL DEL500MS; XRA A OUT OPORT CALL DEL500MS JMP MEANDER ; п.п. задержки на 50 мс.DEL50MS: LXI B, 3125 LOOP: NOP NOP NOP NOP
181
DCX B MOV A, C ORA B JNZ LOOP; Если ( BC ) не равно 0 RET; п.п. заднржки на 500 мс – это ; 10 раз вызывать п.п. задержки; на 50 мсDEL500MS: MVI E, 10 CYCLE: CALL DEL50MS DCR E JNZ CYCLE RET END; конец программыPUMP. ASM – асемблерный файлPUMP. OBJ – объектныйPUMP. TSK – выполняемый3. Описание принципиальной схемы МК:
Интерфейс МПС.
Интерфейс – совокупность линий и шин, сигналов электрон. схем, алгоритмов и программ, обеспеч. обмен инф-ции между процессором, памятью и внешними устр-ми:1. Логическая среда интерфейса – правила и алгоритмы обмена данными ( протоколы обмена )2. Физическая среда – вид и пар-ры сигналов.3. Конструктивная среда – электронной схемы, электрич. разьёмы.Стандартный интерфейс – это сов-сть унифицированных аппаратных, программных и конструктивных ср-в.По ф-циям интерфейсы бывают:1.системные для связи устр-в внутри систем. или микро ЭВМ.2. внешних уст-в для связи систем с внешн. устр-ми.Системные интерфейсы должны обеспечить max скорость передачи данных.Число линий – велико, но их длина небольшая ( до 1 м. ) Интерфейсы при последовательном формате имеют меньшую скорость передачи, но длина соединит. линии намного больше.Интерфейсы ввода – вывода.1. Вид связи:а) Дуплексная 1 б) Полудупликсная
в) симпликсная 2. Пропускная способность, т. е. скорость передачи данных, [ бит./ сек. ]3. Max допустимое расстояние между устр-ми, [ м ]4. Величина задержки при организации передачи ( из-за длины л.с. )
Организация интерфейсов.
182
1 2
линия связи
2 1
линия связи
1. Послед. интерфейс.2. Парал. интерфейс.1. С синхронной передачей.2. С асинхронной передачей. В последов. интерфейсе данные передаются по одной сигнальной линии в послед. формате. Т.к. кол-во проводников небольшая, то, удобно при передаче на большие расстояния. В парал. – данные передаются квантами в парал. формате. Расстояние небольшое. При асинхронной передаче каждая посылка заключается в рамку из старт-бита и стоп-бита:
Достоинства: высок. надёжность, малые требов. к стабильности генераторов.Недостаток: малая скорость передачи.Синхронная передача: А) С помощью спец. синхросигналов, кот. посылаются в линию связи и синхронизируют генераторы передатчика и приёмника.
Достоинство – высок. скорость перед.Недостаток – высок требования к стабильности генерат.Б) Использ. отдельных линий подачи синхроимпульсов Данные Данные
Достоинство – высокая надёжн. В парал интерф. часто использ. асинхронную передачу вида “ запрос-ответ ”, при этом использ. дополнит. сигналы, кот. использ. приёмник и передатчик:
8
183
Старт бит данные стоп бит
Данные Данные …..
SYN
SYN1 SYN2 Данные Данные …..
ПРМ
ПРД Данные
STR
ACK
Данные
Этот вид передачи с квитированиемSTR
ACK
Структура интерфейса:
1. Радиальный. 2. Магистральный.3. Смешанный интерфейс.
К – коммутаторYi – переферийные устройстваРгА – регистр адресаРгз – регистр запроса
Достоинство – простота алгоритма работыНедостаток – большое кол-во линий связи.
184
1
УЦ
К
Рг.АРг.З
Ун
АнА2
У2
А1
У1
УцУУ
Формирователь адреса Yi
Схема анализа запроса
RQШина адреса данных
AnRQA1RQ
…………..
YnY1
2
RQ – линия запросовДостоинство – высокая скорость передачи данныхНедостаток – длина линии связи малая
Организация линий интерфейса.
Линии: - однонаправленные- двунаправленные
Направленность определяет число передатчиков, кот. может присоединяться к линии.
1. Схемы с ОК на выходе.
185
Линия связи
ПРМПРД
ПРДПРМ
Линия связи
ПРМПРД
+Uип
Rлс
VT2VT1
ПРД2ПРД1
Достоинство – простота схем.Недостаток – малая част. передачи
2. Схема с эл-ми, имеющими три состояния на выходе.
OE – управляет выход. буфером:OE = 1 – выходы в Z – состоян.OE = 0 – выходы имеют 0 или 1
Достоинство – высокое быстрод.Недостаток – большая стоимость.
Передача по однонаправленным линиям связи.
Еп – ЭДС помехиUпрд1 = Uпрм1-( Еп+Uаb )Uпрд0 = Uпрм0+( Еп+Uab )Uпрм1 – Uпрм0 > Uдоп – чтобы передача была надёжнойДля ТТЛ: U доп > 0.4 В
186
ПРД1 ПРД2
ОЕОЕ 11
~EпПРМUпрмUпрд
ПРД
bA Линия связи
Uab
0
Передача по двухпроводной линии.
Для уменьшения ёмкости между проводами провода скручивают.
3.
Схемы подключения: А) использование небалансного усилителя – передатчика и диф. усилителя приёмника.Б) использование балансного усилителя – передатчика диф. усилителя – приёмника.
2
U1 = Uпрд + ЕпU2 = EпUпрм = U1 – U2 = Uпрд
187
ПРМПРД5,0
5,0Uдоп
Uпрм12,0
2,4Uдоп
Uпрд1
Uпрм00,8
0,4
Uпрд0
00
Обратный (общий)
Прямой проводСигнальный
Пр.
Обр.
1.Витая пара
Пр.
Обр.
Пр.
Обр.
ПРМПРДА) ~Еп1
~ЕпUпрд
Uпрм1Uпрм2
Синфазные помехи
Увеличение в несколько раз л.с.
Интерфейс ИРПР ( BS – 4421 )
Интерфейс радиальный, паралельный, служит для связи внеш. устройств с микро ЭВМ, а также для связи микро ЭВМ м.д. собой.
Основные технич. хар-ки ИРПР:Число взаимодействующих устр-в - 2.
Формат, передачи данных – параллельный асинхронныйДанные от 1 до 16 битУровни сигналов в линии – ТТЛ мех. Расстояние 15 м.
Наименование линий
Направл.УсловноеРусск.
ОбозначениеАнгл.
ЭкранНуль ( общий )Готовность приёмникаГотовность источникаСтроб ист-каЗапрос приёмникаДанные
И ----П
П ---- И
И ---П И --- ПИ --- П
ЭОВГП
ГИ
СТРЗПД0 – Д7
SZSO
A0
SCACД0 – Д7
188
ПРМБ) ПРД1Еп~А
2Еп~Б
ПИ
Источник приёмник
ПИ
ИП
И П
ДанныеД0
ГПД1
ГИД7
ЗП
СТР
Д0…Д7
ГИ
ГП
СТР
ЗП
Инвертор с открытым коллектором:
легко контролировать целостность соединит. линий.
189
1 1
+5В
ПИ R1Д1Л.с.Д1
Н уровень‘0’
1
1
ЗП
+5В
RЛ.с.
ЗП
ГИ
ГП
ЗП
СТР
Д0…Д7
Устройство сопряж. , преобраз. сигналы интерфейса, должно обеспечивать логику работы интерфейса.
Пример подключения ППА КР580ВВ55А.
Драйвер – программа, управляющая вводом – выводом.Драйверы обмена ОИРПР.
Строка 1: INIT 1 – инициализация CHECK 1 – проверка сигнала ГП OUTPUT 1 – передача байта из рег. С. Строка 2: INIT 2 – инициализация CHECK 2 – проверка сигнала ГИ INPUT 2 – приём в рег. С. РА – вывод РВ – ввод РСL – ввод РСH - вывод
190
ППА
Вывод
Ввод
Выв.
РА 0 7
РВ 0 7
РС 0 1
4 5 6
ППА
Ввод
Вывод
Ввод
РВ 0 7
РА 0 7
РС 4 5
0 1 2
Односторонняяпередача
Строка 2Строка 1
ПРИЁМНИК
ИСТОЧНИК
ЗП
ГП
СТР
ГИ
ОВ
0 0 0 0
0 сброс
1 установка
РС0 0 0 0
РС1 0 0 1
……………….
РС7 1 1 1
УС: 1000 0011 В = 83HУС: 0000 1101 = ОДН
INIT 1: MVI A, 83H OUT PYC MVI A, 0DH OUT PYC
RET
INIT 2: MVI A, 83H OUT PYC MVI A, 0FH OUT PYC
RET
CHECK 1: IN PC CMA ANI 0000 1000 RET
Если в РС3 = 1 след. готов приёмник, то Д3 = 0 и z = 1.
191
INIT 1
Загруз. УС в ППА
Выдать сигнал ГИ ( РСb 1 )
Возврат
INIT 2
Загрузка УС в ППА
Выдать сигнал ГП ( РС7 1 )
Возврат
CHECK 1
Ввод из РС
Инверт. ( А )
Выделить Д3
Возврат
CHECK 2: IN PC CMA ANI 0000 0100 RET
OUTPUT 1: IN PC ANI 02H JZ OUTPUT 1 ; вывод данных MOV A, C OUT PA MVI A, 09H OUT PYC WAIT 1: IN PC ANI 02H JNZ WAIT 1 MVI A, 08H OUT PYC XRA A OUT PA RET
INPUT 2: MVI A, OBH OUT PYC WAIT 2: IN PC ANI 01H
192
CHECK 2
Ввод из РС
Инверт.
Выделить Д2
Возврат
OUTPUT 1
Ввод из РС
Выделить Д1
Д1=1
Выдать ( С ) в РА
Вывести РС4 1
Ввод из РС
Выделить Д1
Д1 =0
Вывести РС4 0
Вывести 00Н в РА
Возврат
Нет
Да
Да
Нет
INPUT 2
Установить РС5 1
Ввод из РС
Выделить Д0
Д0 = 1
1
Нет
Да
JZ WAIT 2 IN PB MOV C, A MVI A, OA OUT PYC WAIT 3: IN PC ANI 01H JNZ WAIT 3 RET
ИРПР – М – Centronics
Последовательный интерфейс.
В них использ. некотор. кол – во проводников для связи ( min = 2 )1. RS – 232 C2. Токовая петля.
1. Аналог стык С2 позволяет связать м / д собой 2 устройства( компьютеры, МК )
2 вида уст – в:1. Терминальное ДТЕ ( 00Д ) может выдавать и принимать сигналы.2. Связное ДСЕ ( АПД ) - модем
193
1
Ввод из РВ
Переслать из А в С
Вывести РС5 0
Ввод из РС
Выделить Д0
Д0 = 0
Возврат
Нет
Да
Разъемы кабелей:1. ДВ25;2. ДВ9.
Разъемы состоят из двух составных частей: вилка (male – папа) и розетка (female – мама).
Сигнал НазначениеPG Защитное заземление.SG Сигнальная земля (общий).
TxD Передаваемые данные.RxD Принимаемые данные.RTS Выход сигнала запроса передачи данных.CTS Вход сигнала разрешения передачи данных
(выключено – запрещает передачу данных).DSR Вход сигнала готовности (от модема).DTR Выход сигнала готовности терминала к обмену
данными. DCD Вход сигнала обнаружения несущей телефонной линии.
RI Вход сигнала индикатора вызова (звонка).
Логический ноль обеспечивается сигналами +3 …+12 В.Логическая единица обеспечивается сигналами -3 …-12 В.
194
OOD(DTE)
AПD(DCE)
Микро ЭВМ
КабельRS-232 OOD
(DTE)AПD
(DCE)
Микро ЭВМ
КабельRS-232
Телефоннаялиния
1 13
14 25
DB25P
1 5
6 9
DB9P
Для передатчика:
Для приемника:
Uп ≤ 2 В.DB9 DB25
TxD 3 2RxD 2 3DTR 4 20DSR 6 6RTS 7 4CTS 8 5DCD 1 8
RI 9 22SG 5 7
XON =11H – сторона 1 передает данные.XOFF = 13H – сторона 2 не принимает данные.
195
Логический 0
Логическая 1
U, B
+15
+50
-5
-15
Логический 0
Логическая 1
U, B
+25
+30
-3
-25
TxDRxDDTRDSRDCRRTSCTSSG
TxDRxDDTRDSRDCRRTSCTSSG
DTE-1 DTE-2
Квитирование:
DTR – готовность.RTS – разрешить передачу символа.CTS – подтверждение приема.
ВМ80/ВМ85. КР580ВВ51А: ПСА – УСАПП.
Частота передачи: 300, 600, 1200, 2400, 4800, 9600 бит/с.Кдел = 1Кдел = 16Кдел = 64Пусть: fп = 4800 бит/с.Кдел.внут = 16fс = 4800*16 = 76800 Гц.
Для работы адаптера необходимо: DSR = 0 и CTS = 0.
Драйверы для работы интерфейса.
Режим асинхронный: Кдел = 16.Контроль паритета – нет.Два стоп бита.
УС: 0100 0000 = 40H – инструкция режима.196
TxDRxDDTRDSRDCRRTSCTSSG
TxDRxDDTRDSRDCRRTSCTSSG
TxDRxDDTRDSRRTSCTSTxCRxC
SIO
C
TxDRxDDTRDSRRTSCTSTxCRxC
SIOTTЛ/RS
TTЛ/RSRS/TTЛ
RS/TTЛ
Делительчастоты
Делительчастоты
F2ттл
fc
л.с.
INIT1
Программный сброс
Возврат
Вывод в РУС инстр. реж.
Ввод в РУС инстр.ком.
УС: 0000 0001 = 01H – инструкция команды.
INIT MVI A,40HOUT РУС Программный сбросMVI A, XXOUT РУС Инструкция режимаMVI A,01HOUT РУС Разрешить передачуRET
Инструкция команды:D7 D6 D5 D4 D3 D2 D1 D0D0 – 1 – передача разрешена D1 – 1 – DTR = 0D2 – 1 – прием разрешенD5 – 1 – DTS = 0D6 – 1 – программный сброс
Слово состояние:D7 D6 D5 D4 D3 D2 D1 D0 DSR =1 1 (TxRDY) готов
1 (RxRDY) готов
В регистре С – передаваемый символ.OUTPUT 1 IN РУС Ввод слово состояния
ANI 01H Выделить Д0JZ OUTPUT1 Если TxRDY = 0MOV A,COUT DAN Вывод в УСАППRET
197
OUTPUT1
Ввод слова сост. УСАПП
TxRDY = 1
Возврат
ДаВвод символа в УСАПП
Нет
INPUT1
Ввод слова сост. УСАПП
RxRDY = 1
Возврат
ДаВвод из DAN
Нет
INPUT 2 IN РУСANI 02HJZ INPUT2IN C,AMOV A,CRET
Недостаток – отсутствие контроля за передачей символа.
Аппаратное квитирование передачи данных.
Сигналы: DTR и DSR; RTS и CTS.
INPUT1_1 IN РУСANI 80HJZ INPUT1_1CALL INPUT1RET
198
TxDRxDDTRDSRRTSCTSTxCRxC
SIOTxDRxDDTRDSRRTSCTSTxCRxC
SIO
TTЛ/RSRS/TTЛ
Сторона 1Сторона 2
INPUT1.1
Ввод слова сост. УСАПП
D7 = 1
Возврат
ДаВызов INPUT1
Нет
(DSR=0)
OUTPUT2_1 MVI A,03HOUT РУСCALL OUTPUT2RET
Инициатором передачи может быть любая сторона.
Используется система прерываний.
199
OUTPUT2_1
Вывести Д1 = 1 в РУС
Возврат
Вызов OUTPUT2
Сторона 1
DTRDSR
Сторона 2
DTRDSR
Рукопожатие
Сторона 1
RTSCTS
Сторона 2
RTSCTS
TxDRxDDTRDSRRTSCTSTxCRxC
SIOTxDRxDDTRDSRRTSCTSTxCRxC
SIO
TTЛ/RS
RS/TTЛ
Сторона 1Сторона 2
CPUINT1
Передатчик К170АП2:
Приемник К170УП2:
ИРПС – токовая петля.При передаче данных используются импульсы тока.I = 20 mAI = 40 mA.Сигналы управления передаются непрерывно, скорость до 9600 бит/с.В качестве сигнала квитирования выступает сигнал готовности приемника.
Лог1 ток в 20 мА, а лог 0 отсутствие тока.
200
&
&
TTЛ
1
TTЛ
2
3
Uттл1
4
7
6
5 8-12 В +12 В
RS-232
RS-232
342516
147
8
10
11
12
1315 10+5 B +12 B
ПД ПР
RS-232
ПД ПР
RS-423A
ПД ПРRS-422A
L = 12 m., V = 10 MБт/сL = 1200 m., V = 100 КБт/с
L = 9 m., V = 100 КБт/сL = 1200 m., V = 1 КБт/с
ПД ПР
Готовность приемника
л.с.
л.с.
+ПД
-ПД
+ПрД
-ПрД
+ГПр
-ГПр
При отсутствии передачи – постоянно течет ток 20 мА, это позволяет контролировать целостность линии.
201
+12 B
VT1KT361
390
3k
33
VD1
VT20KT361ТТЛ
Выход (+ПД)
Вход (-ПД)
Передатчик
+ПрД
-ПрД
Вход
Выход
330
VD1
43k
1k
+5 B
КР1533ТЛ2
VT1АОТ128
Приемник
ТТЛ
К Е
Rогр
ПД ПР
П
Iпр
Iобр
л.с.
Схема с активным передатчиком и пассивным приемником
RпRппRоог
EсIл
2..
К Е
Rогр
ПД ПР
П
Iпр
Iобр
л.с.
Недостаток: интерфейс не стандартизован.В качестве устройства сопряжения используется УСАПП КР580ВВ51А. необходимо преобразование уровней ТТЛ в ток и наоборот.
Программы аналогичны.
Достоинство: простота организации, большая дальность передачи, высокая помехозащищенность, дешевизна.Недостаток: малая скорость передачи, не унифицированность.
Интерфейс КОП (канал общего пользования).
HPIB – интерфейсная шина.GPIB.IEEE – 488 русский аналог КОП.IEC 625-1.
Основные характеристики: — скорость передачи информации до 1 МБт/с— длина шины до 20 м.— число линий интерфейса = 16— способ обмена информации – параллельный— режим обмена – полудуплексный— число подключаемых устройств до 15— уровень сигналов – ТТЛ.
В интерфейсе КОП имеется 16 линий трех видов:— 8 линий ввода – вывода данных— 3 линии управления передачей— 3 линии управления интерфейсом.
202
TxDRxDDSRDTRRTSCTSTxCRxC
SIO RxDTxDDTRDSRRTSCTSTxCRxC
SIOTTЛ/RS
TTЛ/RSRS/TTЛ
RS/TTЛ
л.с.
Направление передачи
л.с.
Направление передачи
Три вида:— устройства, которые передают данные, это передатчики— устройства, которые только принимают данные, это приемники— устройства управления интерфейсом, это контроллер.
В интерфейсе используется инверсная логика, то есть логический 0 это Н-уровень, а логическая 1 это L-уровень.
Линии и сигналы интерфейса:DIO1 – DIO8 – шина данных. Данные и команды передаются параллельным кодом. В команде содержится адрес устройства и приказ стать приемником или передатчиком. Адреса: Первичные (15) и вторичные (до 32). Линии управления передачей:DAV – данные доступны (действительны). Активный уровень показывает, что данные могут быть прочитаны (вырабатывает передатчик).
203
2м
розетка
вилка
Соединение в цепочку
Контроллер передатчик –
приемник
Передатчик – приемник Приемник Передатчик
DI1 – DI8
DANNRFDNDACATNIFCSRQRENEOI
Шина данных
начало конец
+5 В
Это позволяет легко подключать много устройств параллельно
NRFD – не готов к приему данных. Его вырабатывает приемник – используется для синхронизации работы приемников, помогает согласовать медленные и быстрые устройства.NDAC – данные не приняты (вырабатывает приемник).
Эти три сигнала используются при всех передачах данных.
Сигналы управления интерфейсом:ATN – внимание, подает контроллер когда передает команду.IFC – сброс (очистка) интерфейса, подает контроллер для сброса всех устройств.SRQ – запрос обслуживания, подает устройство когда они требуют обслуживания.REN – разрешение дистанционного управления – подает контроллер.EOI – конец идентификации.
Передача данных: каждый байт данных (команды) сопровождается тремя байтами квитирования.Протокол обмена интерфейса:
Сигналом DAV управляет передатчик, а NRFD и NDAC приемник. Низкий уровень DAV и данные на шине установлены и действительны.Пусть контроллер установил передатчики и приемники, тогда все приемники формируют Н-уровень, NRFD – готов к приему (1). Передатчик выдает на шину данных данные, когда они стабильны выдается L-уровень на DAN (2). Приемники начинают принимать эти данные и вырабатывают NRFD = L-уровень (3). Во время приема данных каждый из приемников вырабатывает NDAC = L-уровень (4). Когда самый медленный приемник примет данные он освобождает линию и вырабатывает NDAC = Н-уровень, то есть все приемники приняли данные. Получив Н-уровень NDAC передатчик вырабатывает DAV = Н-уровень (5). Это значит, что данные на линии уже не доступны. После этого приемник вырабатывает L-уровень NDAC (6) и Н-уровень NRFD (7), то есть система готова к приему новых данных.
Команды интерфейса КОП.
Команды передает контроллер, ATN = L-уровень.B8 B7 B6 B5 B4 B3 B2 B1
Для команды.
Вид команды определяется: B7, B6, B5.B7 B6 B5 Тип команды0 0 0 Адресуемая0 0 1 Универсальная0 1 Х Приема1 0 Х Передачи1 1 Х Вторичная
Контроллер имеет возможность программировать устройство на прием или передачу.Команда приема: адреса передаются младшими битами: 0000 …1110 – 30 адресов.
204
DIODAV
NRFDNDAC
Данные на шине
12
3
4
5
6
7
Каждое устройство, подключаемое к интерфейсу имеет свой адрес, если этот адрес совпадает с выставленным, то устройство настраивается на прием.1111 – UNT (конец передачи команды приема).Аналогично при передачи:UNL – конец команды передачи.Вторичная – для передачи информации вторичным устройствам (со своими адресами).Универсальные:LLO – блокировка автономного управления.PCL – сброс.PPOSPESPD
Схемная реализация интерфейса:I8291 – 1 – приемопередатчик.I8292 – 1 – контроллер шины.I8293 – 2 – шинный приемопередатчик.
Транспортная передача данных.
При передаче данных используются специальные коды:МТК – 5 битный.ASCII – 7 битный.КОИ-7 – 7 битный.КОИ-8 – 8 битный.
Символ Код ASCII0 30H1 31H 9 39H+ 23H= 3DH
SOM 01H Начало сообщенияEOM 03H Конец сообщенияEOT 04H Конец передачиNUL 00H Ожидание
Байт БайтSOM … EOM NUL NUL SOM EOM EOT
Данные
Метод транспарантной передачи: берется код (любой) DLE, управляющие символы будут в виде двух байтов:DLE STX – начало транспарантного текста.DLE ETB – конец текстового блока.DLE ETX – конец транспарантного текста.
205
Д АЦП
t
Uвх
0 … 255
код
0 000000001 00000001255 11111111
DLE SOH – качало транспарантного заголовка.DLE DLE – передача данных, совпадающих с DLE.
DLE – 55hSTX – 76hETB – 85h
Пример: контроллер поставляет данные о температуре печей. Количество печей и зон произвольно и может меняться.
DLE SOH DLE STX DLE ETX DLE SOH DLE STX …заголовок Данные по темп. заголовок Данные
DLE STX DLE ETBКонец блока
Сопряжение устройств управления и контроля с ПК.
IBM PC – 1981 г.1. через системную шину.2. через параллельный порт (порт принтера).3. через последовательный порт.
РС/ХТ, структурная схема:
206
Процессор ОЗУ ПЗУ Контролер регенерации
Контролер ПДП
Контролер прерываний
Системные устройства
ввода - вывода
Плата расширения 8
Плата расширения 8
Системная шина
A0 – A19D0 – D7
IRQ2 – IRQ7DRQ1 – DRQ3
DACK0 – DACK3MEMR, MEMW, IOR, IOW
AENRESET DRV
ALECLKOSCT/C
IO CH SKIO CH RDY
Системная плата
Плата расширения
Ещё 8 линий питания: GND,5 B, 12 B
20
86
34
4
11
11
111
1
Описание линий:А0 …А19 – шина адреса (1 Мбайт).Д0…Д7 – линии данных.IRQ2…IRQ7 – запросы прерываний.ДАСК0…ДАСК3 – подтверждение прямого доступа к памяти.DRQ1…DRQ3 – запрос прямого доступа к памяти.MEMR, MEMW, IOR, IOW – стробы.AEN – разрешение адреса.AEN = H-уровень – работа с прямым доступом к памяти.AEN = L-уровень – порты ввода – вывода.RESET DRW – начальная установка внешних устройств.ALE – разрешение фиксации адреса.CLK – сигнал тактовой частоты fт = 4,77 МГц.OSC – сигнал частоты fosc = 14,31818 МГц, для работы монитора и для последовательного порта.T/C – завершение передачи.IO CH SK – проверка канала ввода вывода.IO CH RDY – готовность канала ввода – вывода.
PC/AT – модернизировала системную шину в ISA.
207
A31 A1B31 B1
A31 A1Микропроцессор
SRAM (КЭШ) Мост Host - PCI DRAM (системная память)
Устройства PCI Платы расширения
Мост PCI - ISA
Платы расширения
Платы расширения
Host BusСистемная шина
PCIЛокальная шина
ISAЛокальная шина
Плата ATX:
CPU
Слоты ISAСлоты PCI
Память
дисководыПитание
1. через шину ISA.2. через Centronics.3. через RS-232 C.
ISA Centronics RS-232 CСкорость обмена До 2 Мб (высокая) До 100 Кб (средняя) До 5 Кб (низкая)Длина и тип связи Встроенные УС (линии
связи отсутствуют)До 2 метров
(многожильный кабель)
До 15 метров (двухпроводный кабель)
Внешний источник питания
Нет Нужен Нужен
Формат и разрядность данных
Параллельный, 8 и 16 разрядный
Параллельный,8 разрядный
Последовательный,
Количество устройств сопряжений
3 – 6 1 1
Сигналы шины ISA.
SA0 … SA15 – линии адреса (для обращения к устройствам ввода – вывода).SD0 … SD15 – разряды данных.Два режима работы УВВ:
1. 16 – разрядный обмен.2. 8 – разрядный обмен.
I/O CS16 – выбор цикла обмена:= 1, то 8 - разрядный обмен (по умолчанию).= 0, то 16 - разрядный обмен.
- строб чтения. - строб записи.
SYSCLK – системный сигнал (меандр с fclк = 8 МГц) – задает темп обмена с внешними устройствами.I/O CH RDY – готовность канала = 1, тогда УВВ успевает за процессом обмена; =0, тогда цикл обмена задерживается на Т=1/fclк.Tздмах ≤ 15 мкс.Нет задержки – это синхронный обмен.
208
RESET DRY – сброс драйвера – сигнал начальной установки внешних устройств (при включении питания или при сбое в питании).
AEN – разрешение адреса, используется в режиме прямого доступа к памяти, = 1 – все платы расширения отключены от системной шины.
Питание устройств расширения:Напряжение Ток, А
+5В До 4,5-5В До 1,5
+12В До 1,5-12В До 1,5
Мощность источника 200 Вт.Напряжение Допустимый ток нагрузки, А
+5В 7…20-5В 0…0,3
+12В 2,5…7,5-12В 0…0,3
Чтобы что-то присоединить к шине, надо:Нагрузка
Устройство, котороедает сигнал на
шину.Сн ≤ 20 пФ
Длинна проводника < 65 мм.
Цикл чтения:
1. Интерфейсная часть УС.
209
RESETDRV
>1 mc
T
Адрес УВВ
>91нс >176 нс >13 нс
<110 нс <62 нс
<32 нс
SYSCLK
SA0 – SA15
SD0 – SD15
Задержка строба не менее 91 нс.
Длительность строба 176 нс.
Задержка между фронтом строба и появлением данных не более 110 нс.
2. Операционная часть УС.
Интерфейсная часть УС.
Функции:1. буферизирование всех сигналов шины.2. селекция адреса.
К580ВА86 – двунаправленный шинный формирователь.КР1533АП6 – двунаправленный шинный формирователь.Iвых0 ≤ 32 мА.Iвых1 ≤ 5 мА.
КР580ИР82 – однонаправленный регистр.КР1533ИР33 – однонаправленный регистр.
КР1533АП6 – двунаправленный шинный формирователь.
210
RG
DD1
D001234567
DI01234567C
OE
KP1533ИР33
BA0
BA0
+5 BSA7
SA0
RG
DD2
D001234567
DI01234567C
OE
BA8
BA0+5 B
SA8
BA9BAENBIORBIOWB RESET DRVB SYS CLK
SA9AEN
IORIOWRESET DRV
SYS CLK
BF B01234567
A01234567
EAB
OE
BD0
BD0
BIORSA7
SA0
SEL
Еав = 1 – направление передачи А В.Еав = 0 – направление передачи В А.
= 1 – выходы в Z состоянии.SA0 – SA9 – адреса, которые надо декодировать.300Н – 31FH – адреса для плат расширения.300Н – 307Н – адреса, которые будет иметь устройство сопряжения.
А9 А8 А7 А6 А5 А4 А3 А2 А1 А01 1 0 0 0 0 0 0 0 0
Декодирует дешифратор
1 1 0 0 0 0 0 1 1 1Декодируется лог. элементами.
АЕN – разрешение адреса.АЕN = 1 – прямой доступ к памяти, поэтому нужно чтобы АЕN = 0.
Набор лампочек и кнопочек:КР580ВВ55А – адаптер.
А1 А6 Адрес0 0 Порт РА 300Н0 1 Порт РВ 301Н1 0 Порт РС 302Н1 1 РУС 303Н
211
A012
&
DC 01234567
КР1533ИД7
HSEL300HSEL301
HSEL307
Адреса портов
“1”
BA0BA1BA2
SEL
На буфер ШД
&
К1533ЛА2
111111
BA9BA8
BA7BA6BA5BA4BA3AEN
D0127
A0A1CSRDWR
RESET
PIO PAO127
PB0127
11
1
&
&
&
BD0BD1BD2
BD7BA0BA1
BRESET DRV
SA1
SA8
+5B
R1 R8 4,7k
VD1
VD7
R9
R16
РА – на ввод.РВ – на вывод.РС – на вывод.
УС: 10010000 = 90Н
Если разомкнут – не горит, если замкнут – горит.
/*svet.cpp*/# include <stdio.h># include <dos.h># include <conio.h># define PA 0x300# define PB 0x301# define RUS 0x303# define CW 0x90main ( )unsigned char input;outportb (RUS, CW); //Инициализация ППАwhile (!kbhit( ))input = inportb (PA); //Ввод переключателя SAoutportb (PB,~input);return 0;
K1113ПВ1 – 10-разрядный АЦП.В/ - вход запуска.
212
SVET
Ввод SA
Вывод на VD
Инициализация адаптера
Клавиша нажата
Выход
Да Нет
2мкс
В/AI
AGDG
Л/# D0019
DR
В/
RG
DD2
DI01234567C
OE
DO01234567
RG
DD3
DI01234567C
OE
DO01234567
BD0BD1BD2BD3BD4BD5BD6BD7
BD0BD1BD2BD3BD4BD5BD6BD7
Л/#
DD1
B/
AI
DO0123456789
DR
1
1“1”
“1”
“1”
BIOR“1”
BIOR
Uвх
ABR
G1 QC
R/C
K555AГ31
+5B4.7k
1500
9.1k
Адрес порта запуска .DD2 – порт ввода младшего байта (адрес ).DD3 – порт ввода старшего байта (адрес ).
0…+10,24В напряжение.0…3FFH адреса.0…1024 разряды.
/*adconv.cpp*/# include <stdio.h># include <dos.h># include <conio.h># define START 0x304 //адрес порта запуска# define ADRL 0x305 //адрес порта младшего байта кода# define ADRH 0x306 // адрес порта старшего байта кодаmain ( )while (!kbhit ( ))
213
ADC
Ввод Мл.Б. кода
Ввод Ст.Б. кода
Преобразование данных
Клавиша нажата
Выход
Да Нет
Вывод на дисплей
Запуск АЦП
Данные готовы
Да
Нет
unsigned code_ADC = 0; //код на выходе АЦПunsigned char code_L;unsigned char code_H;float U; //напряжение на входе.Outportb (START, 0);While (((code_H = inportb (ADRH))&0x80)!=0);Code_L = inportb (ADRL); //ввод младшего байтаCode_Н = inportb (ADRH); //ввод старшего байтаCode_ADC = (code_H&0x03)<<8 + code_L;U = (float) code_ADC*10.24/1024;Printf (“Код АЦП = % х, Напряжение = %4.2f \n”, code_ADC, U);return 0;
Подключение устройств к порту принтера.
Centronics – интерфейс.ИРПР-М – русский аналог.Сигналы управления:D0 – D7 – данные.
- сигнал стробирования данных.BUSY – занятость принтера.
- готовность принтера.
Сигналы: - автоподача (посылает компьютер), переводится строка.
РЕ – конец бумаги.SLCT – готовность принтера.
- могут передаваться данные (подает компьютер). - сброс принтера.
Для подключения принтера используется стандартный разъем:
Контакт разъема ПК. Цепь I/O1 02 D0 03 D1 0
214
D0 – D7
BUSY
>2500
>500>500 >500
1 13
14 25
DB25P
9 D8 010 I11 BUSY I12 PE I13 SLCT I14 015 ERROR I16 017 0
18…25 GND -
Сигналы – ТТЛ уровня.Нагрузочная способность ≤ 2 мА.Длинна кабеля ≤ 2 метра.
Порты: LPT1 – 378НLPT2 LPT3Каждый характеризуется базовым адресом.Базовый адрес +1 – это регистр состояния (порт ввода).Базовый адрес +2 – регистр управления (порт вывода).Достоинства Centronics:
1. не нужно вскрывать компьютер и подключатся к шине.2. высокая скорость передачи (100 кбайт/сек).
Недостатки:1. сигналов управления мало (ограничена сложность ВУ).2. небольшая длина соединительного кабеля.3. отсутствует источник питания.
Регистр данных (BASE) D7 D6 D5 D4 D3 D2 D1 D0Порт вывода
Регистр состояния (BASE+1)
BUSY ACKNLG PE SLCT ERROR - - -
Порт вводаИнверсный, остальные прямые.
Регистр управления (BASE+2)
- - - - SLCT IN
INIT AUTO FD
STROBE
Прямой, остальные инверсные.
Набор лампочек и кнопок: 8 светодиодов и 8 переключателей.
215
DI017CR
RG Д00123…7
1
1
К155ЛН3
+5 В
330
330
KP1533ИР25
STROBEINIT
- на выходе регистра шум и VD погаснут (INIT = 0 – гашение VD0).С = 1 – разрешается запись данных в регистр (STROBE = 1 – запись разрешена).С = 0 – защелкивание (запоминание информации, STROBE =0).При S = 0 – работает верхняя секция, то есть Y=A.S = 1 – Y = B.SLCT IN – переключает секции мультиплексора.
# include <stdio.h># include <dos.h># include <conio.h># define BASE 0x378 # define STROBE 0x01# define INIT 0x04# define SLCT_IN 0x08# define MASK 0x0Fvoid control_drv (unsigned char control)outportb (BASE+2, control^0x0B); //драйвер вывода.//драйвер ввода из регистра состоит:unsigned char status_drv ( )return ((inportb (BASE+1)>>3)^0x10);//функция вывода в регистр светодиодовvoid write_VD (unsigned char data)outportb (BASE, data); //вывод данныхcontrol_drv (STROBE\INIT); //строб С=1control_drv (INIT); //строб С=0//функция чтения состояния переключателяunsigned char read_SA ( )unsigned char data;data = status_drv ( )&MASK;//чтение младшей тетрады SA0…SA3control_drv (SLCT_IN INIT); //выбор SA4…SA7data+=(status_drv&MASK)<<4;return data;
216
A0A1A2A3B0B1B2B3S
OE
MS
Y0Y1Y2Y3
ERRORSLCTPEACKNLG
SLCT IN
+5 B
KP1533KП11
main ( )control_drv (0); //гашение светодиодовcontrol_drv (INIT); //разрешить прием данныхwhile (!kbhit ( ))write_VD (read_sa ( ));return 0;}
INIT AUTO FD STROBE0 0 00 0 1 1 1 1
Подключение устройств сопряжения к компьютеру через последовательный порт.
RS-232C – интерфейс.Если длинна соединенных линий составляет десятки метров, устройство сопряжения должно преобразовывать последовательный код в параллельный и наоборот.
Преобразователь уровней преобразует ТТЛ уровни в уровни кабеля RS-232С.IFC1488 – МС передатчик.КР559ИП19.
217
012&
DC 01234567
KP1533ИД7STROBEAUTO FD
INITSLCT IN
Датчики
Исполнительные устройства
Порты ввода
Порты вывода
Преобразователь кода
Преобразователь уровня
ПК
Системная шина МК МК
КабельRS-232c
&
&
&
&
ТТЛ RS-232C
3
6
8
11
3
459101213
+5 B
DIP141 -12 B14 +12 B7 общий
Микросхема приемник IFC1489 (КР559ИП20).
Преобразователь кода преобразуют:Параллельный в последовательный.Последовательный в параллельный.I8251 (КР580ВВ51А)I8250 (КР1847ВВ2)TL16C450TL16C550Последовательные порты в компьютере:СОМ1 3F8H – 3FFH (адреса) IRQ4 (прерывание)COM2 2F8H – 2FFH (адреса) IRQ3 (прерывание)COM3 3E8H – 3EFH (адреса) IRQ10 (прерывание)COM4 2E8H – 2EFH (адреса) IRQ12 (прерывание)
Разъем:
Внутренняя структура портов:УАПП: i8250, TL16C450.
218
&
&
&
&
ТТЛRS-232C
3
6
8
11
12451091312
DIP14
14 +5 B7 общий
входы g позволяют изменять гистерезис (можно оставлять свободными)
g1
g2
g3
g4
1 13
14 25
DB25P
1 5
6 9
DB9P
УАПП
Адресный селектор
Генератор 1,8432 МГц
Приемник
Разъем
передатчик RSTTЛTTЛRS
CS
ШД
ША
Прерывание
В состав УАПП входят 8 регистров, но используются только 6 адресов.Каждый порт имеет базовый адрес (BASE):COM1: BASE=3F8HCOM2:BASE=2F8HРегистры по адресу BASE – два регистра:Их выбирают с помощью специального управляющего бита, который записывается в седьмой разряд RG адреса BASE+3:
1. при нулевом значении этого бита по адресу BASE расположен регистр для записи передаваемого байта и чтения принимающего.
2. если управляющий бит =1, то по адресу BASE будет RG для записи младшего байта делителя частоты тактового генератора.
НЕХ - код частоты Скорость передачи, бит/с НЕХ - код
Скорость
0410 110 0018 48000300 150 000С 96000180 300 0006 1920000С0 600 0003 384000060 1200 0002 578000030 2400 0001 115200
Регистры по адресу BASE+1 (тоже 2 регистра с одинаковым адресом). Управляющий бит – седьмой разряд RG по адресу BASE+3.
1. при нулевом значении этого бита по адресу BASE+1 находится регистр управления прерываниями.
2. при единичном значении регистр старший разряд кода делителя частоты.Регистры по адресу BASE+2 (идентификации прерываний, содержимое указывает на причину прерывания).
Регистр по адресу BASE+3 (регистр управления УАПП).Номер бита Назначение
0,1 Количество бит передаваемых данных:00 – 5 бит01 – 7 бит10 – 6 бит11 – 8 бит
2 Количество стоповых битов:0 – 1 бит1 – 2 бита
3,4 Контроль паритета:0Х – контроля нет10 – контроль на нечет11 – контроль на четность
5 Задание контрольного бита:1 – контрольный бит = 0 (нечетный паритет)1 – контрольный бит = 1 (четный паритет)
219
Микросхема сама вычисляет паритет.6 1 – постоянная передача
0 – нормальная передача символов.7 Управляющий бит для выбора назначения регистров BASE и
BASE+1
Регистр по адресу BASE+4 (для управления модемом).Номер бита Назначение
0 Состояние линии DTR1 Состояние линии RTS
2,3 Состояние выходов УАПП(OUT1 и OUT2)4 Режим работы УАПП:
0 – рабочий1 – диагностический
5,6,7 Не используется
Регистр по адресу BASE+5 (регистр состояния (статуса) УАПП) позволяет контролировать ошибки при приеме.
Бит Назначение0 1 – данные получены и готовы для чтения1 1 – ошибка переполнения при приеме2 1 – ошибка паритета при приеме3 1 – ошибка формата (не приняты стоповые
сигналы)4 1 – обнаружен запрос на прерывание передачи5 1 – буферный регистр передатчика пуст6 1 – регистр сдвига передатчика пуст.7 1 – TIME OUT
Регистр по адресу BASE+6 – регистр состояния модема.Бит Назначение0 Линия CTS изменила состояние1 Линия DSR изменила состояние2 Линия RI изменила состояние3 Линия DCD изменила состояние4 Состояние линии CTS5 Состояние линии DSR6 Состояние линии RI7 Состояние линии DCD
Перед использованием УАПП нужно инициализировать:1. записать по адресу BASE+3 управляющий байт с 1 в седьмом бите.2. записать код делителя частоты по адресу BASE и BASE+1.3. записать по адресу BASE+3 управляющий байт с 0 в седьмом бите и требуемыми
значениями остальных битов.4. записать управляющий байт по адресу BASE+1 (если прерывания не используются, то 0).5. записать управляющий байт по адресу BASE+4.
Заголовочный файл (для констант) – serial.h.//Определение адресов регистров int BASE//#define OUT_REG BASE //регистр передачи данных.#define IN_REG BASE //регистр приема данных#define LOW_DIV BASE //адрес регистра младшего байта делителя#define HIGH_DIV BASE+1 //адрес регистра старшего байта делителя
220
#define INT_REG BASE+1 //регистр разрешения прерывания#define INT_ID_REG BASE+2 //регистр идентификации прерывания#define CONTROL BASE+3 //регистр управления#define MODEM BASE+4 //регистр управления модемом#define STATUS BASE+5 //регистр состояния УАПП#define M_STATUS BASE+6 //регистр состояния управляющих сигналов.
// Основные константы# define B_4800 24# define B_9200# defineDEVISOR 0x80 //бит управления доступа к регистрам делителя# define BIT_8 0x03 //длина посылки 8 бит# define STOP_2 0x04 //2 стоповых бита# define NOPARITY 0x00 //нет паритета# define DTR 0x01 //бит управления линией DTR# define RTS 0x02 //бит управления линией RTS# define LOOPBACK 0x10 //бит управления тестовым регистром УАПП# define DATA_IN 0x01 //маска бита «данные приняты»# define DATA_OUT 0x80 //маска «бита готов к передаче»# define OVERRUN 0x02 //маска бита «переполнение»# define FRAME_ERR 0x08 //ошибка формата# define CTS 0x10 //маска бита состояния линии CTS# define DSR 0x20 // маска бита состояния линии DSR
//Прототипы функцийvoid init ( ); //функция инициализации портаvoid out_sym (int symbol); //функция вывода символаint in_sym ( ); //функция ввода символа
Программа тестирования последовательного порта:/*test.cpp*/# include <stdio.h># include <dos.h># include <conio.h># include “serial.h”#define ESC 27main ( )BASE = 0x3F8;Int symbol, symbol2;Init ( ); //инициализация УАППOutportb (MODEM, LOOPBACK); //перевод порта в тестовый режимWhile (1)symbol = getch ( );if (symbol = = ESC)return;out_sym (symbol); //вывод в портsymbol2 = in_sym ( ); //ввод из портаprintf (“Передано: %х, принято: %х \n”, symbol, symbol2);return 0;
void init ( )
221
outportb (CONTROL, DIVISOR);outportb (LOW_DIV, B_9200);outportb (HIGH_DIV, B_9600>>8);outportb (CONTROL, BIT_8 NOPARITY STOP_2);outportb (INT_REG,0); //запрет прерывания
void out_sum (int symbol)while (inportb (STATUS) & DATA_IN) = = 0);outportb (out_REG, symbol);
int in_sym ( )int sym;while (inportb (STATUS) & DATA_IN) = = 0); //ожидание готовности к приемуif (intportb ((STATUS) & (FRAME_ERR OVERRUN))!=0);printf (“Ошибка приема \n”);return;sym = inportb (IN_REG);return sym;
1. Прием и передача без квитирования:
2. С квитированием:а) с программным квитированием XON/XOFF.
Если приемник готов к вводу данных, он передает XON=11h, получив этот код передатчик передает 1 байт. Когда приемник не готов принять данные – он выдает XOFF = 13h и передатчик перестает передачу данных.Недостаток – низкая скорость передачи
б) с аппаратным квитированием:
222
2
3
5
2
3
5
ПК МК
ТхD
RxD
SG
ТхD
RxD
SG
Трудно избежать ошибок, по этому не применяется
2
3
5
2
3
5
ПК МК
ТхD
RxD
SG
ТхD
RxD
SG
2
3
5
2
3
5
ПК МК
ТхD
RxD
SG
RTS
CTS
DTR
DSR
2
3
2
3
2
3
2
3
ТхD
RxD
SG
RTS
CTS
DTR
DSR
1. RTS и CTS2. DTR и DSR3. RTS и CTS; DTR и DSR
Интерфейсная шина I2C.
3 вида устройств:1. Интеллектуальный узел – осуществляет управление; микроконтроллеры; однокристальные
ЭВМ.2. Блоки общего назначения (дисплей, порты ввода – вывода, устройства памяти, АЦП, ЦАП).3. Специализированные устройства, характерные для отдельных приложений: блоки
настройки, коммутации.
Phillips разработала простую двухпроводную, двунаправленную шину для межсхемного соединения: intel IC (IIC, I2C). С её помощью можно строить все устройства и реализовать все их функции.Используются только две линии:SDA – линия данных (последовательная передача)SCL – линия синхронизации.
Стандартная скорость – до 100 кбит/с.Быстрый режим – до 400 кбит/с.Суммарная емкостная нагрузка не должна превышать 400 пФ.Существует множество микросхем, которые имеют встроенный интерфейс: КМОП, n-МОП, ТТЛ, ЭСЛ.Достоинство: I) для конструкторов:1) Блоки на функциональной схеме реализуются отдельными МС.2) Нет необходимости разрабатывать интерфейс (схема присоединения к шине).3) Одни и теже микросхемы могут использоваться в различных приложениях.4) Отдельные микросхемы легко могут быть добавлены или убраны, не влияя на систему.5) Упращается отладка и настройка системы для изготовителя.
II) для изготовителя:1) Для соединения микросхемы требуется всего 2 линии, следовательно упрощается разводка и
следовательно уменьшается стоимость и габариты плат.2) Возможность наличия на линии нескольких ведущих.
Общие концепции шины I2C: применяется в системе с восьмиразрядным микропроцессором.Для связи кроме самих линий нужен протокол обмена, чтобы не было потери данных.Две группы устройств:
223
1) Типа Master (хозяин, ведущий).2) Типа Slave (раб, ведомый).
В качестве ведущего используется микроконтроллер.Возможно несколько ведущих на шине.Ведущий генерирует импульсы синхронизации.Устройства:1) Передатчик.2) Приемник.
Каждое устройство имеет свой уникальный адрес. Ведущий перед началом работы выдает на шину адрес ведомого. Ведущий задает направление передачи. Ведомое устройство, обнаружив свой адрес, посылает сигнал подтверждения и выполняет указанную функцию.Все устройства присоединяются к шине, присоединяются по методу «монтажного ИЛИ»: выходы устройств должны иметь выходы с открытым стоком (коллектором).
Все устройства подключаются параллельно к линии.Rр – подтягивающие резисторы.Uип = 3 …15 В. (чаще всего 5 В).Пересылка каждого бита сопровождается синхроимпульсом по линии SCL.Действительность данных:
Состояние (условие) START и STOP – это состояние шины, вырабатывает выдущий.
224
START
STOP
SDA
SCL
SDA
SCL
В начале передачи по интерфейсу, после чего интерфейс занят
При окончании передачи по интерфейсу, после него интерфейс свободен
SDA
SCLДанные не изменены (действительны) при высоком уровне
При низком уровне данные изменяются (недействительны)
SCL-1IN
ВходSCL-1OUT
Выход
DATA-1IN
ВходDATA-1
OUT
Устройство 1
SCLSDA
+Uип
Rр Rр
Может быть ещё и другие устройства(устройство 2 и др)
Формат передаваемого байта: число передаваемых байт не ограничено; данные передаются со старшего разряда.
Девятый импульс:ведомый должен выдать сигнал подтверждения. АСК: проверяется сохранность данных.Для прекращения передачи ведомый выставляет на линию синхронизации низкий уровень и ведущий прекращает передачю данных.Адресация устройств на шине, можно использовать два формата:
1. семибитный (27=128)2. десытибитный.
Передача адреса всегда следует за условием START.
START A6 A5 A4 A3 A2 A1 A0 R/ : 7 - битный адрес Бит направления
Байт (передает ведущий)
R/ =1, чтение (ведомый – передатчик)R/ =0, запись (ведомый – приемник).
Десятибитный:
START 1 1 1 1 0 A9 A8 R/ A7 A6 A5 A4 A3 A2 A1 A0
Из 7 разрядов выделяется две части:1. фиксированное.2. программируемая.
Фиксированная часть устанавливается в комиссии по шине I2C (это 4 разряда). Программная часть может менять пользователь (обычно перемычками).
225
STOPSTART
SDA
SCL1 2 8 9 1 2 8 9
ACK ведомый не принимает(передает) данные
ACK