0% found this document useful (0 votes)
80 views23 pages

Ultrasonic Based Distance Measurement System

This document summarizes an ultrasonic based distance measurement system. It uses pulse echo timing to calculate distance. Ultrasonic waves are transmitted and the echo is received and the time delay between is used to calculate distance based on speed of sound. The system includes an ultrasonic transmitter, receiver, amplifier, comparator, microcontroller and LCD display. It can measure distance up to 4 meters with accuracy dependent on surface perpendicularly reflecting the waves back. Potential applications include industrial measurement and parking assistance systems.

Uploaded by

anshu_ranjan1
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
80 views23 pages

Ultrasonic Based Distance Measurement System

This document summarizes an ultrasonic based distance measurement system. It uses pulse echo timing to calculate distance. Ultrasonic waves are transmitted and the echo is received and the time delay between is used to calculate distance based on speed of sound. The system includes an ultrasonic transmitter, receiver, amplifier, comparator, microcontroller and LCD display. It can measure distance up to 4 meters with accuracy dependent on surface perpendicularly reflecting the waves back. Potential applications include industrial measurement and parking assistance systems.

Uploaded by

anshu_ranjan1
Copyright
© Attribution Non-Commercial (BY-NC)
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 23

Ultrasonic Based Distance Measurement System

Abstract
The report details the implementation of distance measurement system using the
ultrasonic waves. As the human ears audible perception range is 20 Hz to 20 kHz, it is
insensitive to ultrasonic waves, and hence the ultrasound waves can be used for applications in
industries/vehicles without hindering human activity. They are widely used as range meters and
proximity detectors in industries also it can be used in parking assistance system. The distance
can be measured using pulse echo and phase measurement method. Here the pulse echo method
is used. The measurement unit uses a continuous signal in the transmission frequency range of
ultrasonic transducers. The signal is transmitted by an ultrasonic transducer, reflected by an
obstacle and received by another transducer where the signal is detected. The time delay of the
transmitted and the received signal corresponds to the distance between the system and the
obstacle.

1. Introduction
The techniques of distance measurement using ultrasonic in air include continuous wave
and pulse echo technique. In the pulse echo method, a burst of pulses is sent through the
transmission medium and is reflected by an object kept at specified distance. The time taken for
the pulse to propagate from transmitter to receiver is proportional to the distance of object. For
contact less measurement of distance, the device has to rely on the target to reflect the pulse
back to itself. The target needs to have a proper orientation that is it needs to be perpendicular to
the direction of propagation of the pulses. The amplitude of the received signal gets significantly
attenuated and is a function of nature of the medium and the distance between the transmitter
and target. The pulse echo or time-of-flight method of range measurement is subject to high
levels of signal attenuation when used in an air medium, thus limiting its distance range.
2. Design procedure
The circuit has been divided into two divisions.
(i) Digital section- micro controller and LCD display unit with 5volt power supply
(ii) Analog section
(a)
Transmitting side - Ultrasonic transducers, gain amplifier using uA741 CD4066
CMOS analog switch.
(b)
Receiving side - TL084 comparator, gain amplifier, voltage limiter.
(c)
+15V and -15V power supply.
The overall block diagram is shown in Fig.1.

DISPLAY

Function
Generator

Transmitter

Microcontroller

Switch

Gain
Amplifier

Voltage
Limiter

Comparator

Gain
Amplifier

Target

Receiver

Fig. 1: Block Diagram

2.1 Transmitting unit


