Автор: Пользователь скрыл имя, 09 Апреля 2012 в 21:31, курсовая работа
Целью данной курсовой работы является проектирование тиристорного нереверсивного широтно-импульсного преобразователя на базе микропроцессорного комплекта K1810 с техническими параметрами, указанными в задании.
Введение 4
1 Разработка функциональной схемы 5
1.1 Описание принципа работы преобразователя. Выбор элементов силовой части 5
1.2 Описание функциональной схемы системы управления 6
2 Разработка аппаратной части 8
2.1 Краткое описание МП комплекта 8
2.2 Описание структурной схемы системы управления 13
2.3 Выбор элементов памяти 14
2.4 Расчет и выбор элементов сопряжения 14
2.5 Описание схемы электрической принципиальной 18
3 Разработка программного обеспечения 20
3.1 Краткое описание системы команд микропроцессора 20
3.2 Описание алгоритма работы устройства 22
3.3 Текст программы 24
Заключение 26
Список литературы 27
Команды пересылок передают данные с одного устройства в другое. При написании команды в мнемокодах языка ассемблера в команды пересылок сначала ставится приемник, а затем источник данных. Например, по команде MOV АX, ВX содержимое регистра ВX перепишется в регистр АX. После выполнения команды в регистрах ВX и АX будет один и тот же код. Вообще команда MOV обеспечивает пересылки регистр– регистр/память и память–регистр при использовании любого способа адресации памяти.
Команда XCNG осуществляет обмен данными между источником и получателем.
Команды LEA, LDS, LES отличаются от других команд пересылки тем, что при их выполнении в адресуемый регистр (регистры) передаются не собственно данные из памяти, а их адреса.
Команды арифметических операций выполняются над целыми числами 4-х типов: знаковыми, беззнаковыми, упакованными и неупакованными десятичными. Числа могут быть: беззнаковые (0…255 или 0…65535) или знаковые: (-128…127 или –32,768…32,767).
Команда NEG изменяет знак числа.
Команды умножения MUL (IMUL– для знаковых чисел) выполняют умножение адресуемого операнда (общего регистра или ячейку памяти) и содержимого аккумулятора ac. При работе с байтами функции аккумулятора выполняет регистр AL, а функции его расширения– регистр AH, так что 16-ти битовое произведение формируется в регистре АХ. Если перемножаются слова, то множимое содержится в регистре АХ, а функцию его расширения несет на себе регистр DX, следовательно, результат находится в регистрах DX, AX.
Команды деления DIV (IDIV– для знаковых чисел) производят деление содержимого аккумулятора и его расширения (AH:AL для 8-ми битового и DX:AX для 16-ти битового делимого) на содержимое регистра или ячейки памяти. Частное– в регистре AL или AX, а остаток в регистре AH или DX. Дробное число округляется до целого путем отбрасывания дробной части результата.
Так
же есть команды сложения, вычитания,
инкрементирования и
Логические команды AND («И»), OR («ИЛИ»), NOT («НЕ»), XOR («Исключающее ИЛИ)», TEST(«неразрушающая проверка, которая выполняет конъюнкцию «И» операндов без изменения их значения, но влияя на флаги»).
Команды передачи управления используются в разветвляющихся и циклических программах, а так же при вызове подпрограмм и возврате из них. К ним относятся:
В целом система команд сделана совместимой с системой команд КР580 ВМ80 однако в К1810 ВМ86 система команд гораздо более мощная и имеет гораздо больший потенциал.
Способы адресации
Команды ЦП ВМ86 реализуют весьма разнообразные способы адресации, что упрощает организацию и использование сложных структур данных, а также расширяет возможности отдельных команд и повышает гибкость их применения.
Регистровая адресация. Операнд находится в одном из общих регистров МП или в одном из сегментных регистров. Регистр может быть определен в байте кода операции или в постбайте, в котором выделены 3-битовые поля reg
и r/m (при md=11). Команды, оперирующие содержимым регистров, являются наиболее короткими и выполняются за наименьшее время, так как не требуют вычисления ЕА и выполнения цикла шины для обращения к памяти. Для многих команд с регистровой адресацией предусмотрены специальные укороченные форматы.
Непосредственная адресация. Непосредственными операндами являются константы длиной 8 или 16 бит, которые размещаются в последних байтах команды (младший байт следует первым). Доступ к таким операндам в ВМ86 осуществляется очень быстро, поскольку во время выполнения команды они находятся во внутренней очереди команд. Имеются команды, позволяющие манипулировать непосредственными операндами и содержимым общих регистров или ячеек памяти. Однако отсутствуют команды непосредственной загрузки сегментных регистров и включения константы в стек. Поэтому эти операции осуществляются с помощью промежуточной загрузки общего регистра или ячейки памяти.
Прямая адресация является простейшим способом адресации ячейки ЗУ, при котором эффективным адресом ЕА является содержимое байтов смещения disp команды. В командах преобразования данных этот способ реализуется при использовании постбайта с полями md=00 и r/m=110. Для пересылок между аккумулятором и памятью предусмотрен укороченный формат.
Разновидностью этого способа является длинная прямая адресация, при которой в формате команды содержатся четыре байта, указывающие базовый адрес сегмента и сегментное смещение offset. В этом случае обеспечивается доступ к ячейке с любым логическим адресом, т. е. к произвольной ячейке во всем пространстве адресов 1 Мбайт, недлинная прямая адресация используется только в командах межсегментных переходов и вызовов подпрограмм. Другая разновидность прямой адресации применяется для указания портов ввода — вывода в двухбайтовых командах IN и OUT, второй байт которых содержит адрес (номер) порта.
Косвенная регистровая адресация. В командах преобразования данных эффективный адрес ЕА равен содержимому одного из регистров SI, DI, ВХ и ВР при соответствующем кодировании полей md и reg постбайта: md=00;
r/m=100, 101, 111 и md==01, r/m=110; dispL=0. В командах безусловного перехода и вызова подпрограммы с регистровой косвенной адресацией допускается указание любого 16-битового общего регистра (при md=11; r/m=000,..., 111).
Данный способ адресации позволяет вычислять адреса во время выполнения программ, что часто требуется, например, для обращения к различным элементам таблиц данных. При модификации содержимого регистра одна и та же команда оперирует различными ячейками памяти, что позволяет организовать вычислительные циклы. Изменение содержимого регистра обычно осуществляется с помощью команд инкрементирования и декрементирования, а также других арифметических команд и команды загрузки эффективного адреса LEA. Разновидностью этого способа является косвенная адресация портов ввода — вывода с помощью содержимого регистра DX в однобайтовых командах IN и OUT.
Базовая адресация. Эффективный адрес операнда ЕА вычисляется путем суммирования содержимого базовых регистров ВХ или ВР и смещения disp (при md==01, 10 и r/m = 111, 110). При использовании ВХ происходит обращение к операнду в текущем сегменте данных, а при использовании ВР — в текущем сегменте стека. Смещения, содержащиеся в команде, могут иметь длину 8 или 16 бит и интерпретируются как знаковые целые, представленные в дополнительном коде.
Базовая адресация обычно используется для подступа к элементам структур данных, когда смещение (номер) элемента известно на стадии разработки программы (при ее ассемблировании), а базовый (начальный) адрес структуры должен вычисляться при выполнении программы. Модификация содержимого базового регистра позволяет обратиться к одноименному элементу различных структур данных.
Индексная адресация. Значение ЕА вычисляется как сумма смещения disp, находящегося в команде, и содержимого индексного регистра SI или DI (при md=01, 10 и r/m=100, 101). Данный способ обычно применяется для обращения к различным элементам одномерного массива (таблицы) данных, когда смещение определяет известный при ассемблировании начальный адрес массива, а индексный регистр, содержимое которого может модифицироваться при выполнении программы, определяет элемент массива. По существу индексная адресация в ВМ86 аналогична базовой.
Базовая индексная адресация. Эффективный адрес ЕА равен сумме содержимого базового регистра ВХ или ВР, индексного регистра SI или DI и смещения disp, находящегося в команде (в частном случае смещение может отсутствовать). Этот способ реализуется при следующем кодировании полей постбайта: md≠11; r/m=000, 001, 010, Oil и обеспечивает наибольшую гибкость адресации, так как два компонента адреса можно определить и варьировать при выполнении программы. Это удобно при обращении к элементам матриц, т.е. к двумерным массивам, представляемым в памяти как совокупность одномерных массивов.
Относительная адресация ЦП ВМ86 реализуется только по отношению к указателю команд IP, так что сегментное смещение вычисляется как сумма смещения disp, находящегося в команде, и текущего значения IP. При этом значение IP равно адресу байта, следующего за рассматриваемой командой. которая в это время выполняется микропроцессором. В ВМ86 относительная адресация не используется в командах, оперирующих данными, а применяется только в командах условных и безусловных переходов, вызовов подпрограмм и управления циклами. Смещение по отношению к содержимому IP не зависит от размещения программ в адресном пространстве памяти, что обеспечивает позиционную независимость команд. При автоматизированном ассемблировании программы указывается метка команды, которой передается управление. а необходимое смещение вычисляется программой-ассемблером.
Неявная
адресация. Объект, содержимым которого
манипулирует команда. указывается с помощью
первого байта команды вместе с кодом
операции без выделения специального
поля для этой цели. Чаще всего этот специфический
способ адресации встречается в однобайтовых
командах, где адресуемым объектом являются
аккумулятор, регистр флагов или отдельные
флаги В частности, в командах обработки
цепочек неявно используются индексные
регистры, причем регистр SI адресует первый
элемент цепочки-источника, а регистр
DI — первый элемент цепочки-получателя.
3.2
Описание алгоритма
работы устройства
Поясним некоторые процедуры:
Процедура расчета новых данных для счетчиков.
В данной процедуре происходит расчет чисел, которые будут направлены в счетчики таймера в зависимости от значения переменной U, в которой хранится двоичное число, соответствующее заданному напряжению (0…380 В). При попытке задания напряжения более 280 В (с клавиатуры) напряжение будет оставаться 380 В.
Пусть частота сети 50 Гц. В памяти уже хранится количество тактовых импульсов от ЗГ за полпериода и это число N0=1000. То есть если в счетчики послать число N=1000, то выходное напряжение будет равно 0. Если послать число 0, то напряжение будет равно 380 В.
Вообще число, посылаемое на счетчик можно вычислить по формуле в зависимости от заданного напряжения U по формуле, которая достаточно сложна для вычисления, а напряжение от угла зависит по формуле:
, (3.1)
где – угол открытия тиристоров.
Поэтому очевидно, что простейшим способом расчета количества импульсов задержки N , будет составление таблицы и занесение ее в память заранее, а затем просто брать данные оттуда.
Для
АЦП при аналоговом задающем сигнале
0 В ТРН должен выдавать напряжение 0 В,
а при сигнале 10 В ТРН должен выдавать
напряжение 220 В. Тогда имеем:
; (3.2)
Процедура Ок записывает число с левой половины индикаторов в правую (с учетом диапазона 0…380 В) и устанавливает флаг байта, который содержит информацию о наличии изменения в задании нпряжения.
Процедура Del. Эта процедура позволяет переместиться на один вводимый символ (индикатор) назад (влево). То есть после нажатия какой либо цифровой клавиши, она отображается в одном из левой половины индикаторов (последний не задействован), и нажатая оператором следующая клавиша отобразится в следующем индикаторе (после 7-го, последует 5-ый), а при нажатии клавиши Del следующая нажатая цифровая клавиша отобразится на том же индикаторе, что и предыдущая, а следовательно изменит ее. При двукратном нажатии на кнопку Del следующая цифровая клавиша отобразится на один индикатор левее и т. д (после достижения 5-го индикатора кнопка Bkspc работать не будет, и нажатая после цифровая клавиша будет отображена в 5-ом индикаторе.
Процедура BLOCK.Наличие сигнала «Блокировка» приводит к присваиванию переменной Block_data значения, соответствующего режиму «блокировка». Снятие сигнала «Блокировка» приводит к присваиванию переменной Block_data значения, соответствующего режиму «нет блокировки».