Курсовой проект по курсу “Микропроцессорные системы” на тему: «Проектирование мпу управления бытовой хлебопечкой»




НазваниеКурсовой проект по курсу “Микропроцессорные системы” на тему: «Проектирование мпу управления бытовой хлебопечкой»
Дата публикации17.10.2016
Размер9.76 Kb.
ТипКурсовой проект


КУРСОВОЙ ПРОЕКТ

по курсу “Микропроцессорные системы”

на тему: «Проектирование МПУ управления бытовой хлебопечкой»

Выполнил: _________________




Научный руководитель: _________________



  1. Задание

Спроектировать Микропроцессорное устройство (МПУ) управления бытовой хлебопечкой, используя элементную базу процессора Z80 фирмы Zilog, написать соответствующее программное обеспечение для обеспечения правильной работы хлебопечки.

Описание работы бытовой хлебопечки:

  1. После включения устройства устанавливается текущее время при помощи цифровых кнопок “+”/”–“.

  2. После закладки ингредиентов осуществляется программирование:

    • нажать клавишу “Enter” и после того как загорится красный светодиод, ввести время брожения теста клавишами “+”/”–“, ввод выбранной цифры подтверждается клавишей “Enter”

    • ввести время, к которому должна быть готова выпечка

    • запустить устройство в работу нажатием клавиши “Enter”

      1. Работа устройства:

    • сразу после запуска устройство замешивает тесто в течение 10 минут. Запуск мотора о сигналы с МПУ.

    • устройство находится в состоянии ожидания до тех пор, пока это необходимо для готовности хлеба к определенному времени. После этого оно включается в режим выпечки. Время выпечки фиксировано: 4часа.

    • в течении всего времени брожения теста поддерживается заданная (как константа) температура в устройстве: в устройстве имеется цифровой датчик температуры, который выдает ее значение в двоичной форме. Если температура опускается ниже заданной на 2%, включается подогреватель, когда повышается выше заданной на 2% подогреватель выключается.

    • в течении времени выпечки поддерживается другая постоянная температура, допустимое отклонение 5 %

    • на цифровом дисплее постоянно отображается время, оставшееся до готовности хлеба.

    • контейнер с хлебом вращается в течение 1 минуты каждые 10 минут брожения теста, и каждые 15 минут выпечки.

  1. После окончания выпечки звучит звуковой сигнал из динамика устройства в течении 1 минуты, частотой 1 кГц.


  1. Анализ входный и выходных сигналов управления хлебопечкой

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

Входные синалы:

  • Пуск двигателя(мешание) ( 1bit: 1=”Старт”, 0=”Стоп”)

  • Пуск подогревателя(1bit: 1=”Включить”, 0=”Выключить”)

  • Красный светодиод(1bit: 1=”Зажечь”,0=”Погасить”)

  • 4 LCD цифры(4x4bit: цифра(двоичная) для отображения)

  • Динамик (1bit: 1=”Включить” , 0=”Выключить”)

Выходные сигналы:

  • Датчик температуры (8bit: двоичное значение температуры)

  • 3 клавиши “+”,”–“,”Enter” (3x1bit: 1=“Нажата”, 0=”Отпущена”)

  • Состояние двигателя (1 bit: 1=”Работает”, 0=”Не работает”)

  • Состояние подогревателя (1 bit: 1=”Работает”, 0=”Не работает”)

  • Cостояние диода (1 bit: 1=”Горит”, 0=”Не горит”)

  • Состояние динамика (1bit: 1=”Включен”, 0=”Выключен”)


Входные и выходные сигналы хлебопечки подключаются к соответствующим портам ввода/вывода МПУ как будет показано в дальнейшем.


  1. А

    Включение


    Сброс системы в исходное состояние, инициализация устройств

    Установка текущего времени и запуск таймера

    Ввод значений текущего поля клавишами +/- подтверждение клавишей Enter

    Закладка ингредиентов

    Пользователь закладывает ингредиенты, ждем нажатия Enter
    ^

    Зажечь диод


    Ввод времени брожения теста

    Ввод времени готовности выпечки

    Проверить корректность :

    Tтекущее+Tброжения+Tвыпечки<=Tготовности

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








Нет


Нажали Enter?


Да





Нет



Да



Ожидание запуска



Нажали Enter?

Да

Нет



Замешивание теста в течении 10минут

Режим выпечки


Брожение теста. Поддержка заданной температуры. Замешивание теста в течении 1минуты каждые 10 минут.

Ожидание времени: Tготовности-Tвыпечки

Ничего не делаем

Выпечка теста. Поддержка заданной температуры. Замешивание теста в течении 1минуты каждые 15 минут.


Подача звукового сигнала длительностью 1мин, частотой 1кГц

Завершение работы

Отключение всех устройств

Информирование пользователя



  1. Проектирование базового состава МПУ. Формирование ША, ШД, ШУ

