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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 10844|回復: 5
收起左側

同時使用兩個單片機定時器的問題

[復制鏈接]
ID:430571 發表于 2018-12-13 19:26 | 顯示全部樓層 |閱讀模式
請問有誰能用定時器1方式2-----藍牙     定時器0-------舵機        以此來實現藍牙控制舵機旋轉和小車行駛嗎?
回復

使用道具 舉報

ID:123289 發表于 2018-12-13 22:52 | 顯示全部樓層
再多都可以,一片單片機的定時器即可。
回復

使用道具 舉報

ID:410399 發表于 2018-12-14 08:10 | 顯示全部樓層
2個定時器就這樣用,功能你自己搞定了
  1. void main()
  2. {
  3. TMOD = 0x11;
  4.        
  5.         TH0 = (65536 - 15000) / 256;                //定時器 0: 15ms
  6.         TL0 = (65536 - 15000) % 256;
  7.        
  8.         TH1 = (65536 - 50000) / 256;                //定時器 1: 50ms
  9.         TL1 = (65536 - 50000) % 256;
  10.        
  11.         IE = 0x8a;
  12.        
  13.         TR0 = 1;
  14.         TR1 = 1;
  15. }
  16. void Time0(void) interrupt 1
  17. {
  18.         TH0 = (65536 - 15000) / 256;                //恢復定時器0初值
  19.         TL0 = (65536 - 15000) % 256;
  20.        
  21.         if(++tc0 == 10)                                                //150ms 轉換狀態
  22.         {
  23.                 tc0 = 0;
  24.                 //
  25.                
  26.         }
  27.        
  28. }

  29. //T1中斷函數
  30. void Time1(void) interrupt 3
  31. {
  32.         TH1 = (65536 - 50000) / 256;                //恢復定時器1初值
  33.         TL1 = (65536 - 50000) % 256;
  34.        
  35.         if(++tcl == 10)                                                //500ms 轉換狀態
  36.         {
  37.                 tc1 = 0;
  38.                 //
  39.         }
  40. }
復制代碼
回復

使用道具 舉報

ID:430571 發表于 2018-12-16 20:55 | 顯示全部樓層
mosqu 發表于 2018-12-14 08:10
2個定時器就這樣用,功能你自己搞定了

if(++tc0 == 10)                                                //150ms 轉換狀態
        {
                tc0 = 0;
                //
               
        }
if(++tcl == 10)                                                //500ms 轉換狀態
        {
                tc1 = 0;
                //
        }
這兩個是用來避開中斷優先級的吧,  tco和tcl應該定義初值為0嗎?    且應這樣寫吧  
++tc0;           // 加這個否則if  這不好使吧
if(++tc0 == 10)                                                //150ms 轉換狀態
        {
                tc0 = 0;
                //
               
        }
回復

使用道具 舉報

ID:641036 發表于 2019-11-13 11:04 | 顯示全部樓層
如果同時用四個定時器程序怎么寫
回復

使用道具 舉報

ID:155507 發表于 2019-11-13 20:50 | 顯示全部樓層
nidhoggll 發表于 2019-11-13 11:04
如果同時用四個定時器程序怎么寫

