久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3859|回復: 3
收起左側

單片機中斷有問題,P00=0的時候進不去

[復制鏈接]
ID:262 發表于 2016-3-11 23:30 | 顯示全部樓層 |閱讀模式

  1.         #include<AT89x51.H>

  2.         #define Left_moto_pwm     P1_6           //接驅動模塊ENA        使能端,輸入PWM信號調節速度
  3.         #define Right_moto_pwm    P1_7           //接驅動模塊ENB

  4.         sbit P00=P0^0;

  5.         sbit P10=P1^0;          //循跡口
  6.         sbit P11=P1^1;
  7.         sbit P12=P1^2;
  8.         sbit P13=P1^3;
  9.         sbit P14=P1^4;


  10.         #define Left_moto_go      {P3_4=0,P3_5=1;} //P3_4 P3_5 接IN1  IN2    當 P3_4=0,P3_5=1; 時左電機前進
  11.         #define Left_moto_back    {P3_4=1,P3_5=1;} //P3_4 P3_5 接IN1  IN2    當 P3_4=1,P3_5=0; 時左電機后退               
  12.         #define Right_moto_go     {P3_6=0,P3_7=1;} //P3_6 P3_7 接IN1  IN2         當 P3_6=0,P3_7=1; 時右電機前轉
  13.         #define Right_moto_back   {P3_6=1,P3_7=1;} //P3_6 P3_7 接IN1  IN2         當 P3_6=1,P3_7=0; 時右電機后退

  14.            unsigned char pwm_val_left  =0;//變量定義
  15.         unsigned char push_val_left =0;// 左電機占空比N/10
  16.         unsigned char pwm_val_right =0;
  17.         unsigned char push_val_right=0;// 右電機占空比N/10
  18.         bit Right_moto_stop=1;
  19.         bit Left_moto_stop =1;
  20.         unsigned  int  time=0;
  21.         int i;

  22. /************************************************************************/
  23.      void  run(void)        //前進函數
  24. {
  25.      push_val_left  =10;  //PWM 調節參數1-10   1為最慢,10是最快  改這個值可以改變其速度
  26.          push_val_right =5;         //PWM 調節參數1-10   1為最慢,10是最快         改這個值可以改變其速度
  27.         // Left_moto_go ;                 //左電機前進
  28.         // Right_moto_go ;         //右電機前進
  29. }

  30. /************************************************************************/
  31. /*                    PWM調制電機轉速                                   */
  32. /************************************************************************/
  33. /*                    左電機調速                                        */
  34. /*調節push_val_left的值改變電機轉速,占空比            */
  35.                 void pwm_out_left_moto(void)
  36. {  
  37.    if(Left_moto_stop)
  38.    {
  39.     if(pwm_val_left<=push_val_left)
  40.                Left_moto_pwm=1;
  41.         else
  42.                Left_moto_pwm=0;
  43.         if(pwm_val_left>=10)
  44.         pwm_val_left=0;
  45.    }
  46.    else  Left_moto_pwm=0;
  47. }
  48. /******************************************************************/
  49. /*                    右電機調速                                  */  
  50.    void pwm_out_right_moto(void)
  51. {
  52.   if(Right_moto_stop)
  53.    {
  54.     if(pwm_val_right<=push_val_right)
  55.                Right_moto_pwm=1;
  56.         else
  57.                Right_moto_pwm=0;
  58.         if(pwm_val_right>=10)
  59.         pwm_val_right=0;
  60.    }
  61.    else    Right_moto_pwm=0;
  62. }
  63. /***************************************************/
  64. ///*TIMER0中斷服務子函數產生PWM信號*/
  65.         void timer0()interrupt 1   using 2
  66. {
  67.      TH0=0XF8;          //1Ms定時
  68.          TL0=0X30;
  69.          time++;
  70.          pwm_val_left++;
  71.          pwm_val_right++;
  72.          pwm_out_left_moto();
  73.          pwm_out_right_moto();
  74. }        
  75. /***************************************************/

  76.   void xiong() interrupt 3
  77. {         
  78.   if(P10==0&&P11==0&&P12==1&&P13==0&&P14==0)  //小車直線快走  定時0.002ms                                 
  79.            {
  80.             push_val_left  =6;  
  81.             push_val_right =6;
  82.             TH1=0XFF;
  83.             TL1=0xFe;
  84.             Left_moto_go;
  85.                 Right_moto_go;
  86.          }

  87.   if(P10==0&&P11==0&&P12==0&&P13==1&&P14==0)                          //小車右轉小                定時0.005ms         
  88.    {                                       
  89.                push_val_left  =5;  
  90.             push_val_right =4;                          
  91.             TH1=0XFF;
  92.             TL1=0Xfb;
  93.             Left_moto_go;
  94.                 Right_moto_back;
  95.    }
  96.      if(P10==0&&P11==0&&P12==0&&P13==0&&P14==1)                          //小車右轉大                定時0.005ms         
  97.    {                                       
  98.                push_val_left  =6;  
  99.             push_val_right =3;                          
  100.             TH1=0XFF;
  101.             TL1=0Xfb;
  102.             Left_moto_go;
  103.                 Right_moto_back;
  104.    }
  105.                                        
  106.     if(P10==0&&P11==1&&P12==0&&P13==0&&P14==0)                  //小車左轉小                        定時0.005ms
  107.        {
  108.             push_val_left  =4;  
  109.             push_val_right =5;
  110.         TH1=0XFF;
  111.         TL1=0XFb;
  112.         Right_moto_go;
  113.             Left_moto_back;      
  114.               }        
  115.                    if(P10==1&&P11==0&&P12==0&&P13==0&&P14==0)                  //小車左轉大                        定時0.005ms
  116.        {
  117.             push_val_left  =3;  
  118.             push_val_right =6;
  119.         TH1=0XFF;
  120.         TL1=0XFb;
  121.         Right_moto_go;
  122.             Left_moto_back;      
  123.               }                        
  124.          if(P11==1&&P12==1&&P13==1&&i==1)
  125.                  {
  126.                           push_val_left  =0;  
  127.                              push_val_right =8;
  128.                           TH1=0XFc;
  129.                       TL1=0X30;
  130.                       Right_moto_go;
  131.                           Left_moto_back;
  132.                           i++;        
  133.                 }
  134.          if(P11==1&&P12==1&&P13==1&&i==2)
  135.                  {
  136.                           push_val_left  =8;  
  137.                              push_val_right =0;
  138.                           TH1=0XFc;
  139.                       TL1=0X30;
  140.                       Right_moto_back;
  141.                           Left_moto_go;
  142.                           i++;        
  143.                 }                        
  144.          if(P11==1&&P12==1&&P13==1&&i==3)
  145.          {                                                                                    //全部檢測到黑線時 車停
  146.                   TH1=0XFF;
  147.               TL1=0Xfb;
  148.           Right_moto_back;
  149.               Left_moto_back;
  150.                   i==3;
  151.           }        
  152.             if(P00==0)                                   
  153.            {
  154.             push_val_left  =8;  
  155.             push_val_right =8;
  156.             TH1=0XFF;
  157.             TL1=0x30;
  158.             Left_moto_go;
  159.                 Right_moto_go;
  160.          }
  161. }
  162.         void main(void)
  163. {
  164.         TMOD=0X11;
  165.         TH0= 0XF8;                  //1ms定時
  166.         TL0= 0X30;
  167.         TR0= 1;
  168.         ET0= 1;
  169.         TH1=0XFF;
  170.         TL1=0Xfb;
  171.         TR1=1;
  172.         ET1=1;
  173.         EA =1;
  174.     P00=0;

  175.          
  176.         while(1)                                                        /*無限循環*/
  177.         {                                          // P10=0;P11=0;P12=1;P13=0;P14=0;
  178.         if(P10==0&&P11==0&&P12==1&&P13==0&&P14==0)                           // 小車直走           定時0.002ms                 
  179.          {
  180.          TH1=0XFF;                  //定時0.01ms
  181.          TL1=0xFe;
  182.          TR1=1;
  183.          }
  184.         if(P10==0&&P11==0&&P12==0&&P13==1&&P14==0)                  //小車右轉                定時0.005ms         
  185.   {
  186.    TH1=0XFF;
  187.    TL1=0Xfb;
  188.    TR1=1;  
  189.   }        
  190.           if(P10==0&&P11==0&&P12==0&&P13==0&&P14==1)                  //小車右轉                定時0.005ms         
  191.   {
  192.    TH1=0XFF;
  193.    TL1=0Xfb;
  194.    TR1=1;  
  195.   }         
  196.           if(P10==0&&P11==1&&P12==0&&P13==0&&P14==0)                  //小車左轉                定時0.005ms                        
  197.   {
  198.    TH1=0XFF;
  199.    TL1=0XFb;
  200.    TR1=1;
  201.   }
  202.             if(P10==1&&P11==0&&P12==0&&P13==0&&P14==0)                  //小車左轉                定時0.005ms                        
  203.   {
  204.    TH1=0XFF;
  205.    TL1=0XFb;
  206.    TR1=1;
  207.   }
  208.     if(P11==1&&P12==1&&P13==1&&i==1)                  //十字左轉
  209.                 {
  210.                         TH1=0XFc;
  211.                         TL1=0X30;
  212.                         TR1=1;        
  213.                 }
  214.    if(P11==1&&P12==1&&P13==1&&i==2)                   //十字右轉
  215.                 {
  216.                         TH1=0XFc;
  217.                         TL1=0X30;
  218.                         TR1=1;               
  219.                 }
  220.     if(P11==1&&P12==1&&P13==1&&i==3)                           //全部檢測到黑線時 車停
  221.           {
  222.            TH1=0XFF;
  223.        TL1=0Xfb;
  224.        TR1=1;
  225.           }        
  226.            if(P00==0)
  227.            {
  228.              TH1=0XFF;                  //定時1s
  229.                  TL1=0x30;
  230.                  TR1=1;
  231.            }
  232. }
  233. }  
