You are on page 1of 54

MICROCONTROLLER LAB

VI SEM
----------------------------------------------------------------------------------------------------------------------------

CONTENTS
Sl.no.
1.

Experiments

page no.

Introduction

01-12

I. PROGRAMMING
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.

Data Transfer-Block movement, Exchange


Sorting-ascending, descending
Finding largest element
Arithmetic instructions-Addition,
Subtraction, Multiplication
Division, square and cube
Counters
Boolean and Logical instructions
Conditional CALL and RETURN
Code conversions-BCD-ASCII,
ASCII-Decimal
Decimal-ASCII, Decimal- Hex
Delay

14-19
20-21
22-25
26-27
28-29
30-31
32-33
34-35
36-37
38-39

II. INTERFACING
12.
13.
14.
15.
16.
17.

18.

Simple calculator using seven


Segment display
LCD Panel and Hex keypad
Temperature control
Generate waveforms-sine, square,
Triangular, and ramp
Stepper and DC motor
Elevator
Question Bank and Viva Questions

MSRIT, Dept of CSE

42-49
50-53
54-59
60-63
64-69
70-72
73-75

MICROCONTROLLER LAB
VI Sem
----------------------------------------------------------------------------------------------------------------------

INTRODUCTION

Earlier to Microcontrollers, Microprocessors were greatly used for each


and every purpose. Microprocessors were containing ALU, general purpose
register, stack pointer, program counter, clock counter and so many other
features which the todays Microcontroller also possesses. But the difference
between them exists with respect to the number of instructions, access times,
size, reliability, PCB size and so on. Microprocessor contains large instruction
set called as CISC processor whereas Microcontroller contains less number of
instructions and is called as RISC processor. The access time is less in case of
microcontrollers compared to microprocessors and the PCB size reduces in case
of microcontrollers.
There are many versions of microcontrollers 8051, 80528751, AT8951
from Atmel Corporation and many more. In this manual we will study about the
8051 architecture, its features, programming and interfacing.

---------------------------------------------------------------------------------------------------------------------MSRIT, DEPT OF CSE


2

MICROCONTROLLER LAB
VI Sem
----------------------------------------------------------------------------------------------------------------------

ARCHITECTURE OF 8051 BLOCK DIAGRAM

Features of 8051:
1. It is a PIC Microcontroller with a ROM of 4K bytes.

2.
3.
4.
5.
6.

It has a RAM of 128 bytes.


It has 2 timers.
It has 4 I/O ports with each poet 8 pins.
It has 1 serial port.
It has 6 interrupts.

SPECIAL FUNCTION REGISTERS:


---------------------------------------------------------------------------------------------------------------------MSRIT, DEPT OF CSE
3

MICROCONTROLLER LAB
VI Sem
----------------------------------------------------------------------------------------------------------------------

Table 1 contains a list of the entire SFRs end their addresses.

PSW: PROGRAM STATUS WORD. BIT ADDRESSABLE.


CY - PSW.7 - Carry Flag.
AC - PSW.6 Auxiliary Carry Flag,
FO - PSW.5 Flag available to the user for general purpose.
Rsl - PSW.4 Register Bank selector bit 1 (SEENOTE 1).
Rso - PSW.3 Register Bank selector bit O(SEENOTE 1).
Ov - PSW.2 Overflow Flag.
- Psw.1 -User definableflag.
P- Psw.o - Parity flag. Set/cleared by hardware after each instruction cycle to indicate number
of 1bit in the accumulator.

---------------------------------------------------------------------------------------------------------------------MSRIT, DEPT OF CSE


4

MICROCONTROLLER LAB
VI Sem
----------------------------------------------------------------------------------------------------------------------

PCON: POWER CONTROL REGISTER. NOT BIT ADDRESSABLE.

SMOD Double baud rate bit. If Timer 1 is used to generate baud rate end SMOD = 1, the baud rate is
doubled
when the Serial Port is used in modes 1, 2, or 3.
Not implemented, reserved for future w.*
Not implemented reserved for future w.*
Not implemented, reserved for future use.
GF1-General purpose flag bit.
GFO -General purpose flag bit.
PD -Power Down bit. Setting this bit activates Power Down operation in the 80C51BH. (Available
only in CHMOS).
IDL -Idle Mode bit. %.this bit activates Idle Mode operation in the 80C51BH. (Available only in
CHMOS).

INTERRUPTS:
In order to use any of the interrupts in the MCS-51, the following three steps must be taken. 1. Set the
EA (enable all) bit in the IE register to 1.
2. Set the corresponding individual interrupt enable bit in the IE register to 1.
3. Begin the interrupt service routine at the corresponding Vector Address of that interrupt. See
Table below.

---------------------------------------------------------------------------------------------------------------------MSRIT, DEPT OF CSE


5

MICROCONTROLLER LAB
VI Sem
---------------------------------------------------------------------------------------------------------------------In addition, for external interrupts, pins~ and INT1 (P3.2and P3.3)must be set to 1,and depending on
whether the interrupt is to be level or transition activated, bits ITO or IT1 in the TCON register may
need to be set to 1.
ITx = O level activated
ITx = 1 transition activated

IE: INTERRUPT ENABLE REGISTER. BIT ADDRESSABLE.


If the bit is O, the corresponding interrupt is disabled. If the bit is 1, the corresponding interrupt is
enabled.
EA- IE.7- Disables all interrupts. If EA = O, no interrupt will be acknowledged. If EA = 1, each
interrupt
Source is individually enabled or disabled by setting or clearing its enable bit.
IE.6 - Not implemented, reserved for future use.*
ET2 -IE.5- Enable or disable the Timer 2 overflow or capture interrupt (8052only).
Es -IE.4- Enable or disable the serial port interrupt.
ET1- IE.3- Enable or disable the Timer 1 overflow interrupt.
EX1- IE.2- Enable or disable External Interrupt 1.
ETO- IE.1- Enable or disable the Timer O overflow interrupt.
EXO- IE.O- Enable or disable External Interrupt O.

PRIORITV WITHIN LEVEL:


Priority within level is only to resolve simultaneous requests of the same priority level.
From high to low, interrupt sources are listed below:
IE0
TF0
IE1
TF1
RI or TI
TF2 or EXF2

1P:INTERRUPT PRIORITY REGISTER. BIT ADDRESSABLE.


