You are on page 1of 15

uP proj

Submitted by - Abhijeet Singh


(2K17/EE/004)

0000H: CALL KEYINIT


0024H: CALL STOP //TRAP
002CH: CALL STOP //RST5.5
0034H: CALL READBACK //RST6.5
003CH: CALL MAINPROGRAM //RST7.5

KEYINIT
//This is the subroutine to initialize ic8279
MVI A, 11H
OUT 21H
MVI A 34H
OUT 21H
RET
MAINPROGRAM
//This is the main program which checks what button is pressed and what
function is to be performed.
MVI A 40H
OUT 21H
IN 20H
CPI 00H
JZ MAGNETRON
CPI 01H
JZ CONVECTION
CPI 03H
CALL STOP
CPI 0BH
CALL ADD30
CPI 10H
CALL AUTOCOOK
CPI 12H
CALL INDIANRCP
CPI 13H
CALL STEAMCLN
MAGNETRON

Page 1
uP proj
//This subroutine receives what mode has been selected and for what time the
microwave program has //to run. It also waits for the start or stop/cancel key to
be pressed.
MVI A, 1CH
SIM
CALL MCNT
CALL TIME
MLOOP: IN 21H
ANI 07H
JZ MLOOP
MVI A, 40H
OUT 21H
IN 20H
CPI 02H
JZ START
CPI 03H
JZ STOP

MCNT
//This subroutine decides the mode of the microwave
MVI B 00H
MVI C 00H
MVI A C2 H
OUT 21 H
MLOOP1: IN 21H
ANI 07H
JZ MLOOP1
MVI A 40H
OUT 21H
IN 20H
CPI 00H
JNZ MSKIP
INR B
MSKIP: CPI 11H
JNZ MLOOP1
MOV A, B
MLOOP2: SBI 03H
JP MLOOP2
ADI 03H

Page 2
uP proj
JNZ MSKIP1
ADI 03H
MSKIP1: MOV B, A
RET

CONVECTION
//This subroutine receives what mode has been selected and for what time the
microwave program has //to run. It also waits for the start or stop/cancel key to
be pressed.
MVI A, 1CH
SIM
CALL CCNT
CALL TIME
CLOOP: IN 21H
ANI 07H
JZ CLOOP
MVI A, 40H
OUT 21H
IN 20H
CPI 02H
JZ START
CPI 03H
JZ STOP
CCNT
//This subroutine decides the working temperature of the oven
MVI B 00H
MVI C 01H
MVI A C2 H
OUT 21 H
CLOOP1: IN 21H
ANI 07H
JZ CLOOP1
MVI A 40H
OUT 21H
IN 20H
CPI 01H
JNZ CSKIP
INR B
CSKIP: CPI 11H

Page 3
uP proj
JNZ CLOOP1
MOV A, B
CLOOP2: SBI 04H
JP CLOOP2
ADI 04H
JNZ CSKIP1
ADI 04H
CSKIP1: MOV B, A
RET

INDIANRCP
//This subroutine decides the mode and for what time should the microwave
oven work //corresponding to what Indian recipe you want to prepare.
MVI B 00H
MVI C 00H
MVI A C2 H
OUT 21 H
ILOOP1: IN 21H
ANI 07H
JZ ILOOP1
MVI A 40H
OUT 21H
IN 20H
CPI 12H
JNZ ISKIP
INR B
ISKIP: CPI 11H
JNZ ILOOP1
MOV A, B
ILOOP2: SBI 05H
JP ILOOP2
ADI 05H
JNZ ISKIP1
ADI 05H
ISKIP1: MOV B, A
ANI 01H
JZ INXT1
MVI B, 02H

Page 4
uP proj
MVI A, 05H
IREPEAT1: CALL ADD10M
DCR A
JNZ IREPEAT1
MVI A, 03H
IREPEAT2: CALL ADD10S
DCR A
JNZ IREPEAT2
RET
INXT1: MOV A, B
ANI 02H
JZ INXT2
MVI B, 02H
MVI A, 02H
IREPEAT3: CALL ADD10M
DCR A
JNZ IREPEAT3
MVI A, 03H
IREPEAT4: CALL ADD10S
DCR A
JNZ IREPEAT4
RET
INXT2: MOV A, B
ANI 03H
JZ INXT3
MVI B, 02H
MVI A, 05H
IREPEAT5: CALL ADD10M
DCR A
JNZ IREPEAT5
RET
INXT3: MOV A, B
ANI 03H
JZ INXT4
MVI B, 02H
MVI A, 05H
IREPEAT6: CALL ADD10M
DCR A
JNZ IREPEAT6

