Смекни!
smekni.com

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

осковский

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

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

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


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


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


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


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

подпись:

Группа: МПП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 байтпозволяютстроить программус модульнойархитектурой,что значительнооблегчает еёотладку исопровождение.

Для компиляциипрограммыприменён 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