Главное меню

Карта сайта
Главная
Курсовые работы
Отчеты по практикам
Лабораторные работы
Методические пособия
Рефераты
Дипломы
Лекции



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

Заключение

В данном курсовом проекте была разработана система управления микроволновой печью, которая позволяет при помощи панели управления устанавливать нужную программу работы прибора и следить за процессом приготовления. При желании можно сбросить программу и установить новую. С помощью кнопок можно установить температуру и время работы микроволновой печи.

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

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

Приложение A

PROG SEGMENT CODE; размещает сегмент prog в памяти программ

CONST SEGMENT CODE; размещает сегмент code в памяти программ

VAR1 SEGMENT DATA; размещение сегмента var1 во внутренней памяти данных с прямой адресацией

BITVAR SEGMENT BIT; размещение сегмента bitvar во внутренней памяти данных с битовой адресацией

STACK SEGMENT IDATA; размещение сегмента stack во внутренней памяти данных с косвенной адресацией

RSEG STACK ; использование сегмента stack

DS 10H; резервирование 16 Bytes в Stack

CSEG AT 0; определение абсолютного сегмента в памяти программ с нулевого бита

USING 0 ; Выбор банка регистров общего назначения - Register-Bank 0

JMP START; переход на метку Start

CSEG AT 03h; определение абсолютного сегмента в памяти программ

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

CSEG AT 0Bh; определение абсолютного сегмента в памяти программ

Ljmp m_TF0; обработка прерывания по 0-у таймеру

CSEG AT 13h; определение абсолютного сегмента в памяти программ

reti;

CSEG AT 1Bh; определение абсолютного сегмента в памяти программ

Ljmp m_TF1; обработка прерывания по 1-у таймеру

CSEG AT 23h; определение абсолютного сегмента в памяти программ

reti

RSEG PROG; использование сегмента prog

START: MOV SP, #STACK-1; инициализация данных

mov R3, #0h

mov 21h, #00000111b; задаем начальную мощность

mov 22h, #00010000b; задаем байт шага (изменяется сдвигом от 10000 до 00001)

mov 30h, #3h; задаем визуальные начальные значения мощности

mov 31h, #6h

mov 32h, #0h

mov 33h, #0h; задаем визуальные начальные значения времени

mov 34h, #0h

mov 35h, #0h

mov 36h, #0h

mov 40h, #00111111b; задаем матрицу цифр, для вывода на индикатор

mov 41h, #00000110b

mov 42h, #01011011b

mov 43h, #01001111b

mov 44h, #01100110b

mov 45h, #01101101b

mov 46h, #01111101b

mov 47h, #00000111b

mov 48h, #01111111b

mov 49h, #01101111b

; 50h код кнопки

mov 55h, #0h; байт периодов по 10с

mov 56h, #0h; байт отсчета 10с

mov 57h, #40; байт отсчета 2-х секунд (40*0,05)

; инициализация и пуск таймеров

mov TMOD, #00010001b; 16-разрядные Т/C

mov TL0, #LOW(NOT(1428)); начальная загрузка T/C0

mov TH0, #HIGH(NOT(1428))

setb PT0

setb PT1

setb EA; управление глобальными прерываниями

setb ET0; разрешение прерывания от Т/C0

setb ET1; разрешение прерывания от T/C1

setb TR0; разрешение работы T/C0

mm:

mov R7, 21h; загрузка начальной мощности

cjne R7, #1Fh, v_4; если мощность изменилась, то переход к метке v_4

mov 30h, #6; отображение на индикаторе значения мощности

mov 31h, #0; отображение на индикаторе значения мощности

mov 32h, #0; отображение на индикаторе значения мощности

sjmp mm; переход на метку mm

v_4:

mov R7, 21h; загрузка начальной мощности

cjne R7, #0Fh, v_3; если мощность изменилась, то переход к метке v_3

mov 30h, #4; отображение на индикаторе значения мощности

mov 31h, #8; отображение на индикаторе значения мощности

mov 32h, #0; отображение на индикаторе значения мощности

sjmp mm; переход на метку mm

v_3:

mov R7, 21h; загрузка начальной мощности

cjne R7, #7, v_2; если мощность изменилась, то переход к метке v_2

mov 30h, #3; отображение на индикаторе значения мощности

mov 31h, #6; отображение на индикаторе значения мощности

mov 32h, #0; отображение на индикаторе значения мощности

sjmp mm; переход на метку mm

v_2:

mov R7, 21h; загрузка начальной мощности

cjne R7, #3, v_1; если мощность изменилась, то переход к метке v_1

mov 30h, #2; отображение на индикаторе значения мощности

mov 31h, #4; отображение на индикаторе значения мощности

mov 32h, #0; отображение на индикаторе значения мощности

sjmp mm; переход на метку mm

v_1:

mov R7, 21h; загрузка начальной мощности

cjne R7, #1, mm; если мощность изменилась, то переход к метке mm

mov 30h, #1; отображение на индикаторе значения мощности

mov 31h, #2; отображение на индикаторе значения мощности

mov 32h, #0; отображение на индикаторе значения мощности

sjmp mm; переход на метку mm

; обработка прерывания по 0-му таймеру

m_TF0: mov TH0, #HIGH(NOT(1428)+1); начальная загрузка T/C0

mov TL0, #LOW(NOT(1428)+1)

;изменение визуальных значений мощности и времени

mov 23h, R3; загрузка номера текущего отображаемого индикатора

mov C, 18h

mov P3.3, C

mov C, 19h

mov P3.4, C

mov C, 1Ah

mov P3.5, C

cjne R3, #0, m_1; если не 0, то переходим на m_1

mov A, 30h; запись в аккумулятор цифры c соответствующего индикатора

