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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

stc單片機的三個定時器中斷的使用Timer0-Timer1-Timer2

[復制鏈接]
跳轉到指定樓層
樓主
ID:279997 發表于 2019-2-14 12:43 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
三個定時器的使用的C程序和匯編程序  ,用到的請拿走

單片機源程序如下:
  1. /*************        功能說明        **************

  2. 本程序演示3個定時器的使用, 本例程均使用16位自動重裝.

  3. 下載時, 選擇時鐘 24MHZ (用戶可自行修改頻率).

  4. 定時器0做16位自動重裝, 中斷頻率為1000HZ,中斷函數從P1.7取反輸出500HZ方波信號.

  5. 定時器1做16位自動重裝, 中斷頻率為2000HZ,中斷函數從P1.6取反輸出1000HZ方波信號.

  6. 定時器2做16位自動重裝, 中斷頻率為3000HZ,中斷函數從P4.7取反輸出1500HZ方波信號.

  7. ******************************************/


  8. #define         MAIN_Fosc                24000000UL        //定義主時鐘

  9. #include        "STC15Fxxxx.H"

  10. #define        Timer0_Reload        (MAIN_Fosc / 1000)                //Timer 0 中斷頻率, 1000次/秒
  11. #define        Timer1_Reload        (MAIN_Fosc / 2000)                //Timer 1 中斷頻率, 2000次/秒
  12. #define        Timer2_Reload        (MAIN_Fosc / 3000)                //Timer 2 中斷頻率, 3000次/秒

  13. void        Timer0_init(void);
  14. void        Timer1_init(void);
  15. void        Timer2_init(void);



  16. //========================================================================
  17. // 函數: void main(void)
  18. // 描述: 主函數.
  19. // 參數: none.
  20. // 返回: none.
  21. // 版本: V1.0, 2015-1-12
  22. //========================================================================
  23. void main(void)
  24. {
  25.         P0M1 = 0;        P0M0 = 0;        //設置為準雙向口
  26.         P1M1 = 0;        P1M0 = 0;        //設置為準雙向口
  27.         P2M1 = 0;        P2M0 = 0;        //設置為準雙向口
  28.         P3M1 = 0;        P3M0 = 0;        //設置為準雙向口
  29.         P4M1 = 0;        P4M0 = 0;        //設置為準雙向口
  30.         P5M1 = 0;        P5M0 = 0;        //設置為準雙向口
  31.         P6M1 = 0;        P6M0 = 0;        //設置為準雙向口
  32.         P7M1 = 0;        P7M0 = 0;        //設置為準雙向口

  33.         EA = 1;                //打開總中斷
  34.        
  35.         Timer0_init();
  36.         Timer1_init();
  37.         Timer2_init();

  38.         while (1)
  39.         {

  40.         }
  41. }

  42. //========================================================================
  43. // 函數: void        Timer0_init(void)
  44. // 描述: timer0初始化函數.
  45. // 參數: none.
  46. // 返回: none.
  47. // 版本: V1.0, 2015-1-12
  48. //========================================================================
  49. void        Timer0_init(void)
  50. {
  51.                 TR0 = 0;        //停止計數

  52.         #if (Timer0_Reload < 64)        // 如果用戶設置值不合適, 則不啟動定時器
  53.                 #error "Timer0設置的中斷過快!"

  54.         #elif ((Timer0_Reload/12) < 65536UL)        // 如果用戶設置值不合適, 則不啟動定時器
  55.                 ET0 = 1;        //允許中斷
  56.         //        PT0 = 1;        //高優先級中斷
  57.                 TMOD &= ~0x03;
  58.                 TMOD |= 0;        //工作模式, 0: 16位自動重裝, 1: 16位定時/計數, 2: 8位自動重裝, 3: 16位自動重裝, 不可屏蔽中斷
  59.         //        TMOD |=  0x04;        //對外計數或分頻
  60.                 TMOD &= ~0x04;        //定時
  61.         //        INT_CLKO |=  0x01;        //輸出時鐘
  62.                 INT_CLKO &= ~0x01;        //不輸出時鐘

  63.                 #if (Timer0_Reload < 65536UL)
  64.                         AUXR |=  0x80;        //1T mode
  65.                         TH0 = (u8)((65536UL - Timer0_Reload) / 256);
  66.                         TL0 = (u8)((65536UL - Timer0_Reload) % 256);
  67.                 #else
  68.                         AUXR &= ~0x80;        //12T mode
  69.                         TH0 = (u8)((65536UL - Timer0_Reload/12) / 256);
  70.                         TL0 = (u8)((65536UL - Timer0_Reload/12) % 256);
  71.                 #endif

  72.                 TR0 = 1;        //開始運行

  73.         #else
  74.                 #error "Timer0設置的中斷過慢!"
  75.         #endif
  76. }

  77. //========================================================================
  78. // 函數: void        Timer1_init(void)
  79. // 描述: timer1初始化函數.
  80. // 參數: none.
  81. // 返回: none.
  82. // 版本: V1.0, 2015-1-12
  83. //========================================================================
  84. void        Timer1_init(void)
  85. {
  86.                 TR1 = 0;        //停止計數

  87.         #if (Timer1_Reload < 64)        // 如果用戶設置值不合適, 則不啟動定時器
  88.                 #error "Timer1設置的中斷過快!"

  89.         #elif ((Timer1_Reload/12) < 65536UL)        // 如果用戶設置值不合適, 則不啟動定時器
  90.                 ET1 = 1;        //允許中斷
  91.         //        PT1 = 1;        //高優先級中斷
  92.                 TMOD &= ~0x30;
  93.                 TMOD |= (0 << 4);        //工作模式, 0: 16位自動重裝, 1: 16位定時/計數, 2: 8位自動重裝
  94.         //        TMOD |=  0x40;        //對外計數或分頻
  95.                 TMOD &= ~0x40;        //定時
  96.         //        INT_CLKO |=  0x02;        //輸出時鐘
  97.                 INT_CLKO &= ~0x02;        //不輸出時鐘

  98.                 #if (Timer1_Reload < 65536UL)
  99.                         AUXR |=  0x40;        //1T mode
  100.                         TH1 = (u8)((65536UL - Timer1_Reload) / 256);
  101.                         TL1 = (u8)((65536UL - Timer1_Reload) % 256);
  102.                 #else
  103.                         AUXR &= ~0x40;        //12T mode
  104.                         TH1 = (u8)((65536UL - Timer1_Reload/12) / 256);
  105.                         TL1 = (u8)((65536UL - Timer1_Reload/12) % 256);
  106.                 #endif

  107.                 TR1 = 1;        //開始運行

  108.         #else
  109.                 #error "Timer1設置的中斷過慢!"
  110.         #endif
  111. }

  112. //========================================================================
  113. // 函數: void        Timer2_init(void)
  114. // 描述: timer2初始化函數.
  115. // 參數: none.
  116. // 返回: none.
  117. // 版本: V1.0, 2015-1-12
  118. //========================================================================
  119. void        Timer2_init(void)
  120. {
  121.                 AUXR &= ~0x1c;                //停止計數, 定時模式, 12T模式

  122.         #if (Timer2_Reload < 64)        // 如果用戶設置值不合適, 則不啟動定時器
  123.                 #error "Timer2設置的中斷過快!"

  124.         #elif ((Timer2_Reload/12) < 65536UL)        // 如果用戶設置值不合適, 則不啟動定時器
  125.         //        IE2  &= ~(1<<2);        //禁止中斷
  126.                 IE2  |=  (1<<2);        //允許中斷
  127.         //        INT_CLKO |=  0x04;        //輸出時鐘
  128.                 INT_CLKO &= ~0x04;        //不輸出時鐘

  129.         //        AUXR |=  (1<<3);        //對外計數或分頻
  130.         //        INT_CLKO |=  0x02;        //輸出時鐘
  131.                 INT_CLKO &= ~0x02;        //不輸出時鐘

  132.                 #if (Timer1_Reload < 65536UL)
  133.                         AUXR |=  (1<<2);        //1T mode
  134.                         T2H = (u8)((65536UL - Timer2_Reload) / 256);
  135.                         T2L = (u8)((65536UL - Timer2_Reload) % 256);
  136.                 #else
  137.                         T2H = (u8)((65536UL - Timer2_Reload/12) / 256);
  138.                         T2L = (u8)((65536UL - Timer2_Reload/12) % 256);
  139.                 #endif

  140.                         AUXR |=  (1<<4);        //開始運行

  141.         #else
  142.                 #error "Timer2設置的中斷過慢!"
  143.         #endif
  144. }


  145. //========================================================================
  146. // 函數: void timer0_int (void) interrupt TIMER0_VECTOR
  147. // 描述:  timer0中斷函數.
  148. // 參數: none.
  149. // 返回: none.
  150. // 版本: V1.0, 2015-1-12
  151. //========================================================================
  152. void timer0_int (void) interrupt TIMER0_VECTOR
  153. {
  154.    P17 = ~P17;
  155. }

  156. //========================================================================
  157. // 函數: void timer1_int (void) interrupt TIMER1_VECTOR
  158. // 描述:  timer1中斷函數.
  159. // 參數: none.
  160. // 返回: none.
  161. // 版本: V1.0, 2015-1-12
  162. //========================================================================
  163. void timer1_int (void) interrupt TIMER1_VECTOR
  164. {
  165.    P16 = ~P16;

  166. }

  167. //========================================================================
  168. // 函數: void timer2_int (void) interrupt TIMER2_VECTOR
  169. // 描述:  timer2中斷函數.
  170. // 參數: none.
  171. // 返回: none.
  172. // 版本: V1.0, 2015-1-12
  173. //========================================================================
  174. void timer2_int (void) interrupt TIMER2_VECTOR
  175. {
  176.         P47 = ~P47;
  177. }