Page 5
uP proj
RET
INXT4: MVI B, 02H
MVI A 07H
IREPEAT7: CALL ADD10M
DCR A
JNZ IREPEAT7
RET
AUTOCOOK
//This subroutine decides the mode and for what time should the microwave
oven work //corresponding to what food dish you want to prepare.
MVI B 00H
MVI C 01H
MVI A C2H
OUT 21H
ALOOP: IN 21H
ANI 07H
JZ ALOOP
MVI A 40H
OUT 21H
IN 20H
CPI 10H
JNZ ASKIP1
INR B
ASKIP1: CPI 11H
JNZ ALOOP
MOV A, B
ALOOP1: SBI 05H
JP LOOP1
ADI 05H
JNZ ASKIP2
ADI 05H
ASKIP2: MOV B, A
ANI 01H
JZ ANXT1
MVI B 02H
MVI A 03H
AREPEAT1: CALL ADD1M
DCR A
JNZ AREPEAT1

Page 6
uP proj
RET
ANXT1: ANI 02H
JZ ANXT2
MVI B 02H
MVI A 03H
AREPEAT2: CALL ADD1M
DCR A
JNZ AREPEAT2
RET
ANXT2: ANI 03H
JZ ANXT3
MVI B 02H
MVI A 03H
AREPEAT3: CALL ADD1M
DCR A
JNZ AREPEAT3
RET
ANXT3: ANI 04H
JZ ANXT4
MVI B 02H
MVI A 03H
AREPEAT4: CALL ADD1M
DCR A
JNZ AREPEAT14
RET
ANXT4 MVI B 02H
CALL ADD10M
CALL ADD1M
CALL ADD1M
MVI A 03H
AREPEAT5: CALL ADD10S
DCR A
JNZ AREPEAT5
RET

STEAMCLN
//This subroutine selects the steam clean mode.
MVI B 03H
MVI C 00H

Page 7
uP proj
CALL ADD1M
JMP START
ADD10S
//This subroutine add 10 sec to the timer counter.
LHLD 8000H
LXI D, 000AH
DAD D
SHLD 8000H
RET
ADD1MIN
//This subroutine add 1 min to the timer counter.
LHLD 8000H
LXI D, 003CH
DAD D
SHLD 8000H
RET
ADD10M
//This subroutine add 10 min to the timer counter.
LHLD 8000H
LXI D, 0258H
DAD D
SHLD 8000H
RET
TIME
//This subroutine adds the total time required in cooking the food
MVI D 00H
MVI E 00H
MVI A C2H
OUT 21H
TLOOP: IN 21H
ANI 07H
JZ ALOOP
OUT 21H
IN 20H
CPI 08H
JNZ TNXT1
CALL ADD10M
TNXT1: CPI 09H
JNZ TNXT2

Page 8
uP proj
CALL ADD1M
TNXT2: CPI 0AH
JNZ TNXT3
CALL ADD1S
TNXT3: CPI 11H
JNZ LOOP
RET

SECTOMIN
//This subroutine converts the total seconds to minutes and seconds format
MVI E, 00H
LHLD 8000H
MVI B, 3CH
MVI C, 08H
SNXT: DAD H
MOV A, E
RLC
MOV E, A
MOV A, H
SUB B
JC SSKIP
MOV H, A
INR E
SSKIP: DCR C
JNZ SNXT
MOV A, E
STA 800CH
MOV A, D
STA 800DH
RET

SECHEXTOBCD
//This subroutine converts the hexadecimal seconds to bcd
LXI H, 800DH
LXI B, 0000H
MOV A, M
SECHTOBLOOP: SUI 64H
JC SECHTOBLOOP1
INR B

