You are on page 1of 45

Table of Contents

Acknowledgements
Abstract
1. Introduction

2. Hardware Specs.
2.1. Memory Interfacing
2.2. 8086 Microprocessor Interfacing
2.3. I/O Interfacing

3. Calculations

4. Flow chart and Algorithm

5. ALP
6. Assembled Code

Abstract

To implement the proposed design, we are using an 8086 microprocessor based


control circuit which gets the current outside temperature from a temperature
sensor. The temperature sensor gives the output in the form of voltage levels. Hence
it is required to be converted into digital signals using an Analog to Digital
Converter (ADC). Similarly the humidity level inside the room is obtained from a
humidity sensor whose output is given to another ADC.
The ADCs further provide the digital temperature and humidity value to the
microprocessor. The microprocessor then decides the required humidity value and
operates the humidifier accordingly. The current temperature value and humidity
value is also displayed on the LCD display.

INTRODUCTION

We are to design a Microprocessor (8086) based Intelligent Humidistat


system.
A humidistat is an electronic device analogous to a thermostat but which
responds to relative humidity not temperature. Humidistats are utilized in a
number of devices including dehumidifiers, humidifiers, and microwave
ovens. In humidifiers and dehumidifiers the humidistat is used where
constant relative humidity conditions need to be maintained such as
a refrigerator, greenhouse, or climate controlled warehouse. When adjusting
the controls in these applications the humidistat would be what is being set.
This is accomplished with the calculation of the RH which is the percentage
of water vapor that air actually holds compared to what it could hold at
that temperature. Stated another way, relative humidity indicates how close
air is to being saturated rather than how much water it actually holds. It
varies from 100% in clouds and fog to 10% or less over deserts during the
day. Air at 22 C can hold approximately 8 g of water vapor per cubic meter
(its capacity). If, however, it contains only 4 g, then it is only half-saturated
and its relative humidity is 50%.
The following sections will illustrate the hardware and software interface
that was used to design this project.
NOTE: All the Circuit Diagrams are custom made on Express SCH software
and editing is done using Paint and Picasa.

2.) Hardware Specifications


ICs / Hardware

Qty.

27128 ROM chips

61128 RAM chips

74LS138 Decoders

74LS244 Unidirectional Buffers

74LS245 Bidirectional Buffers

74LS373 Latches

8086 Microprocessor

8284A Clock Generator

82C55 PPI

AD570 ADC CHIPS

And Gate

NAND Gate

NOR Gate

OR Gate

15

XNOR Gate

DMC 16129 1 X 16 LCD

HC-610 Humidity Sensor

LM35D Temperature Sensor

Humidifier

Relay Controller

2.1) Memory Interfacing


Specifications:-

Memory Type

IC Code

Total Size

Address Range

ROM

27128 (2 ICs)

32K*8

00000H-07FFFH

ROM

FOLD BACK

FOLD BACK

F8000H-FFFFFH

RAM

61128 (2 ICs)

32K*8

F0000H-F7FFFH

Segment Memory Mapping:-

Segment Used

Address:Offset

Code_Seg (Code Segment)


Data_Seg (Data Segment)
Ivt_Seg (IVT)
Code_Seg_Reset (Reset)
Stack_Seg

F840:0000 F840:035C
F000:0000 F000:0012
0000:0000 0000:0307
FFFF:0000- FFFF:000F
F002:0000 F002:01FF

74LS138 Specifications:-

Pins
A0
A1
A2
G1
G2A
G2B

Select Lines
A17
A16
A15
A18 XNOR A19
A0/BHE
NOT(M/IO)

Address Lines Used

A1-A14

FIG 1:- MEMORY INTERFACE

2.2) 8086 Microprocessor interfacing


Specifications:

Clock Frequency: - 5 MHz


Mode of Operation: - Minimum
Single Processor System
Voltage Input :- 5 Volts

Control Chip Circuitry:FIG 2:-

M/IO

RD

WR

Bus Cycle

1
1
0
0

0
1
0
1

1
0
1
0

MEMR
MEMW
IOR
IOW

10

FIG 3:- 8086 INTERFACE

11

2.3) I/O Interfacing


I/O Hardware Specs.:1) LM35D temperature sensor IC:

FIG 4:- LM35D IC AND ITS CIRCUIT


Features
Calibrated directly in Celsius (Centigrade)
Linear + 10.0 mV/C scale factor
0.5C accuracy guaranteeable (at +25C)
Rated for full -55 to +150C range
Suitable for remote applications
Low cost due to wafer-level trimming
Operates from 4 to 30 volts
Less than 60 A current drain
Low self-heating, 0.08C in still air
Nonlinearity only C typical
Low impedance output, 0.1 Ohm for 1 mA load

12

Description
The LM35 series are precision integrated-circuit temperature sensors, whose
output voltage is linearly proportional to the Celsius (Centigrade) temperature.
The LM35 thus has an advantage over linear temperature sensors calibrated in
Kelvin, as the user is not required to subtract a large constant voltage from its
output to obtain convenient Centigrade scaling. The LM35 does not require any
external calibration or trimming to provide typical accuracies of C at room
temperature and Cover a full -55 to +150C temperature range. Low cost is
assured by trimming and calibration at the wafer level. The LM35's low output
impedance, linear output, and precise inherent calibration make interfacing to
readout or control circuitry especially easy. It can be used with single power
supplies, or with plus and minus supplies. As it draws only 60 A from its supply, it
has very low self-heating, less than 0.1C in still air. The LM35 is rated to operate
over a -55 to +150C temperature range, while the LM35C is rated for a -40 to
+110C range (-10 with improved accuracy). The LM35 series is available
packaged in hermetic TO-46 transistor packages, while the LM35C, LM35CA, and
LM35D are also available in the plastic TO-92 transistor package. The LM35D is
also available in an 8-lead surface mount small outline package and a plastic TO220 package.
2) HC 610 Humidity Sensor IC:

FIG 5:- HC-610 IC

13

Model HC-610 humidity sensor is designed for OEMs requiring miniature sensing
elements that can be easily integrated into electronic products with a high degree
of accuracy and repeatability. The sensor utilizes a laser trimmed thermoset
polymer capacitive sensing element with on-chip integrated signal conditioning.
The sensors construction provides excellent resistance to wetting, dust, dirt, oils,
and common environmental chemicals. A CMOS signal conditioning circuit
provides a linear voltage output over the full range of 0-100% RH. The accuracy is
2% RH with 0.5% repeatability and 5% interchangeability. These sensors provide
a 0.63 to 3.12 Vdc signal output when 4 Vdc is supplied or .92 to 4.52 Vdc when
5.8 Vdc is supplied. Current consumption is 200A at 5 Vdc. Special packaging
consisting of a plastic assembly with a teflon filter is available for the HC-610.The
sensors linear voltage output makes direct input into a controller or other device
possible. The HC-610 sensor has an operating temperature range of -40 to
+185F.Applications include HVAC, refrigeration, industrial dryers, appliances,
humidistats, weather telemetry and battery-powered systems.