Switch
An analog switch CD4066 is used to allow the sine wave from function generator to the
gain amplifier. The excitation to the Transmitter is given from the Function generator through
the switch which can be digitally controlled. As the switch can pass only positive voltages, the
40kHz, 1Vp-p, sine wave from the function generator is given a DC shift of 0.5V.
Microcontroller.
This system of distance measurement does not require large amount of memory, hence a 20
pin 8051 based microcontroller AT89C2051, is chosen as the controller with 12MHz clock. It
performs the operation of giving the switching signal, computing the distance, converting the
hex value to decimal and then to ASCII to be displayed in the LCD.
Gain Amplifier
As the 40 kHz sine wave cannot be passed through the analog switch 4066, a gain amplifier
with level shifter is required. Both are integrated and built using A741 opamp.
2.2 Receiver unit
Amplifier
The frequency of the received pulse is of 40 kHz which requires amplifiers working at high
frequency. TL084 is used, as it has good high frequency gain characteristics. The gain of the
amplifier is set to 1000 in two stages with first being 100 and second being 10. The gain is set by
taking into account the least magnitude (50mV) of the receiver output when sensing an object at
distance of 2 metres.
Comparator
The output signal from the amplifier is passed through the comparator which compares
with a reference threshold level to weed out the noises and false triggering. The signal is a series
of square pulses as shown in Fig.1 with amplitude of 15 volts. This is passed through the voltage
limiter (zener regulator) to be fed to the microcontroller for counting the pulses.
3. Description
The time of flight method is used for finding the distance between the transmitter and the
object. The transmitter sends out a burst of pulses and a receiver detects the reflected echo. The
time delay between the corresponding edges of the transmitted and received pulses is measured
by microcontroller, this gives the time of flight. Substituting the time delay and the velocity of
ultrasound in air (330 metres/second) in the following formula we can determine the distance
between the transmitter and the target. Fig.2 shows the transmitted and received pulses.
Distance = Velocity X Elapsed time

10 cycles of 40kHz
20Vp-p sine wave
Ouput of receiver
after amplification

950s

Comparator
Output

Time of flight
= 950s
Distance measured = 330 = 0.347 metres
950s
Fig.2 Transmitted and Received Pulses
Microcontroller calculates the distance by the above formula. This distance is twice of the
required distance. Hence it is reduced to half and this calculated distance is displayed on the
LCD. The LCD is refreshed every 250 milliseconds.

Channel 3 : Output receiver amplifier


Channel 4 : Input pulses to the microcontroller.
Fig. 3 Signals in the receiver section
3

3.1 Firmware description


The microcontroller closes the switch for duration of 250 microseconds to allow 10 cycles
of 40 kHz sine wave. The sine wave varying between 0-1V passes through the switch to the gain
amplifier. The level shifter and gain amplifier gives a sine wave with output varying between 10V and +10V. The transmitter sends out a burst of 10 pulses. As the transducers are directional
they are positioned to face the target. Flow chart of the program is given in Fig. 4(a) & 4(b).
START

Close Switch

Start 12 milliseconds
down timer

Delay for 250 Microseconds


( 10 cycles of 40 kHz
sine wave )

Open the Switch

YES

NO
If pulse received ?

NO

Is
12 milliseconds time
over ?

YES

Display
No pulse received

START

Stop 12 milliseconds
timer

Save the contents of


Timer Register

Down Counter Initial


value = 10
(for counting the
number of pulses)

C
Fig.4(a) Flowchart of the Program

Start 25 microseconds
down timer

NO

NO

Is
25 microseconds
time over ?

YES

If pulse
received

Decrement
Counter

YES

START
YES

If
no of pulse received
= 10 ?

Time of flight = Observed


time 12 milliseconds

Actual time = Time of flight


2

Distance = Velocity X Actual time

Convert Hex to decimal

Convert Decimal to its ASCII


equivalent

NO

If
Computing for the
first time ?

Update the measurement


in LCD

YES

Display the calculated


measurement in LCD

START

Fig.4(b) Flowchart of the Program.

NO

The microcontroller waits to receive the pulses for a maximum duration of 12 milliseconds.
This is the time taken for the ultrasound waves to travel a maximum distance of 4 metres (time
of flight gives twice the time taken to traverse a unit distance). If it doesnt receive the pulses
within this time it is considered as absence of object or object out of range. Once the pulses are
received the microcontroller counts 10 pulses with a time spacing of 25 microseconds only then
the measurement is considered valid and the computation using the formula is implemented.
Necessary hex to decimal conversion and decimal to ASCII conversions are performed to
display the output of the computation in the LCD. The appendix gives the detailed program with
necessary comments for this application.
4. Conclusion
The microcontroller with LCD makes it user friendly and can be embedded in a single unit.
The circuit has been implemented on bread board and tested for its functionality by varying the
distance between the transducer and the target. The target surface needs to be perpendicular to
the impinging ultrasound waves. The power level of the signal is too low for long range
measurement.
5. Future Work
The range can be considerably increased by using high power drive circuit.
Using temperature compensation, it can be used over wide temperature range.
The resolution of the measurement can be improved by incorporating phase shift method along with
time of flight method.

