Sei sulla pagina 1di 9

Example-1: generate a square wave of 10 Hz at pin P1.

0 of 8051 using timer


#include <reg51.h>
sbit pin = P1^0;

// include 8051 register file


// decleare a variable type sbit for P1.0

main()
{
P1 = 0x00;
TMOD = 0x09;
loop:TL0 = 0xAF;
TH0 = 0x3C;

// clear port
// initialize timer 0 as 16 bit timer
// load valur 15535 = 3CAFh so after
// 50000 counts timer 0 will be overflow

pin = 1;

// send high logic to P1.0

TR0 = 1;

// start timer

while(TF0 == 0) {}

// wait for first overflow for 50 ms

TL0 = 0xAF;

// again reload count

TH0 = 0x3C;
pin = 0;

// now send 0 to P1.0

while(TF0 == 0) {}

// wait for 50 ms again

goto loop;

// continue with the loop

}
xample-2: write a program to make 8 to 1 multiplexer with enable signal
#include<reg51.h>
sbit D0 = P0^0;
sbit D1 = P0^1;
sbit D2 = P0^2;

// set P0.0-P0.7 (D0-D7) as input pins of mux

sbit D3 = P0^3;
sbit D4 = P0^4;
sbit D5 = P0^5;
sbit D6 = P0^6;
sbit D7 = P0^7;
sbit S0 = P1^0;

// set P1.0-P1.2(S0-S2) as select pins of mux

sbit S1 = P1^1;
sbit S2 = P1^2;
sbit EN = P1^7;
sbit pin = P3^5;

// set P1.7 as enable pin


// set P3.5 as output

main()
{
P3=0x00;P0=0xFF;

// clear op and set all ips

TMOD = 0x01;

// set timer 0 for 16 bit timer

next:TL0 = 0xAF;

// load count

TH0 = 0x3C;
while(EN==1){}

// wait till enable pin becomes 0

if((S0==0)&&(S1==0)&&(S2==0)) pin = D0;

// if select inputs are 000

op is first ip
else if((S0==1)&&(S1==0)&&(S2==0)) pin = D1;

// if select inputs are 001

op is second ip
else if((S0==0)&&(S1==1)&&(S2==0)) pin = D2;
else if((S0==1)&&(S1==1)&&(S2==0)) pin = D3;

// same as above

else if((S0==0)&&(S1==0)&&(S2==1)) pin = D4;


else if((S0==1)&&(S1==0)&&(S2==1)) pin = D5;
else if((S0==0)&&(S1==1)&&(S2==1)) pin = D6;
else if((S0==1)&&(S1==1)&&(S2==1)) pin = D7;
else pin = 0;

// by default op is cleared

TR0 = 1;

// start timer 0

while(TF0==0){}

// wait until overflow

means 50ms
TR0 = 0;

// stop timer

goto next;

// go for next input

}
Example-3: take parallel input from port P1 convert it into serial and send it via
P0.0
#include<reg51.h>
sbit sout = P0^0;

// serial out on P0.0

sbit D0 = P1^0;

// parallal input from P1 (D0-D7)

sbit D1 = P1^1;
sbit D2 = P1^2;
sbit D3 = P1^3;
sbit D4 = P1^4;
sbit D5 = P1^5;
sbit D6 = P1^6;
sbit D7 = P1^7;

int i;
void delay(void);

// 1 ms delay

main()
{
for(i=0;i<8;i++)

// rotate loop for 8 times

{
sout = D0;

// first bit out

D0 = D1;

// shift all bits in sequence

D1 = D2;
D2 = D3;
D3 = D4;
D4 = D5;
D5 = D6;
D6 = D7;
delay();
}
}
void delay()
{
int k
for(k=0;k<1000;k++);
}

// generate 1 ms delay after each bit shifted

Example-4: write a program to simultaneously transmit and receive data.


#include <reg51.h>
main()
{
TMOD=0x20;

// set timer1 in 16 bit timer mode

SCON=0x40;

// initialize serial communication

TL1=0xFD;

// load timer 1 to generate baud rate of 96KBps

TH1 = 0xFD;
TR1 = 1;
loop:REN = 1;

// start timer 1
// enable reception

while(RI==0){}

// wait until data is received

RI=0;

// clear receive flag

ACC = SBUF;
REN = 0;
SBUF = ACC;
while(TI==0){}
TI=0;
goto loop;

// get data in to acc


// now disable reception
// start transmission
// wait until data transmitted
// clear transmission flag
// continue this cycle

}
Example-5: detect an external interrupt on P3.2 and P3.3. Indicate on LEDs
connected on P0.0 & P0.1
#include<reg51.h>
sbit op1=P0^0;

// LED1 as output on P0.0

sbit op2=P0^1;

// LED2 as ouput on P0.1

void delay(void);

// 10 ms delay

void intrupt0(void) interrupt 0

// ext interrupt 0 vector

{
op1=0;

// indication on LED1

delay();
op1=1;
}
void intrupt1(void) interrupt 2

// ext interrupt 1 vector

{
op2=0;

// indication on LED2

delay();
op2=1;
}
void delay()

// delay for 10 ms

{
int x;
for(x=0;x<10000;x++);
}
void main()
{
P0=0xFF;

// send all 1's to P0

IE=0x85;

// enable both ext interrupts

while(1);

// continuous loop

Example-6: blink a LED on P2.0 for 5 second using timer 1


#include<reg51.h>
int c=0;

// initialize counter to 0

sbit LED= P2^0;

// LED connected to P2.0

void timer1(void) interrupt 3

// timer 1 overflow vactor

{
TF1=0;

// clear overflow flag

c++;

// increment counter

if(c==100)

// if 100 counts of 50 ms(= 5 sec) are over

{
TR1=0;

// stop timer

LED=0;

// LED off

}
TH1=0x3C;

// other reaload timer 1 with

TL1=0xAF;

// 15535 to count 50 ms

}
void main()
{
P2=0x00;
TMOD=0x90;

// clear op
// set timer 1

TH1=0x3C;

// load count 15535

TL1=0xAF;
IE=0x88;

// enable timer 1 interrupt

LED=1;

// LED on

TR1=1;

// timer 1 start

while(1);

// continuous loop

Example 7: send ultrasonic wave through P1.0 and receive its echo through
P3.2. generate an interrupt. Calculate the distance of object.
#include <reg51.h>
sbit tx = P1^0; // transmitter pin
int c=0,d=0; // counter and distance
void tmr0(void) interrupt 1 // timer 0 interrupt vector
{
TF0=0;
c++;
TL0 = 0xAF;

// clear timer flag


// increment counter
// reload values

TH0 = 0x3C;
}
void int0(void) interrupt 0 // ext interrupt 0 vector
{
TR0 = 0;

// stop timer

d = c*30;

// get distance = time*velocity

}
main()
{
IE=0x83;

// enable interrupts

IP=0x01;

// high priority for ext interrupt

TMOD = 0x01;
P1 = 0x00;
TL0 = 0xAF;

// timer 0 as 16 bit timer


// clear op port
// load values for 50 ms

TH0 = 0x3C;
tx = 1;

// enable transmission

TR0 = 1;

// start timer

while(1);
}

Potrebbero piacerti anche