Response Time
Stability
Total Accuracy
Interchangeability
Operating Temperature
Hysteresis
Linearity
Repeatability
Voltage Supply (Vps)
Voltage Output
RH Out
Turn-on Time
Current Requirement

14

15 Seconds in slow moving air @ 25C


1% RH Typ. at 50% RH In 5 Years
2% RH, 0-100% RH non-condensing @ 25C
5% RH
-40 to +85C ( -40 to +185F)
1.2% of Span Maximum
0.5% RH Typical
0.5% RH
4.0 5.8 Vdc regulated
V out = Vps ( 0.0062 ( Sensor RH ) +. 16 )
%RH= ((( 6.3 x Vout) Vps)-1) x 25.6
< 0.1 second
200 A @5 Vdc Regulated

3) DMC-16129 16*1 LCD MODULE:

The following table provides the specifications of the LCD module used for
the project:-

Duty

Display
Format
Characters x
Lines

Character
Font
Hortl x
Vertical

Module Size
WxHxT
(mm)

View Area
WxH
(mm)

1/8

16 x 1

5 x8

122.0 x
154.0 x
33.0 x 11.0 15.3

Character
Size
WxH
(mm)

Dot Size
WxH

4.84 x 9.66 0.92 x 1.1

Sample LCD display according to program will be as follows:-

15

Rest of the I/O specifications are illustrated as below:-

IC USED

Specification/Purpose

82C55 (PPI)

PA-LCD Data Lines


PB-LCD Control Signal
PC0- Relay Control

AD570
LS244

Analog to digital Converter


Used to buffer ADC data

82C55 REGISTER

I/O ADDRESS ASSIGNED

Port A
Port B
Port C
Control Reg.

00H
02H
04H
06H

I/O Device

I/O ADDRESS ASSIGNED

INTERRUPT VECTOR

Humidity Sensor
Temperature Sensor

10H
08H

C0H (192)
C1H (193)

16

FIG 6:- I/0 INTERFACE

17

FIG 7:- TIMING DIAGRAM FOR FLIP FLOP


The above figure shows the timing diagram for Flip Flop used to trigger
AD570 conversion cycle. The cycle is triggered by the IOW signal (OUT
instruction) and the data is maintained till the next instruction.
(DR OR B/C) signal activates the interrupt whenever the data conversion is
done and data is ready. Thus this circuit provides an effective way to handle
ADC data.
Note:- Temperature interrupt is given preference as illustrated in
hardware diagram Fig-6.

FIG 8:- FLIP FLOP

18

3.) Calculations

3.1)Temperature Sensor Calculations:-

ADC Value

Voltage Input

0
255

-5V
+5V

Outside Temperature

Voltage Level

-55 deg C
150 deg C

-550 mV
1500 mV

ADC resolution 8 Bits


Increase in voltage per ADC value = 10/255 = 39.21 mV
Temperature Sensitivity of LM35D = Linear + 10.0 mV/C scale factor
Hence an increment in ADC value means an increase in 4 deg C
Based on above values we obtain following table after calculations:-

19

ADC Value

Temperature Value

113 < ADC < 129


128<ADC<167

-55 deg C to 0 deg C


0 deg C to 150 deg C

3.2) Humidity Sensor Calculations:-

Voltage Output

V out = Vps ( 0.0062 ( Sensor RH ) +. 16 )

RH Out

%RH= ((( 6.3 x Vout) Vps)-1) x 25.6

Vps = 5V
%RH= 32.256 Vout - 25.6

%RH = 1.3 (ADC Value) - 255

ADC Value

Voltage Input

0
255

0V
10V

ADC Value

% RH

Vout

21 < ADC < 100

0% to 100%

0.79 V to 3.893 V

20

4.) Flow Chart And Algorithm


Flow Chart :1 Start / Reset

START

YES

If Reset

Initialize Segment
Registers

Initialize LCD

Trigger ADC

Start Main Code

21

Flow Chart :2 ISR For Temperature-> C1H (Humidity -> C0H)

If
Interrupt

Yes

Calculate Temp.(Humidity) From ADC

Update LCD with


Changes

Trigger AD570 For


Next Conversion Cycle

22

Flow Chart :3 Main Algorithm


START

Check outside
Temperature

Check inside
Humidity

Calculate temperature

Temperature
/Humidity
range changed

No

23

Yes

Adjust Humidity

FIG 9

The main algorithm involves setting of specific humidity level on the basis of
outside temperature range. The following table illustrates this:-

24

Temperature Range

Humidity Setting

<-23 C
-23 C -> -17 C
-17 C -> -12 C
-12 C -> +0 C
>0 C

20%
25%
30%
35%
40%

Algorithm (Main):-

STEP 1:- Check outside temperature. (Calculations done on interrupt)


STEP 2:- Assign Humidity setting according to above table
STEP 3:- Check if inside humidity is below 2% less than assigned humidity
STEP 3.1:- If yes Switch on the humidifier
STEP 3.2:- If no Check if inside humidity is above or equal to assigned
humidity
STEP 3.2.1:- If yes Switch off the humidifier
STEP 3.2.2:- If no Continue the last state (ON/OFF) of the humidifier
STEP 4:- Repeat step 1

Note:- All the temperature and humidity calculations as well as LCD updates are
done in interrupt service routine (ISR).

25

5.) Assembly Language Program