Can be used as parking assistance system in vehicles with high power ultrasonic transmitter.
The 40 kHz signal can be generated using microcontroller itself which will reduce hardware.

6. Acknowledgement

We express our deep gratitude to Prof P. C. Pandey for his timely and valuable guidance for
the successful completion of the project. We also like to thank the WEL lab RAs, TAs, and Staff
for their continuous support. Doing this work was a really a lot of fun as we could get our hand
on the practical applications of electronic principles also it was a very good learning experience
as a group.

References:
[1] Mazidi, Muhammad Ali, 8051 Microcontroller and Embedded Systems, The (1st Edition)
1999, Prentice Hall
[2] K. J. Ayala, 8051 Microcontroller, Architecture, Programming & Applications, Second
Edition, Penram International Publishing (India), Mumbai, 1998.
[3] A high accuracy ultrasonic distance measurement system using binary frequency shiftkeyed signal and phase detection Huang et al review of scientific instruments volume73,
number 10 october 2002.
[4] Datasheets of all the components involved (AT89C2051, IC 4066, IC 7805, IC TL084, UA
741)

APPENDIX
Bill Of Materials

Item
1
2
3
4
5
6
7
8

Quantity
2
2
4
1
1
1
1
1

12

10
11
12
13
14
15
16
17
18
19
20
21
22

1
1
1
2
1
1
1
1
1
1
2
2
1

Reference
C4, C1
C3, C2
C5,C6,C8,C9

C7
D1
D2
J1
J2
P1,R2,P2,R3,P3,R6,R7,
R9,R11,R12,R13,R14
RX
R1
R4
R5,R10
R8
SW1
TX
U1
U2
U3
U4,U7
U5,U6
Y1

Part
10mF
33pF
0.1mF
1nF
5Z1
LED
LCD
BNC
10K
RX-40F
1K
320K
100K
1M
RESET
TX-40F
AT89C2051
4066
7805
TLO84
UA741
12MHz

+5V

Comparator Out

P1

U2B

12
13
14
15
16
17
18
19

EN
RS

5
4

+5V
1

P3.0/RXD
P3.1/TXD
P3.2/INT0
P3.3/INT1
P3.4/T0
P3.5/T1
P3.7

+15V

12

14

VDD
4066

A
B

11

11
10

0
0

D2

XTAL1
XTAL2

RS

LED

RST/VPP

EN

20 VCC

LCD

P1.0/AIN0
P1.1/AIN1
P1.2
P1.3
P1.4
P1.5
P1.6
P1.7

2
3
6
7
8
9

J2
BNC

U1

GND

16
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1

J1

10K

R1

Y1
+5V

AT89C2051
1K

12 MHz
R2
C2
33PF

C3
33PF

+15V

10K

R5

SW1

100K

+15V

0
2
P2

RESET

R14
2

10K
B

+15V

TX

11

10K

U4A

TL084
TRANSMITTER

-15V
3

+5V
U3
7805
1

VOUT

GND

VIN

C1
10mF

R3
C4
10mF

C5
0.1mF

C6
0.1mF

R4

10K

320K
GAIN AMPLIFIER

Title
ULTRASONIC BASED DISTANCE MEASUREMENT SYSTEM

0
Size
A
Date:
5

Document Number
<Doc>
Sunday, November 18, 2007
2

Rev
0.0
Sheet

of
1

+15V
+15V

7
1
C7

R9

6
2

C8
6

10K

U7

UA741

OUT 1

TL084

UA741

4
5

4
5

0.1mF
-15V

1nF
-15V

U6

4
5

U5

7
1

7
1

R6
10K

+15V

+15V

-15V
R10

R8

P3
100K

10K

GAIN AMPLIFIER

1M

RX

RECEIVER
R7
10K

COMPARATOR

R11

C9

R13

Comparator Out

OUT 1
0.1mF

10K

D1

R12
10K

5Z1

10K

Note :

X - No connection

Title
ULTRASONIC BASED DISTANCE MEASUREMENT SYSTEM
Size
A
Date:
5

Document Number
<Doc>
Sunday, November 18, 2007
2

Rev
0.0
Sheet

of
1

