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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 3830|回復(fù): 3
收起左側(cè)

單片機(jī)中斷有問題,P00=0的時(shí)候進(jìn)不去

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

  1.         #include<AT89x51.H>

  2.         #define Left_moto_pwm     P1_6           //接驅(qū)動(dòng)模塊ENA        使能端,輸入PWM信號(hào)調(diào)節(jié)速度
  3.         #define Right_moto_pwm    P1_7           //接驅(qū)動(dòng)模塊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    當(dāng) P3_4=0,P3_5=1; 時(shí)左電機(jī)前進(jìn)
  11.         #define Left_moto_back    {P3_4=1,P3_5=1;} //P3_4 P3_5 接IN1  IN2    當(dāng) P3_4=1,P3_5=0; 時(shí)左電機(jī)后退               
  12.         #define Right_moto_go     {P3_6=0,P3_7=1;} //P3_6 P3_7 接IN1  IN2         當(dāng) P3_6=0,P3_7=1; 時(shí)右電機(jī)前轉(zhuǎn)
  13.         #define Right_moto_back   {P3_6=1,P3_7=1;} //P3_6 P3_7 接IN1  IN2         當(dāng) P3_6=1,P3_7=0; 時(shí)右電機(jī)后退

  14.            unsigned char pwm_val_left  =0;//變量定義
  15.         unsigned char push_val_left =0;// 左電機(jī)占空比N/10
  16.         unsigned char pwm_val_right =0;
  17.         unsigned char push_val_right=0;// 右電機(jī)占空比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)        //前進(jìn)函數(shù)
  24. {
  25.      push_val_left  =10;  //PWM 調(diào)節(jié)參數(shù)1-10   1為最慢,10是最快  改這個(gè)值可以改變其速度
  26.          push_val_right =5;         //PWM 調(diào)節(jié)參數(shù)1-10   1為最慢,10是最快         改這個(gè)值可以改變其速度
  27.         // Left_moto_go ;                 //左電機(jī)前進(jìn)
  28.         // Right_moto_go ;         //右電機(jī)前進(jìn)
  29. }

  30. /************************************************************************/
  31. /*                    PWM調(diào)制電機(jī)轉(zhuǎn)速                                   */
  32. /************************************************************************/
  33. /*                    左電機(jī)調(diào)速                                        */
  34. /*調(diào)節(jié)push_val_left的值改變電機(jī)轉(zhuǎn)速,占空比            */
  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. /*                    右電機(jī)調(diào)速                                  */  
  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中斷服務(wù)子函數(shù)產(chǎn)生PWM信號(hào)*/
  65.         void timer0()interrupt 1   using 2
  66. {
  67.      TH0=0XF8;          //1Ms定時(shí)
  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)  //小車直線快走  定時(shí)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)                          //小車右轉(zhuǎn)小                定時(shí)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)                          //小車右轉(zhuǎn)大                定時(shí)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)                  //小車左轉(zhuǎn)小                        定時(shí)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)                  //小車左轉(zhuǎn)大                        定時(shí)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.          {                                                                                    //全部檢測(cè)到黑線時(shí) 車停
  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定時(shí)
  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)                                                        /*無限循環(huán)*/
  177.         {                                          // P10=0;P11=0;P12=1;P13=0;P14=0;
  178.         if(P10==0&&P11==0&&P12==1&&P13==0&&P14==0)                           // 小車直走           定時(shí)0.002ms                 
  179.          {
  180.          TH1=0XFF;                  //定時(shí)0.01ms
  181.          TL1=0xFe;
  182.          TR1=1;
  183.          }
  184.         if(P10==0&&P11==0&&P12==0&&P13==1&&P14==0)                  //小車右轉(zhuǎn)                定時(shí)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)                  //小車右轉(zhuǎn)                定時(shí)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)                  //小車左轉(zhuǎn)                定時(shí)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)                  //小車左轉(zhuǎn)                定時(shí)0.005ms                        
  203.   {
  204.    TH1=0XFF;
  205.    TL1=0XFb;
  206.    TR1=1;
  207.   }
  208.     if(P11==1&&P12==1&&P13==1&&i==1)                  //十字左轉(zhuǎn)
  209.                 {
  210.                         TH1=0XFc;
  211.                         TL1=0X30;
  212.                         TR1=1;        
  213.                 }
  214.    if(P11==1&&P12==1&&P13==1&&i==2)                   //十字右轉(zhuǎn)
  215.                 {
  216.                         TH1=0XFc;
  217.                         TL1=0X30;
  218.                         TR1=1;               
  219.                 }
  220.     if(P11==1&&P12==1&&P13==1&&i==3)                           //全部檢測(cè)到黑線時(shí) 車停
  221.           {
  222.            TH1=0XFF;
  223.        TL1=0Xfb;
  224.        TR1=1;
  225.           }        
  226.            if(P00==0)
  227.            {
  228.              TH1=0XFF;                  //定時(shí)1s
  229.                  TL1=0x30;
  230.                  TR1=1;
  231.            }
  232. }
  233. }  
