Professional Documents
Culture Documents
Embedded
Embedded
2
Aim: Write a program to generate square wave of 50% duty cycle having frequency 5 KHz
at port pin P2.1 using timer 1 in mode 2. Modify program to generate pulse waveform
of 70% duty cycle using timer on the same pin.
Apparatus required: 89s5x trainer Kit, CRO, FG, and BNC probe etc.
Circuit Diagram:
Fig.1 Circuit diagram for generating the 50% duty cycle pulse having 5 kHz frequency
on 2.1 pin
Calculation of delay:
Time = 1/Frequency = 1/ (5x1000) ms = 200 S
For 50% duty cycle ON time and OFF time are equal
Therefore, T_ON = T_OFF = 100 S
Time delay required is 100 S
Program:
#include <reg52.h>
#include<stdio.h>
void Delay(void);
sbit mybit=P2^1;
void main(void)
{
while (1)
{
mybit=~mybit;
Delay();
}
}
void Delay(void)
{
TMOD=0x02;
TL0=0x00;
TH0=0xA2;
TR0=1;
while (TF0==0);
TR0=0;
TF0=0;
}
Output-
Calculation of delay:
Time = 1/Frequency = 1/ (5x1000) ms = 200 S
For 80% duty cycle ON time and OFF time will be different.
Therefore,
T_ON = 140 S
T_OFF = 60 S
ON Time delay required is 140 S
If we consider crystal frequency 11.0592 MHz, time to execute one cycle is
Value = 65536 140 S / 1.085 S
= 65407 (Decimal value) = FF7F (Hex value)
Therefore, TH0= FF, TL0=7F
OFF Time delay required is 60 S
Value = 65536 60 S / 1.085 S
= 65481 (Decimal value) = FFC9 (Hex value)
Therefore, TH0= FF, TL0=C9
Program-
#include <reg51.h>
#include<stdio.h>
void T0M1Delay1(void);
void T0M1Delay2(void);
sbit mybit=P2^1;
void main(void)
{
while (1)
{
mybit=1;
T0M1Delay1();
mybit=0;
T0M1Delay2();
}
}
void T0M1Delay1(void)
{
TMOD=0x01;
TL0=0x7F;
TH0=0xFF;
TR0=1;
while (TF0==0);
{
TR0=0;
TF0=0;
}
}
void T0M1Delay2(void)
{
TMOD=0x01;
TL0=0xC9;
TH0=0xFF;
TR0=1;
while (TF0==0);
{
TR0=0;
TF0=0;
}
}
Output-
Worksheet
Program#include <reg51.h>
#include<stdio.h>
void Delay1(void);
void Delay2(void);
sbit mybit=P1^0;
void main(void)
{
while (1)
{
mybit=1;
Delay1();
mybit=0;
Delay2();
}
}
void Delay1(void)
{
TMOD=0x01;
TL0=0x6D;
TH0=0xFF;
TR0=1;
while (TF0==0);
TR0=0;
TF0=0;
}
void Delay2(void)
{
TMOD=0x01;
TL0=0xDB;
TH0=0xFF;
TR0=1;
while (TF0==0);
TR0=0;
TF0=0;
}
Output-
Output-
{
unsigned int i,j;
for(i=0;i<t;i++)
for(j=0;j<1000;j++);
}
Output -
4) Suggest modification in the program to achieve duty cycle 60% without changing
frequency of the square wave.
Program# include <reg51.h>
#include<stdio.h>
sbit wave_pin= P1^0;
void sqdelay1(unsigned int);
void sqdelay2(unsigned int);
void main(void)
{
while(1)
{
wave_pin=1;
sqdelay1(100);
wave_pin=0;
sqdelay2(100);
}
}
Program#include<reg52.h>
#include<stdio.h>
void Delay(void)
{
TMOD=0x02;
TL0=0x02;
TH0=0xEE;
TR0=1;
while (TF0==0);
TR0=0;
TF0=0;
}
void main(void)
{
P1=0x00;
while(1)
{
P1=0xff;
Delay();
P1=0x00;
Delay();
}
}
Output-
GATE
C/T
M1
Timer1
M0
GATE
C/T
M1
Timer0
11) A switch is connected to pin P2.2.WAP to monitor the switch and create the
following frequency on P3.3:
SW=100 Hz
SW=1 KHz
Calculation for delay
1) 1 kHz
ON time and OFF time are equal TON = TOFF = 0.001s
Time delay required is 10 ms
If we consider crystal frequency 11.0598 MHz, time to execute one cycle is:
delay= 65536-0.001 s /1.085 s
64615 (Decimal value) FC67 (Hex value)
TH0=FC
TL0=67
2) 100 Hz
ON time and OFF time are equal TON = TOFF = 0.01s
Time delay required is 10 ms
If we consider crystal frequency 11.0598 MHz, time to execute one cycle is:
delay= 65536-0.01 s /1.085 s
56320 (Decimal value) FC67 (Hex value)
TH0=DC
TL0=00
Program# include <reg51.h>
#include<stdio.h>
sbit pin = P2^2;
sbit sw = P3^3;
void delay();
void delay1();
void main(void)
{
while(1)
{
if(sw==1)
{
pin = 1;
M0
delay1();
pin = 0;
delay1();
}
else if(sw==0)
{
pin = 1;
delay();
pin = 0;
delay();
}
}
}
void delay()
{
TMOD=0x01;
TL0=0x00;
TH0=0xDC;
TR0=1;
while(TF0==0);
TF0=0;
}
void delay1()
{
TMOD=0x01;
TL0=0x67;
TH0=0xFC;
TR0=1;
while(TF0==0);
TR0=0;
TF0=0;
}
TR0=0;
EXPERIMENT -3
AIM: Interface LCD with the microcontroller. Display your name on the LCD.
APPARATUS REQUIRED: 89s5x trainer kit, CRO etc.
CIRCUIT DIAGRAM:
PROGRAM:
#include <reg51.h>
#include <stdio.h>
sfr ldata = 0x80;
sbit rs = P1^0;
sbit rw = P1^1;
sbit en = P1^2;
void lcdcmd(unsigned char value1);
void lcddata(unsigned char value2);
void msdelay(unsigned int itime);
void main()
{
lcdcmd(0x38);
msdelay(100);
lcdcmd(0x01);
msdelay(100);
lcdcmd(0x80);
msdelay(100);
lcdcmd(0x06);
msdelay(100);
lcddata('C');
msdelay(100);
lcddata('H');
msdelay(100);
lcddata('I');
msdelay(100);
lcddata('N');
msdelay(100);
lcddata('N');
msdelay(100);
lcddata('U');
msdelay(100);
}
void lcdcmd(unsigned char value1)
{
ldata = value1;
rs = 0;
rw = 0;
en = 1;
msdelay(1);
en = 0;
}
void lcddata(unsigned char value2)
{
ldata = value2;
rs = 1;
rw = 0;
en = 1;
msdelay(1);
en = 0;
}
void msdelay(unsigned int itime)
{
unsigned int i, j;
for(i=0;i<itime;i++)
for(j=0;j<1275;j++);
}
WOKSHEET
1)Modify LCD program to display two lines: WELCOME TO E.C. on first line and
Embedded lab on the second line. Execute program in your hardware.
#include <reg51.h>
#include <stdio.h>
sfr ldata = 0x80;
sbit rs = P1^0;
sbit rw = P1^1;
sbit en = P1^2;
void lcdcmd(unsigned char value1);
void lcddata(unsigned char value2);
void msdelay(unsigned int itime);
void main()
{
lcdcmd(0x38);
msdelay(100);
lcdcmd(0x01);
msdelay(100);
lcdcmd(0x80);
msdelay(100);
lcdcmd(0x06);
msdelay(100);
lcddata('W');
msdelay(100);
lcddata('E');
msdelay(100);
lcddata('L');
msdelay(100);
lcddata(C);
msdelay(100);
lcddata('O');
msdelay(100);
lcddata('M');
msdelay(100);
lcddata('E');
msdelay(100);
lcddata(' ');
msdelay(100);
lcddata('T');
msdelay(100);
lcddata('O');
msdelay(100);
lcddata(' ');
msdelay(100);
lcddata('E');
msdelay(100);
lcddata(' ');
msdelay(100);
lcddata('C');
msdelay(100);
lcdcmd(0xC0);
msdelay(100);
lcddata('E');
msdelay(100);
lcddata('M');
msdelay(100);
lcddata('B');
msdelay(100);
lcddata('E');
msdelay(100);
lcddata('D');
msdelay(100);
lcddata('D');
msdelay(100);
lcddata('E');
msdelay(100);
lcddata('D');
msdelay(100);
lcddata(' ');
msdelay(100);
lcddata('L');
msdelay(100);
lcddata('A');
msdelay(100);
lcddata('B');
msdelay(100);
}
void lcdcmd(unsigned char value1)
{
ldata = value1;
rs = 0;
rw = 0;
en = 1;
msdelay(1);
en = 0;
}
void lcddata(unsigned char value2)
{
ldata = value2;
rs = 1;
rw = 0;
en = 1;
msdelay(1);
en = 0;
}
NAME
Vss
Vcc
Vee
RS
RW
En
DH0
DH1
DH2
DH3
DH4
DH5
DH6
DH7
LED+
LED-
DESCRIPTION
This pin must be connected to the ground.
Positive supply voltage pin (5V DC).
Contrast adjustment
Register selection
Read or write
Enable
Data
Data
Data
Data
Data
Data
Data
Data
Back light LED+
Back light LED-
MSDelay(50);
}
LCD DATA
void lcddata(unsigned char value)
{
P1 = value;
rs = 1;
rw = 0;
MSDelay(50);
en = 0;
MSDelay(50);
}
5) How does the busy flag aid in making the LCD program more efficient?
The busy flag is D7 . If D7=1 the LCD is woking on internal operation and will not accept
any new information. If D7=0 the LCD is free and is available to receive as well as work on
new information.
6) For a 16*2 LCD, the location of the last character of line 1 is 8FH (its command code).
Show how this value was calculated?
Line1(min)
Line1(max)
DB7
1
1
DB6
0
0
DB5
0
0
DB4
0
0
DB3
0
1
DB2
0
1
DB1
0
1
DB0
0
1
The upper address range can go as high as 1111(binary) = 15 decimal , which corresponds to
locations 0 to 15 for the LCDs of 16*2 size.
7) Draw the circuit diagram of interfacing of 20x2 LCD with 8051?
EXPERIMENT NO -4
AIM: Write a program to interface the DC motor with 8051.
a) If sw=0, DC motor will rotate clockwise
b) If sw=1, DC motor will rotate anticlockwise
APPARATUS REQUIRED: 89s5x trainer kit
CIRCUIT DIAGRAM:
PROGRAM:
#include <reg51.h>
#include <stdio.h>
sbit sw=P2^7;
sbit A1=P1^0;
sbit A2=P1^1;
void main()
{
while(1)
{
if(sw==1)
{
A1=1;
A2=0;
}
else
{
A1=0;
A2=1;
}}}
WORKSHEET
1) Interface DC motor with 89C51 microcontroller. Write a program to rotate motor with
different speed using PWM.
a) 5% duty cycle
#include <reg51.h>
#include <stdio.h>
sbit sw=P2^7;
sbit A1=P1^0;
sbit A2=P1^1;
void msdelay(unsigned int itime);
void main()
{
while(1)
{
if(sw==1)
{
A1=1;
msdelay(5);
A2=0;
msdelay(95);
}
else
{
A1=0;
msdelay(5);
A2=1;
msdelay(95);
}}}
void msdelay(unsigned int itime)
{
int i,j;
for(i=0;i<itime;i++);
for(j=0;j<1275;j++);
}
#include <reg51.h>
#include <stdio.h>
sbit sw=P2^7;
sbit A1=P1^0;
sbit A2=P1^1;
void msdelay(unsigned int itime);
void main()
{
while(1)
{
if(sw==1)
{
A1=1;
msdelay(10);
A2=0;
msdelay(90);
}
else
{
A1=0;
msdelay(10);
A2=1;
msdelay(90);
}}}
void msdelay(unsigned int itime)
{
int i,j;
for(i=0;i<itime;i++);
for(j=0;j<1275;j++);
}
{
A1=0;
msdelay(25);
A2=1;
msdelay(75);
}}}
void msdelay(unsigned int itime)
{
int i,j;
for(i=0;i<itime;i++);
for(j=0;j<1275;j++);
}
{
A1=0;
msdelay(50);
A2=1;
msdelay(50);
}}}
void msdelay(unsigned int itime)
{
int i,j;
for(i=0;i<itime;i++);
for(j=0;j<1275;j++);
}
A1=0;
msdelay(75);
A2=1;
msdelay(25);
}}}
void msdelay(unsigned int itime)
{
int i,j;
for(i=0;i<itime;i++);
for(j=0;j<1275;j++);
}
msdelay(100);
A2=1;
msdelay(0);
}}}
void msdelay(unsigned int itime)
{
int i,j;
for(i=0;i<itime;i++);
for(j=0;j<1275;j++);
}
EXPERIMENT -5
AIM: Interface seven segment displays with Port P2. Write program to display number 0 to 9
on the seven segment display at the interval of 1 second.
APPARATUS REQUIRED : 89s5x trainer kit .
CIRCUIT DIAGRAM:
PROGRAM
#include <reg51.h>
#include <stdio.h>
void delay(void);
void main(void)
{
while (1)
{
P1==0x00;
delay();
P1=0x01;
delay();
P1=0x02;
delay();
P1=0x03;
delay();
P1=0x04;
delay();
P1=0x05;
delay();
P1=0x06;
delay();
P1=0x07;
delay();
}
}
void delay(void)
{
TMOD=0x01;
TL0=0x00;
TH0=0xA2;
TR0=1;
while (TF0==0);
TR0=0;
TF0=0;
}
WORKSHEET
1) How many way the seven segment display can interface with 8051?
Two ways are used to interface seven segment with 8051.
Direct
Indirect
The use of decoder reduces the number of pins of 8051 . The conversion from BCD to seven
segment is performed internally in the decoder but in direct connection we have to perform
the conversion manually.
2)What is seven segment display?
A seven segment display is a set of seven bar shaped LED elements arranged to form a
squared off figure below . By activating all or some of the elements , any single digit numeral
from 0 to 9 , as well as most upper case and lower case letters of English alphabets can be
portrayed. They are used in digital clocks , clock radio ,timers , write watches and calculators.
Most LCD has built in processing power including a character generator , whereas
with 7 segment display , whatever is used to control them supply the processing
power to generate the characters to be displayed.
LCD interface through a 4 bit data bus with 3 wires for control. Whereas seven
segment displays are just LEDs . So we can drive them directly or using a decoder.
Seven segment display have limited text capabilities , they are best suited for
numbers.
The advantages of LED displays is the size of the character and the ability to be seen
in dimlight.
4)Write a program to display number 10 to 20 on the 7 segment display at the interval of 0.5
second.
a) direct interfacing
#include <reg51.h>
#include <stdio.h>
void delay(unsigned char d);
void main(void)
{
while (1)
{
P1==0x10;
delay(50);
P1=0x11;
delay(50);
P1=0x12;
delay(50);
P1=0x13;
delay(50);
P1=0x14;
delay(50);
P1=0x15;
delay(50);
P1=0x16;
delay(50);
P1=0x17;
delay(50);
P1=0x18;
delay(50);
P1=0x19;
delay(50);
P1=0x20;
delay(50);
}
}
void delay(unsigned char d )
{
TMOD=0x01;
TL0=0x00;
TH0=0xA2;
TR0=1;
while (TF0==0);
TR0=0;
TF0=0;
}