;**************************************************************************************************************************************************
;
FiIRMWARE FOR DISTANCE MEASUREMENT USING ULTRASONIC TRANSDUCER
;
BY
;
VIDYADHAR KAMBLE
(07307501)
;
DIPESH MAKWANA
(06323302)
;
C.CHANDRAMOULI
(07307601)
;**************************************************************************************************************************************************
;TYPE
: LEVEL 3 - PROGRAM COMPLETED
;FUNCTION
: OPENS AND CLOSES THE SWITCH FOR EVERY 250milliseconds AND CHECK FOR RECEIVING
;
: PULSES- COMPUTES DISTANCE FROM TIME OF FLIGHT, CONVERTS HEX TO DECIMAL AND
;
: THEN TO ASCII TO DISPLAY IN LCD. DESCRIPTION FOR EACH SUBROUTINE INS GIVEN IN
;
: ITS HEADER
;STATUS
: TESTED OK
th
;DATE
: 12 NOVEMBER 2007
;MICROCONTROLLER
: AT89C2051
;DESCRIPTION
: GIVE THE LCD , LED CONNECTION, RCV-INPUT AS INDCTED IN THE DEFINE MACRO
;**************************************************************************************************************************************************
RCV_INPUT
SWITCH
LED
RS
EN
FIRSTFLG
TIMER_0_FLAG
COUNTER
FIRST_BYTE
SECOND_BYTE
THIRD_BYTE
FOURTH_BYTE
FIFTH_BYTE
SIXTH_BYTE
SEVEN_BYTE
EIGTH_BYTE
ROTA_CNTER_A
ROTA_CNTER_B
TIMER_1_FLAG
DIG1
DIG2
DIG3
BUFFER
OFFSET
NO_OF_PULSES
LCD_DATA

EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU
EQU

P3.1
P3.2
P3.3
P3.4
P3.5
2Eh
2Fh
41h
42h
43h
44h
45h
46h
47h
48h
49h
4Ah
4Bh
4Ch
4Dh
4Eh
4Fh
50h
05h
0Ah
P1

;**************************************************************************************************************************
; THE MCU STARTS EXECUTING FROM THIS LOCATION AFTER POWER UP
;**************************************************************************************************************************
ORG
SJMP

0000H
START

;**************************************************************************************************************************
; THE MCU STARTS EXECUTING FRM THIS LOCATION WHEN THERE IS AN EXTERNAL
; INTERRUPT (INT0)
;**************************************************************************************************************************
ORG
0003H
; INT0
RETI
;**************************************************************************************************************************
; THE MCU STARTS EXECUTING FRM THIS LOCATION WHEN THERE IS A TIMER 0
; INTERRUPT (TIMER0)
;**************************************************************************************************************************
ORG
SETB
CLR
RETI

000BH
; TIMER0
TIMER_0_FLAG
TR0

;**************************************************************************************************************************
; THE MCU STARTS EXECUTING FRM THIS LOCATION WHEN THERE IS AN EXTERNAL
; INTERRUPT (INT1)
;**************************************************************************************************************************
ORG
RETI

0013H

; INT1

;**************************************************************************************************************************
; THE MCU STARTS EXECUTING FRM THIS LOCATION WHEN THERE IS A TIMER 0
; INTERRUPT (TIMER0)
;**************************************************************************************************************************
ORG

001BH

SETB
CLR
RETI

TIMER_1_FLAG
TR1

; TIMER1

;**************************************************************************************************************************
; THE MCU STARTS EXECUTING FRM THIS LOCATION WHEN THERE IS A SERIAL
; (RECEIVES) INTERRUPT
;**************************************************************************************************************************
ORG
RETI

0023H

ORG

0030H

; SERIAL

;******************************************************************************************************
;
THE PROGRAM STARTS HERE
;******************************************************************************************************
START:
LCALL
SETB
LCALL

INIT_INTR
LED
DISPLAY_LCD

CLR
MOV
MOV
CLR
SETB
SETB
LCALL
CLR
CPL
MOV

A
TH1,#0D0h
TL1,#0A6h
TIMER_1_FLAG
TR1
SWITCH
DELAY_250MICRO_SEC
SWITCH
LED
R7,#NO_OF_PULSES

JB
JNB
CLR
DEC

TIMER_1_FLAG,BEGINA ; CHECK IF MAXIMUM TIME OF 12 MILLI SECONDS IS OVER


