當(dāng)前位置:首頁(yè) > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]最近在研究單片機(jī)C51對(duì)匯編的接口問(wèn)題。char和int等都比較簡(jiǎn)單,使用寄存器或固定地地址傳值都是可以的,具體可以參考keil的C51 user‘s guide。本篇短文主要重點(diǎn)討論一下A51下如何遵循C51的接口標(biāo)準(zhǔn)來(lái)實(shí)現(xiàn)C51的指針

最近在研究單片機(jī)C51對(duì)匯編的接口問(wèn)題。char和int等都比較簡(jiǎn)單,使用寄存器或固定地地址傳值都是可以的,具體可以參考keil的C51 user‘s guide。本篇短文主要重點(diǎn)討論一下A51下如何遵循C51的接口標(biāo)準(zhǔn)來(lái)實(shí)現(xiàn)C51的指針。主要原因是,現(xiàn)在用C51的人越來(lái)越多,大家都圖省事和方便。網(wǎng)上面有關(guān)A51的資料少得可憐,知道用匯編來(lái)實(shí)現(xiàn)代碼優(yōu)化的少之又少。本人是一直堅(jiān)持用匯編寫(xiě)東西的。在嵌入式領(lǐng)域,很多東西都與硬件有關(guān),多知道點(diǎn)底層?xùn)|西還是有好處。


使用工具主要為keil,在windows 7環(huán)境下。C51測(cè)試程序如下:


#include

unsignedpos;

bitabc(unsigned*pos){

*pos=100;

return0;

}

voidmain(){

while(1){

abc(&pos);}


這是測(cè)試用源程序,很明顯程序中使用了int型指針 pos。為了能夠生成匯編代碼,加入編譯器控制:


#pragmaSRC

#pragmaSMALL

#include

unsignedpos;

bitabc(unsigned*pos){

*pos=100;

return0;

}

voidmain(){

while(1){

abc(&pos);

}

}

注意,#pragma必需在文件的開(kāi)始位置,否則會(huì)報(bào)錯(cuò)。另外編譯器可能會(huì)跳“ EXCEPTION 0021H: PATH OR FILE NOT FOUND:main.obj”,沒(méi)有關(guān)系,我們的目標(biāo)是生成匯編的src文件。編譯后生成src如下:


;main.SRCgeneratedfrom:main.c

;COMPILERINVOKEDBY:

;D:ProgramFilesKeilC51BINC51.EXEmain.cBROWSEDEBUGOBJECTEXTENDTABS(2)

$NOMOD51

NAMEMAIN

;寄存器及內(nèi)存聲明

P0DATA080H

P1DATA090H

P2DATA0A0H

P3DATA0B0H

T0BIT0B0H.4

ACBIT0D0H.6

T1BIT0B0H.5

T2BIT090H.0

EABIT0A8H.7

IEDATA0A8H

EXF2BIT0C8H.6

RDBIT0B0H.7

ESBIT0A8H.4

IPDATA0B8H

RIBIT098H.0

INT0BIT0B0H.2

CYBIT0D0H.7

TIBIT098H.1

INT1BIT0B0H.3

RCAP2HDATA0CBH

PSBIT0B8H.4

SPDATA081H

T2EXBIT090H.1

OVBIT0D0H.2

RCAP2LDATA0CAH

C_T2BIT0C8H.1

WRBIT0B0H.6

RCLKBIT0C8H.5

TCLKBIT0C8H.4

SBUFDATA099H

PCONDATA087H

SCONDATA098H

TMODDATA089H

TCONDATA088H

IE0BIT088H.1

IE1BIT088H.3

BDATA0F0H

CP_RL2BIT0C8H.0

ACCDATA0E0H

ET0BIT0A8H.1

ET1BIT0A8H.3

TF0BIT088H.5

ET2BIT0A8H.5

TF1BIT088H.7

TF2BIT0C8H.7

RB8BIT098H.2

TH0DATA08CH

EX0BIT0A8H.0

IT0BIT088H.0

TH1DATA08DH

TB8BIT098H.3

EX1BIT0A8H.2

IT1BIT088H.2

TH2DATA0CDH

PBIT0D0H.0

SM0BIT098H.7

TL0DATA08AH

SM1BIT098H.6

TL1DATA08BH

SM2BIT098H.5

TL2DATA0CCH

PT0BIT0B8H.1

PT1BIT0B8H.3

RS0BIT0D0H.3

PT2BIT0B8H.5

TR0BIT088H.4

RS1BIT0D0H.4

TR1BIT088H.6

TR2BIT0C8H.2

PX0BIT0B8H.0

PX1BIT0B8H.2

DPHDATA083H

DPLDATA082H

EXEN2BIT0C8H.3

RENBIT098H.4

T2CONDATA0C8H

RXDBIT0B0H.0

TXDBIT0B0H.1

F0BIT0D0H.5

PSWDATA0D0H


?PR?_abc?MAINSEGMENTCODE

?PR?main?MAINSEGMENTCODE

?DT?MAINSEGMENTDATA

EXTRNCODE(?C?ISTPTR)

EXTRNCODE(?C_STARTUP)

PUBLICpos

PUBLICmain

PUBLIC_abc

RSEG?DT?MAIN

pos:DS2

;#pragmaSRC

;#pragmaSMALL

;#include

;

;unsignedpos;

;

;bitabc(unsigned*pos){

RSEG?PR?_abc?MAIN

_abc:

;SOURCELINE#7

;----Variable'pos?040'assignedtoRegister'R1/R2/R3'----

;*pos=100;

;SOURCELINE#8

;---------關(guān)鍵代碼-------------------

CLRA

MOVB,#064H

LCALL?C?ISTPTR;return0;

;SOURCELINE#9

CLRC;}


;SOURCELINE#10

?C0001:RET

;ENDOF_abc;

;voidmain(){

RSEG?PR?main?MAIN

main:

USING0;SOURCELINE#12

?C0002:;while(1){

;SOURCELINE#13

;abc(&pos);

;SOURCELINE#14

;---------關(guān)鍵代碼-------------------

MOVR3,#00H

MOVR2,#HIGH(pos)

MOVR1,#LOW(pos)

LCALL_abc;}

;SOURCELINE#15

SJMP?C0002

;ENDOFmainEND

對(duì)于A51的程序格式,這里不多解釋?zhuān)信d趣可以自己去Keil官網(wǎng)學(xué)習(xí)。這里主要說(shuō)一下指針的C51匯編接口。代碼中內(nèi)存和寄存器聲明,這個(gè)不重要,可以跳過(guò)。主要看標(biāo)記為關(guān)鍵代碼的部分。我們可以看到,在main中,在調(diào)用abc函數(shù)前,主程序初始了三個(gè)寄存器,分別是R1R2R3,代碼如下:

MOVR3,#00H

MOVR2,#HIGH(pos)

MOVR1,#LOW(pos)


這里得著重講一下。很明顯,這是寄存器傳值。依據(jù)C51規(guī)定,指針傳遞使用R1R2R3寄存器。其中,Mem type in R3, MSB in R2, LSB in R1。也就是說(shuō),R3表指針類(lèi)型,R1為指針內(nèi)容低位,R2為內(nèi)容高位。從上面三個(gè)語(yǔ)句可以看出,程序?qū)㈩?lèi)型設(shè)為0,將pos地址高位傳給R2,低位給R1。接下來(lái)再看abc函數(shù)中的操作

CLR A

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車(chē)的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車(chē)技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車(chē)工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車(chē)。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車(chē) 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶(hù)希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱(chēng),數(shù)字世界的話(huà)語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱(chēng)"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