If the bit is O, the corresponding interrupt has a lower priority and if the bit is 1 the
corresponding interrupt has a higher priority

---------------------------------------------------------------------------------------------------------------------MSRIT, DEPT OF CSE


6

MICROCONTROLLER LAB
VI Sem
--------------------------------------------------------------------------------------------------------------------- IP.7- Not implement reserved for future use.*
IP.6- Not implemented, reserved for future use.*
PT2 -IP.5- Defines the Timer 2 interrupt priority level (8052only).
PS -IP.4- Defines the Serial Port interrupt priority level.
PT1 -IP.3- Defines the Timer 1interrupt priority level.
PXl - 1P.2- Defines External Interrupt 1 priority level.
PT0- 1P.1- Defines the Timer0 interrupt priority level
PX0 -1P.O- Defines the External Interrupt O priority level..

TCON: TIMER/COUNTER CONTROL REGISTER. BIT ADDRESSABLE.


TFl - TCON.7 Timer 1 overflow flag. Set by hardware when the Timer/Counter 1 overflows. Cleared
by hardware as processor vectors to the interrupt service routine.
TR1- TCON.6 Timer 1 run control bit. Set/cleared by software to turn Timer/Counter 1 ON/OFF.
TF0- TCON.5 -Timer 0 overflow flag. Set by hardware when the Timer/Counter 0 overflows. Cleared
by hardware as processor vectors to the service routine.
TR0- TCON.4- Timer 0 run control bit. Set/cleared by software to turn Timer/Counter 0 ON/OFF.
IE1- TCON.3- External Interrupt 1 edge flag. Set by hardware when External Interrupt edge is
detected. Cleared by hardware when interrupt is processed.
IT1- TCON.2 -Interrupt 1 type control bit. Set/cleared by software to specify falling edge flow level
triggered External Interrupt.
IE0- TCON. 1 External Interrupt 0 edge flag. Set by hardware when External Interrupt edge detected.
Cleared by hardware when interrupt is processed.
IT0- TCON.0 Interrupt 0 type control bit. Set/cleared by software to specify falling edge/low level
triggered External Interrupt.

TMOD: TIMER/COUNTER MODE CONTROL REGISTER. NOT BIT


ADDRESSABLE.

GATE - When TRX(in TCON)is set and GATE = 1,TIMER/COUNTERx will run only while INTX
pin is high (hardware control).When GATE = O,TWIER./C0UNTERx will run only while TRx = 1
(software control).
---------------------------------------------------------------------------------------------------------------------MSRIT, DEPT OF CSE
7

MICROCONTROLLER LAB
VI Sem
---------------------------------------------------------------------------------------------------------------------C/T - Timer or Counter selector. Cleared for Timer operation (input from internal system clock).Set
for Counter operation (input from Tx input pin).

M1 - Mode selector bit.


M0 - Mode selector bit.

TIMER SET-UP
Tables 3 through 6 give some values for TMOD which can be used to setup Timer 0 in different
modes. It is assumed that only one timer is being used at a time. If it is desired to run Timers 0 end
1simultaneously, in any mod the value in TMOD for Timer 0 must be 0 Red with the value shown for
Timer 1. For example, if t is desired to run Timer 0 in mode1GATE (external control), and Timer 1in
mode2 COUNTER, then the value that must be loaded into TMOD is 69H. More over it is assumed
that the user, at this mint, is not ready to turn the timers on and will do that at a different point in he
program by setting bit T-Rx(in TCON)to 1.

TIMER/COUNTER 0

---------------------------------------------------------------------------------------------------------------------MSRIT, DEPT OF CSE


8

MICROCONTROLLER LAB
VI Sem
----------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------MSRIT, DEPT OF CSE


9

MICROCONTROLLER LAB
VI Sem
----------------------------------------------------------------------------------------------------------------------

SCON: SERIAL PORT CONTROL REGISTER. BIT ADDRESSABLE.

SMO SCON.7- Serial Port mode specifier.


SM1 SCON.6- Serial Port mode specifier.
SM2 SCON.5- Enables the multiprocessor feature in modes 2 & 3. In mode2 or 3, if SM2is set to 1
then RI will not be activated if the -veal 9th data bit (RB8) is 0. In mode 1, if SM2 = 1 then RI will not
be activated if a valid stop bit was not received. In mode0, SM2 should be 0.
REN SCON.4- Set/Cleared by software to Enable/Disable reception.
TB8 SCON.3- The 9th bit that will be transmitted in modes2 &3. Set/Cleared by software,
RB8 SCON.2- In modes2&3, is the 9th data bit that was received. In mode 1, if SM2 = 0, RB8 is the
stop bit that was received. In mode 0, RB8 is not used.
TI SCON.1- Transmit interrupt flag. Set by hardware at the end of the 8th bit time in mode 0, or at the
beginning of the stop bit in the other modes. Must be cleared by software.

RI SCON.O- Receive interrupts flag. Set by hardware at the end of the 8th bit time in mode O, or
halfway through the stop bit time in the other modes (accepts SM2).Must be cleared by software.

---------------------------------------------------------------------------------------------------------------------MSRIT, DEPT OF CSE


10

MICROCONTROLLER LAB
VI Sem
----------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------MSRIT, DEPT OF CSE


11

MICROCONTROLLER LAB
VI Sem
----------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------MSRIT, DEPT OF CSE


12

MICROCONTROLLER LAB
VI Sem
----------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------MSRIT, DEPT OF CSE


13

MICROCONTROLLER LAB
VI Sem
----------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------MSRIT, DEPT OF CSE


14

MICROCONTROLLER LAB
VI Sem
----------------------------------------------------------------------------------------------------------------------

SIMULATOR PROGRAMS
Part A:

---------------------------------------------------------------------------------------------------------------------MSRIT, DEPT OF CSE


15

MICROCONTROLLER LAB
VI Sem
----------------------------------------------------------------------------------------------------------------------

1.a. Program for Block movement


Org 00h
mov 40h,#10h
mov 41h,#71h
mov 42h,#22h
mov 43h,#44h
mov r2,#04h
mov r0,#40h
mov r1,#50h
loop1: mov a,@r0
mov @r1,a
inc r0
inc r1
djnz r2,loop1
here: sjmp here
end

1.b. Program forExchange

loop1:

here:

