ASM5無(wú)參數(shù)化調(diào)用C51函數(shù)的實(shí)現(xiàn)
發(fā)布時(shí)間:2007/9/10 0:00:00 訪問(wèn)次數(shù):1197
摘要:利用匯編模塊對(duì)C51模塊進(jìn)行無(wú)參數(shù)化調(diào)用,從根本上避開(kāi)了傳統(tǒng)匯編模塊和C51模塊之間調(diào)用時(shí)的繁瑣接口編程問(wèn)題,并以實(shí)例驗(yàn)證了該方法的優(yōu)越性和有效性。
關(guān)鍵詞:ASM51匯編語(yǔ)言 C51語(yǔ)言 無(wú)參數(shù)化調(diào)用
MCS-51系列單片機(jī)在目前和今后的相當(dāng)一段時(shí)間內(nèi)都將是我國(guó)的單片機(jī)主流機(jī)種。但在早期的開(kāi)發(fā)過(guò)程中,程序員不得不從深?yuàn)W的匯編語(yǔ)言開(kāi)始摸索,同時(shí)要求開(kāi)發(fā)人員對(duì)硬件亦有相當(dāng)?shù)淖咏。相比而言,專?051系列單片機(jī)設(shè)計(jì)的Franklin C51語(yǔ)言是一種通用的高級(jí)結(jié)構(gòu)化的程序設(shè)計(jì)語(yǔ)言。入門容易,程序可讀性強(qiáng),調(diào)試、移植都很方便,故開(kāi)發(fā)效率高,尤其在數(shù)值運(yùn)算處理方便具有很大的優(yōu)勢(shì)(這正是ASM51匯編語(yǔ)言的薄弱環(huán)節(jié))。不過(guò),C語(yǔ)言雖然也可對(duì)計(jì)算機(jī)的硬件系統(tǒng)進(jìn)行操作,但在處理特殊I/O口和中斷向量方面,不如匯編那樣直接、有效。因而,在效率為重的今天,將ASM51匯編與C51語(yǔ)言結(jié)合起來(lái),充分發(fā)揮各自的優(yōu)勢(shì),無(wú)疑是單片機(jī)開(kāi)發(fā)人員的最佳選擇。
1 匯編與C51的混合編程
一般的做法都是利用C51上手容易、便于理解的優(yōu)勢(shì)來(lái)編寫主程序,在C51語(yǔ)言不便處理或者效率比較低時(shí)調(diào)用匯編函數(shù)。考慮到MCS-51(尤其是8031內(nèi)部的資源配置情況:可用的RAM不到256字節(jié),5個(gè)固定地址的有限中斷源,4個(gè)8位并口中實(shí)際可作I/O口的只有P1口。因而要求開(kāi)發(fā)都對(duì)單片機(jī)的內(nèi)部結(jié)構(gòu)有清楚的了解,并盡可能地統(tǒng)籌安排這些資源。事實(shí)也證明,不理解匯編語(yǔ)言是很難寫出高效程序的。故筆者的觀點(diǎn)是利用匯編語(yǔ)言對(duì)I/O接口、中斷向量及程序空間分配的茂大優(yōu)勢(shì),讓程序員對(duì)MCS-51內(nèi)的第一個(gè)字節(jié)甚至是每一比特(可位尋址的空間)全部進(jìn)行統(tǒng)籌安排,設(shè)計(jì)好各個(gè)程序模塊,包括I/O口地址和中斷向量地址的處理;同時(shí)在具體的數(shù)據(jù)處理、通信等不需要過(guò)多與硬件直接打交道的程序模塊中,充分利用C51語(yǔ)言強(qiáng)大高效的編程能力。
最后的關(guān)鍵是如何讓匯編模塊能正確識(shí)別C51函數(shù)并調(diào)用它來(lái)完成相應(yīng)的功能。ASM51匯編與C51語(yǔ)言之間的調(diào)用約定并不簡(jiǎn)單,而且各種編譯器使用的約定不盡相同,甚至還依賴于程序所選擇的大、中、小存儲(chǔ)模式。通常每個(gè)需傳遞的參數(shù)按調(diào)用順序和類型分別由約定的寄存器來(lái)傳遞。如果參數(shù)過(guò)多或者無(wú)足夠寄存器可用時(shí),參數(shù)的傳遞將在固定持存儲(chǔ)器區(qū)域內(nèi)進(jìn)行,相同類型的參數(shù)共享一個(gè)參數(shù)傳遞段,按參數(shù)調(diào)用順序遞增其存放地址,返回值也由約定的寄存器或地址段返回。由此可見(jiàn)程序調(diào)用的效率必將受到接口復(fù)雜度的影響。盡管目前的單片機(jī)仿真器已經(jīng)提供了標(biāo)準(zhǔn)接口的全自動(dòng)轉(zhuǎn)換功能,減少了接口工作量,但在程序的調(diào)試及移植中,如果程序員不了解這些接口的各種約定,將對(duì)出現(xiàn)的錯(cuò)誤不知所措。比如返回值不止一個(gè)時(shí),編譯器自己就無(wú)法正確完成接口配置。這里力薦一種簡(jiǎn)潔有效的調(diào)用方法——無(wú)參數(shù)化調(diào)用。
2 ASM51無(wú)參數(shù)化調(diào)用C51函數(shù)的實(shí)現(xiàn)原理
所謂的無(wú)參數(shù)化調(diào)用是指讓C51子函數(shù)不帶任何參數(shù),這樣就可以從根本上避開(kāi)調(diào)用參數(shù)的傳遞和返回值的安排等繁瑣易出錯(cuò)的問(wèn)題,只需要簡(jiǎn)單地在匯編語(yǔ)言開(kāi)頭說(shuō)明一下外部C51子函數(shù)(“EXTRN code(<C51模塊名稱>)”)。至于C51函數(shù)中需要使用的外部參數(shù)值及其返回值,完全可以通過(guò)加入C51的<absacc.h>頭文件來(lái)解決。
<absacc.h>頭文件中的函數(shù)原型為:
# define CBYTE((unsigned char *)0x50000L)
# define DBYTE ((unsigned char *)0x50000L)
# define PBYTE ((unsigned char *)0x50000L)
# define XBYTE((unsigned char *)0x50000L)
其中CBYTE定義為尋址CODE程序區(qū);DBYTE定義為尋址DATA數(shù)據(jù)區(qū);PBYTE定義為尋址相對(duì)于MOVX
摘要:利用匯編模塊對(duì)C51模塊進(jìn)行無(wú)參數(shù)化調(diào)用,從根本上避開(kāi)了傳統(tǒng)匯編模塊和C51模塊之間調(diào)用時(shí)的繁瑣接口編程問(wèn)題,并以實(shí)例驗(yàn)證了該方法的優(yōu)越性和有效性。
關(guān)鍵詞:ASM51匯編語(yǔ)言 C51語(yǔ)言 無(wú)參數(shù)化調(diào)用
MCS-51系列單片機(jī)在目前和今后的相當(dāng)一段時(shí)間內(nèi)都將是我國(guó)的單片機(jī)主流機(jī)種。但在早期的開(kāi)發(fā)過(guò)程中,程序員不得不從深?yuàn)W的匯編語(yǔ)言開(kāi)始摸索,同時(shí)要求開(kāi)發(fā)人員對(duì)硬件亦有相當(dāng)?shù)淖咏。相比而言,專?051系列單片機(jī)設(shè)計(jì)的Franklin C51語(yǔ)言是一種通用的高級(jí)結(jié)構(gòu)化的程序設(shè)計(jì)語(yǔ)言。入門容易,程序可讀性強(qiáng),調(diào)試、移植都很方便,故開(kāi)發(fā)效率高,尤其在數(shù)值運(yùn)算處理方便具有很大的優(yōu)勢(shì)(這正是ASM51匯編語(yǔ)言的薄弱環(huán)節(jié))。不過(guò),C語(yǔ)言雖然也可對(duì)計(jì)算機(jī)的硬件系統(tǒng)進(jìn)行操作,但在處理特殊I/O口和中斷向量方面,不如匯編那樣直接、有效。因而,在效率為重的今天,將ASM51匯編與C51語(yǔ)言結(jié)合起來(lái),充分發(fā)揮各自的優(yōu)勢(shì),無(wú)疑是單片機(jī)開(kāi)發(fā)人員的最佳選擇。
1 匯編與C51的混合編程
一般的做法都是利用C51上手容易、便于理解的優(yōu)勢(shì)來(lái)編寫主程序,在C51語(yǔ)言不便處理或者效率比較低時(shí)調(diào)用匯編函數(shù)?紤]到MCS-51(尤其是8031內(nèi)部的資源配置情況:可用的RAM不到256字節(jié),5個(gè)固定地址的有限中斷源,4個(gè)8位并口中實(shí)際可作I/O口的只有P1口。因而要求開(kāi)發(fā)都對(duì)單片機(jī)的內(nèi)部結(jié)構(gòu)有清楚的了解,并盡可能地統(tǒng)籌安排這些資源。事實(shí)也證明,不理解匯編語(yǔ)言是很難寫出高效程序的。故筆者的觀點(diǎn)是利用匯編語(yǔ)言對(duì)I/O接口、中斷向量及程序空間分配的茂大優(yōu)勢(shì),讓程序員對(duì)MCS-51內(nèi)的第一個(gè)字節(jié)甚至是每一比特(可位尋址的空間)全部進(jìn)行統(tǒng)籌安排,設(shè)計(jì)好各個(gè)程序模塊,包括I/O口地址和中斷向量地址的處理;同時(shí)在具體的數(shù)據(jù)處理、通信等不需要過(guò)多與硬件直接打交道的程序模塊中,充分利用C51語(yǔ)言強(qiáng)大高效的編程能力。
最后的關(guān)鍵是如何讓匯編模塊能正確識(shí)別C51函數(shù)并調(diào)用它來(lái)完成相應(yīng)的功能。ASM51匯編與C51語(yǔ)言之間的調(diào)用約定并不簡(jiǎn)單,而且各種編譯器使用的約定不盡相同,甚至還依賴于程序所選擇的大、中、小存儲(chǔ)模式。通常每個(gè)需傳遞的參數(shù)按調(diào)用順序和類型分別由約定的寄存器來(lái)傳遞。如果參數(shù)過(guò)多或者無(wú)足夠寄存器可用時(shí),參數(shù)的傳遞將在固定持存儲(chǔ)器區(qū)域內(nèi)進(jìn)行,相同類型的參數(shù)共享一個(gè)參數(shù)傳遞段,按參數(shù)調(diào)用順序遞增其存放地址,返回值也由約定的寄存器或地址段返回。由此可見(jiàn)程序調(diào)用的效率必將受到接口復(fù)雜度的影響。盡管目前的單片機(jī)仿真器已經(jīng)提供了標(biāo)準(zhǔn)接口的全自動(dòng)轉(zhuǎn)換功能,減少了接口工作量,但在程序的調(diào)試及移植中,如果程序員不了解這些接口的各種約定,將對(duì)出現(xiàn)的錯(cuò)誤不知所措。比如返回值不止一個(gè)時(shí),編譯器自己就無(wú)法正確完成接口配置。這里力薦一種簡(jiǎn)潔有效的調(diào)用方法——無(wú)參數(shù)化調(diào)用。
2 ASM51無(wú)參數(shù)化調(diào)用C51函數(shù)的實(shí)現(xiàn)原理
所謂的無(wú)參數(shù)化調(diào)用是指讓C51子函數(shù)不帶任何參數(shù),這樣就可以從根本上避開(kāi)調(diào)用參數(shù)的傳遞和返回值的安排等繁瑣易出錯(cuò)的問(wèn)題,只需要簡(jiǎn)單地在匯編語(yǔ)言開(kāi)頭說(shuō)明一下外部C51子函數(shù)(“EXTRN code(<C51模塊名稱>)”)。至于C51函數(shù)中需要使用的外部參數(shù)值及其返回值,完全可以通過(guò)加入C51的<absacc.h>頭文件來(lái)解決。
<absacc.h>頭文件中的函數(shù)原型為:
# define CBYTE((unsigned char *)0x50000L)
# define DBYTE ((unsigned char *)0x50000L)
# define PBYTE ((unsigned char *)0x50000L)
# define XBYTE((unsigned char *)0x50000L)
其中CBYTE定義為尋址CODE程序區(qū);DBYTE定義為尋址DATA數(shù)據(jù)區(qū);PBYTE定義為尋址相對(duì)于MOVX
熱門點(diǎn)擊
- AVR單片機(jī)在蓄電池剩余電量測(cè)試儀中的應(yīng)用
- 基于單片機(jī)系統(tǒng)采用DMA塊傳輸方式實(shí)現(xiàn)高速數(shù)
- BS2系統(tǒng)編程與應(yīng)用實(shí)例
- ASM5無(wú)參數(shù)化調(diào)用C51函數(shù)的實(shí)現(xiàn)
- 用PIC單片機(jī)實(shí)現(xiàn)50Hz鎖相信號(hào)發(fā)生器
- 便攜式動(dòng)態(tài)心電信號(hào)數(shù)據(jù)采集器的設(shè)計(jì)
- 單片機(jī)控制的雙路有源濾波器設(shè)計(jì)
- SmartLock并口單片機(jī)軟件狗加密技術(shù)
- 單片機(jī)應(yīng)用PS/2鍵盤的實(shí)例
- ICCAVR->8515和LCD的接口源程序
推薦技術(shù)資料
- 硬盤式MP3播放器終級(jí)改
- 一次偶然的機(jī)會(huì)我結(jié)識(shí)了NE0 2511,那是一個(gè)遠(yuǎn)方的... [詳細(xì)]
- CV/CC InnoSwitch3-AQ 開(kāi)
- URF1DxxM-60WR3系
- 1-6W URA24xxN-x
- 閉環(huán)磁通門信號(hào)調(diào)節(jié)芯片NSDRV401
- SK-RiSC-SOM-H27X-V1.1應(yīng)
- RISC技術(shù)8位微控制器參數(shù)設(shè)
- 多媒體協(xié)處理器SM501在嵌入式系統(tǒng)中的應(yīng)用
- 基于IEEE802.11b的EPA溫度變送器
- QUICCEngine新引擎推動(dòng)IP網(wǎng)絡(luò)革新
- SoC面世八年后的產(chǎn)業(yè)機(jī)遇
- MPC8xx系列處理器的嵌入式系統(tǒng)電源設(shè)計(jì)
- dsPIC及其在交流變頻調(diào)速中的應(yīng)用研究