Для формирования тактовых импульсов используется микросхема КР580ГФ24. Для формирования шины управления(управляющих сигналов RD, WR, RDIO, WRIO, INTA) и шины данных используется системный контроллер - микросхема КР580ВК28. Для формирования шины адреса используются 2 восьмиразрядных шинных формирователя с повышенной нагрузочной способностью КР580ВА86.

Сигналы Z80 Ucc2 подключаются к +12B, Uio к –5B. Сигнал TANK КР580ГФ24 к колебательному контуру. Сигналы Ucc и Gnd всех микросхем к +5В и “земле” соответственно.

Вход INT Z80 будет подключен к OUT0 – каналу 0 таймера.

Выход INTA системного контроллера подключен через резистор в 100кОм к +12В, что обеспечить при приходе прерывания выдачу на шину данных код команды RST7, т.е. единственный вектор прерываний с номером 7.

Схема подключения базового состава МПУ приведена ниже.



  1. ^ Организация памяти. Распределение входных/выходных сигналов хлебопечки по портам ввода/вывода МПУ


Для организации памяти будет использоваться схема с неполной дешифрацией, порты и таймер будут подключены без использования дополнительного дешифратора к дешифратору памяти, и для работы с ними будут использоваться обычные команды работы с памятью.

Для программного обеспечения вполне достаточно 2Кб ПЗУ – микросхема КР556РТ5, для хранения некоторых данных, необходимых во время работы используем ОЗУ, объемом 2Кб – микросхема КР132РУ6.

Для подключения входных/выходных сигналов хлебопечки, а также сигналов управления таймером воспользуемся 2 микросхемами КР580ВВ55А, которые обеспечивают по 3 восьмиразрядных порта ввода/вывода, сигнал сброса SR подключим к аналогичному сигналу SR генератора импульсов для установки микросхем в режим 0(обычный ввод/вывод).

О ^

ПЗУ

ОЗУ


Порты A1,B1,C1

Порты A2,B2,C2

Таймер


0000h-07FFh

0800h-0FFFh

1000h-17FFh

1800h-1FFFh

2000h-27FFh
рганизация памяти:


Распределение сигналов по портам ввода/вывода:
Микросхема1:

  • ВА7-ВА0 – Датчик температуры

  • ВС7-ВС4 – LCD цифра 1(старшая)

  • BC3-BC0 – LCD цифра 2

  • BB7 – “+”

  • BB6 – “-“

  • BB6 – “Enter”

  • BB4-BB0 – не используются

Микросхема2:

  • BA7 – Пуск двигателя

  • ВА6 – Пуск подогревателя

  • ВA5 – Зажигание диода

  • ВА4 – Включение динамика

  • ВА3 – ClockEnable2 (от таймера)

  • BA2 –CE1 (от таймера)

  • BA1 – CE0 (от таймера)

  • BA0 – не используется

  • ВС7-ВС4 – LCD цифра 3

  • ВС3-ВС0 – LCD цифра 4

  • BB7 – состояние двигателя

  • BB6 – состояние подогревателя

  • BB5 – состояние диода

  • BB4 – состояние динамика

  • BB3-BB0 – не используется


Микросхемы памяти подключаются к ШД через шинные формирователи КР580ВА86 для обеспечения большей нагрузочной способности.

Для выбора микросхем используется дешифратор на 3 входа: A11,A12,A13, активиуемый по сигналам RD,WR.

На входы Ucc и Gnd всех микросхем поданы +5В и “Земля ” соответственно.

Схема подключения портов и памяти приведена ниже.



  1. ^ Подключение таймера

Для реализации работы в реальном режиме времени необходимо подключить таймер. Для используем микросхему КР580ВИ3, обеспечивающую таймер с 3 независимыми каналами. Выход канала 0 – OUT0 подключим к входу INT микропроцессора, для возбуждения прерывания по таймеру(обработчик прерывания будет находится по адресу 0007h – см.формирование сигнала INTA у системного контроллера). Выход канала 2 – OUT2 – подключим к динамику для формирования звукового сигнала. Выход канала 1 – OUT1 – не используется.

Входы CE2,CE1,CE0 – подадим на порты ввода/выводы (см.Распределение сигналов) для возможности включения/выключения счетчиков.

На входы C0,C1,C2 – подается сигнал C с генератора импульсов.

На входы Ucc и Gnd - +5В и “земля” соответственно.

Для выбора микросхемы на CS подается соответствующий сигнал с дешифратора памяти, таким образом программирование таймера осуществляется через ячейки памяти по адресам: 2000h,2001h,2002h,2003h.

Схема подключения таймера приведена ниже.



  1. ^ Разработка программного обеспечения

Для корректной работы хлебопечки необходимо программное обеспечение связующее и корректирующее работу всех устройств по алгоритму, рассмотренному ранее.

Для обеспечения отсчета времени в реальном режиме используется процедура обработки прерывания от таймера(расположенная по адресу 0007h), которая вызывается 18.2раза в секунду и по истечении 1 минуты (1092 вызова) выполняет уменьшение текущего времени на минуту, и выполнение заданий, если таковые к этому времени имеются.