org 00h
mov r0,#40h
mov r1,#50h
mov r2,#05h
mov a,@r0
mov r3,a
mov a,@r1
mov @r0,a
mov @r1,03h
inc r0
inc r1
djnz r2,loop1
sjmp here
end

---------------------------------------------------------------------------------------------------------------------MSRIT, DEPT OF CSE


16

MICROCONTROLLER LAB
VI Sem
----------------------------------------------------------------------------------------------------------------------

1.c. Program for Sorting(ascending order)


org 00h
mov r3,#05h
dec r3
nxtlop:mov a,r3
mov r2,a
mov dptr,#202h
rptbyt: movx a,@dptr
mov r0,a
inc dptr
movx a,@dptr
mov r1,a
cjne a,00h,esc
sjmp noexch
esc: jnc noexch
exch: mov a,r0
movx @dptr,a
clr a
cjne a,dpl,slip
dec dph
slip: dec dpl
mov a,r1
movx @dptr,a
inc dptr
noexch:
djnz r2,rptbyt
djnz r3,nxtlop
here: sjmp here
end

---------------------------------------------------------------------------------------------------------------------MSRIT, DEPT OF CSE


17

MICROCONTROLLER LAB
VI Sem
----------------------------------------------------------------------------------------------------------------------

Program for Descending order:


start equ 0202h
large equ 40h
org 00h
mov r3,#05h
dec r3
nxtlop:mov a,r3
mov r2,a
mov dptr,#start
rptbyt: movx a,@dptr
mov r0,a
inc dptr
movx a,@dptr
mov r1,a
cjne a,00h,esc
sjmp noexch
esc: jc noexch
exch: mov a,r0
movx @dptr,a
clr a
cjne a,dpl,slip
dec dph
slip: dec dpl
mov a,r1
movx @dptr,a
inc dptr
noexch:
djnz r2,rptbyt
djnz r3,nxtlop
mov dptr,#start
movx a,@dptr
mov large,a
over: sjmp over
end

---------------------------------------------------------------------------------------------------------------------MSRIT, DEPT OF CSE


18

MICROCONTROLLER LAB
VI Sem
----------------------------------------------------------------------------------------------------------------------

Program for finding the Largest element in a given array:


start equ 0202h
large equ 40h
org 00h
mov r3,#05h
dec r3
nxtlop:mov a,r3
mov r2,a
mov dptr,#start
rptbyt: movx a,@dptr
mov r0,a
inc dptr
movx a,@dptr
mov r1,a
cjne a,00h,esc
sjmp noexch
esc: jc noexch
exch: mov a,r0
movx @dptr,a
clr a
cjne a,dpl,slip
dec dph
slip: dec dpl
mov a,r1
movx @dptr,a
inc dptr
noexch:djnz r2,rptbyt
djnz r3,nxtlop
mov dptr,#start
movx a,@dptr
mov large,a
over: sjmp over
end

---------------------------------------------------------------------------------------------------------------------MSRIT, DEPT OF CSE


19

MICROCONTROLLER LAB
VI Sem
----------------------------------------------------------------------------------------------------------------------

2.a. Program for Addition of two 16 bit numbers:


org 00h
mov r0,#41h
mov r1,#51h
mov a,@r1
add a,@r0
mov r2,a
mov r0,#40h
mov r1,#50h
mov a,@r1
addc a,@r0
mov r3,a
jnc here
inc r4
here: sjmp here
end

2.b. Program for Subtraction of two 16 bit numbers:


org 00h
mov r0,#41h
mov r1,#51h
mov a,@r1
subb a,@r0
mov r2,a
mov r0,#40h
mov r1,#50h
mov a,@r1
subb a,@r0
mov r3,a
jnc here
inc r4
here: sjmp here
end

---------------------------------------------------------------------------------------------------------------------MSRIT, DEPT OF CSE


20

MICROCONTROLLER LAB
VI Sem
----------------------------------------------------------------------------------------------------------------------

2.c. Program for Multiplication of two 16 bit numbers:


org 0h
mov a,#014h
mov b,#75h
mul ab
mov r0,a
mov r1,b
mov a,#0b2h
mov b,#75h
mul ab
add a,r1
jnc end1
inc b
end1: mov r1,a
mov r2,b
mov a,#014h
mov b,#0e0h
mul ab
mov r3,a ;r0 lsb
mov r4,b ;r1 msb
mov a,#0b2h
mov b,#0e0h
mul ab
add a,r4
jnc end2
inc b
end2: mov r4,a
mov r5,b
mov a,r1
add a,r3
mov r1,a
jnc end3
inc r2
end3: mov a,r2
add a,r4
mov r2,a
jnc end4
inc r5
end4: mov a,r5
mov r3,a
here: sjmp here
end

;lower byte of first number


;lower byte of second number
;r0 lsb
;r1 msb
;higher byte of first number
;lower byte of second number

;lower byte of first number


;higher byte of second number

;higher byte of first number


;higher byte of second number

---------------------------------------------------------------------------------------------------------------------MSRIT, DEPT OF CSE


21

MICROCONTROLLER LAB
VI Sem
----------------------------------------------------------------------------------------------------------------------

2.d. program forDivision of 16bit by 8 bit number:

here:

Org 00h
mov r0,40h
mov r1,41h
mov b,43h
mov a,r0
div ab
mov 45h,a
mov a,b
mov b,#0ah
mul ab
add a,r1
mov b,43h
div ab
mov 46h,a
sjmp here
end

2.e. Program to find cube of a number :

here:

org 00h
mov a,40h
mov b,40h
mul ab
mov r1,b
mov b,40h
mul ab
mov r2,b
mov 43h,a
mov a,r1
mov b,40h
mul ab
add a,r2
mov 42h,a
mov 41h,b
sjmp here
end

---------------------------------------------------------------------------------------------------------------------MSRIT, DEPT OF CSE


22

MICROCONTROLLER LAB
VI Sem
----------------------------------------------------------------------------------------------------------------------

3.a. Counters:
i) To count number of ones and zeroes:
org 00h
mov r1,#00h
mov r2,#00h
mov r7,#08h
mov a,#97h
again: rlc a
jnc next
inc r1
djnz r7, again
jmp here
next: inc r2
djnz r7,again
here: sjmp here
end

---------------------------------------------------------------------------------------------------------------------MSRIT, DEPT OF CSE


23

MICROCONTROLLER LAB
VI Sem
----------------------------------------------------------------------------------------------------------------------