復制代碼

所有資料51hei提供下載:
02-Timer0-Timer1-Timer2(三個定時器)測試程序.zip (28.32 KB, 下載次數: 61)

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产人成精品一区二区三 | 久草欧美 | 日本精品视频 | 超碰国产在线 | 综合九九| 一区二区欧美在线 | 精品亚洲一区二区 | 国产自产c区 | 国产福利免费视频 | 国产成人精品免高潮在线观看 | 91精品久久久久久久久中文字幕 | 精品欧美一区二区三区久久久 | 久久国产精品免费一区二区三区 | 在线观看黄免费 | 在线观看你懂的网站 | 亚洲精品一区二区三区四区高清 | 亚洲精品4 | 久久久精品一区二区三区 | 国产激情第一页 | 亚洲在线一区二区三区 | 亚洲一区中文 | 男人天堂网址 | 国产精品99久久久久久久vr | 91在线一区 | 欧美精品在线免费 | 亚洲一区中文 | 久久电影一区 | 久久久久久久久久影视 | 奇米影视77 | 资源首页二三区 | 色影视| 久婷婷| 伊人网一区 | 嫩草视频在线 | 欧美一区二区激情三区 | 欧美专区在线视频 | 亚洲导航深夜福利涩涩屋 | 精品国产精品一区二区夜夜嗨 | 91精品国产777在线观看 | 99re在线视频 | 欧美精品网 |