復(fù)制代碼


回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

ID:72781 發(fā)表于 2016-3-12 01:22 | 顯示全部樓層
是不是你沒有鎖定P00=0啊,也就是你在主循環(huán)中P00=0;把定時(shí)器設(shè)置成定時(shí)1秒,一秒的時(shí)間太長了,在這個(gè)時(shí)間內(nèi),有其他情況發(fā)生,比如十字左轉(zhuǎn)發(fā)生,把定時(shí)器的設(shè)置的時(shí)間又改了,因?yàn)?1的話是定時(shí)器的時(shí)間改了以后就用新值重新定時(shí)的,還有,或者在定時(shí)過程中,P00是等于0,一秒后,當(dāng)進(jìn)入中斷了,P00不等于0了,相當(dāng)于在中斷中P00==0的if不能執(zhí)行直接被跳過
回復(fù)

使用道具 舉報(bào)

ID:72781 發(fā)表于 2016-3-12 01:26 | 顯示全部樓層
我的建議是,在定時(shí)器中設(shè)置一個(gè)標(biāo)志位,未進(jìn)中斷前,標(biāo)志為為0,進(jìn)入中斷后設(shè)為1,并且關(guān)閉定時(shí)器。在主循環(huán)中用if(P00==0){TH=XX,TL=XX;TR=1;XX;while(flag標(biāo)志位==0);一秒時(shí)間到執(zhí)行函數(shù)xx;xx;flag=0清零}下一個(gè)IF},另外,沒有仔細(xì)看程序,回答的可能不到點(diǎn)子上,如果有誤請(qǐng)?jiān)彛瑲g迎討論。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 999精品网 | 欧美国产激情二区三区 | 男人的天堂avav | 成年人视频在线免费观看 | 日韩久久久久 | 性色的免费视频 | 美国黄色一级片 | 欧美白人做受xxxx视频 | 在线播放中文字幕 | 午夜日韩视频 | 在线亚洲欧美 | aaaaaaa片毛片免费观看 | 免费亚洲网站 | 亚洲精品福利在线 | 久久久久国产精品一区二区 | 能看的av| 九九av| 在线欧美亚洲 | 中文字幕视频在线观看 | 久久成人人人人精品欧 | 久久视频精品 | 成人不卡 | 黄网在线观看 | 午夜视频在线观看网址 | 成人精品国产一区二区4080 | 黑人精品欧美一区二区蜜桃 | 蜜桃毛片 | 精品视频免费 | 国产精品美女久久久久久免费 | 国产98色在线 | 午夜精品一区二区三区在线播放 | 久久视频精品 | av一区在线观看 | 日韩午夜一区二区三区 | 亚洲欧美视频一区 | 91欧美精品成人综合在线观看 | 91麻豆精品国产91久久久久久 | 99精品一级欧美片免费播放 | 女人毛片a毛片久久人人 | 青青草国产在线观看 | 国产成人免费视频网站视频社区 |