Для работы со временем и выводом его на экран используются числа в LCD формате: 4 байта, каждый от 0 до 10, тогда операции сложения и вычитания этих чисел аналогичны операциям сложения и вычитания в столбик.

Для абстрагирования от конкретных параметров аппаратуры используется набор предопределенных констант.
^ Исходный текст:

; адреса ячеек памяти управления внешними утсройствами

DEVICES_OUT_PORT equ 1800h

DEVICES_IN_PORT equ 1801h

TIMER_CONTROL equ 2003h

TIMER_CHANNEL0 equ 2000h

TIMER_CHANNEL1 equ 2001h

TIMER_CHANNEL2 equ 2002h

KEYS_PORT equ 1001h

LCD_PORT_HIGH equ 1003h

LCD_PORT_LOW equ 1803h

TEMPRETURE_PORT equ 1000h

; маски для выделения соответствующего устройству разрядa

ENGINE_MASK equ 80h

TERMO_MASK equ 40h

DIOD_MASK equ 20h

DYNAMIC_MASK equ 10h

CE2_MASK equ 08h

CE1_MASK equ 04h

CE0_MASK equ 02h

; кол-во заданий по таймеру

MAX_TASKS equ 03h

; коды клавиш

VK_PLUS equ 00h

VK_MINUS equ 01h

VK_ENTER equ 02h

; константы отклонений темературы от заданной на этапах брожения(60С) и ;выпечки(70С)

Br_HIGH_TEMPR equ 62

Br_LOW_TEMPR equ 58

Ck_HIGH_TEMPR equ 72

Ck_LOW_TEMPR equ 68

; кол-во циклов нажатой клавиши, для избежания дребезга

KEY_CYCLES equ 5

; некоторые переменные времени выполнения

org 0800h

; LCD числа: 4 байта, от 0 до 10 в каждом

CUR_TIME db 0,0,0,0

LAST_TIME $

BR_TIME db 0,0,0,0

LAST_BR $

READY_TIME db 0,0,0,0

LAST_READY $

ONE_MIN db 0,0,0,1

TEN_MIN db 0,0,1,0

FIFTEEN_MIN db 0,0,1,5

; кол-во оставшихся прерываний для минуты

MIN_COUNTDOWN dw 1092

; таблица заданий

TASK_TABLE db(6*3) dup(FF)

; счетчики для избежания дребезга

KEYS_COUNT db 0,0,0

; флаги остановки режимов брожения, ожидания, выпечки

STOP_BR db 0

STOP_WAIT db 0

STOP_COOK db 0
org 0000h

jp Init ; перепрыгиваем через обработку прерывания

LCD_LIMITS db 2,9,6,9 ; ограничения на ввод времени

org 0007h

;сюда попадает управление по прерыванию от таймера 18.2 раза в секунду

RST7 push af ; сохраняем все регистры

push hl

push de

push bc

push ix

push iy

ld hl,MIN_COUNTDOWN ; уменьшаем считчик прерываний

ld a,(hl)

dec a

jr nz, EXIT_RST7 ; если прошла минута

call incTime ; увечиваем текущее время

call performeTasks ; выполняем задания по таймеру

ld a,1092 ; новый счетчик прерываний

ld hl,MIN_COUNTDOWN

EXIT_RST7 ld (hl),a

pop iy

pop ix

pop bc

pop de

pop hl

pop af

ret
incTime

; уменьшаем текущее время на 1минуту

ld ix, CUR_TIME+4 ; начинаем с младшей цифры

ld iy,LCD_LIMITS+4

call incLCD ; увеличиваем LCD цифру

ld a,(ix)

cp a,(iy) ; если не переноса в старший разряд ret nz ; то возврат

dec ix

dec iy

call incLCD ; увеличиваем LCD цифру

ld a,(ix)

cp a,(iy) ; если не переноса в старший разряд ret nz ; то возврат

dec ix

dec iy

call incLCD ; увеличиваем LCD цифру

ld a,(ix)

cp a,(iy) ; если не переноса в старший разряд ret nz ; то возврат

dec ix

dec iy

call incLCD ; уменьшаем LCD цифру

ret

performeTasks

; Проходим таблицу заданий и выполняем если настало время задания

; Формат таблицы: 4 байта – LCD время начала, 2 байта – адрес процедуры обработки

ld c,MAX_TASKS

ld ix,TASK_TABLE

@continue push ix

push bc

ld a,(ix)

cp a,FFh ; FFh – признак того что нет задания

jr z @done

ld iy,CUR_TIME

call cmpLCD ; сравниваем тек.время и время начала задания

jnz @done

add ix,4 ; адрес процедуры обработки

ld a,(ix)

ld l,a

ld a,(ix+1)

ld h,a

call (hl) ; выполняем задание

@done pop bc

pop ix

add ix,6 ; следующая запись в таблице

djnz @continue ; цикл по c

ret
Init

; отсюда начинается выполнение всего алгоритма работы хлебопечки

