• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      C語言在單片機開發(fā)中的應(yīng)用

      2012-03-15 07:46:04遼寧對外經(jīng)貿(mào)學(xué)院
      電子世界 2012年14期
      關(guān)鍵詞:指針指向內(nèi)存

      遼寧對外經(jīng)貿(mào)學(xué)院 孫 靜

      C是一種編譯型語言.有高級語言的特點,并具備匯編語言的功能,移植性能好,便于自頂向下結(jié)構(gòu)化程序設(shè)計,C語言在單片機中的應(yīng)用,給開發(fā)者帶來了很大的方便.軟件開發(fā)者不需要對單片機硬件的結(jié)構(gòu)有很深人的了解,編譯器可以自動完成變量存儲單元的分配.使得單片機的程序設(shè)計更加簡單可靠。指針、地址、數(shù)組及其相互關(guān)系是C語言中最有特色的部分。在編寫單片機的應(yīng)用程序時,常常需要對端口及存儲單元進行尋址.因此,掌握指針在這些尋址過程的工作原理是很有必要的,這有利于編寫靈活高效的程序。

      一、指針結(jié)構(gòu)聲明

      C語言中,對于指針的聲明采用如下形式:類型標(biāo)識符*指針變量名;由于單片機存儲區(qū)的關(guān)系,所以單片機C語言的指針聲明格式有別于普通C語言指針的聲明格式,其格式為:

      類型標(biāo)識符[存儲區(qū)類型]

      指針變量名[指針變量存儲區(qū)類型]

      單片機C語言的指針的定義比普通C語言指針的定義多兩個部分:存儲區(qū)類型是指指針變量所指向的數(shù)據(jù)的存儲區(qū),可以是所有的數(shù)據(jù)存儲類型;指針變量存儲區(qū)類型是指指針變量的存放區(qū)域的數(shù)據(jù),可以是data、ldata、xdata或pdata如下聲明:unsigned char xdata *data yc;

      上聲明語句是指在RAM(data)內(nèi)聲明一指針變量yc,該指針變量指向一無符號字符型數(shù)據(jù),該無符號型字符存在xdata區(qū)內(nèi)。該指針變量的應(yīng)用格式如下:

      其編譯后的的匯編為:MOV 08H,#00H;0x08和0x09是在片內(nèi)RAM存儲區(qū)分配的yc指針變量的地址空間。

      二、指針尋址的實現(xiàn)

      單片機C語言的數(shù)組的尋址和普通C語言的尋址基本上是一樣的,只是當(dāng)數(shù)組存儲在片內(nèi)時,由于片內(nèi)RAM資源十分有限,所以很難有比較復(fù)雜的數(shù)據(jù)結(jié)構(gòu),而且在編程過程中也盡量避免在片內(nèi)RAM中使用較大的數(shù)組。

      1.指向data區(qū)的指針尋址的實現(xiàn)

      這是最基本的尋址方法,比如一個檢測系統(tǒng)中,通過A/D轉(zhuǎn)換把外部數(shù)據(jù)輸入單片機中,單片機對這6次采樣數(shù)據(jù)求和,具體程序如下:

      2.指向程序存儲區(qū)的指針尋址實現(xiàn)

      指針指向數(shù)據(jù)存儲區(qū)其其實質(zhì)就是C語言中指向函數(shù)的指針這一概念,可以利用這種指針來實現(xiàn)函數(shù)指針調(diào)用函數(shù)。指向函數(shù)的指針變量定義格式為:類型標(biāo)識符(*指針變量名)([參數(shù)1],[參數(shù)2]……);定義好后用(*指針變量名)([參數(shù)],[參數(shù)]……)即可調(diào)用這個函數(shù)。例如,主程序中要引用一個鍵盤掃描函數(shù)scan,程序如下所示:

      三、C51熱啟動代碼的編制

      對于工業(yè)控制計算機,往往設(shè)有看門狗電路,當(dāng)看門狗動作使計算機復(fù)位,這就是熱啟動。熱啟動時,一般不允許從頭開始,這將導(dǎo)致現(xiàn)有的已測量到或計算到的值復(fù)位,導(dǎo)致系統(tǒng)工作異常。因而在程序中必須判斷是熱啟動還是冷啟動,常用的方法是:確定某內(nèi)存單位為標(biāo)志位(如0x7f位和0x7e位),啟動時首先讀該內(nèi)存單元的內(nèi)容,如果它等于一個特定的值(例如兩個內(nèi)存單元的都是0xaa),就認(rèn)為是熱啟動,否則就是冷啟動,程序執(zhí)行初始化部份,并將0xaa賦與這兩個內(nèi)存單元。

      根據(jù)以上的設(shè)計思路,編程時,設(shè)置一個指針,讓其指向特定的內(nèi)存單元如0x7f,然后在程序中判斷,程序如下:

      然而實際調(diào)試中發(fā)現(xiàn),無論是熱啟動還是冷啟動,開機后所有內(nèi)存單元的值都被復(fù)位為0,當(dāng)然也實現(xiàn)不了熱啟動的要求。這是為什么呢?原來,用C語言編程時,開機時執(zhí)行的代碼并非是從main()函數(shù)的第一句語句開始的,在main()函數(shù)的第一句語句執(zhí)行前要先執(zhí)行一段“起始代碼”。正是這段代碼執(zhí)行了清零的工作。C編譯程序提供了這段起始代碼的源程序,名為“startup.a51”,打開這個文件,可以看到如下代碼:

      可見,在執(zhí)行到判斷是否熱啟動的代碼之前,起始代碼已將所有內(nèi)存單元清零。如何解決這個問題呢?好在啟動代碼是可以更改的,方法是:修改startup.a51源文件,然后用編譯程序所附帶的a51.exe程序?qū)tartup.a51編譯,得到startup.obj文件,然后用這段代碼代替原來的起始代碼。具體步驟是(設(shè)C源程序名為HOTSTART.C):

      修改startup.a51源文件(這個文件在C51LIB目錄下)。

      執(zhí)行如下命令:

      A51 startup.a51得到startup.obj文件。將此文件拷入HOTSTART.C所在目錄。

      將編好的C源程序用C51.EXE編譯好,得到目標(biāo)文件HOTSTART.OBJ。

      用L51 HOTSTART,STARTUP.OBJ命令連接,得到絕對目標(biāo)文件HOTSTART。

      用OHS51 HOTSTART得到HOTSTART.HEX文件,即可。

      對于startup.a51的修改,根據(jù)自已的需要進行,如將IDATALEN EQU 80H中的80H改為70H,就可以使6F到7F的16字節(jié)內(nèi)存不被清零。

      四、結(jié)束語

      單片機C語言的應(yīng)用是十分靈活的,要充分發(fā)揮C語言的優(yōu)勢,對內(nèi)外部數(shù)據(jù)和程序進行方便自如的操作,必須要掌握好指針的應(yīng)用。

      [1]馬忠棒.單片機的C語言應(yīng)用程序設(shè)計[M].北京航空航天大學(xué)出版社,2001.

      [2]曹聰,岳繼光.單片機C語言指針的應(yīng)用[J].微型電腦應(yīng)用,2003.

      猜你喜歡
      指針指向內(nèi)存
      科學(xué)備考新指向——不等式選講篇
      “春夏秋冬”的內(nèi)存
      偷指針的人
      娃娃畫報(2019年5期)2019-06-17 16:58:10
      把準(zhǔn)方向盤 握緊指向燈 走好創(chuàng)新路
      傳媒評論(2017年8期)2017-11-08 01:47:36
      為什么表的指針都按照順時針方向轉(zhuǎn)動
      基于改進Hough變換和BP網(wǎng)絡(luò)的指針儀表識別
      電測與儀表(2015年5期)2015-04-09 11:30:42
      ARM Cortex—MO/MO+單片機的指針變量替換方法
      基于內(nèi)存的地理信息訪問技術(shù)
      上網(wǎng)本為什么只有1GB?
      Who?。疲铮酰睿洹。粒恚澹颍椋悖??
      长春市| 汝城县| 宜阳县| 襄汾县| 招远市| 海兴县| 宿迁市| 全椒县| 上饶市| 桐柏县| 北流市| 石阡县| 诸城市| 婺源县| 永春县| 仙桃市| 漯河市| 高安市| 台前县| 开封市| 庆元县| 明光市| 赤水市| 湛江市| 进贤县| 涿鹿县| 吴堡县| 中超| 峨眉山市| 宜城市| 常山县| 奇台县| 翁牛特旗| 兰州市| 资兴市| 青海省| 塘沽区| 高淳县| 黄大仙区| 乡宁县| 巴中市|