;----------------------------ALP BEGINS---------------------------;#########################################
COUNT_1MS EQU 189
DELAY_TIME EQU WORD PTR DS:[0000H]
COMMD EQU BYTE PTR DS:[0002H]
; COMMAND LOCATION FOR LCD_CMD FUNCTION
RAM_ADDR EQU BYTE PTR DS:[0003H] ; RAM ADDRESSS FOR SET DD RAM ADDRESS FUNCT 06
DATA_OUT EQU BYTE PTR DS:[0004H] ; VARIABLE TO STORE DATA FOR LCD_DAT
STR_OUTT EQU BYTE PTR DS:[0005H] ;VARIABLE TO STORE STRING FOR LCD_STRING
TEMP EQU BYTE PTR DS:[0009H]
STR_OUTH EQU BYTE PTR DS:[0004H]
RH EQU BYTE PTR DS:[000DH]
PORT_B EQU BYTE PTR DS:[000EH]
READ_TEMP EQU BYTE PTR DS:[000FH] ;INPUT TEMP
NEG_TEMP EQU BYTE PTR DS:[0010H] ;1 IF TEMP NEG
SET_RH EQU BYTE PTR DS:[0011H]
;IDEAL RH VALUE TO BE SET
HUM_STAT EQU BYTE PTR DS:[0012H] ;1-> HUMIDIFIER ON
DATA_SEG EQU F800H
STACK_SEG EQU F002H
CODE_SEG EQU F840H
;IVT_SEG EQU 0000H
CODE_SEG_RESET EQU FFFFH
;#########################################
;____________________________________________________________
;|
ADDRESSES
|
;|
PORT A- 00H
(LCD)
|
;|
PORT B- 02H
(R/W , RS , E)
|
;|
PORT C- 04H
(HUMIDIFER, PULSE GENRETION FOR ADC)
|
;|
CRT REG- 06H
|
;|
TEMP-SENSOR- 08H
|
;|
HUMIDITY SENSOR- 10H
|
;|
|
;|
INTERRUPT BY TEMP ADC- 192 - HUMIDITY SENSOR
|
;|
- 193 - TEMP. SENSOR
|
;|________________________________________________________________ |

26

; ----------SEGMENT DEFINITIONS BEGIN--------------------------------------------------------------------------------

; ---------STACK SEG------------------------STACK_SEG
SEGMENT
'STACK'
ORG 0000
DW
100H DUP(0)
STACK_SEG
ENDS;
---------STACK SEG-------------------------

;stack-->

; ---------INTERUPT VECTOR TABLE ------------------------IVT_SEG SEGMENT


'DATA'
ORG 0768
;VECTOR NO. 192 HUMIDITY SENSOR
DW
INT_HUM
DW
CODE_SEG
ORG 0772
;VECTOR NO. 193 TEMPERATURE SENSOR
DW
INT_TEMP
DW
CODE_SEG
IVT_SEG ENDS
; ---------INTERUPT VECTOR TABLE END-------------------------

; ---------DATA SEG------------------------DATA_SEG
SEGMENT
'DATA'
ORG 0000
DATA_SEG
ENDS
; ---------DATA SEG ENDS-------------------------

; ---------CODE SEG-------------------------------CODE_SEG

SEGMENT

'CODE'

; ------------PROCEDURES BEGIN-------------------------------------------------------------------------------------------------

; ----------INTERRUPT FROM HUM-------------------------------------------------------------------

27

INT_HUM
proc
far
IN AL,10H
MOV CL,13
MUL CL
SUB AX,255
MOV CL,10
DIV CL
MOV RH,AL
;RH---RELATIVE HUMIDITY
O2:
; -------------UPDATE LCD WITH CHANGES--------------------------------------------------PUSH AX
PUSH BX
L1:

MOV BX,00
MOV AL,STR_OUTT[BX]
MOV DATA_OUT,AL
CALL lcd_write_data
INC BX
CMP
AL,'='

JNZ L1
POP BX
POP AX
CMP NEG_TEMP,1
JNZ POS_SIGN1
MOV AL,'-'
MOV DATA_OUT, AL
CALL lcd_write_data
JMP DISP_REST1
POS_SIGN1:
MOV AL,'+'
MOV DATA_OUT, AL
CALL lcd_write_data

DISP_REST1:
PUSH AX
AND AX,00H
MOV AL,TEMP
AAM
ADD AX,3030H
MOV DATA_OUT,AH
CALL lcd_write_data
MOV DATA_OUT,AL
CALL lcd_write_data
POP AX

28

;CONVERT TO ASCII

MOV AL,11011111B
MOV DATA_OUT, AL
CALL lcd_write_data

;ASCII VALUE FOR DEGEREE CHARACTER

MOV AL,'C'
MOV DATA_OUT, AL
CALL lcd_write_data
PUSH AX
PUSH BX
L2:

MOV BX,00
MOV AL,STR_OUTH[BX]
MOV DATA_OUT,AL
CALL lcd_write_data
INC BX
CMP
AL,'='

JNZ L2
POP BX
POP AX
PUSH AX
AND AX,00H
MOV AL,RH
AAM
ADD AX,3030H
MOV DATA_OUT,AH
CALL lcd_write_data
MOV DATA_OUT,AL
CALL lcd_write_data

;CONVERT TO ASCII

POP AX
MOV AL,'%'
MOV DATA_OUT, AL
CALL lcd_write_data
MOV COMMD,02H
CALL lcd_cmd
;RETURN CURSUR HOME HOME
;---------------------------------------------------------------------------------------------------------OUT 10H,AL
IRET
INT_HUM

;TRIGGER AD570 FOR NEXT CONVERSION CYCLE

endp

; ----------INTERRUPT FROM HUM ENDS------------------------------------------------------------------

; ----------INTERRUPT FROM TEMPERATURE SENSOR------------------------------------------------------------

29

INT_TEMP
proc
far
IN AL,08H
;TEMP VALUE FROM TEMP ADC
MOV READ_TEMP,AL
SUB AL,114
CMP AL,14
JB NEGTIVE
POS:
SUB AL,14
MOV CL,4
MUL CL
MOV TEMP,AL
MOV NEG_TEMP,0
JMP O1
NEGTIVE:
MOV CL,4
MUL CL
MOV TEMP,AL
MOV NEG_TEMP,1
O1:
; -------------UPDATE LCD WITH CHANGES--------------------------------------------------PUSH AX
PUSH BX
L1:

MOV BX,00
MOV AL,STR_OUTT[BX]
MOV DATA_OUT,AL
CALL lcd_write_data
INC BX
CMP
AL,'='

JNZ L1
POP BX
POP AX

CMP NEG_TEMP,1
JNZ POS_SIGN2
MOV AL,'-'
MOV DATA_OUT, AL
CALL lcd_write_data
JMP DISP_REST2
POS_SIGN2:
MOV AL,'+'
MOV DATA_OUT, AL
CALL lcd_write_data

DISP_REST2:

30

PUSH AX
AND AX,00H
MOV AL,TEMP
AAM
ADD AX,3030H
MOV DATA_OUT,AH
CALL lcd_write_data
MOV DATA_OUT,AL
CALL lcd_write_data

;CONVERT TO ASCII

POP AX
MOV AL,11011111B
MOV DATA_OUT, AL
CALL lcd_write_data

;ASCII VALUE FOR DEGEREE CHARACTER