call offEngine ; выключаем все приборы

call offTermo

call offDynamic

call offCE2

call off CE0

call onDiod ; включаем диод

call setupCurTime ; устанавливаем с клавиатуры тек.время

ld a,FFh ; очищаем таблицу заданий

ld hl,TASK_TABLE

ld de,TASK_TABLE+1

ld (hl),a

ld BC,6*3

ldir

ld hl,MIN_COUNTDOWN

ld a,1092

ld (hl),a

ld a,00l110110b ;включаем канал 0, режим 3

ld hl,TIMER_CONTROL

ld (hl),a

ld a,FFh ;счетчик=FFFFh

ld hl,TIMER_CHANNEL0

ld (hl),a

ld (hl),a

call onCE0 ; включаем канал 0 таймера

call offDiod

call waitEnter ; ждем нажатия Enter

call onDiod

call setupBtTime ;устанавливаем время брожения

@setup call setupReadyTime ; устанавливаем время готовности

call validateTine ; проверяем корректность установок

jc @setup

call offDiod

call waitEnter

; устанавливаем обработчик вывода оставшегося времени на LCD экран
ld ix,ONE_MIN ; устанавливаем значение = 1минута

xor a

ld (ix),a

ld (ix+1),a

ld (ix+2),a

inc a

ld (ix+3),a

ld iy,CUR_TIME

call addLCD

ld iy,TASK_TABLE+12

ld a,(ix)

ld (iy),a

ld a,(ix+1)

ld (iy+1),a

ld a,(ix+2)

ld (iy+2),a

ld a,(ix+3)

