РефератыИнформатика, программированиеМиМикропроцессорная техника. Микроконтроллер в двухпозиционном регуляторе

Микропроцессорная техника. Микроконтроллер в двухпозиционном регуляторе

осковский



ордена Октябрьской
Революции и



ордена Трудового
Красного Знамени



институт Стали
и Сплавов


кафедра электротехники


Курсовая
работа


“Микропроцессорная
техника. Микроконтроллер
в двухпозиционном
регуляторе”


Выполнил
студент: Денисов
А.В.



подпись:



Группа: МПП97-1В


Задание:
разработка
структурной
и электрической
схемы микроконтроллера
на базе заданных
в варианте



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



регулятором
по заданному
закону регулирования.

Данные
варианта №4:

Карта
памяти: Адрес
таймера и интерфейса:






























0000-3FFF СВОБОДНО 16К CT 74h,75h,76h,77h
4000-47FF RAM
4800-F7FF СВОБОДНО 44К IO C8h,C9h,CAh,CBh
F800-FFFF ROM


ОЗУ
512х8




ПЗУ
1024х8


Закон
регулирования




Краткое
описание
:
контроллер
выполнен на
микропроцессорном
комплекте серии
К580. Микросхемы,
входящие в
состав комплекта,
образуют полный
набор, необходимый
для построения
несложных
программно
управляемых
микроконтроллеров.

Набор
микросхем
:


КР580ВМ80А
- микропроцессор


КР580ВК28
- системный
контроллер


КР580ВВ55А
- программируемый
контроллер
ввода-вывода


КР580ВИ53
- программируемый
таймер


КР580ГФ24
- генератор
тактовых импульсов


К555ИД3
- дешифратор
4 в 16


К555ИД7
- дешифратор
3 в 8


К505РЕ3
– динамическое
ОЗУ 512х8


Микросхемы
ПЗУ иностранного
производства


Микросхемы
ОЗУ и ПЗУ подключены
к шине адреса
ЦПУ согласно
карте памяти,
при этом двоичные
адреса каждой
из
микросхем
показаны в
таблице 1.

Контроллер
ввода-вывода
и системный
таймер подключены
к младшим 8 адресным
линиям (0-7), так
как пространство
ввода-вывода
для процессора
серии 580 допускает
обращение
только к 256 устройствам.


Программное
обеспечение:


Контроллер
управляется
программно.
Среднее время
выполнения
команды микропроцессором
составляет
максимально
около 10 тактов
(на самых сложных
участках), что
при частоте
тактирующих
импульсов 2 МГц
даёт около
200000 операций в
секунду. При
частоте опроса
внешних устройств
1000 Гц длина основного
цикла программы
может составлять
до 200 команд. Такое
быстродействие,
а также объём
памяти 2048 байт
позволяют
строить программу
с модульной
архитектурой,
что значительно
облегчает её
отладку и
сопровождение.



Для компиляции
программы
применён Borland
Turbo
Assembler
v4.0,
команды подмножества
Intel
8085 обрабатываются
при помощи
подключаемого
файла макроопределений
MACROS80.ASM.
Подобный подход
позволяет
получать исполняемые
файлы 8085 на машинах
класса IBM
PC,
наиболее доступных
в настоящее
время.



В данном
исполнении
контроллер
может поддерживать
температуру
[0..255] градусов
Цельсия с точностью
до 1 градуса во
временном
интервале
[1..65,53] секунды при
линейном изменении
или неограниченно,
если температура
постоянна.
Точность измерения
температуры
объекта ограничена
разрядностью
АЦП и сопряжённого
с ним порта A
контроллера
ввода-вывода.


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










































































































































































































































































































































































































































ИМС


АДРЕС
HEX


АДРЕС
BIN, БИТЫ
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
RAM 1

4000


41FF


0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 1 0 0 0 0 0 1 1 1 1 1 1 1 1 1
RAM 2

4200


43FF


0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0
0 1 0 0 0 0 1 1 1 1 1 1 1 1 1 1
RAM 3

4400


45FF


0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0
0 1 0 0 0 1 0 1 1 1 1 1 1 1 1 1
RAM
4


4600


47FF


0 1 0 0 0 1 1 0 0 0 0 0 0 0 0 0
0 1 0 0 0 1 1 1 1 1 1 1 1 1 1 1
УСТРОЙСТВО
НА ШИНЕ
DC1 DC2 RAM
ROM 1

F800


FBFF


1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0
1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1
ROM 2

FCFF


FFFF


1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
УСТРОЙСТВО
НА ШИНЕ
DC4 DC3 ROM
IO

C8


C9


CA


CB


