8051 programs

13
Example-1: generate a square wave of 10 Hz at pin P1.0 of 8051 using timer #include <reg51.h> // include 8051 register file sbit pin = P1^0; // decleare a variable type sbit for P1.0 main() { P1 = 0x00; // clear port TMOD = 0x09; // initialize timer 0 as 16 bit timer loop:TL0 = 0xAF; // load valur 15535 = 3CAFh so after TH0 = 0x3C; // 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

Upload: priya-krishnan

Post on 16-Jan-2016

7 views

Category:

Documents


0 download

DESCRIPTION

8051 programs

TRANSCRIPT

Page 1: 8051 Programs

Example-1: generate a square wave of 10 Hz at pin P1.0 of 8051 using timer

#include <reg51.h>               // include 8051 register file

sbit pin = P1^0;                    // decleare a variable type sbit for P1.0 

main()

{

      P1 = 0x00;                     // clear port

      TMOD = 0x09;                // initialize timer 0 as 16 bit timer 

loop:TL0 = 0xAF;                  // load valur 15535 = 3CAFh so after 

      TH0 = 0x3C;                   // 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;                     // set P0.0-P0.7 (D0-D7) as input pins of mux

sbit D1 = P0^1;

sbit D2 = P0^2;

Page 2: 8051 Programs

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;                // set P1.7 as enable pin

sbit pin = P3^5;               // 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;           // same as above

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

Page 3: 8051 Programs

   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;

Page 4: 8051 Programs

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();                           // generate 1 ms delay after each bit shifted

      }

   }

void delay()

  {

    int k

    for(k=0;k<1000;k++);

  } 

Page 5: 8051 Programs

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;               // start timer 1  

loop:REN = 1;               // enable reception

      while(RI==0){}       // wait until data is received

      RI=0;                     // clear receive flag

      ACC = SBUF;          // get data in to acc

      REN = 0;                // now disable reception

      SBUF = ACC;          // start transmission

      while(TI==0){}       // wait until data transmitted

      TI=0;                    // clear transmission flag   

      goto loop;              // 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

Page 6: 8051 Programs

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

Page 7: 8051 Programs

  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;                   // clear op

        TMOD=0x90;               // set timer 1

Page 8: 8051 Programs

        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;                       // clear timer flag

      c++;                          // increment counter 

      TL0 = 0xAF;               // reload values

      TH0 = 0x3C;

   }

void int0(void) interrupt 0 // ext interrupt 0 vector

   {

       TR0 = 0;                  // stop timer 

Page 9: 8051 Programs

       d = c*30;                // get distance = time*velocity

   } 

main()

    {

         IE=0x83;             // enable interrupts 

         IP=0x01;            // high priority for ext interrupt

         TMOD = 0x01;    // timer 0 as 16 bit timer

         P1 = 0x00;        // clear op port

         TL0 = 0xAF;       // load values for 50 ms

         TH0 = 0x3C;

          tx = 1;             // enable transmission

          TR0 = 1;          // start timer

          while(1);

}