4-й блок занимается непосредственно режимом работы. В нем происходит обратный отсчет, регулировка выходной мощности печи. А также изменение визуального значения времени.
7.2 Исходный текст программы
При написании программы использовалась учебная литература. [6].
PROGSEGMENTCODE
CONSTSEGMENTCODE
VAR1SEGMENTDATA
BITVARSEGMENTBIT
STACKSEGMENTIDATA
RSEG STACK
DS 10H ; 16 Bytes Stack
CSEG AT 0
USING0 ; Register-Bank 0
JMP START
CSEG AT 03h
reti
CSEG AT 0Bh
ljmpm_TF0
CSEG AT 13h
reti
CSEG AT 1Bh
ljmpm_TF1
CSEG AT 23h
reti
RSEG PROG
START:MOV SP,#STACK-1
; инициализация данных
movR3, #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
mov TL0, #LOW(NOT(1428))
mov TH0, #HIGH(NOT(1428))
setb PT0
setb PT1
setb EA
setb ET0
setb ET1
setb TR0
mm:
mov R7, 21h
cjne R7, #1Fh, v_4
mov 30h, #6
mov 31h, #0
mov 32h, #0
sjmp mm
v_4:
mov R7, 21h
cjne R7, #0Fh, v_3
mov 30h, #4
mov 31h, #8
mov 32h, #0
sjmp mm
v_3:
mov R7, 21h
cjne R7, #7, v_2
mov 30h, #3
mov 31h, #6
mov 32h, #0
sjmp mm
v_2:
mov R7, 21h
cjne R7, #3, v_1
mov 30h, #2
mov 31h, #4
mov 32h, #0
sjmp mm
v_1:
mov R7, 21h
cjne R7, #1, mm
mov 30h, #1
mov 31h, #2
mov 32h, #0
sjmp mm
; R3-номер текущего отображаемого индикатора
m_TF0: ;обработка прерывания по 1-му таймеру
mov TH0, #HIGH(NOT(1428))
mov TL0, #LOW(NOT(1428))
;изменение визуальных значений мощности и времени
mov23h, R3
movC, 18h
movP3.3, C
movC, 19h
movP3.4, C
movC, 1Ah
movP3.5, C
cjneR3, #0, m_1; если она не 0, то переходим на m_1
movA, 30h ;вывод цифры на соответствующий индикатор
addA, #40h
movR0, A
movP1, @R0
sjmpm_end
m_1:cjneR3, #1, m_2
movA, 31h
addA, #40h
movR0, A
movP1, @R0
sjmpm_end
m_2:cjneR3, #2, m_3
movA, 32h
addA, #40h
movR0, A
movP1, @R0
sjmpm_end
m_3:cjneR3, #3, m_4
movA, 33h
addA, #40h
movR0, A
movP1, @R0
sjmpm_end
m_4:cjneR3, #4, m_5
movA, 34h
addA, #40h
movR0, A
movP1, @R0
sjmpm_end
m_5:cjneR3, #5, m_6
movA, 35h
addA, #40h
movR0, A
movP1, @R0
sjmpm_end
m_6:movA, 36h
addA, #40h
movR0, A
movP1, @R0
m_end:
jbP3.2, key ;
mov 50h, R3 ; Опрос клавиатуры
sjmpm_13 ; в 50h - код полученной кнопки
key: mov 50h, #80h
m_13:
movR6, 50h
cjne R6, #80h, m_20
ljmp m_11
m_20:
movR6, 50h
cjneR6, #0h, m_21 ;обработка кнопки + время
jbTR1, m_11
movR6, 55h
cjneR6, #240, m_30
sjmpm_11
m_30:
movR6, 56h
cjneR6, #10, mw
inc55h
sjmpm_11
mw:
mov56h, #10
sjmpm_11
m_21:
movR6, 50h
cjneR6, #1h, m_22 ;обработка кнопки + мощность
movA, 21h; проверка тек. состояния мощности
anlA, #00010000b; если максимальное,
cjneA, #10000b, m_31 ; то игнорируем
sjmpm_11
m_31:setbC
movA, 21h
RLCA
mov21h, A
sjmpm_11
m_22:
movR6, 50h
cjneR6, #2h, m_23 ; обработка кнопки - мощность
movR6, 21h
cjneR6, #1h, m_32 ; тек. мощность минимальна?
sjmpm_11
m_32:clrC
movA, 21h
RRCA
mov21h, A
sjmpm_11
m_23:
movR6, 50h
cjneR6, #3h, m_24 ; обработка кнопки старт
jbTR1, m_11
movR6, 55h
cjneR6, #0, m_33
movR6, 56h
cjneR6, #0, m_33
sjmpm_11
m_33: movTL1, #LOW(NOT(50000))
movTH1, #HIGH(NOT(50000))
setbTR1
clrP3.0
sjmpm_11
m_24: ; Обработка кнопки стоп
jbTR1, m_34
mov55h, #0h
mov56h, #0h
mov57h, #40
mov22h, #00010000b
sjmpm_11
m_34: clrTR1
setbP3.0
m_11:incR3
cjneR3, #7, m_12
movR3, #0
m_12:reti
m_TF1:
movTH1, #HIGH(NOT(50000))
movTL1, #LOW(NOT(50000))
movA, 21h
anlA, 22h
cjneA, #0, iz_0
setbP3.1
sjmpdc
iz_0:clrP3.1
dc:dec57h;декремент байта осчета 2-х секунд
movR5, 57h
cjneR5, #20, t_1 ;если 20 то надо -1с
dec56h
sjmpt_end
t_1:
movR5, 57h
cjneR5, #0, t_end ;если 0 то смена шага + проверка на окончание работы и пр.
dec56h
movR5, 22h
cjneR5, #1, t_10
mov22h, #00010000b
movR5, 55h
cjneR5, #0, t_2 ; проверка на 0 интервалов по 10 с
clrTR1
mov22h, #00010000b
setbP3.0
setbP3.1
sjmpt_end
t_2:dec55h
mov56h, #10
sjmpt_11
t_10:movA, 22h ;
RRA
mov22h, A
t_11:mov57h, #40
t_end:
movA, 55h
movR5, 56h
cjneR5, #10, d__
incA
mov36h, #0
sjmpd_1
d__:mov36h, 56h
d_1:movB, #6
divAB
mov35h, B
movB, #6
divAB
mov34h, B
mov33h, A
reti
END
Заключение
В результате разработки была создана система управления микроволновой печью, удовлетворяющая поставленной задаче. В процессе разработки были использованы программы CorelDRAW и ProView фирмы Franklin Software Inc.