0 0 0 0 0 0 0 0 1 1 0 0 1 0 0 0
0 0 0 0 0 0 0 0 1 1 0 0 1 0 0 1
0 0 0 0 0 0 0 0 1 1 0 0 1 0 1 0
0 0 0 0 0 0 0 0 1 1 0 0 1 0 1 1
УСТРОЙСТВО
НА ШИНЕ
НЕ
ПОДКЛЮЧЕНЫ
DC5 DC6 IO
CT


74



75



76


77


0 0 0 0 0 0 0 0 0 1 1 1 0 1 0 0
0 0 0 0 0 0 0 0 0 1 1 1 0 1 0 1
0 0 0 0 0 0 0 0 0 1 1 1 0 1 1 0
0 0 0 0 0 0 0 0 0 1 1 1 0 1 1 1

У

табл
1 подключение
микросхем к
шине адреса
в адресном
пространстве
CPU


СТРОЙСТВО
НА ШИНЕ


НЕ
ПОДКЛЮЧЕНЫ
DC5 DC6 CT


рис
1 схема
контроллера
электрическая
принципиальная



INCLUDE
MACROS80.ASM


;
======================================================================


;
-------------------------------------------------------------

---------


;
Константы:


;
----------------------------------------------------------------------


;


;
Адреса запуска
программ в ОЗУ
и ПЗУ

CONST:

RAM_BASE
EQU 04000h ; Адрес
запуска
в ОЗУ


ROM_BASE
EQU 0F800h ; Адрес запуска
в ПЗУ


IO_BASE
EQU 0C8h ; Адрес
програмируемого
интерфейса


CT_BASE
EQU 074h ; Адрес
таймера

;
----------------------------------------------------------------------


;
Программируемый
интерфейс IO


;
----------------------------------------------------------------------


;
Режимы работы
программируемого
интерфейса
- биты байта
состояния

IOSB_SETMODE
EQU 10000000b ; IO STATUS BITS


IOSB_SETCBITS
EQU 00000000b


IOSB_AMODE0
EQU 00000000b


IOSB_AMODE1
EQU 00100000b


IOSB_AMODE2
EQU 01000000b


IOSB_A70IN
EQU 00010000b


IOSB_A70OUT
EQU 00000000b


IOSB_C74IN
EQU 00001000b


IOSB_C74OUT
EQU 00000000b


IOSB_BMODE0
EQU 00000000b


IOSB_BMODE1
EQU 00000100b


IOSB_B70IN
EQU 00000010b


IOSB_B70OUT
EQU 00000000b


IOSB_C30IN
EQU 00000001b


IOSB_C30OUT
EQU 00000000b

;
Адреса портов
программируемого
интерфейса
(IO)

IO_MODE_PORT
EQU IO_BASE+03h ; Порт программирования
IO


IO_C_PORT
EQU IO_BASE+02h ; Порт
C


IO_B_PORT
EQU IO_BASE+01h ; Порт
B


IO_A_PORT
EQU IO_BASE+00h ; Порт
A

;
Константы для
работы с IO

IO_MODE
= IOSB_SETMODE+IOSB_AMODE0+IOSB_A70IN+IOSB_C74IN+IOSB_BMODE0


IO_MODE
= IO_MODE+IOSB_B70OUT+IOSB_C30OUT


;
----------------------------------------------------------------------


;
Таймер CT:


;
----------------------------------------------------------------------


;
Режимы работы
таймеров - биты
байта состояния

CTSB_TIMER0
EQU 00000000b ; CT STATUS BITS


CTSB_TIMER1
EQU 01000000b


CTSB_TIMER2
EQU 10000000b


CTSB_STOP
EQU 00000000b


CTSB_LOWBYTE
EQU 00010000b


CTSB_HIGHBYTE
EQU 00100000b


CTSB_TWOBYTES
EQU 00110000b


CTSB_MODE0
EQU 00000000b


CTSB_MODE1
EQU 00000010b


CTSB_MODE2
EQU 00000100b


CTSB_MODE3
EQU 00000110b


CTSB_MODE4
EQU 00001000b


CTSB_MODE5
EQU 00001010b


CTSB_BINCODE
EQU 00000000b


CTSB_BINDECCODE
EQU 00000001b

;
Адреса портов
таймера (CT)

CT_MODE_PORT
EQU CT_BASE+03h ; Порт
программирования
CT


CT_TIMER2_PORT
EQU CT_BASE+02h ; Таймер
2


CT_TIMER1_PORT
EQU CT_BASE+01h ; Таймер
1


CT_TIMER0_PORT
EQU CT_BASE+00h ; Таймер
0

;
Константы для
работы с таймерами