RCV_INPUT,BACK
; WAIT FOR THE RECIVING PULSE
TR1
; STOP DISTANCE MEASUREMENT TIMER
R7

MOV
MOV
SETB
CLR

TH0,#0FFh
TL0,#0E5h
TR0
TIMER_0_FLAG

; TURN ON LED

BEGIN:

; START TIMER
; CLOSE THE SWITCH
; KEEP THE SWITCH CLOSED FOR 250 MICRO SEC
; OPEN THE SWITCH
; TURN ON LED

BACK:

BACKB:
; CONFIGURE DOWN COUNTER FOR 25 MICRO SEC
; START COUNT DOWN TIMER

BACKA:
JB
TIMER_0_FLAG,BEGIN
J NB
RCV_INPUT,BACKA
CLR
TR0
DJNZ
R7,BACKB
LCALL
PROCESS
JB
FIRSTFLG,UPDATE
LCALL DISPLAY_LCD2
SETB
FIRSTFLG
SJMP CONTINUE

; CHECK IF 25 MICRO SECONDS IS OVER OR NOT


; WAIT FOR THE RECIVING PULSE

; DISPLAY THE TME IN HEX

UPDATE:
LCALL

UPDATE_DATA

LCALL
SJMP

DELAY_1_SEC
BEGIN

LCALL
CLR
LJMP

NO_PULSE_RCVD
FIRSTFLG
BEGIN

CONTINUE:
; WAIT FOR ONE SECOND

BEGINA:

;******************************************************************************************************
;
THE PROGRAM ENDS HERE
;******************************************************************************************************
PROCESS:
MOV
R0,TH1
MOV
R1,TL1
MOV
R2,#0D0h
MOV
R3,#0A6h
LCALL SUBTRACT
LCALL DIVI
MOV
R2,#01h
MOV
R3,#4Ah
LCALL MUL_16BIT
MOV
A,R5
MOV
DIG3,A
MOV
A,R6
MOV
DIG2,A
MOV
A,R7
MOV
DIG1,A
LCALL HEX2DEC
LCALL CONV_2_ASCII
; CONVERT THE CONTENTS OF THE TIMER TO ASCII
RET
;******************************************************************************************************
;
INTITIALIZATION ROUTINE
;******************************************************************************************************
INIT_INTR:
MOV
MOV
CLR
MOV
MOV
CLR
CLR
MOV
MOV
CLR
RET

IE,#8Ah
TMOD,#11h
A
TH0,A
TL0,A
TR0
TR1
P1,#00H
P3,#02H
FIRSTFLG

; TIMER 0 IN 16 BIT TIMER MODE , TIMER 1 IN 16 BIT TIMER MODE

;**************************************************************************************************************************
;
DSIPLAY THE DISTANCE
;**************************************************************************************************************************
DISPLAY_LCD2:
LCALL
MOV
LCALL
MOV
MOV
MOV
LOOP3:
CLR
MOVC
MOV
INC
INC
DJNZ
LCALL
LCALL
RET

CLEAR_LCD
DPTR,#LINE3
LINE1_DATA
DPTR,#LINE4
COUNTER,#10h
R1,#BUFFER
A
A,@A+DPTR
@R1,A
DPTR
R1
COUNTER,LOOP3
LOAD_DATA
DATA_FRM_BUFFER

;**************************************************************************************************************************
;
DSIPLAY NO PULSE RECEIVED
;**************************************************************************************************************************
NO_PULSE_RCVD:
LCALL CLEAR_LCD
MOV
DPTR,#NOPULSE
LCALL LINE1_DATA
MOV
DPTR,#NOPULSEA
LCALL LINE2_DATA
RET
;**************************************************************************************************************************
; LCD TEST - THIS ROUTINE IS USED FOR TESTING THE LCD. THE FUNCTIONS
; FOLLOWING THE ROUTINE ARE SUBROUTINES USED IN THE LED TESTING ROUTINES
;**************************************************************************************************************************
DISPLAY_LCD:
LCALL
LCALL
MOV
LCALL
MOV
LCALL
RET

LCD_INIT
CLEAR_LCD
DPTR,#LINE1
LINE1_DATA
DPTR,#LINE2
LINE2_DATA

;**************************************************************************************************************************
;
PRINTING THE LINE 1 DATA
;**************************************************************************************************************************
LINE1_DATA:
MOV