4. Program to do bit manipulations using Boolean and logical instructions:


To find whether the given number is odd or even:
org 00h
mov a,#56h
clr c
clr p1.0
rrc a
jnc even
setb p1.0
even: clr p1.0
here: sjmp here
end

---------------------------------------------------------------------------------------------------------------------MSRIT, DEPT OF CSE


24

MICROCONTROLLER LAB
VI Sem
----------------------------------------------------------------------------------------------------------------------

5. Program to use Conditional CALL and RETURN:


6.a. Program to convert a BCD number into ASCII code:
org 00h
mov a,#29h
mov r2,a
anl a,#0fh
orl a,#30h
mov r6,a
mov a,r2
anl a,#0f0h
swap a
orl a,#30h
mov r2,a
here: sjmp here
end

6.b. Program to convert a ASCII number into decimal:


org 00h
mov a,#'4'
mov r1,#'7'
anl a,#0fh
mov r2,a
mov a,r1
anl a,#0fh
mov r1,a
mov a,r2
swap a
orl a,r1
here: sjmp here
---------------------------------------------------------------------------------------------------------------------MSRIT, DEPT OF CSE
25

MICROCONTROLLER LAB
VI Sem
----------------------------------------------------------------------------------------------------------------------

end

6.d. Program to convert Hex to Decimal:


org 00h
mov a,#0a9h
mov b,#0ah
div ab
mov r0,b
mov b,#0ah
div ab
mov r1,b
mov r2,a
end

---------------------------------------------------------------------------------------------------------------------MSRIT, DEPT OF CSE


26

MICROCONTROLLER LAB
VI Sem
----------------------------------------------------------------------------------------------------------------------

7. Program to generate Time delay:


again:

org 00h
mov a,#55h
mov p1,a
acall delay
cpl a
sjmp again
;time delay

delay:
back:
here:

mov
mov
nop
nop
nop
nop
djnz
djnz
ret

r3,#550h
r4,#600h

r4,here
r3,back

---------------------------------------------------------------------------------------------------------------------MSRIT, DEPT OF CSE


27

MICROCONTROLLER LAB
VI Sem
----------------------------------------------------------------------------------------------------------------------

INTERFACING PROGRAMS
Part B:
Program 8. ( calculator using seven segment display)
/* Object : Performs a single digit calculator using keyboard interface and 7 segment interface
Connections : Keyboard interface to 26pin FRC connector J7 on ESA MCB 51
7 segment interface to J1, J2 and J4 using the cable given by ESA
working procedure: Enter number1 ( 0-9 )
Enter Opcode ( +,-,/,*)
if you give '+' it displays 'A'
'-' it displays '-'
'*' it displays 'M'
'/' it displays 'd'
Ente number2 ( 0-9)
Press '=' -> displays result
Press 'AC' to clear the display
Repeat the same . //AB NI 6.7//
****************************************************************************
*/
#include <REG51xD2.H>
void DispChar(unsigned char ch);
void ClrLED();
unsigned char getkey();
unsigned char getnum();
unsigned char getOp();
sbit Clk = P3^4;
sbit Dat = P0^0;

/* Clock line for 7 segment display */


/* Data line for 7 segment display */

---------------------------------------------------------------------------------------------------------------------MSRIT, DEPT OF CSE


28

MICROCONTROLLER LAB
VI Sem
----------------------------------------------------------------------------------------------------------------------

main()
{
unsigned char tmp=0x0ff,n1=0,n2,Op,Res;
unsigned char NumTab[10] =
{0x0c0,0x0f9,0x0a4,0xb0,0x99,0x92,0x82,0x0f8,0x80,0x90 };
unsigned char OpTab[4] = { 0x88,0x0Bf,0xc8,0x0a1};
bit Neg=0;
ClrLED();
/* Clear 7 segment display */
while(1)
{
Neg = 0;
n1=getnum();
if(n1==0x10)
{
ClrLED();
continue;
}
DispChar(NumTab[n1]);
Op = getOp() - 0x0B;
if(Op==0x10)
{
ClrLED();
continue;
}
DispChar(OpTab[Op]);
n2=getnum();
if(n2==0x10)
{
ClrLED();
continue;
}
DispChar(NumTab[n2]);
while(getkey()!=0x13);
ClrLED();
switch(Op)
{

/* Negative flag */
/* Get 1st number */
/*if pressed key is AC then Clear LED*/
/* Display number */
/* Get Opcode. 0x0b is keycode of '+'(see
keyboard schematics)*/
/*if pressed key is AC then Clear LED*/

/* Get 2nd number */


/*if pressed key is AC then Clear LED*/

/* wait for '=' key */


/* Perform corresponding operation */

---------------------------------------------------------------------------------------------------------------------MSRIT, DEPT OF CSE


29

MICROCONTROLLER LAB
VI Sem
----------------------------------------------------------------------------------------------------------------------

case 0:
Res = n1 + n2;
break;
case 1:
if(n2>n1)
{

/* check for negativity */

Neg = 1;
Res = n2 - n1;
break;
}
Res = n1 - n2;
break;
case 2:
Res = n1 * n2;
break;
case 3:
Res = n1 / n2;
break;
}
DispChar(NumTab[Res%10]);
DispChar(NumTab[Res/10]);
if(Neg)
DispChar(0x0Bf);
while(getkey()!= 0x10);
{
ClrLED(); }
}
}
void DispChar(unsigned char ch)
{
unsigned char i,tmp;
P0=0x00;
P2=0x0ff;
for(i=0;i<8;i++)
{
tmp = ch & 0x80;
if(tmp)
Dat = 1;
else
Dat = 0;
Clk = 0;

/* Display number */
/* if negative result display '-' */
/* wait for 'AC' key */

/* Routine to display char on 7 segment */

/* for all bits */


/* write data depending on MSB */

/* Give Clk Pulse for synchronization */

---------------------------------------------------------------------------------------------------------------------MSRIT, DEPT OF CSE


30

MICROCONTROLLER LAB
VI Sem
----------------------------------------------------------------------------------------------------------------------

Clk = 1;
ch = ch << 1;
}
}
void ClrLED()
{
unsigned char i;
for(i=0;i<4;i++)
DispChar(0x0ff);

/* Get next bit */

/* 0xff for clear segment(See 7 segment manual for more info) */

}
unsigned char getkey()
{
unsigned char i,j,indx,t;
P2 = 0x00;
/* P2 as Output port */
P0 = 0x0ff;
indx = 0x00;
/* Index for storing the first value of scanline */
while(1)
{
for(i=1;i<=4;i<<=1)
/* for 4 scanlines */
{
P2 = 0x0f & ~i;
/* write data to scanline */
t = P0;
/* Read readlines connected to P0*/
t = ~t;
if(t>0)
/* If key press is true */
{
for(j=0;j<=7;j++)
/* Check for 8 lines */
{
t >>=1;
if(t==0)
/* if get pressed key*/
{
return(indx+j);
/* Return index of the key pressed */
}
}
}
indx += 8;
/* If no key pressed increment index */
}
}
}
unsigned char getnum()
{

/* Method for getting number */

---------------------------------------------------------------------------------------------------------------------MSRIT, DEPT OF CSE


31

MICROCONTROLLER LAB
VI Sem
----------------------------------------------------------------------------------------------------------------------

unsigned char tmp;


while(1)
{
tmp = getkey();
if(tmp < 0x0a || tmp==0x10)
return(tmp);
}

/* if pressed key is number, return */

}
unsigned char getOp()
/* Method for getting Operator */
{
unsigned char tmp;
while(1)
{
tmp = getkey();
if((tmp > 0x0a && tmp <0x0f)|| tmp==0x10)
/* if pressed key is a Operator,return */
return(tmp);
}
}

