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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1912|回復: 0
打印 上一主題 下一主題
收起左側

請大家幫我 單片機定時器的問題

[復制鏈接]
跳轉到指定樓層
樓主
ID:143584 發表于 2017-11-24 11:10 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本人初學者,有一問題請教大家.
我用STC89C52,三個定時器一起用,T0是計外脈沖的,T1是輸出方波,T2用來采樣和控制T1輸出相應頻率的方波,
問題是T1輸出的方波不太穩定,波型上橫向有過沖現象,表現在步進電機上就是轉速不大穩,但是不用T2,把T2關掉,直接打開T1就好多了,
但這樣又實現不了我想要的功能,這是怎么回事,該怎樣修改,或是哪位大神有更好的方法,請幫我解惑.

  1. #include<STC89C5xRC.h>
  2. typedef unsigned char u8;
  3. typedef unsigned int u16;

  4. u8 t0,t1,i,bb=100;
  5. u16 t2;
  6. u8 code tab[]={0x3f,0x06,0x5b,0x4f,0x66,
  7.               0x6d,0x7d,0x07,0x7f,0x6f};

  8. unsigned char Dis_Shiwei;//定義十位
  9. unsigned char Dis_Gewei; //定義個位
  10. unsigned char Dis_Baiwei; //定義百位
  11. sbit sucu=P1^0;          //方波輸出
  12. sbit deng1=P1^1;  //高轉速指示
  13. sbit deng2=P1^2;  //低轉速指示
  14. sbit led0= P1^6;  //這3個調試用,沒什么實際意義
  15. sbit led1=P1^7;
  16. sbit led2=P1^5;

  17. bit kong;

  18. delay(u16 a)
  19.   {
  20.           while(a--);

  21.   }

  22. timor()
  23. {
  24.             TMOD |= 0x10;
  25.                   T2MOD |= 0;                //初始化模式寄存器
  26.                 T2CON = 0;                //初始化控制寄存器
  27.                 TL2 = 0x18;                //設置定時初值
  28.                 TH2 = 0xfC;                //設置定時初值
  29.                 RCAP2L = 0x18;                //設置定時重載值
  30.                 RCAP2H = 0xfC;                //設置定時重載值
  31.                
  32.           ET2=1;                     //打開定時2器中斷
  33.           EA=1;                      //打開總中斷
  34.           TR2=1;                                         //定時器2啟動
  35.          
  36.           EX0=1;      //外部中斷0打開;
  37.           IT0=1;     //外部中斷0選擇下降沿觸發

  38.           TH1 = 0xfe;  //定時器1賦初值
  39.           TL1 = bb;                //由bb的值決定轉速
  40.           ET1 = 1;                //打開定時1器中斷
  41.           //TR1 = 1;     //定時器1啟動
  42.          


  43.          
  44.                   
  45. }

  46. xianshi()
  47.   {

  48.                   
  49.                   P0=Dis_Baiwei; //顯示百位
  50.                   P2=5;                //P2口控制位選端,數5表示選中的第六位數碼管 下同
  51.                   delay(300);
  52.                   P0=Dis_Shiwei;//顯示十位
  53.                   P2=6;
  54.                   delay(300);   //短暫延時
  55.                   P0=Dis_Gewei; //顯示個位
  56.                   P2=7;
  57.                   delay(300);
  58.                   
  59.                   
  60.   }

  61. main()
  62.   {
  63.           timor();
  64.         while(1)
  65.         {
  66.                 xianshi();
  67.          }
  68.   }


  69. void InitTimer0(void) interrupt 0  //using 1//外中斷0入口
  70. {

  71.         t0++; //用來計INT0輸入的脈沖數
  72.         led0=~led0;

  73. }


  74. void InitTimer1(void)  interrupt 3        using 1//定時器1中斷入口
  75. {


  76.       
  77.         TH1 = 0xfe;        //賦初值
  78.     TL1 = bb;        //bb決定轉速
  79.         t1++;
  80.         //led1=~led1;
  81.         if(t1==2)         //二分頻
  82.           {
  83.                   t1=0;
  84.                 sucu=~sucu;
  85.           }
  86.       
  87.       

  88. }

  89. void InitTimer2(void) interrupt 5         //定時器2中斷入口 1ms定時
  90. {

  91.       
  92.         TF2=0;       //定時器2溢出位清零      
  93.         t2++;
  94.         if(t2==50)
  95.                  {      
  96.                          EX0=0;          //外中斷0關閉
  97.                      TR2=0; //定時器2關閉                                                                                                
  98.                          t2=0;         //t2清零
  99.                        

  100.                             Dis_Baiwei=tab[t0/100%10];  //百位顯示值處理
  101.                                 Dis_Shiwei=tab[t0/10%10];   //十位顯示值處理
  102.                             Dis_Gewei=tab[t0%10];      //個位顯示處理
  103.                                                                                                                   
  104.                         if(t0>=9 && t0<=10)        //如果i大于9而小于10,執行  
  105.                       {                                //花括號內的函數  下同
  106.                                  
  107.                                   deng1=0;
  108.                                   deng2=1;
  109.                                   kong=1;
  110.                                   //bb=190;
  111.                                   //TR1=1; //定時器1啟動
  112.                           
  113.                             }
  114.                                 else if(t0>=6 && t0<=7)
  115.                                     {
  116.                                                 
  117.                                                  deng2=0;
  118.                                                  deng1=1;
  119.                                                  bb=70;
  120.                                                  TR1=1;
  121.                                         }

  122.                            
  123.                 else                        //如果上述值都不等于
  124.                    {
  125.                            deng1=1;                //指示燈關閉
  126.                            deng2=1;
  127.                            kong=0;                          
  128.                            TR1=0;                   //定時器1關閉,電機停轉
  129.                            bb=100;      
  130.                            sucu=1;         

  131.                    }

  132.                                          
  133.                             TR2=1;                                 //定時器2啟動
  134.                             EX0=1;                                 //外中斷0打開
  135.                             t0=0;                                  //外中斷0計數值清0
  136.                                                       
  137.                
  138.                 }
  139.                
  140.                
  141.                    if(kong==1)             //步進電機軟啟動
  142.                                  {
  143.                                  
  144.                                    if(bb<190)
  145.                                        {
  146.                                          bb++;
  147.                                                  TR1=1; //定時器1啟動                                                                    
  148.                                              led1=~led1;
  149.                                             }      
  150.                                          
  151.                                        
  152.                                        
  153.                           }
  154.                
復制代碼




分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 少妇性l交大片免费一 | 最近中文字幕第一页 | 99精品久久 | 欧美一区二区三区精品免费 | 美女视频黄的免费 | 欧美日韩成人在线 | 91精品导航 | 伊人中文字幕 | 欧美精品一区二区三区四区五区 | 精品国产18久久久久久二百 | 国产视频久久久 | 国内自拍偷拍一区 | 老头搡老女人毛片视频在线看 | 免费午夜视频在线观看 | 国产精品久久久久久久午夜片 | 成人亚洲一区 | 日本中文字幕日韩精品免费 | 国产精品美女久久久久aⅴ国产馆 | 涩涩视频在线观看 | 一区二区三区网站 | 新超碰97| 亚洲视频观看 | 国产日韩一区二区三区 | 久久精品一 | 国产视频久久 | 99久久久国产精品 | 黑人巨大精品欧美一区二区一视频 | 成人免费看电影 | 成人精品久久日伦片大全免费 | 激情六月天 | 91精品国产乱码久久久久久 | 91香蕉嫩草| h在线播放| 亚洲一区二区三区四区在线观看 | 国产在线视频一区二区董小宛性色 | 午夜视频一区二区 | 亚洲顶级毛片 | 日韩人体视频 | 成人久久一区 | 欧美综合国产精品久久丁香 | www.久久 |