ордена ОктябрьскойРеволюции и
ордена ТрудовогоКрасного Знамени
институт Сталии Сплавов
кафедра электротехники
Курсоваяработа
“Микропроцессорнаятехника. Микроконтроллерв двухпозиционномрегуляторе”
Выполнилстудент: ДенисовА.В.
подпись:
Группа: МПП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
МикросхемыПЗУ иностранногопроизводства
Контроллерввода-выводаи системныйтаймер подключенык младшим 8 адреснымлиниям (0-7), таккак пространствоввода-выводадля процессорасерии 580 допускаетобращениетолько к 256 устройствам.
Программноеобеспечение:
Контроллеруправляетсяпрограммно.Среднее времявыполнениякоманды микропроцессоромсоставляетмаксимальнооколо 10 тактов(на самых сложныхучастках), чтопри частотетактирующихимпульсов 2 МГцдаёт около200000 операций всекунду. Причастоте опросавнешних устройств1000 Гц длина основногоцикла программыможет составлятьдо 200 команд. Такоебыстродействие,а также объёмпамяти 2048 байтпозволяютстроить программус модульнойархитектурой,что значительнооблегчает еёотладку исопровождение.
Для компиляциипрограммыприменён BorlandTurboAssemblerv4.0,команды подмножестваIntel8085 обрабатываютсяпри помощиподключаемогофайла макроопределенийMACROS80.ASM.Подобный подходпозволяетполучать исполняемыефайлы 8085 на машинахкласса IBMPC,наиболее доступныхв настоящеевремя.
В данномисполненииконтроллерможет поддерживатьтемпературу[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 | ||
RAM4 | 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 схемаконтроллераэлектрическаяпринципиальная
INCLUDEMACROS80.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_BINDECCODEEQU 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_PORTEQU IO_A_PORT
HEATER_ON EQU 1
HEATER_OFF EQU 0
;======================================================================
;----------------------------------------------------------------------
;ОСНОВНАЯ ПРОГРАММА
;----------------------------------------------------------------------
;См. входныепараметрыподпрограмм
ORGRAM_BASE ; Эта программанаходится вОЗУ
mvi a,IO_MODE ; Инициализацияконтроллераввода-вывода
out IO_MODE_PORT
xra a ; Очисткааккумулятора
callRestart_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 ; Уменьшатьтемпературу
callreg
;=== Работа на участке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 ; температурапостоянна
callreg
;=== Работа на участке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 ; Уменьшатьтемпературу
callreg
;=== Отключениенагревателя
callOff_Heater
;=== Завершениепрограммы
hlt
;----------------------------------------------------------------------
;Подпрограммыдля работы снагревателем
;----------------------------------------------------------------------
;
;On_Heater и Off_Heater: включитьи выключитьнагревательсоответственно
;ВХОД: НЕТ
;ВЫХОД: НЕТ
;РЕГИСТРЫ: НЕИЗМЕНЯЕТ
;ФЛАГИ: НЕ ИЗМЕНЯЕТ
On_Heater:
pushb
mov b,a
mvi a,HEATER_MODE_PORT
out HEATER_ON
mov a,b
pop b
ret
Off_Heater:
pushb
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:
pushb
mov b,a
in HEATER_STATE_PORT
cmp b
jnc Temperature_Is_Normal
callOn_Heater
jmp Exit_Heater_Control
Temperature_Is_Normal:
callOff_Heater
Exit_Heater_Control:
mov a,b
pop b
ret
;----------------------------------------------------------------------
;Подпрограммыдля работы стаймерами
;----------------------------------------------------------------------
;
;Restart_Timer - запуск таймерана отсчёт N отрезков.
;ВХОД: a - номертаймера
; b,c - число отрезковдля отсчётадля таймеров1 или 2
;ВЫХОД: НЕТ
;РЕГИСТРЫ: НЕИЗМЕНЯЕТ
;ФЛАГИ: НЕ ИЗМЕНЯЕТ
Restart_Timer:
pushpsw
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
pushb
pushpsw
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:
pushb ; Сохранитьвсе основныерегистры
pushd
pushh
pushpsw
pushpsw ; Запуститьтаймер 2 на счётвремени
mvi a,2 ; регистрыb,c уже установлены,см. ВХОД
callRestart_Timer
pop psw
pushd ; Регистровуюпару (d,e) поместитьв (b,c)
pop b
mov d,a ; Store temperature in d
T_Changed:
mvi a,1 ; Таймер1...
callRestart_Timer ; ... запуститьна подсчётвремени доновой уставки
Reg_Next:
mov a,d ; Восстановимуставку T
callHeater_Control ; Подрегулируемтемпературу
callCheck_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