新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 單片機的高級語言編程FranklinC51簡介

        單片機的高級語言編程FranklinC51簡介

        作者: 時間:2016-11-28 來源:網絡 收藏
        一、變量的定義原則:
        其一、總是使用盡可能最小的數據類型;
        對8位機,顯然對“char”類型的對象的操作比對“int”或“long”類型的對象方便得多。C51編譯器直接支持所有字符操作。例如:兩個“char”類型對象相乘與“MUL AB”8051指令相符合。如果用“int”型完成同樣運算,則需要調用庫函數。
        其二、只要有可能,使用“unsigned”數據類型。
        8051系列單片機不直接支持有符號數的運算,為此,編譯器必須產生與之相關的更多的代碼以解決問題。若使用無符號數據類型,產生的代碼要少得多。
        在頭文件reg51.h中有8051所有SFR及可位尋址位的定義,如:
        #include //源文件開始寫
        //………….
        P1=0x10; //在編程中可使用
        TMOD=0x1;
        TR0=1;
        EA=1;
        減少變量占有的空間的方式:
        # 利用#define 定義只讀的常量
        # 使用位域
        # 使用聯合
        1、存儲空間中的對象定位
        8051單片機的存儲器是哈佛結構,即程序存儲器和數據存儲器分開,并有各自的尋址機構和方式。因為Franklin C51是面向8051系列單片機及硬件控制系統的開發工具。它定義的任何數據類型必須以一定的數據方式定位在8051 的某一存儲區中。該編譯器將變量、常量定義成不同的存儲類型,把它們定位在不同的存儲區中。類型和區域的對照如下:
        code :程序存儲區(64KB),由MOVC A, @A+DPTR訪問
        xdata: 外部數據存儲區 (64KB), 由MOVX A, @DPTR訪問
        pdata: 分頁(256B)外部數據存儲區, 由MOVX A,@Ri訪問
        data: 直接尋址內部數據存儲區(128B), 訪問變量速度快
        bdata: 可位尋址的內部數據存儲區, 允許位與字節混合訪問(16B).
        idata: 間接尋址內部數據存儲區(128B)
        例:
        #include
        #define uchar unsigned char
        #define uint unsigned int
        bit flag;布爾值
        code uchar table[]={1,2,3,"help",oxff};
        idata uint temp;
        data char vra; /char data var ; 等價,盡量用后一種
        static unsigned long xdata array[100]; 靜態變量
        extern float idata x,y,z; 外部變量
        uint pdata dimension;
        uchar xdata vector[10][4];
        char bdata flags;
        sbit flag_0=flags^0;
        sbit p_1=p1^1;
        定義時如果省略存儲類型,存儲模式將自動決定變量的默認類型如下:
        一般指針”SMALL:參數和局部變量放入可直接尋址的內部數據存儲區(默認data)
        COMPACT:參數和局部變量放入分頁外部數據存儲區(默認pdata)
        LARGE:參數和局部變量放入外部數據存儲區(默認xdata)
        在C語言中變量和函數的存儲屬性關系到它們的可見性和生存期(即作用域和時限)。存儲屬性分三類:auto自動 extern外部 static靜態。
        Franklin C51支持“基于存儲器的指針”和“一般指針”。
        基于存儲器的指針:由C源程序中的存儲類型決定它的存儲單元數。用這種指針可高效訪問對象,且只要1~2個字節。
        一般指針:需要3個字節(2個字節偏移,1個字節存儲類型)。
        各類指針變量:
        float
        p 3字節長 指向8051存儲區中的“float”
        char data
        dp 1字節 ------ “data”存儲區中的“char”
        int idata
        ip 1字節 ------ “idata” 存儲區中的“int”
        long pdata
        pp 1字節 ------
        char xdata
        xp 2字節 ------
        int code
        cp 2字節 -------
        2、 動態和靜態變量
        動態變量:自動變量
        靜態變量:外部變量(extern),靜態變量(static)
        3、全局和局部變量
        靜態局部變量
        自動變量(說明符auto可缺?。?br />靜態全局變量
        外部變量
        例:
        char xdata
        px;指針自身在默認區(取決于存儲模式)
        char xdata
        data pdx ;指針明確位于內部數據存儲區(data)
        data char xdata
        pdx ;同上


        評論


        技術專區

        關閉
        主站蜘蛛池模板: 阳西县| 昌黎县| 汉寿县| 常熟市| 格尔木市| 阿荣旗| 三原县| 怀仁县| 伊春市| 海南省| 喜德县| 永善县| 四川省| 德格县| 潜江市| 新龙县| 随州市| 义乌市| 清苑县| 斗六市| 贵阳市| 乌拉特前旗| 白山市| 绥江县| 明溪县| 江达县| 孟津县| 巧家县| 博爱县| 同仁县| 调兵山市| 巫山县| 澎湖县| 榆树市| 庆元县| 万年县| 武穴市| 古丈县| 安阳县| 兴国县| 夏邑县|