---------------------------------------------------------------------------------------------------------------------MSRIT, DEPT OF CSE


32

MICROCONTROLLER LAB
VI Sem
----------------------------------------------------------------------------------------------------------------------

Seven segment display


#include<stdio.h>
#include <REG51.H>

void delay(int g);


int port[20] = {0xff,0xff,0xff,0xff,
0xc6,0x86,0xc7,0x86,
0xbf,0xc0,0xde,0x87,
0xbf,0x92,0x91,0x92,
0x92,0xc8,0x86,0x87},i;
void main(){
int d,b,j,k,s;
while(1){
i=0;
for(d=0;d<5;d++){
for(b=0;b<4;b++){
k=port[i++];
for(j=0;j<8;j++){
s=k;
s=s&0x80;
if(s==0x00)
P1= 0x00;
else
P1=0x1;
P2 = 0x1;
P2=0x00;
s=k;
s=s<<1;
k=s;
}
}
---------------------------------------------------------------------------------------------------------------------MSRIT, DEPT OF CSE
33

MICROCONTROLLER LAB
VI Sem
----------------------------------------------------------------------------------------------------------------------

delay(10000);
delay(10000);
}
}
}
FLOW CHART

void delay(int g)
{
int h;
for(h=0;h<=g;g++)
{
;
}
}

Program 9: LCD and Hex keypad input


/* FOR MCB51 BOARD .CONNECT THE INTERFACE TO THE 26 PIN CONNECTOR
ON THE BOARD*/
****************************************************************************
*/
#include <at89c51xd2.h>
#include <intrins.h>
#include "lcd.h"
unsigned char rows, columns, result, abhi;
unsigned char temp = 0;
void delay()
{
---------------------------------------------------------------------------------------------------------------------MSRIT, DEPT OF CSE
34

MICROCONTROLLER LAB
VI Sem
----------------------------------------------------------------------------------------------------------------------

//

unsigned int i;
for(i = 0; i <= 20000; i ++);
}
void Display()
{
if(result > 0x09)
{
result += 0x37;
WriteChar(result);
//
delay();
}
else
{
result += 0x30;
WriteChar(result);
delay();
}
}
void KeyScan()
{
again: //columns = 0x08;
columns = 0x77;
rows = 0x04;
result = 0x0c;

next:

P1 = columns;
columns >>=1;
if(CY)
columns = columns |0x08 ;
temp = P0;
FLOW CHART

---------------------------------------------------------------------------------------------------------------------MSRIT, DEPT OF CSE


35

MICROCONTROLLER LAB
VI Sem
----------------------------------------------------------------------------------------------------------------------

// temp = ~(temp);
temp = (temp & 0x0f);

rot:

if(temp != 0x0f)
{
temp >>= 1;
if(!CY)
{
ClrLcd();
return;
}
else
{
result += 1;
goto rot;
}
}

else
{
result -= 0x04;
rows --;
if(rows == 0)
goto again;
else
{
goto next;
}
}
}
void main()
{
P0 = 0xff;
P1 = 0x00;
InitLcd();
WriteString("KEY PRESSED=");
while(1)
{
KeyScan();
WriteString("KEY PRESSED=");
Display();
---------------------------------------------------------------------------------------------------------------------MSRIT, DEPT OF CSE
36

MICROCONTROLLER LAB
VI Sem
----------------------------------------------------------------------------------------------------------------------

}}

Program 10: Temperature control


