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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

PIC16F684單片機定時中斷跑馬燈 有詳細代碼注釋

[復制鏈接]
跳轉到指定樓層
樓主
ID:204276 發表于 2018-3-7 13:55 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
初學PIC,寫了一個定時跑馬燈程序,以供新手學習PIC提供子資料,文中給出了詳細代碼和注釋,對照手冊,新手完全可以看懂,便于理解和后期開發,給予新手打開PIC的大門鑰匙。

1、開發環境:我選擇的是 MPLAB x IDE
2、芯片型號:8位單片機,PIC16F684
3、程序功能:

(1)RC3、RC4接兩個LED燈,低電平點亮
(2)時鐘選用內部時鐘8MHZ
(3)定時時間為1ms進一次中斷
(4)計時500ms,小燈500ms亮,500ms滅

  1. /*********************************************/
  2. /***
  3.         芯片型號:PIC16F684
  4. 1、RC3、RC4接兩個LED燈,低電平點亮
  5. 2、時鐘選用內部時鐘8MHZ
  6. 3、定時時間為1ms進一次中斷
  7. 4、小燈500ms亮,500ms滅
  8. *************************/

  9. 4、程序代碼

  10. /*
  11. * File: main.c
  12. * Author: 夏夕空
  13. * Created on 2018年02月06日
  14. * Version: V1.0 beta0
  15. * 系統時鐘選用內部8M晶振
  16. */
  17. #include <htc.h>
  18. // PIC16F684 Configuration Bit Settings
  19. // 'C' source line config statements
  20. __CONFIG(FOSC_INTOSCIO & WDTE_OFF & PWRTE_ON &MCLRE_OFF &
  21.         CP_OFF & CPD_OFF & BOREN_OFF & IESO_ON & FCMEN_ON);
  22. #define uchar unsigned char
  23. #define uint unsigned int
  24. #define ulong unsigned long
  25. #define  Time_base 1 //定時1ms
  26. #define FOSC 8000        //時鐘頻率8MHZ
  27. #define LED TRISC                // LEDI/O口

  28. void delay_ms(uint xms);        //非精確延時,有誤差
  29. void Timer0_Init(void);         //定時器0初始化

  30. /***************************************
  31. * 名    稱:delay_ms()
  32. * 功    能:非精確延時
  33. * 輸入參數:無
  34. * 返回參數:無
  35. ***************************************/
  36. void delay_ms(uint xms)
  37. {
  38. uint x,y;
  39. for(x=xms; x>0;x--)
  40.      for(y=2000;y>0;y--);
  41. }
  42. /***************************************
  43. * 名    稱:Timer0_Init()
  44. * 功    能:初始化定時器0
  45. * 輸入參數:無
  46. * 返回參數:無
  47. ***************************************/
  48. volatile uchar temp =0;             //temp為初始值緩存
  49. void Timer0_Init(void)
  50. {
  51.     T0CS = 0;       //選擇定時器模式,T0CS =1為計數器模式,T0CS =0為定時器模式
  52.     T0SE = 0;       //定時器上升沿遞增,T0SE =0為上升沿遞增,T0SE =1為下降沿遞增
  53.     PSA = 0;        //預分頻器分給定時器
  54. /***三種方式都可以****/
  55.     OPTION_REG &= 0xF8;  //1B 1111 1000     32分頻
  56.     OPTION_REG |= 0x04;  //1B 0000 0100
  57.     /*
  58.     PS2 = 1;        //1B 0000 0100     32分頻
  59.     PS1 = 0;
  60.     PS0 = 0;
  61.     */
  62. //  OPTION_REG = 0x04; //1B 0000 0100     32分頻
  63.     T0IF = 0;       //定時器0溢出標志位
  64.     GIE = 1;        //總中斷允許位,GIE =1為允許所有未屏蔽中斷,GIE =0禁止中斷
  65.     T0IE = 1;       //定時器0溢出中斷允許,T0IE =1,允許溢出時中斷,T0IE =0不允許中斷
  66.     temp = 256-((Time_base*FOSC)/4/32);  //定時1ms
  67.     TMR0 = temp;      //重載初始值
  68. }
  69. /*全局靜態變量count*/
  70. static uint count = 0;
  71. /***************************************
  72. * 名    稱:main()
  73. * 功    能:根據協議處理數據
  74. * 輸入參數:無
  75. * 返回參數:無
  76. ***************************************/
  77. void main(void)
  78. {
  79.     delay_ms(5);        //等待時鐘穩定
  80.     PORTC &=0xE7;       //RC3,RC4選擇為輸出模式
  81.     Timer0_Init();      //定時器0初始化
  82.     LED &= 0xF7; //1B1111 0111選擇小燈初始狀態 RC3亮
  83.     LED |=0x10;  //1B0001 0000                 RC4滅
  84.     while(1)
  85.     {
  86.         if(count == 500)       //500ms時間到
  87.         {
  88.             count = 0;         //清零計數
  89.             LED = ~LED;         //小燈翻轉
  90.         }
  91.         else            //時間沒到,空等待
  92.         {
  93.         }
  94.     }
  95. }
  96. /***************************************
  97. * 名    稱:Timer0_Isr()
  98. * 功    能:產生1ms時基
  99. * 輸入參數:無
  100. * 返回參數:無
  101. ***************************************/
  102. void interrupt Timer0_Isr(void)
  103. {
  104.     if(T0IF == 1)          //如果溢出中斷
  105.     {     
  106.         T0IF = 0;         //標志位清0
  107.         temp = 256-((Time_base*FOSC)/4/32);
  108.         TMR0 = temp;      //重載初始值
  109.         count++;          //計數++
  110.     }
  111. }
復制代碼


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

使用道具 舉報

沙發
ID:69381 發表于 2019-2-27 20:54 | 只看該作者
連TRISC和PORT都沒分清楚,呵呵
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人性视频免费网站 | 91动漫在线观看 | 国产乱码精品一区二区三区忘忧草 | av在线一区二区三区 | 日本不卡视频在线播放 | 九九精品在线 | 亚洲人免费视频 | 在线免费观看黄色 | 九九热精品在线 | 在线看av的网址 | 国产精品天堂 | 久久久www成人免费无遮挡大片 | 欧美精品一区二区免费 | a欧美| 天天综合成人网 | 亚洲欧美一区二区在线观看 | 中文字幕日韩欧美 | 亚洲成人av在线播放 | 国产一区在线视频 | 99国产精品视频免费观看一公开 | 免费h在线 | 午夜寂寞影院列表 | 亚洲成a人片 | 欧美视频免费在线 | 国产精品亚洲精品 | 色橹橹欧美在线观看视频高清 | 狠狠艹 | 久久在线免费 | 久久亚洲欧美日韩精品专区 | 欧美最猛黑人 | 国产精品视频网址 | 久久99视频免费观看 | 精品欧美一区二区三区久久久 | 久久国产精品99久久久大便 | 亚洲精品在| 精品伊人久久 | 日韩视频免费 | 毛片免费在线 | 亚洲大片一区 | 老子午夜影院 | 黑人巨大精品欧美一区二区免费 |