COUNTER,#10h

CLR
MOVC
INC
LCALL
DJNZ
RET

A
A,@A+DPTR
DPTR
DATAWRT
COUNTER,ALL_DATA

ALL_DATA:

;**************************************************************************************************************************
;
PRINTING THE LINE 2 DATA
;**************************************************************************************************************************
LINE2_DATA:
MOV
LCALL
MOV

A,#0C0h
COMNWRT
COUNTER,#10h

CLR
MOVC
INC
LCALL
DJNZ
RET

A
A,@A+DPTR
DPTR
DATAWRT
COUNTER,AL_DATA

; LINE 2 STARTS FROM C0h

AL_DATA:

;**************************************************************************************************************************
; WRITING THE DATA FROM THE BUFFER TO THE LCD'S SECOND LINE
;**************************************************************************************************************************
DATA_FRM_BUFFER:
MOV
LCALL
MOV
MOV

A,#0C0h
COMNWRT
COUNTER,#10h
R0,#BUFFER

MOV
LCALL
INC
DJNZ
RET

A,@R0
DATAWRT
R0
COUNTER,DATA_BUF

DATA_BUF:

; LINE 2 STARTS FROM C0h

;**************************************************************************************************************************
; LOAD THE DATA FROM THE TIMER TO THE BUFFER
;**************************************************************************************************************************
LOAD_DATA:
MOV
MOV
ADD
MOV
MOV
MOV
INC
MOV
MOV
INC
MOV
MOV
INC
MOV
MOV
INC
MOV
MOV
INC
MOV
MOV
INC
MOV
MOV
INC
RET

A,#OFFSET
R0,#BUFFER
A,R0
R0,A
A,SECOND_BYTE
@R0,A
R0
A,THIRD_BYTE
@R0,A
R0
A,FOURTH_BYTE
@R0,A
R0
A,#'.'
@R0,A
R0
A,FIFTH_BYTE
@R0,A
R0
A,SIXTH_BYTE
@R0,A
R0
A,SEVEN_BYTE
@R0,A
R0

;*******************************************************
;
CONVERT TO ASCII
;*******************************************************
CONV_2_ASCII:
MOV
ANL
MOV
MOVC
MOV

A,R0
A,#0Fh
DPTR,#ASCII
A,@A+DPTR
FIRST_BYTE,A

MOV
ANL
MOV
MOVC
MOV

A,R1
A,#0Fh
DPTR,#ASCII
A,@A+DPTR
SECOND_BYTE,A

MOV
ANL
MOV
MOVC
MOV

A,R2
A,#0Fh
DPTR,#ASCII
A,@A+DPTR
THIRD_BYTE,A

MOV
ANL
MOV
MOVC
MOV

A,R3
A,#0Fh
DPTR,#ASCII
A,@A+DPTR
FOURTH_BYTE,A

MOV
ANL
MOV
MOVC
MOV

A,R4
A,#0Fh
DPTR,#ASCII
A,@A+DPTR
FIFTH_BYTE,A

MOV
ANL
MOV
MOVC
MOV

A,R5
A,#0Fh
DPTR,#ASCII
A,@A+DPTR
SIXTH_BYTE,A

MOV
ANL
MOV
MOVC
MOV

A,R6
A,#0Fh
DPTR,#ASCII
A,@A+DPTR
SEVEN_BYTE,A

MOV
ANL
MOV
MOVC
MOV
RET

A,R7
A,#0Fh
DPTR,#ASCII
A,@A+DPTR
EIGTH_BYTE,A

;*************************************************************
;
INITIALIZATION ROUTINE FOR LCD
;*************************************************************
UPDATE_DATA:
MOV
A,#0C5h
LCALL COMNWRT
MOV
A,SECOND_BYTE
LCALL DATAWRT
MOV
A,THIRD_BYTE
LCALL DATAWRT
MOV
A,FOURTH_BYTE
LCALL DATAWRT
MOV
A,#'.'
LCALL DATAWRT
MOV
A,FIFTH_BYTE
LCALL DATAWRT
MOV
A,SIXTH_BYTE
LCALL DATAWRT
MOV
A,SEVEN_BYTE
LCALL DATAWRT
RET
;*************************************************************
;
INITIALIZATION ROUTINE FOR LCD
;*************************************************************
LCD_INIT:
MOV
LCALL
MOV
LCALL
MOV
LCALL
RET