MOV AL,'C'
MOV DATA_OUT, AL
CALL lcd_write_data
PUSH AX
PUSH BX
L2:

MOV BX,00
MOV AL,STR_OUTH[BX]
MOV DATA_OUT,AL
CALL lcd_write_data
INC BX
CMP
AL,'='

JNZ L2
POP BX
POP AX
PUSH AX
AND AX,00H
MOV AL,RH
AAM
ADD AX,3030H
MOV DATA_OUT,AH
CALL lcd_write_data
MOV DATA_OUT,AL
CALL lcd_write_data

;CONVERT TO ASCII

POP AX
MOV AL,'%'
MOV DATA_OUT, AL
CALL lcd_write_data
MOV COMMD,02H
CALL lcd_cmd
;RETURN CURSUR HOME HOME
;----------------------------------------------------------------------------------------------------------

31

OUT 08H,AL
IRET
INT_TEMP

;TRIGGER AD570 FOR NEXT CONVERSION CYCLE

endp

; ----------INTERRUPT FROM TEMP END-------------------------------------------------------------------

; --------------LCD BUSY CHECK FUNCTION----------------------------------------------------------------------------------lcd_busy proc near ;FUNCTION TO CHECK BUSY FLAG STATUS
PUSH AX
MOV AL,10010000B
OUT 06H,AL
MOV AL,00000001B
OUT 02H,AL

;PORT A INPUT MODE, PORT B IN OUTPUT MODE

;READ MODE OF LCD

CALL lcd_enable
BUSY_LOOP:
IN AL,00H
AND AL,10000000B ; CHECK FOR BUSY FLAG
JNZ BUSY_LOOP
MOV AL,10000000B
OUT 06H,AL

;PORT A OUTPUT MODE, PORT B OUTPUT MODE

MOV AL,PORT_B
OUT 02H,AL

POP AX
RET
lcd_busy endp
; --------------LCD BUSY CHECK FUNCTION ENDS-------------------------------------------------------------------------------

; --------------LCD INTIALIZATION FUNCTIONS---------------------------------------------------------------------------------lcd_init proc near


PUSH AX
MOV AL,10000000B
OUT 06H,AL
PUSH CX
MOV AL,COUNT_1MS

32

;PORT A OUTPUT MODE, PORT B OUTPUT MODE


;INITIATE INITIALIZATION SEQUENCE

; CALCULATE THE NO. OF LOOPS REQUIRED FOR 1msec DELAY

MOV CL,15
MUL CL
MOV CX,AX
DELAY_LOOP:
NOP ;600ns
NOP ;600ns
NOP ;600ns
LOOP DELAY_LOOP
POP CX

AND AL,00H
OUT 02H,AL
MOV PORT_B,AL
MOV AL,00110000B
OUT 00H,AL
CALL lcd_enable

PUSH CX
MOV AL,COUNT_1MS
MOV CL,4
MUL CL
MOV CX,AX
DELAY_LOOP1:
NOP ;600ns
NOP ;600ns
NOP ;600ns
LOOP DELAY_LOOP1
POP CX

MOV AL,00110000B
OUT 00H,AL
CALL lcd_enable
PUSH CX
MOV AL,COUNT_1MS
MOV CL,1
MUL CL
MOV CX,AX
DELAY_LOOP2:
NOP ;600ns
NOP ;600ns
NOP ;600ns
LOOP DELAY_LOOP2
POP CX

MOV AL,00110000B
OUT 00H,AL
CALL lcd_enable
CALL lcd_busy

33

;15 ms

;CLEAR PORTB
;FUNCTION SET COMMAND (FOR 8 BIT INTERFACE)

; CALCULATE THE NO. OF LOOPS REQUIRED FOR 1msec DELAY


;4 ms

;FUNCTION SET COMMAND (FOR 8 BIT INTERFACE)

; CALCULATE THE NO. OF LOOPS REQUIRED FOR 1msec DELAY

;FUNCTION SET COMMAND (FOR 8 BIT INTERFACE)

MOV AL,00110000b
OUT 00H,AL
CALL lcd_enable
CALL lcd_busy

; FUNCTION SET LINES -1 FONT 5*7 DOT MATRIX

MOV AL,00001000B ;DISP OFF


OUT 00H,AL
CALL lcd_enable
CALL lcd_busy

MOV AL,00000001B ;CLEAR DISP


OUT 00H,AL
CALL lcd_enable
CALL lcd_busy

MOV AL,00000110B ; ENTRY MODE SET


OUT 00H,AL
CALL lcd_enable
CALL lcd_busy
MOV AL,00001100B ;CURSOR OFF,BLINK OFF
OUT 00H,AL
CALL lcd_enable
CALL lcd_busy
POP AX
RET
lcd_init endp
; -------------LCD INITIALIZATION ENDS-----------------------------------------------------------------------------------

; --------------LCD ENABLE PULSE FUNCTION------------------------------------------------------------------------------

lcd_enable proc near


PUSH

AX
MOV AL,10000000B
OUT 06H,AL
MOV AL,PORT_B
AND AL,11111011B
OUT 02H,AL
MOV AL,PORT_B
OR AL,00000100B
OUT 02H,AL
NOP
NOP

34

;PORT A OUTPUT MODE, PORT B OUTPUT MODE

MOV AL,PORT_B
AND AL,11111011B
OUT 02H,AL
POP
AX
RET
lcd_enable endp;
--------------LCD ENABLE ENDS-----------------------------------------------------------------------------------------------

; --------------LCD COMMAND FUNCTION----------------------------------------------------------------------------------lcd_cmd proc near


PUSH AX
CALL lcd_busy
MOV AL,10000000B
OUT 06H,AL
AND AL,00H
OUT 02H,AL
MOV PORT_B,AL
MOV BL,COMMD
CMP BL,1
JNZ C2
MOV AL,00000001B
OUT 00H,AL

;PORT A OUTPUT MODE, PORT B OUTPUT MODE

;CLEAR PORTB

;1-CLEAR SCREEN

JMP OUT_CMD
C2:
CMP BL,2
JNZ C3
MOV AL,00000010B
OUT 00H,AL

;2-CURSOR HOME

JMP OUT_CMD
C3:
CMP BL,3
;3-ENTRY MODE SET
JNZ C4
MOV AL,00000110B ; SHIFT OFF IMCREMENT MODE
OUT 00H,AL
JMP OUT_CMD
C4:
CMP BL,4
JNZ C5
MOV AL,00010000B

35

;4-CURSOR POS SHIFT_LEFT

