tepaiyuan 发表于 2012-5-15 22:02:08

帮忙看一下,这个超声波测距的程序!

****************/          
                     #include <AT89x51.H>                //器件配置文件
                       #include <intrins.h>
                       #defineRXP0_1
                       #defineTXP0_2
                       unsigned inttime=0;
                       unsigned inttimer=0;
                       unsigned char posit=0;
                       unsigned long S=0;
                       bit      flag =0;
                       unsigned char const discode[] ={ 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xBF,0xff/*-*/};
                       unsigned char const positon={ 0xdf,0xef,0xf7};
                       unsigned char disbuff           ={ 0,0,0,0,};
/********************************************************/
    void Display(void)                               //扫描数码管
        {
       if(posit==0)
       {P1=(discode])&0x7f;}
       else
       {P1=discode];}
          P2=positon;
          if(++posit>=3)
          posit=0;
        }
/********************************************************/
    void Conut(void)
        {
       time=TH0*256+TL0;
       TH0=0;
       TL0=0;
       
       S=(time*1.7)/100;   //算出来是CM
       if((S>=700)||flag==1) //超出测量范围显示“-”
       {       
          flag=0;
          disbuff=10;           //“-”
          disbuff=10;           //“-”
          disbuff=10;           //“-”
       }
       else
       {
          disbuff=S%1000/100;
          disbuff=S%1000%100/10;
          disbuff=S%1000%10 %10;
       }
        }
/********************************************************/
   void zd0() interrupt 1                //T0中断用来计数器溢出,超过测距范围
{
    flag=1;                                                       //中断溢出标志
}
/********************************************************/
   voidzd3()interrupt 3                //T1中断用来扫描数码管和计800MS启动模块
{
       TH1=0xf8;
       TL1=0x30;
       Display();
       timer++;
       if(timer>=400)
       {
          timer=0;
          TX=1;                                      //800MS启动一次模块
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          _nop_();
          TX=0;
       }
}
/*********************************************************/

        voidmain(void)

{
    TMOD=0x11;                   //设T0为方式1,GATE=1;
        TH0=0;
        TL0=0;         
        TH1=0xf8;                   //2MS定时
        TL1=0x30;
        ET0=1;             //允许T0中断
        ET1=1;                           //允许T1中断
        TR1=1;                           //开启定时器
        EA=1;                           //开启总中断

        while(1)
        {
       while(!RX);                //当RX为零时等待
       TR0=1;                          //开启计数
       while(RX);                        //当RX为1计数并等待
       TR0=0;                                //关闭计数
   Conut();                        //计算
        }

}
    其中这个定时中断是什么意思呀!!!
[color=Red    void Conut(void)
        {
       time=TH0*256+TL0;
       TH0=0;
       TL0=0;
/********************************************************/
   void zd0() interrupt 1                //T0中断用来计数器溢出,超过测距范围
{
    flag=1;                                                       //中断溢出标志
}
]

loveye21 发表于 2012-5-20 17:28:04

计数满了呗

可以理解为超过计数范围。
页: [1]
查看完整版本: 帮忙看一下,这个超声波测距的程序!