You are on page 1of 14

EXPERIMENT 10

Generation of square waves with different frequencies using timers/counter

Objectives:

1. To witness how memory is assigned to different variables defined in a C program. To write


multiple programs using C programming language to learn different Timers/Counters usage
cases.
2. To design hardware using Proteus and verify the results.

Tools:

 Keil µVision
 Proteus

Background:
We will write multiple programs to explain how to use Timers/Counters. Here are the sample
programs.

Write following code and using disassembly view and memory window in Keil find the
assigned location of different variables during debugging.

#include<reg51.h>

sbitinbit=P0^0;

bitoutbit=P2^7;

bitmembit;

void main(void)
{
unsigned char mydata[50];

//RAM space unsigned char

x,z=0;
{

z--;

mydata[x]=z;

P1=z;

membit=inbit;

outbit=~membit;

Toggle bits of P1 with some delay using Timer 0 and 16-bit


mode. Attache P1 with LEDs.
#include<reg51.h>

void T0Delay(void);

void main(void)

{ while (1) { P1=0x55;

T0Delay();

P1=0xAA;

T0Delay();

}}

void T0Delay()

{ TMOD=0x01; TL0=0x00; TH0=0x35; TR0=1;

while (TF0==0);
TR0=0;TF0=0;}
Generation of Different frequencies on Microcontroller Pin P1. depending upon the

SWITCH input. (If SW=0: 500Hz , If SW=1: 750Hz, use Timer 0, mode 1 for both of them.)

#include <reg51.h>
sbitmybit=P1^2;

sbit SW=P1^7;

void T0M1Delay(unsigned char);


void main(void){
SW=1;

while (1)
{ mybit=~myb
it; if (SW==0)
T0M1Delay(0);
else
T0M1Delay(1); } }
void T0M1Delay(unsigned char c){
TMOD=0x01;
if (c==0)
{ TL0=0x6
7;
TH0=0xFC;
}

else
{ TL0=0x9
A;
TH0=0xFD;
}
TR0=1;

while (TF0==0); TR0=0;


TF0=0;
}
Task: Part 1:
Generate a square wave of 50Hz with 66% duty cycle on P2.3 by using timer 0 in mode 1.
Part 2:
Generate a square wave of 50Hz with 33% duty cycle on P2.3 by using timer 0 in mode 1.

#include <reg51.h>

void delay();
void delay1();
sbit out = P2^3;

void main ()
{
TMOD = 0x01;
while(1)
{
out = 1;
delay();

out = 0;
delay1();
}

}
void delay()
{
TL0 = 0x39;
TH0 = 0xCD;
TR0 = 1;
while(TF0 == 0)
{

}
TR0 = 0;
TF0 = 0;

}
void delay1()
{
TL0 = 0x71;
TH0 = 0xE5;
TR0 = 1;
while(TF0 == 0)
{

}
TR0 = 0;
TF0 = 0;
Task 1: Code:
#include <reg51.h>
void delay();
void delay1();
sbit out = P2^3;

void main ()
{
TMOD = 0x01;
while(1)
{
out = 1;
delay();

out = 0;
delay1();
}

}
void delay()
{
TL0 = 0x7B;
TH0 = 0xD0;
TR0 = 1;
while(TF0 == 0)
{

}
TR0 = 0;
TF0 = 0;

}
void delay1()
{
TL0 = 0x3E;
TH0 = 0xE8;
TR0 = 1;
while(TF0 == 0)
{

}
TR0 = 0;
TF0 = 0;
}
Task 2:
#include <reg51.h>
void delay();
void delay1();
sbit out = P2^3;

void main ()
{
TMOD = 0x01;
while(1)
{
out = 1;
delay();

out = 0;
delay1();
}

}
void delay()
{
TL0 = 0x3E;
TH0 = 0xE8;
TR0 = 1;
while(TF0 == 0)
{

}
TR0 = 0;
TF0 = 0;

}
void delay1()
{
TL0 = 0x7B;
TH0 = 0xD0;
TR0 = 1;
while(TF0 == 0)
{

}
TR0 = 0;
TF0 = 0;
}
Conclusion:

……………………………………………………………………………………………………

……………………………………………………………………………………………………

……………………………………………………………………………………………………

……………………………………………………………………………………………………
13
14

You might also like