OUT 00H,AL
JMP OUT_CMD
C5:
CMP BL,5
JNZ C6
MOV AL,00010100B
OUT 00H,AL

;5-CURSOR POS SHIFT_RIGHT

JMP OUT_CMD
C6:
CMP BL,6
;6-SET DD RAM ADDRESS
JNZ OUT_CMD
MOV AL,RAM_ADDR
OR AL,10000000B ; TO SET DB7
OUT 00H,AL
JMP OUT_CMD

OUT_CMD:
CALL lcd_enable
CALL lcd_busy
POP AX
RET
lcd_cmd endp
; --------------LCD COMMAND FUNCTION ENDS--------------------------------------------------------------------------------

; --------------LCD WRITE DATA FUNCTION--------------------------------------------------------------------------------------lcd_write_data proc near


PUSH AX
CALL lcd_busy
MOV AL,10000000B
OUT 06H,AL

;PORT A OUTPUT MODE, PORT B OUTPUT MODE

MOV AL,00000010B
OUT 02H,AL
MOV PORT_B,AL

;RS=1 R/W=0

MOV AL,DATA_OUT
OUT 00H,AL
CALL lcd_enable
CALL lcd_busy
POP AX

36

RET
lcd_write_data endp
; --------------LCD WRITE DATA FUNCTION ENDS-------------------------------------------------------------------------------

; ---------------PROCEDURES END-------------------------------------------------------------------------------------------------

; ----------------MAIN CODE BEGINS-------------------------------------------------------------------------------------------

MAIN

PROC FAR

; ---------------INTIALIZION CODE-------------------------------------MOV AX,STACK_SEG


MOV SS,AX
MOV
MOV

AX,01FFH
SP,AX

MOV
MOV
MOV

AX,DATA_SEG
DS,AX
ES,AX

MOV
MOV
MOV
MOV
MOV

STR_OUTT[0],'T'
STR_OUTT[1],'E'
STR_OUTT[2],'M'
STR_OUTT[3],'P'
STR_OUTT[4],'='

MOV
MOV
MOV

STR_OUTH[0],'R'
STR_OUTH[1],'H'
STR_OUTH[2],'='

XOR
XOR
XOR
XOR
XOR
XOR
XOR

AX,AX
BX,BX
CX,CX
DX,DX
BP,BP
SI,SI
DI,DI

;100HX2-1H=01FFH

CALL lcd_init

;INITIALIZE LCD

MOV COMMD,01H
CALL lcd_cmd

;CLEAR DISPLAY

STI
;ENABLE INTERRUPT FLAG
; -------------TRIGGER ADC CONVERSION CYCLE--------------------------

37

AND AL,00H
OUT 08H,AL
OUT 10H,AL
;-----------------INTITILIZATION ENDS-----------------------------------------

;-------------------ALGORITHM BEGINS--------------------------------------------------------------------------------------------;|----------------------SENSOR ALGORITHM--------------------------------;| TEMP -55 C -> -23 C -> 20% HUMIDITY
|
;| TEMP -23 C -> -17 C -> 25% HUMIDITY
|
;| TEMP -17 C -> -12 C -> 30% HUMIDITY
|
;| TEMP -12 C -> +0 C -> 35% HUMIDITY
|
;| TEMP +0 C -> +10 C -> 50% HUMIDITY
|
;|---------------------------------------------------------------------------------ALGO_LOOP:
CMP NEG_TEMP,1
JNZ ALGO_POS
CMP TEMP,23
JB ALGO_1
MOV SET_RH,20
JMP ADJ_HUM
ALGO_1:
CMP TEMP,17
JB ALGO_2
MOV SET_RH,25
JMP ADJ_HUM
ALGO_2:
CMP TEMP,12
JB ALGO_3
MOV SET_RH,30
JMP ADJ_HUM
ALGO_3:
MOV SET_RH,35

JMP ADJ_HUM
ALGO_POS:
MOV SET_RH,50
ADJ_HUM:

38

MOV AL,RH
MOV AH,SET_RH
SUB AH,2
CMP AH,AL
JB SWITCH_ON
ADD AH,2
CMP AH,AL
JB ALGO_LOOP
MOV AL,00000000B
OUT 06H,AL

;BSR MODE FOR 8255 (CLEAR PC0 TO SWITCH OFF HUMIDIFIER)

JMP ALGO_LOOP
SWITCH_ON:
MOV AL,00000001B
OUT 06H,AL

;BSR MODE FOR 8255 (SET PC0 TO SWITCH ON HUMIDIFIER)

JMP ALGO_LOOP
; ----------------ALGORITHM ENDS-------------------------------------------------------------------------------------------------MAIN ENDP

;JMP LOOP

CODE_SEG

ENDS

;---------CODE SEG ENDS-------------------------------------------------------------------------------------------------------------

;---------RESET CODE SEG-----------------------------------------------------------------------------------------------------------CODE_SEG_RESET


SEGMENT
'CODE' ;CODE_SEG_RESET -CS=FFFFH -IP=0000H
JMP
FAR
PTR
MAIN
CODE_SEG_RESET
ENDS
;---------RESET CODE SEG------------------------------------------------------------------------------------------------------------

END MAIN

;-------------------------------ALP ENDS---------------------------

39

6.) Assembled Code

;-----------------------Assembled Code Begins-------------------; _______________________________________________________________________


;|
ADDRESSES
|
;|
PORT A- 00H
(LCD)
|
;|
PORT B- 02H
(R/W , RS , E)
|
;|
PORT C- 04H (HUMIDIFER, PULSE GENRETION FOR ADC)
|
;|
CRT REG- 06H
|
;|
TEMP-SENSOR- 08H
|
;|
HUMIDITY SENSOR- 10H
|
;|
|
;|
INTERRUPT BY TEMP ADC- 192 - HUMIDITY SENSOR
|
;|
193 - TEMP. SENSOR
|
;|_______________________________________________________________________|
;---------STACK SEG------------------------F002:0000-F002:01FF
;DW 100H
;---------STACK SEG------------------------;---------INTERUPT VECTOR TABLE ------------------------0000:0300 00
0000:0301 00
;DW
0000
;IP FOR INT_HUM
0000:0302 40
;CODE_SEG_L ;DW
CODE_SEG
0000:0303 F8
;CODE_SEG_H
0000:0304 A4
;DW
00A4
;IP FOR INT_TEMP
0000:0305 00
0000:0306 40
; CODE_SEG
0000:0307 F8
;---------INTERUPT VECTOR TABLE END-------------------------