add A, #40h; изменение значения

mov R0, A

mov P1, @R0; вывод измененного значения

sjmp m_end; переход на метку m_end

m_1: cjne R3, #1, m_2; если не 1, то переходим на m_2

mov A, 31h; запись в аккумулятор цифры c соответствующего индикатора

add A, #40h

mov R0, A

mov P1, @R0

sjmp m_end

m_2: cjne R3, #2, m_3; если не 2, то переходим на m_3

mov A, 32h; запись в аккумулятор цифры c соответствующего индикатора

add A, #40h; изменение значения

mov R0, A

mov P1, @R0

sjmp m_end

m_3: cjne R3, #3, m_4; если не 3, то переходим на m_4

mov A, 33h; запись в аккумулятор цифры c соответствующего индикатора

add A, #40h; изменение значения аккумулятора

mov R0, A

mov P1, @R0

sjmp m_end

m_4: cjne R3, #4, m_5; если не 4, то переходим на m_5

mov A, 34h; запись в аккумулятор цифры c соответствующего индикатора

add A, #40h; изменение значения

mov R0, A

mov P1, @R0

sjmp m_end

m_5: cjne R3, #5, m_6; если не 5, то переходим на m_6

mov A, 35h; запись в аккумулятор цифры c соответствующего индикатора

add A, #40h; изменение значения

mov R0, A

mov P1, @R0

sjmp m_end

m_6: mov A, 36h; запись в аккумулятор цифры c соответствующего индикатора

add A, #40h; изменение значения

mov R0, A; значение аккумулятора в R0

mov P1, @R0

m_end:

jb P3.2, key; если P3.2 = 1; то перейти на метку key

mov 50h, R3; опрос клавиатуры

sjmp m_13; переход на метку m_13

key: mov 50h, #80h; в 50h - код полученной кнопки

m_13:

mov R6, 50h

cjne R6, #80h, m_20

sjmp m_11; переход на метку m_11

m_20:

mov R6, 50h

cjne R6, #0h, m_21; обработка кнопки + время

jb TR1, m_11

mov R6, 55h;

cjne R6, #240, m_30

sjmp m_11; переход на метку m_11

m_30:

mov R6, 56h; перемещение в R6 значение байта отсчета

cjne R6, #10, mw

inc 55h; увеличение байта периодов

sjmp m_11; переход на метку m_11

mw:

mov 56h, #10; запись в байт отсчета 10

sjmp m_11; переход на метку m_11

m_21:

mov R6, 50h

cjne R6, #1h, m_22 ; обработка кнопки + мощность

mov A, 21h; проверка тек. состояния мощности

anl A, #00010000b; если максимальное,

cjne A, #10000b, m_31; то игнорируем

sjmp m_11

m_31: setb C; установка во флаг с единицы

mov A, 21h

RLC A; сдвиг содержимого аккумулятора влево через флаг переноса

mov 21h, A

sjmp m_11; переход на метку m_11

m_22:

mov R6, 50h

cjne R6, #2h, m_23; обработка кнопки - мощность

mov R6, 21h

cjne R6, #1h, m_32; если текущая мощность минимальна

sjmp m_11; переход на метку m_11

m_32: clr C

mov A, 21h

RRC A; сдвиг содержимого аккумулятора вправо через флаг переноса

mov 21h, A

sjmp m_11; переход на метку m_11

m_23:

mov R6, 50h

cjne R6, #3h, m_24 ; обработка кнопки старт

jb TR1, m_11; если TR1 = 1, т.е. работает, то перейти на метку

mov R6, 55h

cjne R6, #0, m_33

mov R6, 56h

cjne R6, #0, m_33

sjmp m_11

m_33: mov TL1, #LOW(NOT(50000)+1)

mov TH1, #HIGH(NOT(50000)+1)

setb TR1

clr P3.0; обнуление бита

sjmp m_11; переход на метку m_11

m_24: ; Обработка кнопки стоп

jb TR1, m_34; если T/C1 работает, то переход на метку m_34

mov 55h, #0h

mov 56h, #0h

mov 57h, #40

mov 22h, #00010000b

sjmp m_11

m_34: clr TR1; запрет работы T/C1

setb P3.0; P3.0=1

m_11: inc R3

cjne R3, #7, m_12

mov R3, #0

m_12: reti

m_TF1:

mov TH1, #HIGH(NOT(50000)+1)

mov TL1, #LOW(NOT(50000)+1)

mov A, 21h

anl A, 22h

cjne A, #0, iz_0

setb P3.1

sjmp dc

iz_0: clr P3.1

dc: dec 57h; декремент байта осчета 2-х секунд

mov R5, 57h

cjne R5, #20, t_1; если 20 то надо -1с

dec 56h

sjmp t_end

t_1: mov R5, 57h; загрузка в R5 байта отсчета 2х секунд

cjne R5, #0, t_end; если 0 то смена шага + проверка на окончание работы и пр.

dec 56h; декремент байта осчета 10 секунд

mov R5, 22h

cjne R5, #1, t_10

mov 22h, #00010000b

mov R5, 55h

cjne R5, #0, t_2; проверка на 0 интервалов по 10 с

clr TR1

mov 22h, #00010000b

setb P3.0

setb P3.1

sjmp t_end

t_2: dec 55h

mov 56h, #10

sjmp t_11

t_10: mov A, 22h

RR A

Mov 22h, A

t_11: mov 57h, #40

t_end:

mov A, 55h

mov R5, 56h

cjne R5, #10, d__

inc A

mov 36h, #0

sjmp d_1

d__: mov 36h, 56h

d_1: mov B, #6

div AB

mov 35h, B

mov B, #6

div AB

mov 34h, B

mov 33h, A

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

END