ld (iy+#),a

ld hl,showRemaining ; адрес обработчика

ld a,l

ld (iy+4),a

ld a,h

ld (iy+5),a

call startBr ; начинаем брожение

call waitForReady ; ждем пустой промежуток времени

call startCooking ; начинаем выпечку

call offEngine

call offTermo

call onDynamic ; информируем пользователя

rst 0 ; сбрасываем систему в исходное состояние
onDiod

; включает диод

ld hl,DEVICES_IN_PORT

ld a,(hl)

or DIOD_MASK ; не изменяем состояние других устройств

ld hl,DEVICES_OUT_PORT

ld (hl),a

ret

offDiod

; выключает диод

ld hl,DEVICES_IN_PORT

ld b,(hl)

ld a,DIOD_MASK

xor FFh ; инвертируем

and b ; не изменяем состояние других устройств

ld hl,DEVICES_OUT_PORT

ld (hl),a

ret

onEngine

ld hl,DEVICES_IN_PORT

ld a,(hl)

or ENGINE_MASK ; не изменяем состояние других устройств

ld hl,DEVICES_OUT_PORT

ld (hl),a

ret

offEngine

ld hl,DEVICES_IN_PORT

ld b,(hl)

ld a,ENGINE_MASK

xor FFh ; инвертируем

and b ; не изменяем состояние других устройств

ld hl,DEVICES_OUT_PORT

ld (hl),a

ret

onTermo

ld hl,DEVICES_IN_PORT

ld a,(hl)

or TERMO_MASK ; не изменяем состояние других устройств

ld hl,DEVICES_OUT_PORT

ld (hl),a

ret

offTermo

ld hl,DEVICES_IN_PORT

ld b,(hl)

ld a,TERMO_MASK

xor FFh ; инвертируем

and b ; не изменяем состояние других устройств

ld hl,DEVICES_OUT_PORT

ld (hl),a

ret

onCE0

; канал 0 таймера

ld hl,DEVICES_IN_PORT

ld a,(hl)

or CE0_MASK ; не изменяем состояние других устройств

ld hl,DEVICES_OUT_PORT

ld (hl),a

ret

offCE0

ld hl,DEVICES_IN_PORT

ld b,(hl)

ld a,CE0_MASK

xor FFh ; инвертируем

and b ; не изменяем состояние других устройств

ld hl,DEVICES_OUT_PORT

ld (hl),a

ret

onCE2

; второй канал таймера

ld hl,DEVICES_IN_PORT

ld a,(hl)

or CE2_MASK ; не изменяем состояние других устройств

ld hl,DEVICES_OUT_PORT

ld (hl),a

ret

offCE2

ld hl,DEVICES_IN_PORT

ld b,(hl)

ld a,CE2_MASK

xor FFh ; инвертируем

and b ; не изменяем состояние других устройств

ld hl,DEVICES_OUT_PORT

ld (hl),a

ret
onDynamic

ld a,10110110 ; канал2, режим3

ld hl,TIMER_CONTROL

ld (hl),a

ld hl,TIMER_CHANNEL2

ld a,A9h ;1кГЦ

lf (hl),a

ld a,04h

ld (hl),a

call onCE2

ld hl,DEVICES_IN_PORT

ld a,(hl)

or DYNAMIC_MASK ; не изменяем состояние других устройств

ld hl,DEVICES_OUT_PORT

ld (hl),a

ret

offDynamic

call offCE2

ld hl,DEVICES_IN_PORT

ld b,(hl)

ld a,DYNAMIC_MASK

xor FFh ; инвертируем

and b ; не изменяем состояние других устройств

ld hl,DEVICES_OUT_PORT

ld (hl),a

ret
waitEnter call waitKey

cp a,VK_ENTER

jnz waitEnter

ret
waitKey

;ждет нажатия на одну из клавиш, избегая дребезга, возвращает в A код клавиши

ld ix,KEYS_COUNT

ld a,KEY_CYCLES ; кол-во циклов для избежания дребезга

ld (ix),a

ld (ix+1),a

ld (ix+2),a

@continue ld hl,KEYS_PORT

ld a,(hl)

sla a ; старший разряд в флаг C

jr c,PlusPressed

sla a

jr c,MinusPressed

sla a

jr c,EnterPressed

jr waitKey ; все сначала, если ничего не нажато

PlusPressed dec (ix) ; уменьшаем счетчик

jr nz, continue

ld a,VK_PLUS ; нажата “+”

ret

MinusPressed dec (ix+1) ; уменьшаем счетчик

jr nz, continue

ld a,VK_MINUS ; нажата “-”

ret

EnterPressed dec (ix+2) ; уменьшаем счетчик

jr nz, continue

ld a,VK_ENTER ; нажата “Enter”

ret
incLCD

; увеличивает на 1 LCD число в (IX), ограничения заданы в (IY)

ld a,(ix)

inc a

cp a,(IY) ;сравниваем с ограничение

jr c,@less

xor a

@less ld (ix),a

ret

decLCD

; увеличивает на 1 LCD число в (IX), ограничения заданы в (IY)

ld a,(ix)

dec a

jr p,@more ; <0?

ld a,(iy)

@more ld (ix),a

ret
cmpLCD

; сравниваем 4 байтные LCD числа в (ix) и (iy)

ld a,(ix)

cp a,(iy)

ret nz

ld a,(ix+1)

cp a,(iy+1)

ret nz

ld a,(ix+2)

cp a,(iy+2)

ret nz

ld a,(ix+3)

cp a,(iy+3)

ret
addLCD

; складывает два 4 байтных LCD числа (ix)=(ix)+(iy)

ld a,(ix+3) ; начинам с младших разрядов

add a,(iy+3)

cp a,10 ; переполнение?

jr c,@next ; нет, возврат

sub a,10 ; остаток

@next ld (ix+3),a

ld a,(ix+2)

adc a,(iy+2)

cp a,10 ; переполнение?

jr c,@next2 ; нет, возврат

sub a,10 ; остаток

@next2 ld (ix+2),a

ld a,(ix+1)

adc a,(iy+1)

cp a,10 ; переполнение?

jr c,@next3 ; нет, возврат

sub a,10 ; остаток

@next3 ld (ix+1),a

ld a,(ix)

adc a,(iy)

cp a,10 ; переполнение?

jr c,@next4 ; нет, возврат

sub a,10 ; остаток

@next4 ld (ix),a

ret
subLCD

; вычитаем их (ix) (iy)

addLCD

; складывает два 4 байтных LCD числа (ix)=(ix)+(iy)

ld a,(ix+3) ; начинам с младших разрядов

sub a,(iy+3)

jr m,@next ; >0

add a,10 ; остаток

@next ld (ix+3),a

ld a,(ix+2)

sbc a,(iy+2)

jr m,@next2 ; >0

add a,10 ; остаток

@next2 ld (ix+2),a

ld a,(ix+1)

sbc a,(iy+1)

jr m,@next3 ; >0

add a,10 ; остаток

@next3 ld (ix+1),a

ld a,(ix)

sbc a,(iy)

jr m,@next4 ; >0

add a,10 ; остаток

@next4 ld (ix),a

ret

showLCD

; выводит значения LCD цифр в (ix) на LCD экран

ld hl,LCD_PORT_HIGH

ld a,(ix) ; упаковываем 2x4bit чисел в 1 байт

sla

sla

sla

sla

ld b,a

ld a,(ix+1)

or b

ld (hl),a

ld hl,LCD_PORT_LOW

ld a,(ix+2) ; упаковываем 2x4bit чисел в 1 байт

sla

sla

sla

sla

ld b,a

ld a,(ix+3)

or b

ld (hl),a

ret
setupCurTime

; вводим с клавиатуры текущее время

ld ix,CUR_TIME

xor a

ld (ix),a

ld (ix+1),a

ld (ix+2),a

ld (ix+3),a

@continue push ix

ld ix,CUR_TIME

call showLCD ; выводим текущее время на экран

call waitKey

pop ix

cp a,VK_PLUS ; нажат +?

jr nz,@next ; нет – дальше

call incLCD

jr continue

@next cp a,VK_MINUS

jr nz,@next2

call decLCD

jr continue

@next2 cp a,VK_ENTER

jt nz, continue

inc ix ; следующая цифра

cp ix,LAST_TIME ; все цифры?

jr nz,continue

ret
setupBrTime

; вводим с клавиатуры время брожения

ld ix,BR_TIME

xor a

ld (ix),a

ld (ix+1),a

ld (ix+2),a

ld (ix+3),a

@continue push ix

ld ix,BR_TIME

call showLCD ; выводим текущее время на экран

call waitKey

pop ix

cp a,VK_PLUS ; нажат +?

jr nz,@next ; нет – дальше

call incLCD

jr continue

@next cp a,VK_MINUS

jr nz,@next2

call decLCD

jr continue

@next2 cp a,VK_ENTER

jt nz, continue

inc ix ; следующая цифра

cp ix,LAST_BR ; все цифры?

jr nz,continue

ret

setupReadyTime

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

ld ix,READY_TIME

xor a

ld (ix),a

ld (ix+1),a

ld (ix+2),a

ld (ix+3),a

@continue push ix

ld ix,READY_TIME

call showLCD ; выводим текущее время на экран

call waitKey

pop ix

cp a,VK_PLUS ; нажат +?

jr nz,@next ; нет – дальше

call incLCD

jr continue

@next cp a,VK_MINUS

jr nz,@next2

call bc decLCD

jr continue

@next2 cp a,VK_ENTER

jt nz, continue

inc ix ; следующая цифра

cp ix,LAST_READY ; все цифры?

jr nz,continue

ret


validateTime

; проверяем выполнение неравенства Cur_Time+Br_Time+Cooky_Time>=Ready_Time

ld ix,CUR_TIME

ld a,(ix) ; переводим все в минуты

mul 10 ; BC=1*10-

ld a,(ix+1)

add c,a

adc b,0

mul bc,60

add hl,bc

ld a,(ix+2) ; переводим все в минуты

mul 10 ; BC=1*10-

ld a,(ix+3)

add c,a

adc b,0

mul bc,60

add hl,bc

ld ix,BR_TIME

ld a,(ix) ; переводим все в минуты

mul 10 ; BC=1*10-

ld a,(ix+1)

add c,a

adc b,0

mul bc,60

ld hl,bc

ld a,(ix+2) ; переводим все в минуты

mul 10 ; BC=1*10-

ld a,(ix+3)

add c,a

adc b,0

mul bc,60

add hl,bc

ld ix,COOKY_TIME

ld a,(ix) ; переводим все в минуты

mul 10 ; BC=1*10-

ld a,(ix+1)

add c,a

adc b,0

mul bc,60

add hl,bc

ld a,(ix+2) ; переводим все в минуты

mul 10 ; BC=1*10-

ld a,(ix+3)

add c,a

adc b,0

mul bc,60

add hl,bc

; теперь в HL сумма 3 слагаемых в минутах

ex de,hl

ld ix,READY_TIME

ld a,(ix) ; переводим все в минуты

mul 10 ; BC=1*10-

ld a,(ix+1)

add c,a

adc b,0

mul bc,60

ld hl,bc

ld a,(ix+2) ; переводим все в минуты

mul 10 ; BC=1*10-

ld a,(ix+3)

add c,a

adc b,0

mul bc,60

add hl,bc

cp hl,de ; сравниваем

ret ; возврат с установленными флагами

startBr

; режим брожения

ld hl,STOP_BR ; флаг окочания брожения

xor a

ld (hl),a

ld iy,CUR_TIME

ld ix,BR_TIME

call addLCDD ; ix=время окончания брожения

ld ix,BR_TIME ; устанавливаем задание

ld iy,TASK_TABLE

ld a,(ix)

ld (iy),a

ld a,(ix+1)

ld (iy+1),a

ld a,(ix+2)

ld (iy+2),a

ld a,(ix+3)

ld (iy+#),a

ld hl,stopBr ; адрес обработчика

ld a,l

ld (iy+4),a

ld a,h

ld (iy+5),a
ld iy,CUR_TIME

ld ix,TEN_MIN

call addLCDD ; ix=время окончания замешивания

ld ix,TEN_MIN ; устанавливаем задание

ld iy,TASK_TABLE+6

ld a,(ix)

ld (iy),a

ld a,(ix+1)

ld (iy+1),a

ld a,(ix+2)

ld (iy+2),a

ld a,(ix+3)

ld (iy+#),a

ld hl,rotateOffBr ; адрес обработчика

ld a,l

ld (iy+4),a

ld a,h

ld (iy+5),a

call onEngine ; замешиваем на 10 минут

@main ld hl,STOP_BR ; закончили брожение?

ld a,(hl)

and a

ret nz

ld hl,TEMPRETURE_PORT ; проверяем температуру на ;отклонения от нормы

ld a,(hl)

cp a,Br_HIGH_TEMPR

jr c, @next

push af

call offTermo

pop af

@next cp a,Br_LOW_TEMPR

jr nc main

call onTermo

jr main ; цикл
stopBr

; сбрасываем флаг продолжения брожения

ld hl,STOP_BR

ld a,1

ld (hl),a

ret

rotateOffBr

; выключаем замешивание и переустанавливаем задание

call offEngine

ld ix,TEN_MIN ; устанавливаем значение = 10минут

xor a

ld (ix),a

ld (ix+1),a

ld (ix+3),a

inc a

ld (ix+2),a

ld iy,CUR_TIME

call addLCD

ld iy,TASK_TABLE+6

ld a,(ix)

ld (iy),a

ld a,(ix+1)

ld (iy+1),a

ld a,(ix+2)

ld (iy+2),a

ld a,(ix+3)

ld (iy+#),a

ld hl,rotateOnBr ; адрес обработчика

ld a,l

ld (iy+4),a

ld a,h

ld (iy+5),a

ret

rotateOnBr

; включаем замешивание и переустанавливаем задание

call onEngine

ld ix,TEN_MIN ; устанавливаем значение = 1минута

xor a

ld (ix),a

ld (ix+1),a

ld (ix+2),a

inc a

ld (ix+3),a

ld iy,CUR_TIME

call addLCD

ld iy,TASK_TABLE+6

ld a,(ix)

ld (iy),a

ld a,(ix+1)

ld (iy+1),a

ld a,(ix+2)

ld (iy+2),a

ld a,(ix+3)

ld (iy+#),a

ld hl,rotateOffBr ; адрес обработчика

ld a,l

ld (iy+4),a

ld a,h

ld (iy+5),a

ret
startCooking

; режим выпечки

ld hl,STOP_COOK ; флаг окочания брожения

xor a

ld (hl),a

ld iy,CUR_TIME

ld ix,COOKY_TIME

call addLCDD ; ix=время окончания выпечки

ld ix,COOKY_TIME ; устанавливаем задание

ld iy,TASK_TABLE

ld a,(ix)

ld (iy),a

ld a,(ix+1)

ld (iy+1),a

ld a,(ix+2)

ld (iy+2),a

ld a,(ix+3)

ld (iy+#),a

ld hl,stopCk ; адрес обработчика

ld a,l

ld (iy+4),a

ld a,h

ld (iy+5),a
ld iy,CUR_TIME

ld ix,FIFTEEN_MIN

call addLCDD ; ix=время окончания замешивания

ld ix,FIFTEEN_MIN ; устанавливаем задание

ld iy,TASK_TABLE+6

ld a,(ix)

ld (iy),a

ld a,(ix+1)

ld (iy+1),a

ld a,(ix+2)

ld (iy+2),a

ld a,(ix+3)

ld (iy+#),a

ld hl,rotateOnCk ; адрес обработчика

ld a,l

ld (iy+4),a

ld a,h

ld (iy+5),a
@main ld hl,STOP_COOK ; закончили брожение?

ld a,(hl)

and a

ret nz

ld hl,TEMPRETURE_PORT ; проверяем температуру на ;отклонения от нормы

ld a,(hl)

cp a,Ck_HIGH_TEMPR

jr c, @next

push af

call offTermo

pop af

@next cp a,Ck_LOW_TEMPR

jr nc main

call onTermo

jr main ; цикл
stopCk

; сбрасываем флаг продолжения выпечки

ld hl,STOP_COOK

ld a,1

ld (hl),a

ret

rotateOffCk

; выключаем замешивание и переустанавливаем задание

call offEngine

ld ix,FIFTEEN_MIN ; устанавливаем значение = 15минут

xor a

ld (ix),a

ld (ix+1),a

inc a

ld (ix+2),a

ld a,5

ld (ix+3),a

ld iy,CUR_TIME

call addLCD

ld iy,TASK_TABLE+6

ld a,(ix)

ld (iy),a

ld a,(ix+1)

ld (iy+1),a

ld a,(ix+2)

ld (iy+2),a

ld a,(ix+3)

ld (iy+#),a

ld hl,rotateOnCk ; адрес обработчика

ld a,l

ld (iy+4),a

ld a,h

ld (iy+5),a

ret
rotateOnCk

; включаем замешивание и переустанавливаем задание

call onEngine

ld ix,FIFTEEN_MIN ; устанавливаем значение = 1минута

xor a

ld (ix),a

ld (ix+1),a

ld (ix+2),a

inc a

ld (ix+3),a

ld iy,CUR_TIME

call addLCD

ld iy,TASK_TABLE+6

ld a,(ix)

ld (iy),a

ld a,(ix+1)

ld (iy+1),a

ld a,(ix+2)

ld (iy+2),a

ld a,(ix+3)

ld (iy+#),a

ld hl,rotateOffCk ; адрес обработчика

ld a,l

ld (iy+4),a

ld a,h

ld (iy+5),a

ret


waitForReady

; ничего не делает,ждет до начала готовности

call offEngine

call offTermo

ld hl,STOP_WAIT ; флаг окочания брожения

xor a

ld (hl),a

ld iy,READY_TIME

ld ix,WAIT_TIME

call subLCD ; ix=время окончания ожидания

ld ix,WAIT_TIME ; устанавливаем задание

ld iy,TASK_TABLE

ld a,(ix)

ld (iy),a

ld a,(ix+1)

ld (iy+1),a

ld a,(ix+2)

ld (iy+2),a

ld a,(ix+3)

ld (iy+#),a

ld hl,stopWait ; адрес обработчика

@main ld hl,STOP_BR ; закончили брожение?

ld a,(hl)

and a

ret nz

jr main
stopWait

; сбрасываем флаг ожидания

ld hl,STOP_COOK

ld a,1

ld (hl),a

ret
showRemaining

;выводит на экран оставшиеся до готовности время

ld hl,READY_TIME ;резервная копия

ld de,ONE_MIN

ld bc,4

ldir

ld ix,ONE_MIN

ld iy,CUR_TIME

call subLCD ; ix= оставшееся время

call showLCD

ld ix,ONE_MIN ; устанавливаем значение = 1минута

xor a

ld (ix),a

ld (ix+1),a

ld (ix+2),a

inc a

ld (ix+3),a

ld iy,CUR_TIME

call addLCD

ld iy,TASK_TABLE+12

ld a,(ix)

ld (iy),a

ld a,(ix+1)

ld (iy+1),a

ld a,(ix+2)

ld (iy+2),a

ld a,(ix+3)

ld (iy+#),a

ld hl,showRemaining ; адрес обработчика

ld a,l

ld (iy+4),a

ld a,h

ld (iy+5),a

ret

COOKY_TIME db 0,4,0,0 ; время выпечки – 4часа

  1. Выводы

В данном проекте было спроектировано устройство управления бытовой хлебопечкой, и написано соответствующее программное обеспечение для управления.

В результате были получены и закреплены практические навыки проектирование программмно-аппаратных комплексов.


  1. Литература

    1. Микропроцессры и микропроцессорные комплекты интегральных микросхем.Справочник.Том 1 и 2. Абрайтис Б.Б., Аверьянов Н.Н., Белоус А.И. и др. – М.: Радио и связь, 1991. – 368с.: ил

    2. Программирование в кодах и на языке ассемблера Z80.”Инфорком ”, 1994. – 272 c.


Похожие:

Курсовой проект по курсу “Микропроцессорные системы” на тему: «Проектирование мпу управления бытовой хлебопечкой» iconМетодические указания по курсовой работе по курсу " микропроцессорные системы"
В соответствии с учебным планом по данному курсу предусмотрено выпол­нение курсовой работы. Вам выдана уникальная тема курсовой работы....
Курсовой проект по курсу “Микропроцессорные системы” на тему: «Проектирование мпу управления бытовой хлебопечкой» iconКурсовой проект на тему: проектирование бытовых машин и приборов
Данный курсовой проект заключается в проектировании холодильника и рассмотрении электрического узла его. В данном проекте использовали...
Курсовой проект по курсу “Микропроцессорные системы” на тему: «Проектирование мпу управления бытовой хлебопечкой» iconМикропроцессорные системы” Проектирование управляющей микроэвм курск – 1999 г
Методические указания к курсовому проекту по дисциплине "Микропроцессорные системы". Курский государственный технический университет,...
Курсовой проект по курсу “Микропроцессорные системы” на тему: «Проектирование мпу управления бытовой хлебопечкой» iconКурсовой проект по курсу «Предметно-ориентированные экономические информационные системы»

Курсовой проект по курсу “Микропроцессорные системы” на тему: «Проектирование мпу управления бытовой хлебопечкой» iconКурсовой проект по мпс проектирование специализированных ЭВМ
Структурная схема умпс, краткое описание состава и назначения основных элементов системы 3
Курсовой проект по курсу “Микропроцессорные системы” на тему: «Проектирование мпу управления бытовой хлебопечкой» iconКурсовой проект по дисциплине Проектирование швейных предприятий

Курсовой проект по курсу “Микропроцессорные системы” на тему: «Проектирование мпу управления бытовой хлебопечкой» iconКурсовой проект по дисциплине проектирование бмп на тему: Разработка...
На тему: Разработка конструкции микроволновой печи для улучшения приготовления продуктов
Курсовой проект по курсу “Микропроцессорные системы” на тему: «Проектирование мпу управления бытовой хлебопечкой» iconМетодические указания к лабораторным работам по курсу “
Методические указания к лабораторным работам по курсу "Микропроцессорные системы", выпуск Курский государственный технический университет,...
Курсовой проект по курсу “Микропроцессорные системы” на тему: «Проектирование мпу управления бытовой хлебопечкой» iconНижегородский государственный технический университет
Тема курсовой работы: Проектирование осушительной, балластной систем и системы нефтесодержащих вод
Курсовой проект по курсу “Микропроцессорные системы” на тему: «Проектирование мпу управления бытовой хлебопечкой» iconПроектирование систем управления заключительный этап и системном...
...
Вы можете разместить ссылку на наш сайт:
Школьные материалы


При копировании материала укажите ссылку © 2013
контакты
dopoln.ru
Главная страница