;---------DATA SEG------------------------F000:0000
; DELAY_TIME
F000:0002
; COMMD COMMAND LOCATION FOR LCD_CMD FUNCTION
F000:0003
;RAM_ADDR RAM ADDRESSS FOR SET DD RAM ADDRESS FUNCT 06
F000:0004
;DATA_OUT VARIABLE TO STORE DATA FOR LCD_DAT
F000:0005
;STR_OUTT VARIABLE TO STORE STRING FOR LCD_STRING
F000:0009
;TEMP
F000:000A
;STR_OUTH
F000:000D
;RH
F000:000E
;PORT_B

40

F000:000F
;READ_TEMP -INPUT TEMP
F000:0010
;NEG_TEMP-1 IF TEMP NEG
F000:0011
;SET_RH IDEAL RH VALUE TO BE SET
F000:0012
;HUM_STAT-1-> HUMIDIFIER ON
;---------DATA SEG END------------------------;---------CODE SEG------------------------;------------PROCEDURES--------------------------------------------------------------------------------;----------INTERRUPT FROM HUM------------------------------------------------------------------F840:0000 E410
IN AL,10
F840:0002 B10D
MOV CL,0D
F840:0004 F6E1
MUL CL
F840:0006 2DFF00
SUB AX,00FF
F840:0009 B10A
MOV CL,0A
F840:000B F6F1
DIV CL
F840:000D A20D00
MOV [000D],AL
;-------------UPDATE LCD WITH CHANGES--------------------------------------------------F840:0010 50
PUSH AX
F840:0011 53
PUSH BX
F840:0012 BB0000 MOV BX,0000
F840:0015 8A4705 MOV AL,[BX+05]
F840:0018 A20400 MOV [0004],AL
F840:001B E86D02 CALL 028B
F840:001E 43
INC BX
F840:001F 3C3D
CMP AL,3D
F840:0022 75F1
JNZ 0015
F840:0024 5B
POP BX
F840:0025 58
POP AX
F840:0021 75F2
JNZ 0015
F840:0023 5B
POP BX
F840:0024 58
POP AX
F840:0025 803E100001 CMP BYTE PTR [0010],01
F840:002A 750A
JNZ 0036
F840:002C B02D
MOV AL,2D
F840:002E A20400
MOV [0004],AL
F840:0031 E85702
CALL 028B
F840:0034 EB08
JMP 003E
F840:0036 B02B
MOV AL,2B
F840:0038 A20400
MOV [0004],AL
F840:003B E84D02
CALL 028B
F840:003E 50
PUSH AX
F840:003F 83E000
AND AX,+00
F840:0042 A00900
MOV AL,[0009]
F840:0045 D40A
AAM
F840:0047 053030
ADD AX,3030
F840:004A 88260400
MOV [0004],AH
F840:004E E83A02
CALL 028B
F840:0051 A20400
MOV [0004],AL
F840:0054 E83402
CALL 028B
F840:0057 58
POP AX
F840:0058 B0DF
MOV AL,DF
F840:005A A20400
MOV [0004],AL
F840:005D E82B02
CALL 028B

41

F840:0060 B043
F840:0062 A20400
F840:0065 E82302
F840:0068 50
F840:0069 53
F840:006A BB0000
F840:006D 8A4704
F840:0070 A20400
F840:0073 E81502
F840:0076 43
F840:0077 3C3D
F840:0079 75F2
F840:007B 5B
F840:007C 58
F840:007D 50
F840:007E 83E000

MOV

AL,43

MOV [0004],AL
CALL 028B
PUSH AX
PUSH BX
MOV BX,0000
MOV AL,[BX+04]
MOV [0004],AL
CALL 028B
INC BX
CMP AL,3D
JNZ 006D
POP BX
POP AX
PUSH AX
AND AX,+00

F840:0081 A00D00
MOV AL,[000D]
F840:0084 D40A
AAM
F840:0086 053030
ADD AX,3030
F840:0089 88260400
MOV [0004],AH
F840:008D E8FB01
CALL 028B
F840:0090 A20400
MOV [0004],AL
F840:0093 E8F501
CALL 028B
F840:0096 58
POP AX
F840:0097 B025
MOV AL,25
F840:0099 A20400
MOV [0004],AL
F840:009C E8EC01
CALL 028B
F840:009F C606020002 MOV BYTE PTR [0002],02
F840:00A4 E88401
CALL 022B
;---------------------------------------------------------------------------------------------------------F840:00A7 E610
OUT 10,AL
F840:00A9 CF
IRET
;----------INTERRUPT FROM HUM END-----------------------------------------------------------------;----------INTERRUPT FROM TEMP------------------------------------------------------------------F840:00A4 E88401
CALL 022B
F840:00A7 E610
OUT 10,AL
F840:00A9 CF
IRET
F840:00AA E408
IN
AL,08
F840:00AC A20F00
MOV [000F],AL
F840:00AF 2C72
SUB AL,72
F840:00B1 3C0E
CMP AL,0E
F840:00B3 7210
JB 00C5
F840:00B5 2C0E
SUB AL,0E
F840:00B7 B104
MOV CL,04
F840:00B9 F6E1
MUL CL
F840:00BB A20900
MOV [0009],AL
F840:00BE C606100000 MOV BYTE PTR [0010],00
F840:00C3 EB0C
JMP 00D1
F840:00C5 B104

42

MOV

CL,04

F840:00C7 F6E1
MUL CL
F840:00C9 A20900
MOV [0009],AL
F840:00CC C606100001 MOV BYTE PTR [0010],01
;-------------UPDATE LCD WITH CHANGES--------------------------------------------------F840:00D1 50
PUSH AX
F840:00D2 53
PUSH BX
F840:00D3 BB0000
MOV BX,0000
F840:00D6 8A4705
MOV AL,[BX+05]
F840:00D9 A20400
MOV [0004],AL
F840:00DC E8AC01
CALL 028B
F840:00DF 43
INC BX
F840:00E0 3C3D
CMP AL,3D
F840:00E2 75F2
JNZ 00D6
F840:00E4 5B
POP BX
F840:00E5 58
POP AX
F840:00E6 803E100001 CMP BYTE PTR [0010],01
F840:00EB 750A
JNZ 00F7
F840:00ED B02D
MOV AL,2D
F840:00EF A20400
MOV [0004],AL
F840:00F2 E89601
CALL 028B
F840:00F5 EB08
JMP 00FF
F840:00F7 B02B
MOV AL,2B
F840:00F9 A20400
MOV [0004],AL
F840:00FC E88C01
CALL 028B
F840:00FF 50
PUSH AX
F840:0100 83E000
AND AX,+00
F840:0103 A00900
MOV AL,[0009]
F840:0106 D40A
AAM
F840:0108 053030
ADD AX,3030
F840:010B 88260400
MOV [0004],AH
F840:010F E87901
CALL 028B
F840:0112 A20400
MOV [0004],AL
F840:0115 E87301
CALL 028B
F840:0118 58
POP AX
F840:0119 B0DF
MOV AL,DF
F840:011B A20400
MOV [0004],AL
F840:011E E86A01
CALL 028B
F840:0121 B043
MOV AL,43
F840:0123 A20400
MOV [0004],AL
F840:0126 E86201
F840:0129 50
F840:012A 53
F840:012B BB0000
F840:012E 8A4704
F840:0131 A20400
F840:0134 E85401
F840:0137 43
F840:0138 3C3D
F840:013A 75F2
F840:013C 5B
F840:013D 58
F840:013E 50

