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

    EEPW首頁 > 嵌入式系統 > 設計應用 > 初學者學習C51的一些誤區和注意事項

    初學者學習C51的一些誤區和注意事項

    作者: 時間:2013-05-30 來源:網絡 收藏

    這樣主程序M.c中:

    #include >reg52.h /*C編譯器內部自帶的H文件,使用>*/

    #include "a.h" /*自定義的H文件,一般用""*/

    void main(void)

    {

    Test1(); /*使用a.c模塊文件中的函數*/

    while(1){

    i++; /*使用a.c模塊文件中的變量*/

    }

    }

    5)51家族

    核心都是基于8031的,有很多在此核心上進行擴展,有的把程序存儲器放在內部:89c(S)51..,有的增加了RAM:89c(S)52..,有的增加

    了一些專用硬件80C552...,有的改變時鐘時序W77E58...。市面上現在常用的主要有ATMEL公司的AT89X系列,PHILIPS的P87(89)x,臺

    灣WINBOND的w77(78)x系列,Cygnal的C8051Fx系列。

    6)51單片機結構的C描述

    這里不講51的具體結構,只是引導快速理解51單片機的物理結構。寄存器和IO及其它硬件設備的地址名稱,在相應的C頭部文件

    中可以找到。51為reg51.h,52為reg52.h,以次類推,比如winbond的78E58就為w78e58.h這些H文件中的描述:

    srf,定義一個8位的設備。

    srf16,定義一個16位的設備。

    sbit,定義一個位的設備。

    用這些語句定義后,就可以在C中象匯編一樣使用這些硬件設備,這是單片機應用比標準C特殊的地方,其它差別很少。

    7)在51系列中data,idata,xdata,pdata的區別

    data:固定指前面0x00-0x7f的128個RAM,可以用acc直接讀寫的,速度最快,生成的代碼也最小。

    idata:固定指前面0x00-0xff的256個RAM,其中前128和data的128完全相同,只是因為訪問的方式不同。idata是用類似C中的指針方式

    訪問的。匯編中的語句為:mox ACC,@Rx.(不重要的補充:c中idata做指針式的訪問效果很好)

    xdata:外部擴展RAM,一般指外部0x0000-0xffff空間,用DPTR訪問。

    pdata:外部擴展RAM的低256個字節,地址出現在A0-A7的上時讀寫,用movx ACC,@Rx讀寫。這個比較特殊,而且好象有對此BUG,

    建議少用。但也有他的優點,具體用法屬于中級問題,這里不提。

    8)startup.a51的作用

    和匯編一樣,在C中定義的那些變量和數組的初始化就在startup.a51中進行,如果你在定義全局變量時帶有數值,如unsigned char

    data xxx=100;,那startup.a51中就會有相關的賦值。如果沒有=100,startup.a51就會把他清0。(startup.a51==變量的初始化)。

    這些初始化完畢后,還會設置SP指針。對非變量區域,如堆棧區,將不會有賦值或清零動作。

    有人喜歡改startup.a51,為了滿足自己一些想當然的愛好,這是不必要的,有可能錯誤的。比如掉電保護的時候想保存一些變量,

    但改startup.a51來實現是很笨的方法,實際只要利用非變量區域的特性,定義一個指針變量指向堆棧低部:0xff處就可實現。,

    為什么還要去改?

    可以這么說:任何時候都可以不需要改startup.a51,如果你明白它的特性。


    上一頁 1 2 下一頁

    關鍵詞: 初學者 C51 誤區

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 体育| 兴宁市| 海南省| 寻甸| 永川市| 霍城县| 绥化市| 页游| 嘉荫县| 三门峡市| 溧阳市| 阳高县| 孙吴县| 叶城县| 平果县| 巍山| 岳西县| 麦盖提县| 樟树市| 渝中区| 荆州市| 闻喜县| 佛山市| 陆河县| 乌拉特后旗| 阿坝县| 成安县| 藁城市| 紫阳县| 新宁县| 亚东县| 锡林郭勒盟| 龙山县| 乡城县| 颍上县| 和田市| 图们市| 遵义县| 阳春市| 荃湾区| 昆明市|