Реферат: Микропроцессорная техника. Микроконтроллер в двухпозиционном регуляторе
осковский
ордена Октябрьской Революции и
ордена Трудового Красного Знамени
институт Стали и Сплавов
кафедра электротехники
Курсовая работа
“Микропроцессорная техника. Микроконтроллер в двухпозиционном регуляторе”
Выполнил студент: Денисов А.В.
подпись:
Группа: МПП97-1В
Задание: разработка структурной и электрической схемы микроконтроллера на базе заданных в варианте
микропроцессорных интегральных схем и его программирование для работы с двухпозиционным
регулятором по заданному закону регулирования.
Данные варианта №4:
Карта памяти: Адрес таймера и интерфейса:
0000-3FFF | СВОБОДНО | 16К | CT | 74h,75h,76h,77h | |
4000-47FF | RAM | 2К | |||
4800-F7FF | СВОБОДНО | 44К | IO | C8h,C9h,CAh,CBh | |
F800-FFFF | ROM | 2К |
ОЗУ 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