43

CALL 028B
PUSH AX
PUSH BX
MOV BX,0000
MOV AL,[BX+04]
MOV [0004],AL
CALL 028B
INC BX
CMP AL,3D
JNZ 012E
POP BX
POP AX
PUSH AX

F840:013F 83E000
AND AX,+00
F840:0142 A00D00
MOV AL,[000D]
F840:0145 D40A
AAM
F840:0147 053030
ADD AX,3030
F840:014A 88260400
MOV [0004],AH
F840:014E E83A01
CALL 028B
F840:0151 A20400
MOV [0004],AL
F840:0154 E83401
CALL 028B
F840:0157 58
POP AX
F840:0158 B025
MOV AL,25
F840:015A A20400
MOV [0004],AL
F840:015D E82B01
CALL 028B
F840:0160 C606020002 MOV BYTE PTR [0002],02
F840:0165 E8C300
CALL 022B
;---------------------------------------------------------------------------------------------------------F840:0168 E608
OUT 08,AL
F840:016A CF
IRET
;----------INTERRUPT FROM TEMP END------------------------------------------------------------------;--------------LCD BUSY----------------------------------------------------------------------------------F840:016B 50
PUSH AX
F840:016C B090
MOV AL,90
F840:016E E606
OUT 06,AL
F840:0170 B001
MOV AL,01
F840:0172 E602
OUT 02,AL
F840:0174 E89600
CALL 020D
F840:0177 E400
IN AL,00
F840:0179 2480
AND AL,80
F840:017B 75FA
JNZ 0177
F840:017D B080
MOV AL,80
F840:017F E606
OUT 06,AL
F840:0181 A00E00
MOV AL,[000E]
F840:0184 E602
OUT 02,AL
F840:0186 58
POP AX
F840:0187 C3
RET
;--------------LCD BUSY END----------------------------------------------------------------------------------;--------------LCD INTIALIZE----------------------------------------------------------------------------------F840:0188 50
PUSH AX
F840:0189 B080
MOV AL,80
F840:018B E606
OUT 06,AL
F840:018D 51
PUSH CX
F840:018E B0BD
MOV AL,BD
F840:0190 B10F
MOV CL,0F
F840:0192 F6E1
MUL CL
F840:0194 8BC8
MOV CX,AX
F840:0196 90
NOP
F840:0197 90
NOP
F840:0198 90
NOP
F840:0199 E2FB
LOOP 0196
F840:019B 59
POP CX
F840:019C 2400
AND AL,00
F840:019E E602
OUT 02,AL
F840:01A0 A20E00
MOV [000E],AL
F840:01A3 B030
MOV AL,30

44

F840:01A5 E600
OUT 00,AL
F840:01A7 E86300
CALL 020D
F840:01AA 51
PUSH CX
F840:01AB B0BD
MOV AL,BD
F840:01AD B104
MOV CL,04
F840:01AF F6E1
MUL CL
F840:01B1 8BC8
MOV CX,AX
F840:01B3 90
NOP
F840:01B4 90
NOP
F840:01B5 90
NOP
F840:01B6 E2FB
LOOP 01B3
F840:01B8 59
POP CX
F840:01B9 B030
MOV AL,30
F840:01BB E600
OUT 00,AL
F840:01BD E84D00
CALL 020D
F840:01C0 51
PUSH CX
F840:01C1 B0BD
MOV AL,BD
F840:01C3 B101
MOV CL,01
F840:01C5 F6E1
MUL CL
F840:01C7 8BC8
MOV CX,AX
F840:01C9 90
NOP
F840:01CA 90
NOP
F840:01CB 90
NOP
F840:01CC E2FB
LOOP 01C9
F840:01CE 59
POP CX
F840:01CF B030
MOV AL,30
F840:01D1 E600
OUT 00,AL
F840:01D3 E83700
CALL 020D
F840:01D6 E892FF
CALL 016B
F840:01D9 B030
MOV AL,30
F840:01DB E600
OUT 00,AL
F840:01DD E82D00
CALL 020D
F840:01E0 E888FF
CALL 016B
F840:01E3 B008
MOV AL,08
F840:01E5 E600
OUT 00,AL
F840:01E7 E82300
CALL 020D
F840:01EA E87EFF
CALL 016B
F840:01ED B001
MOV AL,01
F840:01EF E600
OUT 00,AL
F840:01F1 E81900
CALL 020D
F840:01F4 E874FF
CALL 016B
F840:01F7 B006
MOV AL,06
F840:01F9 E600
OUT 00,AL
F840:01FB E80F00
CALL 020D
F840:01FE E86AFF
CALL 016B
F840:0201 B00C
MOV AL,0C
F840:0203 E600
OUT 00,AL
F840:0205 E80500
CALL 020D
F840:0208 E860FF
CALL 016B
F840:020B 58
POP AX
F840:020C C3
RET
;--------------LCD INITIALIZATION END----------------------------------------------------------------------------------;--------------LCD ENABLE----------------------------------------------------------------------------------F840:020D 50
PUSH AX

45

F840:020E B080
MOV AL,80
F840:0210 E606
OUT 06,AL
F840:0212 A00E00
MOV AL,[000E]
F840:0215 24FB
AND AL,FB
F840:0217 E602
OUT 02,AL
F840:0219 A00E00
MOV AL,[000E]
F840:021C 0C04
OR AL,04
F840:021E E602
OUT 02,AL
F840:0220 90
NOP
F840:0221 90
NOP
F840:0222 A00E00
MOV AL,[000E]
F840:0225 24FB
AND AL,FB
F840:0227 E602
OUT 02,AL
F840:0229 58
POP AX
F840:022A C3
RET
;--------------LCD ENABLE-----------------------------------------------------------------------------------

