新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 討論有關單片機內存的問題

        討論有關單片機內存的問題

        作者: 時間:2016-11-10 來源:網絡 收藏

        由于單片機內存比較小,在以前的型號如AT89c51內存只有128byte,按照目前的電子市場飛速的發展,這么點點的內存只夠做一個簡單的電子系統,若是大一點的就遠遠不夠用了,這樣要么就要外擴一個靜態RAM,要么就要選擇一個內存比較大一點的單片機,比如:AT89S52 [256byte] SST89E564 [1K]等等。這樣在使用KEIL軟件的時候是如何適用超過128byte字節的RAM呢?很多人都有這樣的疑問【當初我搞的也不是很明白】。

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

        在網上也看到了很多人都有這樣的想法:

        ① 超過變量128后必須使用compact模式編譯

        實際的情況是只要內存占用量不超過256.0【前提是:單片機的內存必須要大于128byte,對于at89c51來說想達到256也達不到啊,本身就不夠用】 就可以用 small 模式編譯。要是單片機提供的內存更大的話,那也可以在small模式編譯的。
        ② 128以上的某些地址為特殊寄存器使用,不能給程序用

        這樣的想法也是不對的,單片機與 PC 機不同,51 單片機不使用線性編址,特殊寄存器與 RAM 使用重復的地址。但訪問時采用不同的指令,所以并不會占用 RAM 空間。

        下面我用匯編和C語言進行解釋一下上面紅色字的意思:【很多人都能說出這樣的道理,但是很少有人舉出實際的例子供大家參考和分析,下面我會在匯編和C語言做出實際的語句,來和大家一起分析一下】

        首先先給P0口賦值0x55;

        P0DATA080H

        MOV A , #55H;

        MOVP0 ,A; ;因為p0口特殊功能寄存器的地址是0x80

        若是往0x80地址存儲數據0xAA。則需要執行以下語句

        MOV RO ,#80H

        MOV @R0 , #0AAH

        參照上面的語句就能知道同樣都是0x80地址卻有著不一樣的效果.

        下面在寫一下C語言的語句

        sfr P0 = 0x80;

        unsigned char idatai_at_0x80;

        voidmain(void)

        {

        //P0口賦值0x55;

        P0 = 0x55;

        //0x80地址存儲數據0xAA

        i = 0xAA;

        }

        根據上面總結出來的,看完所有的代碼我想對大家應該有所幫助吧?仔細看看我上面的代碼或我的說明,我想這個時候你應該對單片機的內存有個進一步的了解了。對你以后開發單片機應該會有所幫助的。如果你對此有所疑問,或者我的說法有錯誤,請您給我留言,我們共同交流,由于時間的關系,以前整理的資料好多都丟了,今天在此作了一個簡單的整理并發上來,希望對看我的blog的人用……看過的人希望您能留下寶貴的意見或留言,謝謝!!!



        關鍵詞: 單片機內

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 林芝县| 尉犁县| 蚌埠市| 长顺县| 伽师县| 绍兴县| 寻甸| 郑州市| 板桥市| 永兴县| 九寨沟县| 古交市| 建阳市| 镇平县| 武鸣县| 康乐县| 台南县| 吴堡县| 广元市| 陆良县| 常德市| 将乐县| 江都市| 藁城市| 巴马| 醴陵市| 郎溪县| 延安市| 中江县| 壶关县| 平安县| 延吉市| 鄂尔多斯市| 木兰县| 邵东县| 织金县| 南通市| 巴南区| 柞水县| 永吉县| 启东市|