<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > STC單片機內部擴展RAM的應用

          STC單片機內部擴展RAM的應用

          作者: 時間:2011-09-28 來源:網絡 收藏

            RAM是用來在程序運行中存放隨機變量的數據空間,51單片機默認的內部RAM只有128字節(jié),52單片機增加至256字節(jié),STC89C52增加到512字節(jié),STC89C54、55、58、516等增加到1280字節(jié),對于編程者來說,一個芯片的RAM越多,寫起程序來就越容易得心應手,不會總考慮RAM不夠用而擔心這擔心那,連過多的變量都不敢定義。

            在前面我們寫程序時曾講到過,如果定義一個變量后,不對這個變量進行初始化,這個變量默認的初值就是0,其實這個結論是需要一定的條件的,在用KEIL編寫程序時,總程序中所有變量占用的字節(jié)之和小于128字節(jié),并且存儲器模式為small模式的前提下,對定義的變量不進行初始化時,編譯器會默認將變量值設定為0。一旦程序中的總變量超過128字節(jié),必須對所有變量進行初始化,否則,沒有被初始化的變量默認值將是不確定的。當變量總和超過128字節(jié)時,必須還要在編譯器中重新設定存儲器的存儲模式,存儲器模式一共有3種,分別為small、compact和large模式,在KEIL編譯器中有選項可進行選擇,選項表如圖4.4.1所示。它決定了沒有明確指定存儲類型的變量、函數參數等數據的默認存儲區(qū)域。如果在某些函數中需要使用非默認的存儲模式,也可以使用關健字直接說明。下面對這三種模式分別做介紹。

            1. small模式

            small模式中,所有缺省變量參數均裝入單片機內部128字節(jié)RAM中,當定義類似如:uchar a; float b;等變量時,這些變量都裝入內部128字節(jié)RAM中。使用該模式的優(yōu)點是訪問速度快,缺點是空間有限,而且是對堆棧的空間分配比較少,難以把握,碰到需要遞歸調用的時候需要小心。所以這種模式只適用于小程序。

            2. compact模式

            compact模式中,所有缺省變量均位于單片機內部256字節(jié)RAM中,和在small模式中使用關健字pdata來定義變量的效果相同,如:uchar pdata a[100];在該種模式下,程序總變量不得超過256字節(jié),對于只有128字節(jié)的單片機,使用此模式定義變量超過128字節(jié)時,程序將出錯。優(yōu)點是空間較small模式寬裕,速度較small慢,但較large要快,是一種中間狀態(tài)。

            3. large模式

            在large模式中,所有缺省變量可放在多達64KB的RAM區(qū),包括內部RAM和外部RAM,和使用關健字xdata來定義變量的效果相同。這種模式的優(yōu)點是空間大,可存變量多,缺點是訪問速度慢,尤其對于2個以上的多字節(jié)變量訪問速度來說更是如此。

            方便起見,要訪問時,可直接用以下方法:首先在編譯器中設置存儲器模式為large模式。

            其次,為安全起見,當程序中定義多于128字節(jié)的其它變量時,最好申明為xdata型,如 uchar xdata table[100];意思為定義一個100個字節(jié)容量的數組,將其在中分配存儲空間。另外一定要注意,在large模式下,編寫程序時,定義的變量總數千萬不要超過對應單片機的內部最大RAM字節(jié)數,因為即使超過了,編譯器也不會提示錯誤,但是程序必定會出錯。



          關鍵詞: STC單片機 擴展RAM

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();