//
CONNECT THE INTERFACE WITH 26 PIN CONECCTOR ON BOARD
***********************************************************************/
#include <REG51xD2.H>
#include <stdio.h>
#define CR 0x0d
void Read_RTC(void);
void Set_RTC(void);
void Backspace(void);
void space();
void delete(void);
void Disp_Month(void);
unsigned char Units_Tens(unsigned int);
unsigned char xdata parameter[15] =
{0x9,0x5,0x9,0x5,0x3,0x2,0x6,0x1,0x3,0x2,0x1,0x07,0x0};
unsigned char code week[15][15] =
{"SUN","MON","TUE","WED","THU","FRI","SAT"};
/*Send the hexadecimal value to the UART*/
void sendhex(int hex)
{
if(hex > 9)
putchar('A' + (hex - 9));
else
putchar('0' + hex);
}
/*Function to clear the displayed results*/
void Backspace()
{
putchar(0x08);
}
/*Function to insert spaces between the display*/
void space()
{
putchar(0x20);
putchar(0x20);
putchar(0x20);
---------------------------------------------------------------------------------------------------------------------MSRIT, DEPT OF CSE
37

MICROCONTROLLER LAB
VI Sem
----------------------------------------------------------------------------------------------------------------------

}
/*Function to club the units and tens of the value passed to it as parameter*/
unsigned char Units_Tens(unsigned int i)
{
unsigned char temp = 0,temp1 = 0;
temp = parameter[i] & 0x0f;
i ++;
temp1 = parameter[i] & 0x0f;
temp1 <<= 4;
temp1 |= temp;
return temp1;
}
/*Function to display the RTC values*/
void display()
{
unsigned int j = 0,temp = 0,temp1 = 0;
unsigned char c;
j = 0x04;
c = Units_Tens(j);
c &= 0x3f;
temp1 = c;
sendhex((c & 0xf0) >> 4);
sendhex(temp1 & 0x0f);
space();
j = 0x02;
c = Units_Tens(j);
temp1 = c;
sendhex((c & 0xf0) >> 4);
sendhex(temp1 & 0x0f);
space();
j = 0x00;
c = Units_Tens(j);
temp1 = c;
sendhex((c & 0xf0) >> 4);
sendhex(temp1 & 0x0f);
space();
j = 0x5;
c = (parameter[j] & 0x08);
if(c != 0x00)
{
putchar('-');
putchar('-');

/*Read the hour value*/

/*Diplay the hour value*/


/*Read the minutes*/
/*Display the minutes*/
/*Read the seconds value*/
/*Display the seconds*/
/*Read the week*/

/*send hyphens to display*/

---------------------------------------------------------------------------------------------------------------------MSRIT, DEPT OF CSE


38

MICROCONTROLLER LAB
VI Sem
----------------------------------------------------------------------------------------------------------------------

putchar('-');
space();
Disp_Month();
}

/*Display month of the year*/

else
{
temp = (parameter[j] & 0x04);
if(temp != 0x00)

/*Check for the time*/

{
printf("PM");
space();
Disp_Month();
}

/*whether ii is set in AM or PM*/


/*Send PM string to display*/

else
{
printf("AM");
/*Send AM string to display*/
space();
Disp_Month();
}
}
}
/*Function to read the RTC parameters*/
void Read_RTC(void)
{
unsigned int i = 0,j = 0,index = 0, k = 0;
unsigned char data1 = 0;
unsigned char c = 0,temp = 0,temp1 = 0;
P0=0xff;
P1=0x00;
P2=0x00;
P2 = 0x10;
while(i != 0xff)
{
i ++;
}
P2 = 0x30;
while(j != 0xd)
{
index = (j & 0x0f);

/*HOLD signal high*/

/*READ signal high*/

---------------------------------------------------------------------------------------------------------------------MSRIT, DEPT OF CSE


39

MICROCONTROLLER LAB
VI Sem
----------------------------------------------------------------------------------------------------------------------

P1 = index;
for(k = 0; k <= 100; k ++);

/*Set the register address*/

FLOW CHART

data1 = P0 & 0xff;


parameter[j] = data1 & 0x0f;
j ++;
}
P2 = 0x00;
}
/*Function to clear the display and update the same with new values*/
void delete()
{
unsigned int i = 0;
for (i = 0; i <= 0x22; i ++)
{
Backspace();
}
}
void Disp_Month(void)
{
unsigned int j = 0, i = 0;
unsigned char c = 0,temp = 0;
j = 0x6;
/*Read the week*/
c = parameter[j];
j = c;
printf("%s",week[j]);
/*Display the week*/
putchar(0x20);
putchar(0x20);
j = 0x7;
/*Read the date*/
c = Units_Tens(j);
temp = c;
sendhex((c & 0xf0) >> 4);
/*Display the date*/
sendhex(temp & 0x0f);
putchar('-');
j = 0x09;
/*Read the month of the year*/
c = Units_Tens(j);
temp = c;
sendhex((c & 0xf0) >> 4);
/*Display the month*/
sendhex(temp & 0x0f);
putchar('-');
j = 0xb;
/*Read the year value*/
c = Units_Tens(j);
---------------------------------------------------------------------------------------------------------------------MSRIT, DEPT OF CSE
40

MICROCONTROLLER LAB
VI Sem
----------------------------------------------------------------------------------------------------------------------

temp = c;
sendhex((c & 0xf0) >> 4);
/*Display the year*/
sendhex(temp & 0x0f);
delete();}
/*Clear the display*/
/*Function to set RTC parameters*/
void Set_RTC(void)
{
unsigned int i = 0,j = 0,count = 0,k = 0;
P2 = 0x10;
while(i != 0xff)
{
i ++;
}
i = 0;
while(count != 0x0d)
{
P1 = count;
P0 = parameter[j];
P2 = 0x50;
for(k = 0; k <= 1000; k ++);
P2 = 0x10;
count ++;
j ++;
}
P2 = 0x00;
}
void main()
{
SCON = 0x52;
TMOD |= 0x20;
TH1 = 0xfd;
TR1 = 1;
P0=0x00;
P1=0x00;
P2=0x00;
Set_RTC();
while (getchar()!='\n');
printf ("\n\nHRS MIN SEC A/P DAY DD-MM-YY ");
printf ("\n--- --- --- --- --- -------- \n");
while(1)
{
Read_RTC();
/*Read RTC parameters*/
Read_RTC();
---------------------------------------------------------------------------------------------------------------------MSRIT, DEPT OF CSE
41

MICROCONTROLLER LAB
VI Sem
----------------------------------------------------------------------------------------------------------------------

display();
Read_RTC();

/*Display the read RTC parameters*/

}
}

Program 11: waveform generation(square)


Object : To demonstrate how to generate square wave using ESA Dual DAC
interface.
Connection: Connect the interface module to 26pin FRC connector J7 of
ESAMCB51.
Output: Generates the square wave with 2.5v amplitude.
user can change the amplitude and freaquency by presseing the
following keys.
To change Amplitude press P3.3/INT1 on ESAMCB51.
To change frequency press P3.2/INT0 on ESAMCB51.//AB .NI 6.7
****************************************************************************
*/
#include <REG51xD2.H>
#include "lcd.h"
sbit Amp = P3^3;
sbit Fre = P3^2;

/* Port line to change amplitude */


/* Port line to change frequency */

void delay(unsigned int x)


{
for(;x>0;x--);
}

/* delay routine */