;--------------LCD COMMAND----------------------------------------------------------------------------------F840:022B 50
PUSH AX
F840:022C E83CFF
CALL 016B
F840:022F B080
MOV AL,80
F840:0231 E606
OUT 06,AL
F840:0233 2400
AND AL,00
F840:0235 E602
OUT 02,AL
F840:0237 A20E00
MOV [000E],AL
F840:023A 8A1E0200
MOV BL,[0002]
F840:023E 80FB01
CMP BL,01
F840:0241 7506
JNZ 0249
F840:0243 B001
MOV AL,01
F840:0245 E600
OUT 00,AL
F840:0247 EB3A
JMP 0283
F840:0249 80FB02
CMP BL,02
F840:024C 7506
JNZ 0254
F840:024E B002
MOV AL,02
F840:0250 E600
OUT 00,AL
F840:0252 EB2F
JMP 0283
F840:0254 80FB03
CMP BL,03
F840:0257 7506
JNZ 025F
F840:0259 B006
MOV AL,06
F840:025B E600
OUT 00,AL
F840:025D EB24
JMP 0283
F840:025F 80FB04
CMP BL,04
F840:0262 7506
JNZ 026A
F840:0264 B010
MOV AL,10
F840:0266 E600
OUT 00,AL
F840:0268 EB19
JMP 0283
F840:026A 80FB05
CMP BL,05
F840:026D 7506
JNZ 0275
F840:026F B014
MOV AL,14
F840:0271 E600
OUT 00,AL
F840:0273 EB0E
JMP 0283
F840:0275 80FB06
CMP BL,06
F840:0278 7509
JNZ 0283
F840:027A A00300
MOV AL,[0003]

46

F840:027D 0C80
OR
AL,80
F840:027F E600
OUT 00,AL
F840:0281 EB00
JMP 0283
F840:0283 E887FF
CALL 020D
F840:0286 E8E2FE
CALL 016B
F840:0289 58
POP AX
F840:028A C3
RET
;--------------LCD COMMAND END-----------------------------------------------------------------------------------

;--------------LCD WRITE----------------------------------------------------------------------------------F840:028B 50
PUSH AX
F840:028C E8DCFE
CALL 016B
F840:028F B080
MOV AL,80
F840:0291 E606
OUT 06,AL
F840:0293 B002
MOV AL,02
F840:0295 E602
OUT 02,AL
F840:0297 A20E00
MOV [000E],AL
F840:029A A00400
MOV AL,[0004]
F840:029D E600
OUT 00,AL
F840:029F E86BFF
CALL 020D
F840:02A2 E8C6FE
CALL 016B
F840:02A5 58
POP AX
F840:02A6 C3
RET
;--------------LCD WRITE END----------------------------------------------------------------------------------;---------------PROCEDURES END---------------------------------------------------------------------------;----------------MAIN CODE BEGINS---------------------------------------------------------------------------;---------------INTIALIZING CODE-------------------------------------F840:02A7 B89214
MOV AX,F002H
F840:02AA 8ED0
MOV SS,AX
F840:02AC B8FF01
MOV AX,01FF
F840:02AF 8BE0
MOV SP,AX
F840:02B1 B8E314
MOV AX,F000
F840:02B4 8ED8
MOV DS,AX
F840:02B6 8EC0
MOV ES,AX
F840:02B8 C606050054 MOV BYTE PTR [0005],54
F840:02BD C606060045 MOV BYTE PTR [0006],45
F840:02C2 C60607004D MOV BYTE PTR [0007],4D
F840:02C7 C606080050 MOV BYTE PTR [0008],50
F840:02CC C60609003D MOV BYTE PTR [0009],3D
F840:02D1 C606040052 MOV BYTE PTR [0004],52
F840:02D6 C606050048 MOV BYTE PTR [0005],48
F840:02DB C60606003D MOV BYTE PTR [0006],3D
F840:02E0 33C0
XOR AX,AX
F840:02E2 33DB
XOR BX,BX
F840:02E4 33C9
XOR CX,CX
F840:02E6 33D2
XOR DX,DX
F840:02E8 33ED
XOR BP,BP
F840:02EA 33F6
XOR SI,SI
F840:02EC 33FF
XOR DI,DI
F840:02EE E897FE
CALL 0188
F840:02F1 C606020001 MOV BYTE PTR [0002],01
F840:02F6 E832FF
CALL 022B

47

F840:02F9 FB
STI
;-------------TRIGGER ADC CONVERSION CYCLE-------------------------F840:02FA 2400
AND AL,00
F840:02FC E608
OUT 08,AL
F840:02FE E610
OUT 10,AL
;-----------------INTITILIZATION ENDS---------------------------------;-------------------ALGORITHM BEGINS---------------------------------F840:0300 803E100001 CMP BYTE PTR [0010],01
F840:0305 7531
JNZ 0338
F840:0307 803E090017 CMP BYTE PTR [0009],17
F840:030C 7207
JB
0315
F840:030E C606110014 MOV BYTE PTR [0011],14
F840:0313 EB28
JMP 033D
F840:0315 803E090011 CMP BYTE PTR [0009],11
F840:031A 7207
JB
0323
F840:031C C606110019 MOV BYTE PTR [0011],19
F840:0321 EB1A
JMP 033D
F840:0323 803E09000C CMP BYTE PTR [0009],0C
F840:0328 7207
JB 0331
F840:032A C60611001E MOV BYTE PTR [0011],1E
F840:032F EB0C
JMP 033D
F840:0331 C606110023 MOV BYTE PTR [0011],23
F840:0336 EB05
JMP 033D
F840:0338 C606110032 MOV BYTE PTR [0011],32
F840:033D A00D00
MOV AL,[000D]
F840:0340 8A261100
MOV AH,[0011]
F840:0344 80EC02
SUB AH,02
F840:0347 38C4
CMP AH,AL
F840:0349 720D
JB
0358
F840:034B 80C402
ADD AH,02
F840:034E 38C4
CMP AH,AL
F840:0350 72AE
JB
0300
F840:0352 B000
MOV AL,00
F840:0354 E606
OUT 06,AL
F840:0356 EBA8
JMP 0300
F840:0358 B001
MOV AL,01
F840:035A E606
OUT 06,AL
F840:035C EBA2
JMP 0300
;----------------ALGORITHM ENDS----------------------------;---------CODE SEG ENDS------------------------;---------CODE SEG RESET------------------------FFFF:0000 EAA70201F0 JMP F840:02A7
;---------CODE SEG RESET-------------------------

;----------------------------Assembled Code Ends-------------------48

You might also like