A,#38H
COMNWRT
A,#0EH
COMNWRT
A,#06H
COMNWRT

;*************************************************************
;
CLEARING THE LCD
;*************************************************************
CLEAR_LCD:
CLR
MOV
LCALL
MOV
SETB
CLR
LCALL
RET

RS
A,#01h
ROTATE
LCD_DATA,A
EN
EN
DELAY_25MS

;*************************************************************
; ROUTINE TO SEND DATA
;*************************************************************
DATAWRT:
SETB
LCALL
MOV
SETB

RS
ROTATE
LCD_DATA,A
EN

; LINE 2 STARTS FROM C0h

CLR
LCALL
RET

EN
DELAY_25MS

;*************************************************************
; ROUTINE TO SEND COMMAND
;*************************************************************
COMNWRT:
CLR
LCALL
MOV
SETB
CLR
LCALL
RET

RS
ROTATE
LCD_DATA,A
EN
EN
DELAY_25MS

;*************************************************************
; ROUTINE TO ROTATE THE BITS
;*************************************************************
ROTATE:
MOV
MOV
MOV
MOV
MOV
MOV

ROTA_CNTER_A,A
A,ROTA_CNTER_A
C,ACC.7
A,ROTA_CNTER_B
ACC.0,C
ROTA_CNTER_B,A

MOV
MOV
MOV
MOV
MOV

A,ROTA_CNTER_A
C,ACC.6
A,ROTA_CNTER_B
ACC.1,C
ROTA_CNTER_B,A

MOV
MOV
MOV
MOV
MOV

A,ROTA_CNTER_A
C,ACC.5
A,ROTA_CNTER_B
ACC.2,C
ROTA_CNTER_B,A

MOV
MOV
MOV
MOV
MOV

A,ROTA_CNTER_A
C,ACC.4
A,ROTA_CNTER_B
ACC.3,C
ROTA_CNTER_B,A

MOV
MOV
MOV
MOV
MOV

A,ROTA_CNTER_A
C,ACC.3
A,ROTA_CNTER_B
ACC.4,C
ROTA_CNTER_B,A

MOV
MOV
MOV
MOV
MOV

A,ROTA_CNTER_A
C,ACC.2
A,ROTA_CNTER_B
ACC.5,C
ROTA_CNTER_B,A

MOV
MOV
MOV
MOV
MOV

A,ROTA_CNTER_A
C,ACC.1
A,ROTA_CNTER_B
ACC.6,C
ROTA_CNTER_B,A

MOV
MOV
MOV
MOV
MOV
RET

A,ROTA_CNTER_A
C,ACC.0
A,ROTA_CNTER_B
ACC.7,C
ROTA_CNTER_B,A

;*******************************************************
;
SUBROUTINE FOR 1 SECOND DELAY
;*******************************************************
DELAY_1_SEC:
MOV

R0,#10

MOV
MOV
CLR
SETB
JNB
DJNZ
RET

TH0,#3Ch
TL0,#0AFh
TIMER_0_FLAG

LOOP:

TR0
TIMER_0_FLAG,$
R0,LOOP

;*******************************************************
;
SUBROUTINE FOR 2.5 MILLISECOND SECOND
;*******************************************************
DELAY_250MICRO_SEC:
MOV
MOV
CLR
SETB
JNB
RET

TH0,#0FFh
TL0,#05h
TIMER_0_FLAG
TR0
TIMER_0_FLAG,$

;*************************************************************
;
A DELAY OF 25 milliseconds
;*************************************************************
DELAY_25MS:
MOV
MOV
CLR
SETB
JNB
RET

TH0,#1Eh
TL0,#57h
TIMER_0_FLAG
TR0
TIMER_0_FLAG,$

;*******************************************************
;
R2 R3 ;
R0 R1
;
-------;
R0 R1
;*******************************************************
SUBTRACT:
CLR
MOV
SUBB
MOV
MOV
SUBB
MOV
RET

C
A,R1
A,R3
R1,A
A,R0
A,R2
R0,A