5個定時器就這樣用


  1. /*---------------------------------------------------------------------*/
  2. /* --- STC MCU Limited ------------------------------------------------*/
  3. /* --- STC15F4K60S4 系列 定時器0的16位自動重裝載模式舉例---------------*/
  4. /* --- STC15F4K60S4 系列 定時器1的16位自動重裝載模式舉例---------------*/
  5. /* --- STC15F4K60S4 系列 定時器2的16位自動重裝載模式舉例---------------*/
  6. /* --- STC15F4K60S4 系列 定時器3的16位自動重裝載模式舉例---------------*/
  7. /* --- STC15F4K60S4 系列 定時器4的16位自動重裝載模式舉例---------------*/
  8. /* --- Mobile: (86)13922805190 -------------- -------------------------*/
  9. /* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/
  10. /* --- Tel: 86-0513-55012928,55012929,55012966-------------------------*/
  11. /* --- Web: www.STCMCU.com --------------------------------------------*/
  12. /* --- Web: www.GXWMCU.com --------------------------------------------*/
  13. /* 如果要在程序中使用此代碼,請在程序中注明使用了STC的資料及程序        */
  14. /* 如果要在文章中應用此代碼,請在文章中注明使用了STC的資料及程序        */
  15. /*---------------------------------------------------------------------*/

  16. //本示例在Keil開發環境下請選擇Intel的8058芯片型號進行編譯
  17. //若無特別說明,工作頻率一般為11.0592MHz

  18. #include "reg51.h"

  19. typedef unsigned char BYTE;
  20. typedef unsigned int WORD;

  21. //-----------------------------------------------

  22. #define FOSC 11059200L

  23. #define T0_1MS (65536-FOSC/1000)      //1T模式
  24. //#define T0_1MS (65536-FOSC/12/1000) //12T模式
  25. #define T1_2MS (65536-FOSC/2000)      //1T模式
  26. //#define T1_2MS (65536-FOSC/12/2000) //12T模式
  27. #define T2_3MS (65536-FOSC/3000)      //1T模式
  28. //#define T2_3MS (65536-FOSC/12/3000) //12T模式
  29. #define T3_38_4KHz (256-18432000/38400/2)         //1T模式
  30. //#define T3_38_4KHz (256-18432000/12/38400/2)    //12T模式
  31. #define T4_38_4KHz (256-18432000/38400/2)         //1T模式
  32. //#define T4_38_4KHz (256-18432000/12/38400/2)    //12T模式


  33. sfr P0M1 = 0x93;
  34. sfr P0M0 = 0x94;
  35. sfr P1M1 = 0x91;
  36. sfr P1M0 = 0x92;
  37. sfr P2M1 = 0x95;
  38. sfr P2M0 = 0x96;
  39. sfr P3M1 = 0xb1;
  40. sfr P3M0 = 0xb2;
  41. sfr P4M1 = 0xb3;
  42. sfr P4M0 = 0xb4;
  43. sfr P5M1 = 0xC9;
  44. sfr P5M0 = 0xCA;
  45. sfr P6M1 = 0xCB;
  46. sfr P6M0 = 0xCC;
  47. sfr P7M1 = 0xE1;
  48. sfr P7M0 = 0xE2;

  49. sfr IE2       = 0xAF;               //中斷使能寄存器2
  50. sfr AUXR      = 0x8e;               //輔助寄存器 //Auxiliary register
  51. sfr T2H       = 0xD6;               //定時器2高8位
  52. sfr T2L       = 0xD7;               //定時器2低8位

  53. sfr T4T3M   = 0xD1;                 //定時器3和定時器4控制寄存器
  54. sfr T4H     = 0xD2;                 //定時器4高8位
  55. sfr T4L     = 0xD3;                 //定時器4低8位
  56. sfr T3H     = 0xD4;                 //定時器3高8位
  57. sfr T3L     = 0xD5;                 //定時器3低8位
  58.                   
  59. sbit P10 = P1^0;
  60. sbit P11 = P1^1;
  61. sbit P12 = P1^2;
  62. sbit P13 = P1^3;
  63. sbit P14 = P1^4;

  64. //-----------------------------------------------

  65. /* Timer0 interrupt routine */
  66. void tm0_isr() interrupt 1
  67. {
  68.     P10 = ! P10;                    //將測試口取反
  69. }

  70. //-----------------------------------------------

  71. //-----------------------------------------------

  72. /* Timer1 interrupt routine */
  73. void tm1_isr() interrupt 3
  74. {
  75.     P11 = ! P11;                    //將測試口取反
  76. }

  77. //-----------------------------------------------
  78. //中斷服務程序
  79. void t2int() interrupt 12           //中斷入口
  80. {
  81.     P12 = !P12;                     //將測試口取反
  82.       
  83. //  IE2 &= ~0x04;                   //若需要手動清除中斷標志,可先關閉中斷,此時系統會自動清除內部的中斷標志
  84. //  IE2 |= 0x04;                    //然后再開中斷即可
  85. }

  86. //-----------------------------------------------
  87. //中斷服務程序
  88. void t3int() interrupt 19           //中斷入口
  89. {
  90.     P13 = !P13;                     //將測試口取反
  91.       
  92. //  IE2 &= ~0x20;                   //若需要手動清除中斷標志,可先關閉中斷,此時系統會自動清除內部的中斷標志
  93. //  IE2 |= 0x20;                    //然后再開中斷即可
  94. }

  95. //-----------------------------------------------
  96. //中斷服務程序
  97. void t4int() interrupt 20           //中斷入口
  98. {
  99.     P14 = !P14;                     //將測試口取反
  100.       
  101. //  IE2 &= ~0x40;                   //若需要手動清除中斷標志,可先關閉中斷,此時系統會自動清除內部的中斷標志
  102. //  IE2 |= 0x40;                    //然后再開中斷即可
  103. }

  104. //-----------------------------------------------

  105. /* main program */
  106. void main()
  107. {
  108.     P0M0 = 0x00;
  109.     P0M1 = 0x00;
  110.     P1M0 = 0x00;
  111.     P1M1 = 0x00;
  112.     P2M0 = 0x00;
  113.     P2M1 = 0x00;
  114.     P3M0 = 0x00;
  115.     P3M1 = 0x00;
  116.     P4M0 = 0x00;
  117.     P4M1 = 0x00;
  118.     P5M0 = 0x00;
  119.     P5M1 = 0x00;
  120.     P6M0 = 0x00;
  121.     P6M1 = 0x00;
  122.     P7M0 = 0x00;
  123.     P7M1 = 0x00;

  124.     AUXR |= 0x80;                   //定時器0為1T模式
  125. //  AUXR &= 0x7f;                   //定時器0為12T模式
  126.     AUXR |= 0x40;                   //定時器1為1T模式
  127. //  AUXR &= 0xdf;                   //定時器1為12T模式
  128.     AUXR |= 0x04;                   //定時器2為1T模式
  129. //  AUXR &= ~0x04;                  //定時器2為12T模式
  130.     T4T3M |= 0x02;                  //定時器3為1T模式
  131. //  T4T3M &= ~0x02;                 //定時器3為12T模式
  132.     T4T3M |= 0x20;                  //定時器4為1T模式
  133. //  T4T3M &= ~0x20;                 //定時器4為12T模式


  134.     TMOD = 0x00;                    //設置定時器為模式0(16位自動重裝載)
  135.     TL0 = T0_1MS;                     //初始化計時值
  136.     TH0 = T0_1MS >> 8;
  137.     TR0 = 1;                        //定時器0開始計時
  138.     ET0 = 1;                        //使能定時器0中斷

  139.     TMOD |= 0x00;                    //設置定時器為模式0(16位自動重裝載)
  140.     TL1 = T1_2MS;                     //初始化計時值
  141.     TH1 = T1_2MS >> 8;
  142.     TR1 = 1;                        //定時器1開始計時
  143.     ET1 = 1;                        //使能定時器0中斷

  144.     T2L = T2_3MS;                     //初始化計時值
  145.     T2H = T2_3MS >> 8;
  146.     AUXR |= 0x10;                   //定時器2開始計時
  147.    
  148.     IE2 |= 0x04;                    //開定時器2中斷

  149.     T3L = T3_38_4KHz;                 //初始化計時值
  150.     T3H = T3_38_4KHz >> 8;
  151.    
  152.     T4T3M |= 0x08;                  //定時器3開始計時
  153.     IE2 |= 0x20;                    //開定時器3中斷

  154.     T4L = T4_38_4KHz;                 //初始化計時值
  155.     T4H = T4_38_4KHz >> 8;
  156.    
  157.     T4T3M |= 0x80;                  //定時器4開始計時
  158.     IE2 |= 0x40;                    //開定時器4中斷
  159.    
  160.     EA = 1;

  161.     while (1);
  162. }



