新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > C51-數據存儲類型

        C51-數據存儲類型

        作者: 時間:2016-11-17 來源:網絡 收藏
        KEILCx51是面向8051系列單片機及其硬件控制系統的開發工具。它定義的任何數據類型必須以一定的存儲類型的方式定位在8051的存儲區中,否則便沒有任何的實際意義。該編譯器通過將變量、常量定義成不同的存儲類型(data,bdata,idata,pdata,xdata,code)的方法,將他們定位在不同的存儲區中。

        8051系列單片機將程序存儲器(ROM,存儲空間)和數據存儲器(RAM,運算空間)分開,并有各自的尋址方式(針對匯編語言)。8051系列單片機在物理上有四個存儲空間:1,片內程序存儲空間;2,片外程序存儲空間;3,片內數據存儲空間;4,片外數據存儲空間。
        先講數據存儲器。大家都知道8051單片機數據存儲器可劃分為兩大區域:00H~7FH為片內低128字節RAM區;80H~FFH為特殊功能寄存器區(SFR)。地址為00H~7FH的低128字節片內RAM區又可劃分為三個區域:

        本文引用地址:http://www.104case.com/article/201611/315545.htm

        A,通用寄存器區:地址(00H~1FH)通用寄存器區由4個寄存器組成:0組(00H~07H),1組(08H~0FH),2組(10H~17H),3組(18H~1FH),每個寄存器組含有8個通用寄存器:R0,R1,R2,R3,R4,R5,R6,R7,共有32個通用寄存器。

        B,可位尋址區:8051系列單片機RAM的可位尋址區時字節地址位20H~2FH的16字節單元,共128位。

        C,用戶RAM區:8051系列單片機片內RAM的用戶RAM區地址位30H~7FH。堆棧也可以設置在這里。
        再講存儲類型,當我們那使用存儲類型data,bdata定義常量和變量時,Cx51編譯器會將它們定位在片內數據存儲區中(片內RAM),不標注默認是DATA類型。當使用code 存儲類型定義數據時,Cx51編譯器會將其定義在代碼空間(ROM或者EPPROM)。當使用 xdata 存儲類型定義常量或變量時,Cx51編譯器將其定位在外部數據存儲空間(片外RAM)。
        存儲類型 與存儲空間的關系
        data 直接尋址片內數據存儲區,訪問速度快(0X00-0X7F,128字節)
        bdata (bit)可位尋址片內數據存儲區,允許位與字節混合訪問(0X20-0X2F,16字節)
        idata (indirect)間接尋址片內數據存儲區,訪問片內全部RAM空間(8052,256字節)
        pdata (page)分頁尋址外部數據存儲區(256字節)由MOVX @R0訪問
        xdata (extend)片外數據存儲區(64KB),由MOVX @ DPTR訪問。
        Code 代碼存儲區(64KB),由MOVC @DPTR訪問
        如上,這樣就足夠清晰了。uchar data x和data uchar x相等價都是在內ram區分配一個字節的變量,但是對于指針變量的聲明,因涉及到指針變量本身的存儲位置和指針所指向的存儲區位置不同而進行相應的存儲區類型關鍵字設置是要注意的。在MSTAR的KEIL51編譯工程中,ROM SIZE=CONST+CODE <64K。
        補充:長整型數與整形數差別:十進制無符號整常數的范圍為0~65535,就是int型, 如果使用的數超過了上述范圍,就必須用長整型數來表示。長整型數是用后綴“L”或“l”來表示的。但長整數158L和基本整常數158 在數值上并無區別,這是因為只不過一個用長整形裝,一個用整形裝,就像兩顆蛋,一顆用小碗裝,一個用大碗,但他們還是同樣是蛋,在數值上并無區別!



        關鍵詞: C51數據存儲類

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 安仁县| 那坡县| 唐山市| 正蓝旗| 孟连| 宜章县| 灵丘县| 桃江县| 察隅县| 读书| 仙游县| 吉安市| 连南| 曲靖市| 华坪县| 工布江达县| 瑞昌市| 广丰县| 寿光市| 阿尔山市| 望奎县| 安平县| 旺苍县| 吴江市| 保德县| 营山县| 正镶白旗| 遂宁市| 曲阳县| 信阳市| 西城区| 石城县| 丹寨县| 华安县| 工布江达县| 河津市| 宁海县| 新乡县| 凤凰县| 洞口县| 略阳县|