新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > PIC單片機C語言程序設計(15)

        PIC單片機C語言程序設計(15)

        作者: 時間:2013-01-26 來源:網絡 收藏
          本文是講座《單片機C 語言》的結束篇,為了幫助大家更好地掌握前面所學的知識,我們將歸納性地介紹初學者用C 語言編輯PIC 單片機實用程序時應具備的思維方法和基本知識,并通過下面的實例進行一次小結,以期對大家今后深入學習PIC 單片機C 語言有所幫助。

          十六、程序的組成

          一個完整的PIC 單片機C 語言源程序應包括:包含頭文件、變量定義、常量說明、函數定義、主函數main( )、若干個其他功能函數、各種功能C 語句,以及已定義的函數和函數體、注釋等部分組成。

          說明:對PIC 單片機中級或中級以下的產品,其頭文件是#includepic.h> 和#includepic1687x.h>; 對高級產品,如PIC18F452 器件,其頭文件是#includepic18.h> 和#include pic18fxx2.h>。

          C 程序的運行,總是從主函數main( ) 開始(可以通過模擬仿真直接觀察到),由主函數調用其他函數,其他函數也可互相調用, 如此運行工作。而C 語句,又可按其執行方式的不同而分為順序結構、選擇結構和循環結構等。這里的順序結構, 是指程序按語句的順序逐條執行;選擇結構, 是指程序根據相關條件選擇的執行順序; 循環結構, 是指程序根據某條件的存在執行一段程序,直到條件消失為止,若該條件永遠存在,就形成無限循環。

          1. 延時函數的三種表達式

          用匯編語言編輯一個較大的PIC 單片機程序時,一般分為多個程序模塊,每個模塊的子程序實現一個特定的功能。而用C 語言編輯該程序時,模塊的功能是用函數實現的,即函數相當于匯編語言的子程序。下面我們以延時函數應用的實例,來說明PIC 單片機C 語言程序的基本組成格式。

          延時函數是PIC 單片機源程序中出現頻率較高的函數,而且具有相同功能的延時函數也有多種形式,我們選擇常用的三種延時函數進行討論。

          所引用的三種延時函數都是由循環控制語句——while、do_while 和for 等實現的。

          (1)帶形式參數的由for 語句組成的延時函數。

          void delay(unsigned int k)

          {

          unsigned int i, j;

          fir(i=0;i=81;i++)

          fir(j=0;j=k;j++)

          cONtinue;

          }

          該延時函數由兩個for 語句組成,第一個for語句中的81 是筆者設置的常數(可任意設定),用于使延時值增加; 第二個for 語句中的k 是在程序中主函數main( ) 調用delay(k) 時,由用戶給定的值,k 值不同,延時時間就不等, 所以該延時函數可在一個C 程序中實現不同的多個延時量,顯然比匯編語言延時子程序簡單多了。在延時量要求較短時, 該延時函數種的兩個for 語句的功能可用一個for 語句來實現。

          (2)帶形式參數的由while 循環語句組成的延時函數。

          Void deley(unsigned long int k)

          {

          Unsigned long int d=k;

          While(--d)

          {;

          }

          {

          此延時函數簡單、容易記憶。使用時,在程序中主函數main( ) 調用delay(k) 時,由用戶給定不同的k 值,亦可實現多種延時值。

          (3)帶形式參數的由do-while 語句組成的延時函數。

          Void delay(unsigned long int k)

          {

          Unsigned int long j=o;

          do {

          j++;

          }

          While(j =k);

          j=o;

          }

          該延時函數簡單易記。使用時,在程序中主函數main( ) 調用delay(k) 時,由用戶給定不同的k 值,即可實現多種延時值。

          需要說明的是,上述由while 循環語句和由do-while 語句組成的延時函數中的形式參數,不一定用長整型(long ink)。

          ⒉ 電路功能相同形式不同的四種C 程序

          下面介紹利用PIC16F84A 單片機的PORTB端口外接的8 只LED, 采用四種C 程序控制端口的LED 燈,來說明編輯C 語言程序時的基本格式及其靈活性。電路參見《電子制作》2009 年9期《單片機C 語言(1)》一文中的圖1,程序流程如圖64 所示,采用的是無限循環工作方式。

        圖64

          (1)C 程序一,文件名為pic09.c, 清單如下:

          #include pic.h> // 頭文件

          void delay(unsigned long int K)

          // 延時函數開始

          {

          unsigned int long j=0;

          // 說明語句

          do

          // 由do-while 組成的延時執行語句

          {

          j++;

          }

          while(j=K);

          j=0;

          }

          main( ) // 主函數開始

          {

          TRISB=0x00;

          // 設置PORTB 口全為輸出

          INTCON=0x00; // 關閉所有中斷

          PORTB=0x00; //RB 口先送低電平

          while(1) // 永久循環開始

          {

          PORTB=0x55;

          //RB 口外接LED 其1、3、5、7 點亮

          delay(45000);

          // 點亮的LED 延時1 秒后關閉

          PORTB=0xAA;

          //RB 口外接LED 其2、4、6、8 點亮

          delay(98000);

          // 點亮的LED 延時2 秒后關閉

          PORTB=0xFF; //RB 口外接LED 全亮

          delay(155000);

          // 全亮的LED 延時3 秒后關閉

          }

          }


        上一頁 1 2 3 下一頁

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 化德县| 兴业县| 鄂托克旗| 集安市| 扬州市| 庆阳市| 普宁市| 丹凤县| 新疆| 隆林| 隆尧县| 安丘市| 镇平县| 永州市| 西畴县| 阜新| 泽普县| 晴隆县| 乳山市| 德化县| 和平区| 若羌县| 招远市| 枣强县| 马山县| 芮城县| 永胜县| 乌海市| 苗栗县| 汤原县| 南溪县| 古田县| 昌都县| 马边| 南京市| 嘉荫县| 拜泉县| 枞阳县| 德化县| 辉南县| 西青区|