main()
{
unsigned char on = 0x7f,off=0x00;
unsigned int fre = 100;
InitLcd();
/* Initialize LCD */
WriteString("Squarewave");
/* Write to LCD */
while(1)
{
if(!Amp)
/* if user choice is to change amplitude */
---------------------------------------------------------------------------------------------------------------------MSRIT, DEPT OF CSE
42

MICROCONTROLLER LAB
VI Sem
----------------------------------------------------------------------------------------------------------------------

{
while(!Amp);
on+=0x08;
}
if(!Fre)
{
if(fre > 1000)
fre = 100;
while(!Fre);
fre += 50;
}
P0=on;
P1=on;
delay(fre);
P0 = off;
P1 = off;
delay(fre);

/* wait for key release */


/* Increase the amplitude */
/* if user choice is to change frequency */

/* if frequency exceeds 1000 reset to default */


/* wait for key release */
/* Increase the frequency */
/* write apmlitude to port */
/* clear port */

}
}

Triangular wave:
Object : To demonstrate how to generate a triangular wave form
using ESA Dual DAC interface.
Connection: Connect the Interface to 26pin FRC connector J7 of
ESAMCB51.
Output: Generates a Triangular waveform with 5v Amp. //AB .NI 6.7
*******************************************************************/
#include <REG51xD2.H>
#include "lcd.h"
main()
{
---------------------------------------------------------------------------------------------------------------------MSRIT, DEPT OF CSE
43

MICROCONTROLLER LAB
VI Sem
----------------------------------------------------------------------------------------------------------------------

unsigned char i=0;


InitLcd();
WriteString("Triangular Wave");
P0 = 0x00;
while(1)
{
for(i=0;i<0xff;i++){
P1 = i;
P0 = i; }
for(i=0xfe;i>0x00;i--)
{P0 = i;
P1 = i;}
}
}

/* Initialise LCD */
/* Display on LCD */
/* P0 as Output port */
/* Generate ON pulse */
/* Generate OFF pulse */

program 12: Stepper motor


Object : To demonstrate the Stepper motor interface.
Connection : Connect the stepper motor interface to 26 pin FRC connector J7
of ESAMCB51.
Output: whenever you run the program the motor rotates in clockwise.
If you want to change the direction press the interrupt button
( P3.2/INTO*). when you press the button, INT0 interrupts the main program
and changes the direction of the motor .
AB
.NI 6.7
/***********************************************************************/
#include <REG51xD2.H>
#include "lcd.h"
static bit Dir=0;
void delay(unsigned int x)
{
for(;x>0;x--);
}

/* Delay Routine */

---------------------------------------------------------------------------------------------------------------------MSRIT, DEPT OF CSE


44

MICROCONTROLLER LAB
VI Sem
----------------------------------------------------------------------------------------------------------------------

void ChangeDir(void) interrupt 0 /* Int Vector at 000BH, Reg Bank 1 */


{
Dir = ~Dir;
/* Complement the Direction flag */
ClrLcd();
if(Dir)
{ WriteString("Clockwise");
delay(32000);
}
else
{WriteString("Anti Clockwise");
delay(32000);
}
}
main()
{
unsigned char Val,i;
EA=0x1;
/* Enable Interrupt flag and Interrupt 0 & Serial Interrupt */
EX0=0x1;
ES=0x1;
P0=0x00;
/*since the monitor is using the serial
interrupt it has to be enabled*/
InitLcd();
WriteString("Anti Clockwise");
while(1)
{
if(Dir)
{
Val = 0x88;
for(i=0;i<4;i++)
{
P0 = Val;
Val = Val>>1;
delay(575);
}
}
else
{
Val = 0x11;
for(i=0;i<4;i++)
{

/* Initialise LCD */
/* Write to LCD */
/* If Dir Clockwise */

/* Write data for clock wise direction*/

/* Anti Clockwise Direction */

---------------------------------------------------------------------------------------------------------------------MSRIT, DEPT OF CSE


45

MICROCONTROLLER LAB
VI Sem
----------------------------------------------------------------------------------------------------------------------

P0 = Val;
Val = Val<<1;
delay(575);
}
}
}
}

/* Write data for anti clock wise direction*/

DC motor:
#include <at89c51xd2.h>
#include <stdio.h>
#define CR 0x0d
unsigned char count;
unsigned char pedestal;
void delay()
{
unsigned int i = 0x00;
for(i = 0; i <= 0x80; i ++);
}
void speed()
{ char i;
unsigned int value = 0x00;
printf("\nSPEED OF THE DC MOTOR AS ROTATIONS/SEC = ");
while(P1_1);
while(!P1_1);
count=0x00;
loop: while(!P1_0);
count += 1;
delay();
while(P1_0);
---------------------------------------------------------------------------------------------------------------------MSRIT, DEPT OF CSE
46

MICROCONTROLLER LAB
VI Sem
----------------------------------------------------------------------------------------------------------------------

delay();
if(P1_1)
goto loop;
else
for(i=0;count>= 0x0a;i++)
{
count=(count-0x0a);
}
putchar((i+0x30));
putchar((count+0x30));
}
void main()
{
unsigned char c,input = 0;
SCON = 0x52;
TMOD |= 0x20;
TH1 = 0xfd;

//
//

Initialising serial port


with 9600 baud rate //

FLOW CHART

TR1 = 1;
P0 = 0x00;
P1 = 0xff;
pedestal = 0x7f;
P0=pedestal;
while((c = getchar())!='\n');
printf("\nPRESS 'i' TO INCREASE THE RPM OF THE DC MOTOR");
printf("\nPRESS 'd' TO DECREASE THE RPM OF THE DC MOTOR");
printf("\nPRESS 's' TO DISPLAY RGE SPEED IN ROTATIONS/SEC\n");
// P0 = 0x7f;
while(1)
{
loop: P0=pedestal;
take: input = _getkey();
if(input == 0x69)
{
---------------------------------------------------------------------------------------------------------------------MSRIT, DEPT OF CSE
47

MICROCONTROLLER LAB
VI Sem
----------------------------------------------------------------------------------------------------------------------

if(pedestal != 0x1f)
{

pedestal -= 1;
//putchar(('\n'));
putchar((0x08));
goto loop;
}
else
goto take;
}
else if(input == 0x64)
{
if(pedestal != 0xe0)
{
pedestal += 1;
//putchar(('\n'));
putchar((0x08));
goto loop;
}
else
goto take;
}
else if(input == 0x73)
speed();
else
goto take;
---------------------------------------------------------------------------------------------------------------------MSRIT, DEPT OF CSE
48

MICROCONTROLLER LAB
VI Sem
----------------------------------------------------------------------------------------------------------------------

}
}

