標題: STC89C52 雙電機測速尋跡程序 [打印本頁]

作者: 1162760918    時間: 2017-5-9 14:15
標題: STC89C52 雙電機測速尋跡程序
#include <reg52.h>            // 引用標準庫的頭文件
#include <intrins.h>   

#define uchar unsigned char
#define uint  unsigned int  
//=================電機驅(qū)動=====================
sbit    dianji_r = P3^0;  //右邊電機控制口,低電平轉(zhuǎn)?
sbit    dianji_l = P3^7;  //左邊電機控制口,低電平轉(zhuǎn)  
//=============循跡感應(yīng)接口======================
sbit    xjmk_r    =    P3^2;// 右邊尋跡模塊檢測口 INT0
sbit    xjmk_l  =    P3^3;// 左邊尋跡模塊檢測口 INT1     


void    check_righet();//右邊時候檢測到黑線測試程序
void    check_left();//左邊時候檢測到黑線測試程序   

void delay_50us(uint t);
void delayms(uint Ms);   


uchar r_count;//右邊傳感器檢測到的次數(shù)計數(shù)單元
uchar l_count;
uint time;  
//***********************主程序******************************
main()   
{     
  time=50;            dianji_r=0;//上電時右側(cè)電機運行
    dianji_l=0;//上電時左側(cè)電機運行        EA=1;
    EX1=1;
    EX0=1;
    IT1=0;
    IT0=0;

   xjmk_r=1;//置IO為1,準備讀取數(shù)據(jù)
     xjmk_l=1;
     _nop_();
     r_count=0;
     l_count=0;
      while(1)
      {
             _nop_();
       //  check_righet();//調(diào)用右邊尋跡檢測傳感器     
      //   check_left();//
        if(r_count>=1)
          {

                 delayms(time);
                 dianji_r=0;
                 dianji_l=0;
                 r_count=0;
               _nop_();
          }
          if(l_count>=1)
          {  

                  delayms(time);
                  dianji_r=0;
                  dianji_l=0;
                  l_count=0;
                  _nop_();
           }



        }

  }
  void init0int() interrupt 2
  {
       l_count=5;
       dianji_l=1;
       dianji_r=0;
       if(r_count>0)
       {   EX0=0;
           delayms(20);
           if(time>=20)time-=19;
           EX0=0;
        }
      return;

  }

  void init1int() interrupt 0
  {
      r_count=5;
     dianji_r=1;          dianji_l=0;
     if(l_count>0)
     { EX1=0;
      delayms(20);
      if(time>=20)time-=19;
      EX1=1;}
     return;  }  //*******************************************************************************
  //函數(shù)名稱:
  //功能:左邊邊時候檢測到黑線測試程序
void    check_left()
{
    if(xjmk_l==0)//檢測右邊的傳感器是否感應(yīng)到黑線
         {                 delay_50us(1);//延時,去除機械振動
                _nop_();                if(xjmk_l==0)//再次檢測
               {                                     delay_50us(1);//延時,去除機械振動
                  if(xjmk_l==0)                             {
                     l_count++;
                     xjmk_l=1;                       }
               }
          }
}   //*******************************************************************************  //函數(shù)名稱:
        //功能:右邊時候檢測到黑線測試程序
        void    check_righet()
        {
            if(xjmk_r==0)//檢測右邊的傳感器是否感應(yīng)到黑線                          {
               delay_50us(1);//延時,去除機械振動
               if(xjmk_r==0)//再次檢測
               {
                  delay_50us(1);//延時,去除機械振動                                          if(xjmk_r==0)
                  {
                     r_count++;
                     xjmk_r=1;
                    }
               }
          }
}  //*******************************************************************************
//函數(shù)名稱:void delay_50US(unsigned int t)
//功能:延時50*t(us)
void delay_50us(uint t)
{
    uchar j;
    for(;t>0;t--)
    {
       for(j=19;j>0;j--);
    }
}
/*====================================================================
設(shè)定延時時間:x*1ms  ====================================================================*/
void delayms(uint Ms)
{
   uint i,TempCyc;
   for(i=0;i<Ms;i++)
   {
     TempCyc =70;
     while(TempCyc--);
   }
}  







歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1