- •Основные понятия и определения мпт
- •Основные характеристики и типы мп
- •Общие принципы построения мпс
- •Основные операции, выполняемые в мпс с 3-мя шинами
- •Прямой доступ к памяти
- •Микропроцессор кр580вм80а (вм80)
- •Программная модель портов ввода-вывода
- •Внутренняя структура
- •Программная модель мпс
- •Программная модель памяти
- •Анализ работы мп вм80
- •Машинные такты и циклы
- •Слово состояния процессора
- •Временные диаграммы сигналов мп
- •Режимы работы мп
- •Построение отдельных модулей мпс
- •Основные параметры мс пзу
- •Принцип построения внутренней памяти мпс
- •Построение модуля пзу
- •Построение модуля озу
- •Построение двухстраничного модуля памяти
- •Модуль ввода-вывода
- •Реализация модуля ввода-вывода при раздельном поле адресов памяти и портов
- •Схемотехника модуля ввода-вывода
- •Порт ввода:
- •Построение модуля прерывания.
- •Микропроцессор вм85.
- •Система прерываний мп вм85.
- •Ввод и вывод последовательных данных.
- •Построение модуля центрального процессора мп вм85.
- •Система команд мп.
- •Язык Ассемблера.
- •Псевдокоманды Ассемблера.
- •Методика разработки программного обеспечения.
- •Процедура обработки данных.
- •Виды программного обеспечения ( по ) мпс.
- •Подпрограммы как средства модульного программирования.
- •Иерархическая организация подпрограмм.
- •Применение таблиц.
- •Программирование цифровых вычислительных устройств.
- •Арифмитические операции с целыми числами без знака.
- •Быстрое умножение и деление двоичных чисел.
- •Сложение десятичных чисел
- •Преобразование двоичных чисел в десятичные и наоборот.
- •Операции с целыми двоичными числами со знаком !
- •Дробные числа.
- •Арифметические операции с числами с пз
- •Бис параллельного интерфейса
- •Бис последовательного интерфейса кр580вв51а
- •Внутренняя структура бис кр580вв51а
- •Программирование бис вв51а
- •Формат инструкции асинхронного режима работы
- •Формат инструкции синхронного режима работы
- •Формат инструкции команды
- •Формат слова состояния
- •Бис программируемого таймера кр580ви53 (i8253)
- •Программирование таймера
- •Применение мп в системах управления и контроля
- •Работа мк с дискретными сигналами
- •Борьба с дребезгом контактов
- •Формирование управляющих сигналов
- •Методы управления отдельными линиями порта ввода
- •Формирование временных задержек
- •Управление дискретными нагрузками от мпс
- •Сопряжение ацп с мпс
- •Интерфейс быстрых ацп с мпс
- •Интерфейс с 10-разрядным ацп
- •Интерфейс медленных ацп с мпс
- •Сопряжение цап с мпс
- •Устройство сбора и распределения данных
- •Организация связи мпс с оператором.
- •Управление индикаторами линейного дисплея.
- •Программа управления дисплеем с использованием таймера.
- •Интерфейс дисплея с клавиатурой.
- •Программируемый контроллер кр580вв79 с клавиатурой и дисплеем.
- •Программирование кр580вв79.
- •Слово состояние контроллера.
- •Методы ввода данных с клавиатуры.
- •Общая характеристика языков программирования.
- •Структура простейшей программы на языке Си.
- •Представление информации в языке Си.
- •Типы данных.
- •Переменные.
- •Строковые переменные и константы.
- •Элементарный ввод вывод в Си.
- •Операция и выражения в языке Си.
- •Преобразование типов в выражении.
- •Операции управления вычислительным процессом.
- •Функции языка Си.
- •Библиотечные функции.
- •Функции для работы с портами ввода вывода.
- •Видимость переменных.
- •Классы хранения переменных.
- •Операции присвоения.
- •Условная операция.
- •Операция sizeof (определение размера).
- •Указатели.
- •Массивы и функции
- •Операции со строками
- •Массивы строк.
- •Массивы – указатели.
- •Типы, определяемые пользователем.
- •Операции с файлами.
- •Обмен инф-ции с файлами.
- •Часть 3 Разработать мк для управления насосом напорной башни.
- •Интерфейс мпс.
- •Организация интерфейсов.
- •Структура интерфейса:
- •Организация линий интерфейса.
- •Передача по однонаправленным линиям связи.
- •Передача по двухпроводной линии.
- •Интерфейс ирпр ( bs – 4421 )
- •Пример подключения ппа кр580вв55а.
- •Драйверы обмена оирпр.
- •Последовательный интерфейс.
- •Драйверы для работы интерфейса.
- •Аппаратное квитирование передачи данных.
- •Интерфейс коп (канал общего пользования).
- •Команды интерфейса коп.
- •Транспортная передача данных.
- •Сопряжение устройств управления и контроля с пк.
- •Интерфейсная часть ус.
- •Подключение устройств к порту принтера.
- •Подключение устройств сопряжения к компьютеру через последовательный порт.
- •Интерфейсная шина i2c.
Операции присвоения.
Простое присваивание.
Е1=Е2
Е1 – переменная.
Е2 – выражение любого типа.
Пример: i = 3.
Составные операции присваивания.
Х = х + 3
У = у * 3
Формат |
Применение |
Описание |
+ = |
E1+ =E2 |
Присвоить сумму Е1=Е1 + Е2 |
- = |
E1- =E2 |
Присвоить разницу Е1=Е1 - Е2 |
/ = |
E1/ =E2 |
Присвоить частное Е1=Е1/Е2 |
* = |
E1* =E2 |
Присвоить произведение Е1=Е1 * Е2 |
% = |
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=2
r = sizeof i; //r=2
r = sizeof long double; //r=10
Указатели.
Являются очень сложными.
Объявление переменной, выделяет в памяти ячейки. Можно определить в какую ячейку компилятор займет данные:
Int i;
I = 35;
&i
printf (“Адрес %d \n”, &i);
Указатели – это особый вид переменной которая хранит адрес переменной какого либо типа (то есть номер ячейки памяти, где находятся данные)
Указатели объявляются: тип*имя_указателя.
Тип – тип переменной, на которую указывает указатель.
Пример: 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] = ?;
…..
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 10
main ()
{
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 – это число индексов, использ. Для ссылки на конкретный эл-т массива
I
nt
array [10] [20];
Столбцы Строки
Int array [3] [3] = {00,01,02,
10,11,12,
20,21,22 };
int array [3] [3] = {{ 00,01,02 } { 10,11,12} { 20,21,22 };