復制代碼
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美福利久久 | 国产精品色婷婷久久58 | 亚洲男人天堂2024 | 久久中文字幕视频 | 国产成人短视频在线观看 | 中文字幕国产视频 | 中文字幕日韩一区 | 2019精品手机国产品在线 | 久久久91精品国产一区二区三区 | 国产高清在线精品 | 欧美专区在线 | 国产高潮av| 北条麻妃一区二区三区在线视频 | 日韩在线 | 在线观看国产视频 | 一级毛片网 | 国产一级片精品 | 天堂一区二区三区 | 色性av| 日韩精品一区二区三区中文在线 | 国产精品久久久久久久久久久新郎 | 亚洲精品粉嫩美女一区 | 国产综合久久 | 天堂一区二区三区四区 | 人成久久 | 日韩精品免费一区 | 国产在线精品一区 | 国产精品s色 | 亚洲 中文 欧美 日韩 在线观看 | 色婷婷在线视频 | 欧美第一页 | 日韩在线视频免费观看 | 久久精品成人热国产成 | 久久精品毛片 | 久久久久久久久久久久一区二区 | 91精品国产综合久久久亚洲 | 日韩成人免费视频 | 成年免费视频 | 午夜影院在线观看免费 | 亚洲精品一区二三区不卡 | 国产一区二区三区四区区 |