TIMER_MODE_PORT
EQU CT_MODE_PORT


TIMER_STATE_PORT
EQU IO_C_PORT


TIMER0_FREQUENCY
EQU 1000 ; Задание
основного
тактирования
по T0, Гц


TIMER0_DELAY
EQU 2000000 / TIMER0_FREQUENCY

TIMER0_MODE
= CTSB_TIMER0+CTSB_TWOBYTES+CTSB_MODE2+CTSB_BINDECCODE


TIMER1_MODE
= CTSB_TIMER1+CTSB_TWOBYTES+CTSB_MODE0+CTSB_BINCODE


TIMER2_MODE
= CTSB_TIMER2+CTSB_TWOBYTES+CTSB_MODE0+CTSB_BINCODE

;
----------------------------------------------------------------------


;
Прочие константы


;
----------------------------------------------------------------------


;
Константы для
работы с нагревателем

HEATER_MODE_PORT
EQU IO_C_PORT


HEATER_STATE_PORT
EQU IO_A_PORT


HEATER_ON
EQU 1


HEATER_OFF
EQU 0


;
======================================================================


;
----------------------------------------------------------------------


;
ОСНОВНАЯ ПРОГРАММА


;
----------------------------------------------------------------------


;
См. входные
параметры
подпрограмм

ORG
RAM_BASE ; Эта программа
находится в
ОЗУ

mvi
a,IO_MODE ; Инициализация
контроллера
ввода-вывода


out
IO_MODE_PORT

xra
a ; Очистка
аккумулятора


call
Restart_Timer ; Запуск
таймера
0

;
=== Работа на участке
1 (dT=-50C, dt=5сек)


mvi
a,200 ; Начальная
температура


mvi
b,TIMER0_FREQUENCY * 5 SHR 4 ; Время
регулировки
5 секунд


mvi
c,TIMER0_FREQUENCY * 5 AND 0FFh


mvi
d,TIMER0_FREQUENCY * 5 / 50 SHR 4 ; Время
изменения
T


mvi
e,TIMER0_FREQUENCY * 5 / 50 AND 0FFh ; на
1 градус


mvi
h,-1 ; Уменьшать
температуру


call
reg

;
=== Работа на участке
2 (dT=0, dt=5сек)


mvi
a,150 ; Начальная
температура


mvi
b,TIMER0_FREQUENCY * 5 SHR 4 ; Время
регулировки
5 секунд


mvi
c,TIMER0_FREQUENCY * 5 AND 0FFh


mvi
d,0FFh ; Время
изменения
температуры


mvi
e,0FFh ; велико
(T = const)


mvi
h,0 ; температура
постоянна


call
reg

;
=== Работа на участке
3 (dT=-100C, dt=2сек)


mvi
a,150 ; Начальная
температура


mvi
b,TIMER0_FREQUENCY * 2 SHR 4 ; Время
регулировки
2 секунды


mvi
c,TIMER0_FREQUENCY * 2 AND 0FFh


mvi
d,TIMER0_FREQUENCY * 2 / 100 SHR 4 ; Время
изменения
температуры


mvi
e,TIMER0_FREQUENCY * 2 / 100 AND 0FFh ; на
1 градус


mvi
h,-1 ; Уменьшать
температуру


call
reg

;
=== Отключение
нагревателя


call
Off_Heater

;
=== Завершение
программы


hlt


;
----------------------------------------------------------------------


;
Подпрограммы
для работы с
нагревателем


;
----------------------------------------------------------------------


;


;
On_Heater и Off_Heater: включить
и выключить
нагреватель
соответственно


;
ВХОД: НЕТ


;
ВЫХОД: НЕТ


;
РЕГИСТРЫ: НЕ
ИЗМЕНЯЕТ


;
ФЛАГИ: НЕ ИЗМЕНЯЕТ

On_Heater:


push
b


mov
b,a


mvi
a,HEATER_MODE_PORT


out
HEATER_ON


mov
a,b


pop
b


ret

Off_Heater:


push
b


mov
b,a


mvi
a,HEATER_MODE_PORT


out
HEATER_OFF


mov
a,b


pop
b


ret

;


;
Heater_Control: подпрограмма
поддержки
заданной температуры.
Если


;
температура
больше или
равна заданной,
выключает
нагреватель,


;
иначе включает.


;
ВХОД: a - заданная
температура


;
ВЫХОД: если
нагреватель
включен CF=1, иначе
CF=0


;
РЕГИСТРЫ: НЕ
ИЗМЕНЯЕТ


;
ФЛАГИ: CF

Heater_Control:


push
b


mov
b,a


in
HEATER_STATE_PORT