Page 9
uP proj
JMP SECHTOBLOOP
SECHTOBLOOP1: ADI 64H
SECHTOBLOOP2: SUI 0AH
JC SECHTOBLOOP3
INR C
JMP SECHTOBLOOP2
SECHTOBLOOP3: ADI 0AH
MOV B, A
MOV A, C
RLC
RLC
RLC
RLC
ADD B
STA 9000H
INX H
MOV M, A
HLT
MINHEXTOBCD
//This subroutine converts the hexadecimal minutes to bcd
LXI H, 800CH
LXI B, 0000H
MOV A, M
MINHTOBLOOP: SUI 64H
JC MINHTOBLOOP1
INR B
JMP MINHTOBLOOP
MINHTOBLOOP1: ADI 64H
MINHTOBLOOP2: SUI 0AH
JC MINHTOBLOOP3
INR C
JMP MINHTOBLOOP2
MINHTOBLOOP3: ADI 0AH
MOV B, A
MOV A, C
RLC
RLC
RLC
RLC

Page 10
uP proj
ADD B
STA 9001H
INX H
MOV M, A
HLT
ADD30
//This subroutine adds 30 seconds to the timer counter
MVI A D4H
OUT 43H
IN 42H
MOV L, A
IN 42H
MOV H, A
LXI D, 001E
DAD D
MVI A, L
STA 8000H
MVI A, H
STA 8001H
CALL TIMERINIT
RET

TIMERINIT
//This subroutine initializes the timer ic8254
MVI A, 34H
OUT 83H
MVI A, 74H
OUT 83H
MVI A, B4H
OUT 83H
MVI A, D0H
OUT 80H
MVI A, 07H
OUT 80H
MVI A, E8H
OUT 81H
MVI A, 03H
OUT 81H
LHLD 800AH

Page 11
uP proj
MVI A, L
OUT 82H
MVI A, H
OUT 82H
RET

READBACK
//This subroutine read backs the contents of timer2
MVI A, D4H
OUT 43H
RDBACKLOOP: IN 42H
MVI L, A
IN 42H
MVI H, A
SHLD 8000H
CALL SECTOMIN
CALL SECHEXTOBCD
CALL MINHEXTOBCD
ORA L
JNZ RDBACKLOOP
CALL DISP
RET

STOP
//This subroutine is to stop the current work
MVI A FFH
OUT 80H
MVI A 0FH
OUT 83H
MVI A 00H
STA 9000H
STA 9001H
CALL DISP
HLT
DISP
//This subroutine is to provide the relevant data to the 7 segment display
LDA 9001H
ANI F0H
RAR

Page 12
uP proj
RAR
RAR
RAR
MOV H, A
MVI A 80H
OUT 21H
MOV A, H
OUT 20H
LDA 9001H
ANI 0FH
MOV H, A
MVI A 81H
OUT 21H
MOV A, H
OUT 20H
LDA 9000H
ANI F0H
RAR
RAR
RAR
RAR
MOV H, A
MVI A 82H
OUT 21H
MOV A, H
OUT 20H
LDA 9000H
ANI 0FH
MOV H, A
MVI A 83H
OUT 21H
MOV A, H
OUT 20H
RET
START
//This is the subroutine where the mode of working of the magnetron or
temperature for convection //oven is finalized and processed to ic8255
MVI A 00H
SIM

Page 13
uP proj
CALL TIMERINIT
MVI A 83H
OUT 83H
MOV A, C
CPI 00H
JNZ NXT1
MOV A, B
CPI 01H
JNZ SKIP1
MVI A BCH
OUT 80H
JMP
SKIP1: CPI 02H
JNZ SKIP2
MVI A DCH
OUT 80H
JMP
SKIP2: CPI 03H
JNZ SKIP3
MVI A ECH
OUT 80H
JMP
NXT1: MOV A, B
CPI 01H
JNZ NEW1
MVI C 64H
JMP TEMPCHK
NEW1: CPI 02H
JNZ NEW2
MVI C 96H
JMP TEMPCHK
NEW2: CPI 03H
JNZ NEW3
MVI C C8H
JMP TEMPCHK
NEW3: MVI C FA
JMP TEMPCHK
HLT

Page 14
uP proj
TEMPCHK
//This subroutine constantly checks whether the temperature in the convection
oven at the correct level //or not
LOOP: MVI A 09H
OUT83H
MVI A 0DH
OUT 83H
MVI A 0EH
OUT 83H
READ: IN 82H
RAR
JC READ
MVI A 08H
OUT 83H
CHECK: IN 81H
CMP C
JNC OFF
MVI A F0H
OUT 80H
JMP LOOP
OFF: MVI A F8H
OUT 80H
JMP LOOP

Page 15

You might also like