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

Московский

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

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

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

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

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

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

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

подпись:

Группа: МПП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