復制代碼


回復

使用道具 舉報

ID:262 發表于 2016-3-11 23:30 | 顯示全部樓層
51黑有你更精彩!
回復

使用道具 舉報

ID:72781 發表于 2016-3-12 01:22 | 顯示全部樓層
是不是你沒有鎖定P00=0啊,也就是你在主循環中P00=0;把定時器設置成定時1秒,一秒的時間太長了,在這個時間內,有其他情況發生,比如十字左轉發生,把定時器的設置的時間又改了,因為51的話是定時器的時間改了以后就用新值重新定時的,還有,或者在定時過程中,P00是等于0,一秒后,當進入中斷了,P00不等于0了,相當于在中斷中P00==0的if不能執行直接被跳過
回復

使用道具 舉報

ID:72781 發表于 2016-3-12 01:26 | 顯示全部樓層
我的建議是,在定時器中設置一個標志位,未進中斷前,標志為為0,進入中斷后設為1,并且關閉定時器。在主循環中用if(P00==0){TH=XX,TL=XX;TR=1;XX;while(flag標志位==0);一秒時間到執行函數xx;xx;flag=0清零}下一個IF},另外,沒有仔細看程序,回答的可能不到點子上,如果有誤請原諒,歡迎討論。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品一区二区三区不卡 | 黄片毛片 | www.天天操 | 99re视频在线免费观看 | 日韩乱码一二三 | 999久久久久久久久6666 | 韩国毛片视频 | 日韩91| 日韩欧美三区 | 成人免费视频网站在线看 | 欧美久久一级 | 国产在线一 | 久久51| av黄色免费 | 国产精品视频免费 | 国产精品美女久久久久aⅴ国产馆 | 99久久精品国产一区二区三区 | 成人美女免费网站视频 | 天天干天天操天天看 | 精品国产一区二区三区性色 | 黑人一级黄色大片 | 午夜精品在线观看 | 欧美精品99| 一级毛片免费视频观看 | 91免费福利视频 | а天堂中文最新一区二区三区 | 日韩一区二区三区四区五区六区 | 成人免费大片黄在线播放 | 午夜精品一区二区三区在线观看 | 久久成人精品视频 | 成人一区二区三区在线观看 | 国产精品一区在线观看 | 一区二区三区电影网 | 国产精品一区二区在线 | a在线观看 | 一级片网址 | 欧美福利专区 | 黑人一级黄色大片 | 日本黄色片免费在线观看 | 亚洲国产精品99久久久久久久久 | 日本一区二区三区免费观看 |