;*********************************************************************************
;MSB->
R0 R1 DIVIDEND
;
R2 DIVISOR
;MSB->
R0 R1 RESULT
;*********************************************************************************
DIVI:
CLR
C
MOV
A,R0
RRC
A
MOV
R0,A
MOV
A,R1
RR
A
MOV
ACC.7,C
MOV
R1,A
RET

;************************************************************************
;MSB->
R0 R1 MULTIPLICAND
;
R2 R3 MULTIPLIER
;MSB-> R4 R5 R6 R7 RESULT
;************************************************************************
MUL_16BIT:
CLR
MOV
MOV
MOV
MOV
CLR
MOV
MOV
MUL
MOV
MOV

A
R4,A
R5,A
R6,A
R7,A
C
A,R1
B,R3
AB
R7,A
R6,B

MOV
MOV
MUL
ADD
MOV

A,R0
B,R3
AB
A,R6
R6,A

MOV
ADDC
MOV

A,B
A,R5
R5,A

MOV
MOV
MUL
ADD
MOV
MOV
ADDC
MOV

A,R1
B,R2
AB
A,R6
R6,A
A,B
A,R5
R5,A

MOV
MOV
MUL
ADDC
MOV

A,R0
B,R2
AB
A,R5
R5,A

MOV
ADDC
MOV
RET

A,B
A,R4
R4,A

;************************************************************************
;
HEX TO DECIMAL CONVERSION ROUTINE
;
DIG3
;MSB
;
DIG2
;
DIG1
;LSB
;
R0 R1 R2 R3 R4 R5 R6 R7 RESULT
;************************************************************************
HEX2DEC:
MOV
MOV
MOV
MOV
MOV
MOV
MOV
MOV

R0,#00H
R1,#00H
R2,#00H
R3,#00H
R4,#00H
R5,#00H
R6,#00H
R7,#00H

CLR
MOV

C
A,DIG1

FIRSTA:

;
;
;
;
;
;
;
;

R7
R6
R5
R0
R1
R2
R3
R4

SUBB
MOV
JC

A,#0AH
DIG1,A

INC
CJNE
MOV
INC
CJNE
MOV
INC
CJNE
MOV
INC
CJNE
MOV
INC
CJNE
MOV
INC
CJNE
MOV
INC
JMP

R6
R6,#0AH,FIRS
R6,#00H
R5
R5,#0AH,FIRT
R5,#00H
R4
R4,#0AH,FIRU
R4,#00H
R3
R3,#0AH,FIRA
R3,#00H
R2
R2,#0AH,FIRB
R2,#00H
R1
R1,#0AH,FIRC
R1,#00H
R0
FIRST

LJMP

FIRSTA

JC
INC
CJNE
MOV
SUBB
MOV
JMP

FIRST
R5
R5,#0AH,FIRT
A,R6
A,#09H
R6,A
FIRST

JC
INC
CJNE
MOV
SUBB
MOV
LJMP

FIRST
R4
R4,#0AH,FIRU
A,R5
A,#09H
R5,A
FIRST

JC
INC
MOV
SUBB
MOV
LJMP

FIRST
R3
A,R4
A,#09H
R4,A
FIRST

JC
INC
MOV
SUBB
MOV
LJMP

FIRST
R2
A,R3
A,#09H
R3,A
FIRST

JC
INC
MOV
SUBB
MOV
LJMP

FIRST
R1
A,R2
A,#09H
R2,A
FIRST

JC
INC
MOV

FIRST
R0
A,R1

OUT

OUTB:

FIRST:

FIRS:

FIRT:

FIRU:

FIRA:

FIRB:

FIRC:

SUBB
MOV
LJMP

A,#09H
R1,A
FIRST

LJMP

OUTB

CLR
MOV
SUBB
MOV
JNC

C
A,DIG2
A,#01H
DIG2,A
OUTB

CLR
MOV
SUBB
MOV
JNC

C
A,DIG3
A,#01H
DIG3,A
OUTBA

MOV
ADD
MOV
RET

A,DIG1
A,#0AH
R7,A

LINE1:

DB

' Hi ALL !!!! '

LINE2:

DB

' HAVE A GOOD DAY'

LINE3:

DB

' Dist Measured '

LINE4:

DB

'

NOPULSE:

DB

' NO PULSE

NOPULSEA:

DB

' RECEIVED !!! '

ASCII:

DB

'0123456789ABCDEF'

OUTBA:

OUT:

END

cms

'
'

You might also like