求大神看看 为什么我的进步了 中断程序

2019-07-15 20:59发布

#include <reg52.h>     
#define uchar unsigned char
#define uint unsigned int

sbit trig  = P1^0; //产生脉冲引脚
sbit echo  = P3^2; //回波引脚
sbit pwm1=P1^1;
sbit pwm2=P1^2;
sbit in1=P2^3;
sbit in2=P2^2;
sbit in3=P2^1;
sbit in4=P2^0;
void delay20();
void getd();
void front();
void right();
void stop();
void delay(uint i);
void fas();
void delay_(uint xms);
int outcomeh,outcomel;       
uint distan        ;
uint flag;
void main( )
{  int time,a;
                     trig=0;
                 
  pwm1=1;
  pwm2=1;
  trig=0;
  TMOD=0x01;
  IT0 =1;   //负边沿触发      
  EA = 1;     //开总中断
  while(1)
     {               
         getd();
       if(flag==1)
           { time=outcomeh*256+outcomel        ;
             a=time*7/1000;
           }
                if(flag==0)
                {
                a=0;
                }

                if(a==0)
                {
                  stop();

                      }
           if(a!=0)
           {
                   front();
             stop();
           }

   
           }
}


                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
void estern() interrupt 0
                 {       
                  
                     outcomeh=TH0;
                        outcomel=TL0;
                        flag=1;
                        EX0=0;
               
                       
                  
                          
                   }            
                         
         
                 
                 
          


              void front()
                  {
                  in1=1;
                  in2=0        ;
                  in3=1         ;
                  in4=0          ;
                    delay(800);
                  
                  
                  
                  
                  }
                           void right()
                  {
                  in1=1;
                  in2=0        ;
                  in3=0         ;
                  in4=0          ;
                   delay(800);
                  
                  
}
                           void stop()
                  {
                  in1=0;
                  in2=0        ;
                  in3=0         ;
                  in4=0         ;
                   delay(800);
                  
                  
}

       
       
                void fas()
                {          EA=0;
                     trig=1;
                      delay20();
                        trig=0;
         

                }
                void getd()
                { fas();
                 
                   while(echo==0);
                   flag=0;
                     EA=1;
                     EX0=1;
                   TH0=0 ;
                   TL0=0  ;
                   TF0=0  ;
                   TR0=1  ;
                 
                   while(TH0<30);
                   TR0=0;
                   EX0=0;


                }
           void delay20()
           {uchar a;
                  for(a=0;a<100;a++);
           }
                     void delay(uint i)
                {uchar j;
                  while(i--)
                     {
                  for(j=0;j<115;j++) ;
                  
                      }
                          }
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
me860
1楼-- · 2019-07-15 23:24
本帖最后由 me860 于 2014-1-22 19:19 编辑

貌似楼主是想用外部中断吧
void estern() interrupt 0                    //外部中断是不用定时器赋值的
                 {        
                     outcomeh=TH0;         //如果是使用定时器,这里是不对的,应该是TH0 = 初值高
                     outcomel=TL0;           // TL0 = 初值低
                     flag=1;
                     EX0=0;   
                 }  
外部中断初始化方法
void OutInterrupt_0_init(void)
{
        EA = 1;  //开总中断
        EX0 = 1;//开外部外部中断0
        IT0 = 1;//脉冲控制        
}
void OutInterrupt_0() interrupt 0   //外部中断函数
{
        Out_flag = 1;//里面直接加你想加的语句即可
}
zy2014
2楼-- · 2019-07-15 23:41
  1. EA=1; //开总中断
  2. EX0=1; //开外部中断0
  3. IT0=0; //设置触发方式 0为电平 1为脉冲

  4. 中断服务程序
  5. void exter0() interrput 0 (外部中断0的中断号为0)
  6. {
  7.   d1=0;
  8. }
复制代码

一周热门 更多>