Temperature Controller
 Liquid Level Controller
 Load Positioning System
 Laser Cutting Machine
 Motion Control System
 DC Motor controller
 AC Motor speed control

~: AC Motor control program in C :~

#include<reg51.h>

#include <string.h>

 

sbit led1 = P3^0;

sbit s1 = P3^4;

sbit s2 = P3^5;

sbit s3 = P3^7;

 

unsigned int d1=0;

unsigned int d2=0;

unsigned int c=0;

bdata unsigned char byte;

sbit b0 = byte^0;

sbit b1 = byte^1;

sbit b2 = byte^2;

sbit b3 = byte^3;

sbit b4 = byte^4;

sbit b5 = byte^5;

sbit b6 = byte^6;

sbit b7 = byte^7;

 

void dely(void);

void incangle(void);

void decangle(void);

void delay(int d);

 

void shiftup()                                // raise the bar graph by one step

  {

         b7=b6;                              // shitf the bits one by one to up

         b6=b5;

         b5=b4;

         b4=b3;

         b3=b2;

         b2=b1;

         b1=b0;

         b0=1;                             // insert 1 to first bit

  }

void shiftdown()                       // decrease bar graph by one step

  {

         b0=b1;                           // shift all the bits down one by one

         b1=b2;

         b2=b3;

         b3=b4;

         b4=b5;

         b5=b6;

         b6=b7;

         b7=0;                          // insert 0 to last bit 

  }

void keydly(void)                                              //key debounce delay

  {

                     unsigned int x,y;

                     for(x=0;x<100;x++)

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

  }                

void decangle()                                     //decrease delay by 1ms

  {

                     EX1=0;                                       //first disable all interrupts

                     if(d1>0)                                      

                       { 

                             d1--;                                        // decrease delay

                             shiftdown();

                             P1=byte;

                        }                                                                       

                    EX1=1;                                      // enable interrupts before leaving

  }

void incangle()                          // increase delay by 1 ms

  {

                     EX1=0;                           // all other things remains same as above

                     if(d1<9)

                       {

                             d1++;

                             shiftup()

                             P1=byte;

                        }

                    EX1=1;

  }

void delay(int d)                                    // generates delay from 1 to 9 ms

 {

                     int k;

                     TL0 = 0x17;                    // load timer 0 with 64535 = FC17h

                     TH0 = 0xFC;                   // so it will overflow after 1000 counts

                     TR0 = 1;                          // start timer

                     for(k=0;k<d;k++)            // count overflows of timer 0 till

                       {                                    // desire delay is required

                        while(TF0==0);

                        TF0 = 0;

                        TL0 = 0x17;

                        TH0 = 0xFC;

                       }

                     TR0 = 0;

}

void int0(void) interrupt 2                                  // external interrupt 1 subroutine

  {

                 keydly();                       // after key debounce delay

                 if(s1==0)                     // for first key

                  {

                                                                       c++;                             // increase counter

                                    if((c%2)==1)                // check even or odd

                                      {

                                               EX0 = 1;                                  // enable external interrupt 1 if odd

                                      }

                                    else

                                      {

                                                EX0 = 0;                                  // disable external interrupt 1

                                      }

                           }        

                       else if(s2==0)                               // for second key

                           {                             

                                    incangle();                     // increase phase angle

                            }       

                       else if(s3==0)                               // for third key

                           {

                                decangle();                   // decrease phase angle

                            }

      } 

 void int1(void) interrupt 0                                 // external interrupt 1 subroutine

   {

                        int t;

                        led1=0;                                    // led1 is on

                        delay(d1);                                 // after desired delay

                        pulse=1;                                   // send pulse on p2.0

                        for(t=0;t<200;t++);

                        pulse=0;

                        led1 = 1;                                  // led1 off

   }

 

void main()

  {

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

                     P1=0x00;                                    // P1 as output ports

                     P3=0xFF;                                    // P3 as input port                    

                     IE=0x84;                                     // enable external interrupt 1

         while(1);                                      // continuous loop                    

  }

All the projects are designed and developed by sight owner and they are thoroughly tested by him. ©Copyrights Ashutosh Bhatt 2008-09. All rights reserved.