program13: Elevator
Object : To demonstrate the Elevator Interface.
Connection : Connect the interface to 26 pin FRC connector J7 of ESAMCB51
Output : Can be viewed on Elevator interface
//AB .NI 6.7
***********************************************************************/
#include <REG51F.H>
void delay(unsigned int);
main()
{
unsigned char Flr[9] = {0xff,0x00,0x03,0xff,0x06,0xff,0xff,0xff,0x09};
unsigned char FClr[9] =
{0xff,0x0E0,0x0D3,0xff,0x0B6,0xff,0xff,0xff,0x79};
unsigned char ReqFlr,CurFlr = 0x01,i,j;
P0 = 0x00;
P0 = 0x0f0;
while(1)
{
P1 = 0x0f;
ReqFlr = P1 | 0x0f0;
while(ReqFlr == 0x0ff)
ReqFlr = P1 | 0x0f0;
/* Read Request Floor from P1 */
ReqFlr = ~ReqFlr;
if(CurFlr == ReqFlr) /* If Request floor is equal to Current Floor */
{
P0 = FClr[CurFlr];
continue;
}
else if(CurFlr > ReqFlr)

/* Clear Floor Indicator */


/* Go up to read again */
/* If Current floor is > request floor */

---------------------------------------------------------------------------------------------------------------------MSRIT, DEPT OF CSE


49

MICROCONTROLLER LAB
VI Sem
----------------------------------------------------------------------------------------------------------------------

{
i = Flr[CurFlr] - Flr[ReqFlr];
j = Flr[CurFlr];
for(;i>0;i--)

/* Get the no of floors to travel */


/*

Move the indicator down */

{
P0 = 0x0f0|j;
j--;
delay(25000);
}
}
else

/* If Current floor is < request floor */


{
i = Flr[ReqFlr] - Flr[CurFlr];
j = Flr[CurFlr];
for(;i>0;i--)
{
P0 = 0x0f0 | j;
j++;
delay(25000);
}
}
CurFlr = ReqFlr;
P0 = FClr[CurFlr];
}
}

/* Get the no of floors to travel */


/*

Move the indicator Up */

/* Update Current floor */


/* Clear the indicator */

void delay(unsigned int x)


{
for(;x>0;x--);
}

---------------------------------------------------------------------------------------------------------------------MSRIT, DEPT OF CSE


50

MICROCONTROLLER LAB
VI Sem
----------------------------------------------------------------------------------------------------------------------

QUESTION BANK
PART A:
Data Transfer Programs
1. Write a program to move a data byte from one block to another without overlap.
2. Write a program to interchange data from one block to another.
3. Write a program to sort N given 8 bit numbers in ascending order/Descending order.
4. Write a program to find largest of N 8bit numbers.
Arithmetic instruction programs
1.
2.
3.
4.
5.

Write a program to add two 16 bit numbers.


Write a program to subtract two 16 bit numbers.
Write a program to multiply two 16 bit numbers.
Write a program to divide a 16 bit number by a 8 bit number.
Write a program to find the square and cube of a 8 bit number and store the 16 bit result
in registers.

Counters
1. Write a program to count number of ones and zeroes in a given 8 bit number.
Boolean and Logical instructions
1. Write a program to check whether the given number is bitwise palindrome.
2. Write a program to check whether the given number is positive or negative.
Conditional CALL and RETURN
---------------------------------------------------------------------------------------------------------------------MSRIT, DEPT OF CSE
51

MICROCONTROLLER LAB
VI Sem
----------------------------------------------------------------------------------------------------------------------

1. Write a program to
Code Conversion
1. Write a program to convert a BCD number to HEX number.

2.
3.
4.
5.

Write a program to convert an ASCII number in to Decimal number.


Write a program to convert Decimal number to an ASCII number.
Write a program to convert HEX to Decimal number.
Write a program to convert Decimal number to HEX.

Delay program
1. Write a program to generate delay.

VIVA QUESTIONS
1. What is the difference between microcontroller and microprocessor?
2. Name the features of 8051.
3. What is the major difference between CISC and RISC CPU architecture?
4. What is the RAM size of 8051?
5. How many bit processor is the 8051?
6. What is a program?
7. What is an instruction?
8. What are assembler directives? Name some of them.
9. What is meant by program counter?
10. How many I/O ports are there in 8051?
11. What is meant by an interrupt?
12. What is a DPTR? How many bits is it?
13. What is meant by PSW. Name its bit contents.
14. What is the size of Stack pointer register?
15. Explain PUSH &POP instructions.
16. Which bits of PSW are responsible for selection of the register banks?
17. On power up what is the location of the stack?
18. What is the difference between LCALL and ACALL?
19. What is the function of RETURN instruction?
20. What is meant by time delay and why do we need it?
21. Which ports of the 8051 are bit addressable?
22. How many types of addressing modes are there and name them?
23. What are SFRs?
24. Which addressing mode supports looping?
25. Name some of the arithmetic instructions.
---------------------------------------------------------------------------------------------------------------------MSRIT, DEPT OF CSE
52

MICROCONTROLLER LAB
VI Sem
----------------------------------------------------------------------------------------------------------------------

26. What is the significance of DA instruction?


27. What is packed and unpacked BCD?
28. What is the difference between CY and OV flag?
29. When will the OV flag be set?
30. What is an ASCII code?
31. What is a timer and how many types of timers are there?
32. Name the different modes of timers?
33. What is the difference between timers and counters?
34. How TMOD is used to select timer or counter?
35. Which timer is used to set Baud rate?
36. What mode of the timer is used to set the Baud rate?
37. When is TI and RI raised?
38. What is the role of SBUF register?
39. What is the use of IE and IP registers?
40. How many interrupts are there in 8051?
41. What is the interrupt priority upon reset?
42. What is RS232 and MAX232?
43. What is the function of RS and E pins in an LCD?
44. What is the use of R/W pin in an LCD?
45. What is the step angle in the stepper motor?
46. Give the relation to find steps per second in stepper motor?
47. Give the relation to find out output voltage from the DAC?
48. Name the ports used to interface external memory.
49. What is the use of EA and PSEN pins in 8051?
50. What is the time per machine cycle if XTAL=11.0592MHz?

---------------------------------------------------------------------------------------------------------------------MSRIT, DEPT OF CSE


53

MICROCONTROLLER LAB
VI Sem
----------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------MSRIT, DEPT OF CSE


54

You might also like