Проектирование системы управления микроволновой печью |
Страница 8 из 8
Заключение В данном курсовом проекте была разработана система управления микроволновой печью, которая позволяет при помощи панели управления устанавливать нужную программу работы прибора и следить за процессом приготовления. При желании можно сбросить программу и установить новую. С помощью кнопок можно установить температуру и время работы микроволновой печи. В проекте были разработаны структурная и функциональная схемы микроволновой печи с микропроцессорным управлением, в которых были учтены все необходимые элементы. Также был разработан алгоритм и программа, которая была написана и отражена в проекте. В результате разработки была создана система управления микроволновой печью, удовлетворяющая поставленной задаче. Приложение 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 |