• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 牛人業話 > 看完這篇文章,PIC單片機就能入門了(續)

    看完這篇文章,PIC單片機就能入門了(續)

    作者:areak 時間:2015-08-29 來源:電子產品世界 收藏

      下面貼出LED閃燈的源碼,并逐語句進行講解。

    本文引用地址:http://www.czjhyjcfj.com/article/279441.htm

      #include "p30f6014A.h" //包含頭文件

      _FOSC(CSW_FSCM_OFF & XT_PLL16); //配置時鐘

      _FWDT(WDT_OFF); //關閉看門狗

      假設使用的外部晶振為5Mhz,系統指令周期的計算方法為:

      5M*16/4=20MIPS

      16為16倍頻,每執行一條指令要4個時鐘周期,因此要除四,就得到了實際的系統時鐘。

      IO端口的配置

      IO端口使用很簡單,和51相比只是多了一個方向控制,在使用端口之前 ,先設置好方向。假設我們使用的端口A的第十位作為LED的控制位,首先設置該管腳的方向,

      TRISAbits.TRISA10 = 0;//該位置零為輸出,置1位輸入

      控制端口實際輸出高低電平的寄存器位LATAbits,將該寄存器的LATA10位進行置1置0操作,即可輸出高、低電平。

      #define LED LATAbits.LATA10

      值得注意的是,當進行讀引腳操作時,要讀PORTAbits寄存器,而不是LATAbits寄存器。

      我們是采用定時500ms中斷的方式來進行LED的亮滅控制,因此需要進行定時器的配置,這里使用的是16位定時器timer1。涉及到兩個函數。

      ConfigIntTimer1(5);//初始化定時器1,中斷優先級為5

      OpenTimer1(39062);//進行相關配置并打開定時器1

      void ConfigIntTimer1(unsigned char priority)

      {

      IFS0bits.T1IF = 0 //清除中斷標志

      IPC0bits.T1IP = priority; //設置中斷優先級

      IEC0bits.T1IE = 1; //使能中斷

      }

      void OpenTimer1(unsigned int period)

      {

      TMR1 = 0; /* Reset Timer1 to 0x0000 */

      PR1 = period; //中斷周期

      T1CONbits.TCS = 0; //選擇時鐘源

      T1CONbits.TSYNC =1;

      T1CONbits.TCKPS =3; //256分頻

      T1CONbits.TGATE =0;

      T1CONbits.TSIDL =0;

      T1CONbits.TON = 1; //啟動定時器

      }

      選擇系統時鐘(20MIPS),并進行256分頻,20M/256=78125,說明定時器計時到78125要用1秒鐘,定時到500ms需要39062個周期,因此需要設置計時周期為39062,而且由于定時器1為16位定時器,無法計時到一秒,如果需要計時1s可以使用32位定時器timer23和timer45。

      定時器1中斷函數

      void __attribute__((__interrupt__, no_auto_psv)) _T1Interrupt(void)

      {

      IFS0bits.T1IF = 0;//清零中斷標志

      LED = !LED;//對LED循環取反,進行亮滅控制

      }

      如此便可實現LED閃爍功能。

      附上完整的工程源碼,請下載查看:

      http://forum.eepw.com.cn/thread/276018/1

      在使用該款的時候還需要注意幾個問題:

      1、 由于的管腳有復用功能,在使用端口B的時候,如果想將端口B的第7位用作數字IO,需要這樣來設置,(其它端口無需這樣操作)

      ADCON1bits.ADON = 0;//關閉AD轉換器

      ADPCFGbits.PCFG7 = 1;//該位必須置位,否則PORTB_7無法用作數字IO管腳

      2、 在系統的安裝目錄下,自帶了各個資源的使用例程,使用者可以參考。我的目錄是:C:Program Files (x86)MicrochipMPLAB C30srcperipheral_30F_24H_33Fsrc pmc (供參考)

      3、 在使用串口資源時,需要準確設定串口波特率,以設置UART1, 9600波特率為例,波特率計算方法為:20MIPS/((9600+1)*16)=130。將130賦給U1BRG寄存器即可。

      4、 該單片機具有內部EEPROM,如果需要存儲的數據量不大的話,一些需要掉電存儲的參數可以存儲在單片機內部,可簡化外部電路設計。

      有了以上的基礎,相信學習這款單片機就輕松多了,可以使初學者少走彎路,集中精力解決實質性問題,以上是本人個人的一點經驗,如有疏漏之處,歡迎指正。

    單片機相關文章:單片機教程


    單片機相關文章:單片機視頻教程


    單片機相關文章:單片機工作原理


    晶振相關文章:晶振原理


    關鍵詞: PIC 單片機

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 和林格尔县| 饶平县| 安平县| 施甸县| 璧山县| 阿图什市| 肃宁县| 巴林左旗| 四子王旗| 抚松县| 吉水县| 钦州市| 天长市| 邳州市| 楚雄市| 从化市| 伊吾县| 杨浦区| 贺兰县| 海门市| 瑞昌市| 邵阳县| 龙胜| 弥勒县| 巨鹿县| 博野县| 内乡县| 平潭县| 辽宁省| 福贡县| 瓮安县| 乳山市| 西吉县| 钟山县| 临汾市| 武夷山市| 博客| 高陵县| 措勤县| 云南省| 叙永县|