cmp
b


jnc
Temperature_Is_Normal


call
On_Heater


jmp
Exit_Heater_Control


Temperature_Is_Normal:


call
Off_Heater


Exit_Heater_Control:


mov
a,b


pop
b


ret


;
----------------------------------------------------------------------


;
Подпрограммы
для работы с
таймерами


;
----------------------------------------------------------------------


;


;
Restart_Timer - запуск таймера
на отсчёт N отрезков.


;
ВХОД: a - номер
таймера


;
b,c - число отрезков
для отсчёта
для таймеров
1 или 2


;
ВЫХОД: НЕТ


;
РЕГИСТРЫ: НЕ
ИЗМЕНЯЕТ


;
ФЛАГИ: НЕ ИЗМЕНЯЕТ

Restart_Timer:


push
psw


jnz
IsTimer1


mvi
a,TIMER0_MODE
; Инициализация
таймера 0


out
TIMER_MODE_PORT


mvi
a,TIMER0_DELAY AND 0FFh ; Ввод младнего
байта величины
задержки


out
CT_TIMER0_PORT


mvi
a,TIMER0_DELAY SHR 4 ; Ввод
старшего
байта


out
CT_TIMER0_PORT


jmp
Exit_Restart_Timer


IsTimer1:


dcr
a


jnz
IsTimer2


mvi
a,TIMER1_MODE


out
TIMER_MODE_PORT


mov
a,c


out
CT_TIMER1_PORT


mov
a,b


out
CT_TIMER1_PORT


jmp
Exit_Restart_Timer


IsTimer2:


dcr
a


jnz
Exit_Restart_Timer


mvi
a,TIMER2_MODE


out
TIMER_MODE_PORT


mov
a,c


out
CT_TIMER2_PORT


mov
a,b


out
CT_TIMER2_PORT


Exit_Restart_Timer:


pop
psw


ret


; Check_Timers -
проверить, не
было ли срабатывания
таймера


;
ВХОД: НЕТ


;
ВЫХОД: если
сработал таймер
1, установит
бит 1 аккумулятора,


;
если таймер
2 - бит 2 (т.е. 1 - таймер
1, 2 - таймер 2)


;
кроме того,
если таймер
сработал, установит
флаг CF


;
РЕГИСТРЫ: a


;
ФЛАГИ: CF

Check_Timers:


stc


push
b


push
psw


in
TIMER_STATE_PORT


ani
11000000b


jnz
TimeOut


pop
psw


pop
b


cmc


ret


TimeOut:


rlc
; Rotate bits to positions 0 and 1


rlc


mov
b,a


pop
psw


mov
a,b


pop
b


ret


;
----------------------------------------------------------------------


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


;
----------------------------------------------------------------------


;


;
Reg: регулирование
температуры


;
ВХОД: a - начальная
температура


;
b,c - тактов таймера
0 до окончания
регулирования


;
d,e - тактов таймера
0 до изменения
уставки по T


;
h - направление
изменения T -
+1, -1 или 0


;
ВЫХОД: НЕТ


;
РЕГИСТРЫ: НЕ
ИЗМЕНЯЕТ


;
ФЛАГИ: НЕ ИЗМЕНЯЕТ

Reg:


push
b ; Сохранить
все основные
регистры


push
d


push
h


push
psw

push
psw ; Запустить
таймер 2 на счёт
времени


mvi
a,2 ; регистры
b,c уже установлены,
см. ВХОД


call
Restart_Timer


pop
psw

push
d ; Регистровую
пару (d,e) поместить
в (b,c)


pop
b


mov
d,a ; Store temperature in d

T_Changed:


mvi
a,1 ; Таймер
1...


call
Restart_Timer ; ... запустить
на подсчёт
времени до
новой уставки

Reg_Next:


mov
a,d ; Восстановим
уставку T


call
Heater_Control ; Подрегулируем
температуру


call
Check_Timers ; Проверим,
не сработал
ли таймер


jnc
Reg_Next


cpi
1


jnc
Exit_Reg ; Если сработал
таймер 2 (ВРЕМЯ)
- на выход


mov
a,d


add
h ; Иначе изменим
уставку по
температуре,


mov
d,a ; сохраним
её


jmp
T_Changed ; и перезапустим
подсчёт времени
уставки

Exit_Reg:


pop
psw ; restore general registers


pop
h


pop
d


pop
b


ret

ENDALL

Сохранить в соц. сетях:
Обсуждение:
comments powered by Disqus

Название реферата: Микропроцессорная техника. Микроконтроллер в двухпозиционном регуляторе

Слов:4124
Символов:28724
Размер:56.10 Кб.