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

    Keil C51中變量的使用

    作者: 時間:2011-06-23 來源:網(wǎng)絡(luò) 收藏

    引言
    8051內(nèi)核單片機是一種通用單片機,在國內(nèi)占有較大的市場份額。在將C語言用于51內(nèi)核單片機的研究方面,公司做得最為成功。由于51內(nèi)核單片機的存儲結(jié)構(gòu)的特殊性, 與標準C有所不同。正確地,有利于獲得高效的目標代碼。下面詳細介紹 方法。

    1 CPU存儲結(jié)構(gòu)與變量的關(guān)系
    變量都需要有存儲空間,存儲空間的不同使得變量使用時的工作效率也不同。
    標準C的典型運行環(huán)境是8086(含IA-32系列)內(nèi)核,其存儲結(jié)構(gòu)是CPU內(nèi)部有寄存器,外部有存儲器,寄存器的訪問速度大大高于存儲器的訪問速度。在標準C中,不加特別定義的變量是放在存儲器中的,使用register可以強制變量存儲在寄存器中,對于使用特別頻繁且數(shù)量不多的變量可以選用這種存儲模式,以獲得更高的工作效率。
    相比之下,51內(nèi)核單片機的存儲結(jié)構(gòu)則顯得有些怪異,它的存儲空間有3個:程序存儲器空間(64 KB含片內(nèi)、片外)、片外數(shù)據(jù)存儲器空間(64KB)、片內(nèi)數(shù)據(jù)存儲器及特殊功能寄存器空間。它沒有真正意義上的寄存器,它的寄存器其實是片內(nèi)數(shù)據(jù)存儲器(如R0~R7)和特殊功能寄存器(如A、B等)中的一部分。因此,在Keil 中使用變量就和標準C有很大不同。

    2 Keil C51變量分析
    Keil C51支持標準C原有的大多數(shù)變量類型,但為這些變量新增了多種存儲類型,也新增了一些標準C沒有的變量。
    2.1 Keil C51新增的變量存儲類型
    Keil C51中定義變量的格式如下:
    [存儲種類]數(shù)據(jù)類型[存儲類型]變量名表;
    其中,[存儲類型]是標準C中沒有的,[存儲類型]共有6種,分別介紹如下:
    ①data。將變量存儲在片內(nèi)可直接尋址的數(shù)據(jù)存儲器中。使用這種存儲模式,目標代碼中對變量的訪問速度最快。
    ②bdata。將變量存儲在片內(nèi)可位尋址的數(shù)據(jù)存儲器中。在目標代碼中變量可以方便地進行位處理,在不進行位處理時與data相同。
    ③idata。將變量存儲在片內(nèi)間接尋址的數(shù)據(jù)存儲器中。在52內(nèi)核中,當片內(nèi)直接尋址數(shù)據(jù)存儲器不夠用時,可以使用128字節(jié)間接尋址數(shù)據(jù)存儲器,訪問速度一般較data要慢一些,但具有最大的片內(nèi)數(shù)據(jù)存儲器空間;在51內(nèi)核中因無單獨的間接尋址數(shù)據(jù)存儲器區(qū),idata與data無區(qū)別。
    ④xdata。將變量存儲在片外數(shù)據(jù)存儲器中。目標代碼中只能使用“MOVX A,@DPTR”和“MOVX@DPTR,A”指令訪問變量,訪問速度最慢,但存儲空間最大(64KB)。
    ⑤pdata。將變量存儲在片外數(shù)據(jù)存儲器中的第一頁(00H~FFH)中。目標代碼中可以使用“MOVX A,@Ri”和“MOVX@Ri,A”指令訪問變量,訪問速度與xdata相同,存儲空間為256字節(jié)。
    ⑥code。將變量存儲在程序存儲器中。目標代碼中只能使用MOVC指令訪問變量,因變量存儲在程序存儲器中,具有非易失性且為只讀。
    2.2 Keil C51新增的指針變量存儲類型
    Keil C51中的指針變量形式如下:
    數(shù)據(jù)類型[數(shù)據(jù)存儲類型]*[指針存儲類型]標識符;
    其中,[數(shù)據(jù)存儲類型]和[指針存儲類型]都是標準C中沒有的。[數(shù)據(jù)存儲類型]定義數(shù)據(jù)(即尋址對象)存儲的空間,[指針存儲類型]定義指針自身存儲的空間。若不使用[數(shù)據(jù)存儲類型],則指針為一般指針,占用3個字節(jié);若使用[數(shù)據(jù)存儲類型]則指針為基于存儲器的指針,占用1~2個字節(jié)。
    2.3 Keil C51新增的變量類型
    bit:位變量。存儲在片內(nèi)數(shù)據(jù)存儲器的可位尋址字節(jié)(20H~2FH)的某個位上,這個變量在實時控制中具有很高的實用價值。
    sfr:特殊功能寄存器變量。存儲在片內(nèi)特殊功能寄存器中,用來對特殊功能寄存器進行讀寫操作。
    sbit:特殊功能寄存器位變量。存儲在片內(nèi)特殊功能寄存器的可位尋址字節(jié)(地址可以被8整除者)的某個位上,用來對特殊功能寄存器的可位尋址位進行讀寫操作。
    sbitl6:16位特殊功能寄存器變量。存儲在片內(nèi)特殊功能寄存器的連續(xù)2個字節(jié)的低地址上,這個變量類型很少使用。
    以上這些Keil C51中新增的變量類型,不支持數(shù)組和指針操作。

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

    存儲器相關(guān)文章:存儲器原理



    上一頁 1 2 3 下一頁

    關(guān)鍵詞: 使用 變量 C51 Keil

    評論


    相關(guān)推薦

    技術(shù)專區(qū)

    關(guān)閉
    主站蜘蛛池模板: 工布江达县| 民勤县| 大田县| 虹口区| 江西省| 慈利县| 平陆县| 富阳市| 老河口市| 山丹县| 昌吉市| 冕宁县| 龙南县| 秦安县| 长葛市| 泸西县| 新丰县| 安福县| 宜黄县| 大方县| 通道| 罗田县| 西昌市| 呼玛县| 汾西县| 嘉定区| 沈丘县| 门源| 新竹县| 石门县| 东城区| 塔城市| 台湾省| 宜宾市| 房产| 温州市| 昆山市| 定兴县| 洱源县| 陇西县| 洞口县|