www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 單片機 > 單片機
[導(dǎo)讀]有關(guān)c51調(diào)用匯編的方法已經(jīng)有很多帖子講到,但是一般只講要點,很少有對整個過程作詳細描述,對于初學(xué)者是不夠的,這里筆者通過一個簡單例子對這個過程進行描述,希望能對初學(xué)者有所幫助。幾年來,在這個論壇里筆者得

有關(guān)c51調(diào)用匯編的方法已經(jīng)有很多帖子講到,但是一般只講要點,很少有對整個過程作詳細描述,對于初學(xué)者是不夠的,這里筆者通過一個簡單例子對這個過程進行描述,希望能對初學(xué)者有所幫助。幾年來,在這個論壇里筆者得到很多熱心人指導(dǎo),因此也希望藉此盡一點綿薄之力。

在這個例子里,闡述了編寫c51程序調(diào)用匯編函數(shù)的一種方法,這個外部函數(shù)的入口參數(shù)是一個字符型變量和一個位變量,返回值是

一個整型變量。例中,先用c51寫出這個函數(shù)的主體,然后用SRC控制指令編譯產(chǎn)生asm文件,進一步修改這個asm文件就得到我們所要的匯編函數(shù)。該方法讓編譯器自動完成各種段的安排,提高了匯編程序的編寫效率。

step1. 按寫普通c51程序方法,建立工程,在里面導(dǎo)入main.c文件和CFUNC.c文件。

相關(guān)文件如下:

//main.c文件

#include < reg51.h >

#define uchar unsigned char

#define uint unsigned int

extern uint AFUNC(uchar v_achr,bit v_bflag);

void main()

{

bit BFLAG;

uchar mav_chr;

uint mvintrslt;

mav_chr=0xd4; BFLAG=1;

mvintrslt=AFUNC(mav_chr,BFLAG);

}

//CFUNC.c文件

#define uchar unsigned char

#define uint unsigned int

uint AFUNC(uchar v_achr,bit v_bflag)

{

uchar tmp_vchr;

uint tp_vint;

tmp_vchr=v_achr;

tp_vint=(uint)v_bflag;

return tmp_vchr+(tp_vint<<8);

}

step2. 在 Project 窗口中包含匯編代碼的 C 文件上右鍵,選擇“Options for ...”,點擊右邊的“Generate Assembler SRC

File”和“Assemble SRC File”,使檢查框由灰色變成黑色(有效)狀態(tài);

step3. 根據(jù)選擇的編譯模式,把相應(yīng)的庫文件(如 Small 模式時,是 KeilC51LibC51S.Lib)加入工程中,該文件必須作為工程的最后文件;

step4. build這個工程后將會產(chǎn)生一個CFUNC.SRC的文件,將這個文件改名為CFUNC.A51(也可以通過編譯選項直接產(chǎn)生CFUNC.A51文

件),然后在工程里去掉庫文件(如C51S.Lib)和CFUNC.c,而將CFUNC.A51添加到工程里。

//CFUNC.SRC文件如下

.CFUNC.SRC generated from: CFUNC.c

NAME CFUNC

?PR?_AFUNC?CFUNC SEGMENT CODE

?BI?_AFUNC?CFUNC SEGMENT BIT OVERLAYABLE

PUBLIC ?_AFUNC?BIT

PUBLIC _AFUNC

RSEG ?BI?_AFUNC?CFUNC

?_AFUNC?BIT:

v_bflag?041: DBIT 1

; #define uchar unsigned char

; #define uint unsigned int

;

; uint AFUNC(uchar v_achr,bit v_bflag)

RSEG ?PR?_AFUNC?CFUNC

_AFUNC:

USING 0

; SOURCE LINE # 5

;---- Variable 'v_achr?040' assigned to Register 'R7' ----

; {

; SOURCE LINE # 6

; uchar tmp_vchr;

; uint tp_vint;

;

; tmp_vchr=v_achr;

; SOURCE LINE # 10

;---- Variable 'tmp_vchr?042' assigned to Register 'R5' ----

MOV R5,AR7

; tp_vint=(uint)v_bflag;

; SOURCE LINE # 11

MOV C,v_bflag?041

CLR A

RLC A

;---- Variable 'tp_vint?043' assigned to Register 'R6/R7' ----

; return tmp_vchr+(tp_vint<<8);

; SOURCE LINE # 12

MOV R6,A

MOV R4,#00H

CLR A

ADD A,R5

MOV R7,A

MOV A,R4

ADDC A,R6

MOV R6,A

; }

; SOURCE LINE # 13

?C0001:

RET

; END OF _AFUNC

END

step5. 檢查main.c的“Generate Assembler SRC File”和“Assemble SRC File”是否有效,若是有效則點擊使檢查框變成無效狀態(tài);再次build這個工程,到此你已經(jīng)得到匯編函數(shù)的主體,修改函數(shù)里面的匯編代碼就得到你所需的匯編函數(shù)了。

參考文獻:

1.徐愛鈞,彭秀華。單片機高級語言C51windows環(huán)境編程與應(yīng)用,電子工業(yè)出版社

2.www.c51bbs.com, C51編程:關(guān)于在 KEIL C51 中直接嵌入?yún)R編。。。帖子編號: 83838 發(fā)表用戶:Youth

.................................................................................................................

keil中匯編函數(shù)調(diào)用c51函數(shù) [ycong_kuang]

在keil的寫法可參考89852帖子,具體如下:

與89852帖子相比,第一步在工程里多了一個被匯編調(diào)用的c51的函數(shù)文件(c51func.c),至于匯編函數(shù)還是先用c51編寫出主體(a51func.c),這樣匯編程序接口和段都交給編譯器處理,你只管在編譯成匯編代碼后按你的要求改寫匯編代碼就行了。

例程如下:

//main.c

#include < reg51.h >

#define uchar unsigned char

#define uint unsigned int

extern uint AFUNC(uchar v_achr,bit v_bflag);

void main()

{

bit BFLAG;

uchar mav_chr;

uint mvintrslt;

mav_chr=0xd4; BFLAG=1;

mvintrslt=AFUNC(mav_chr,BFLAG);

}

//a51FUNC.c

#define uchar unsigned char

#define uint unsigned int

extern uint CFUNC(uint);

uint AFUNC(uchar v_achr,bit v_bflag) //c51寫的匯編函數(shù),最終要變成匯編代碼

{

uchar tmp_vchr;

uint tp_vint;

tmp_vchr=v_achr;

tp_vint=(uint)v_bflag;

return CFUNC(tp_vint); //這里調(diào)用一個c51函數(shù)

}

//c51FUNC.c

#define uchar unsigned char

#define uint unsigned int

uint CFUNC(uint v_int) //被匯編函數(shù)調(diào)用c51函數(shù)

{

return v_int<<2;

}

第二步是按89852帖子的step2,3,4把用c51寫的(匯編)函數(shù)變成a51文件(今天我試了一下step3可以不要)例程編譯結(jié)果如下:

; .a51func.SRC generated from: a51func.c

NAME A51FUNC

?PR?_AFUNC?A51FUNC SEGMENT CODE

?DT?_AFUNC?A51FUNC SEGMENT DATA OVERLAYABLE

?BI?_AFUNC?A51FUNC SEGMENT BIT OVERLAYABLE

EXTRN CODE (_CFUNC)

PUBLIC ?_AFUNC?BIT

PUBLIC _AFUNC

RSEG ?DT?_AFUNC?A51FUNC

?_AFUNC?BYTE:

tmp_vchr?042: DS 1

RSEG ?BI?_AFUNC?A51FUNC

?_AFUNC?BIT:

v_bflag?041: DBIT 1

; //a51FUNC.c

;

; #define uchar unsigned char

; #define uint unsigned int

;

; extern uint CFUNC(uint);

;

; uint AFUNC(uchar v_achr,bit v_bflag)

RSEG ?PR?_AFUNC?A51FUNC

_AFUNC: ;c51所寫的函數(shù)產(chǎn)生的匯編代碼從這里開始

USING 0

; SOURCE LINE # 8

;---- Variable 'v_achr?040' assigned to Register 'R7' ----

; {

; SOURCE LINE # 9

; uchar tmp_vchr;

; uint tp_vint;

;

; tmp_vchr=v_achr;

; SOURCE LINE # 13

MOV tmp_vchr?042,R7

; tp_vint=(uint)v_bflag;

; SOURCE LINE # 14

MOV C,v_bflag?041

CLR A

MOV R6,A

RLC A

MOV R7,A

;---- Variable 'tp_vint?043' assigned to Register 'R6/R7' ----

; 這里說明R6,R7內(nèi)容就是tp_vint

; return CFUNC(tp_vint);

; SOURCE LINE # 16

LCALL _CFUNC ;這里調(diào)用了用c51寫的函數(shù)

; }

; SOURCE LINE # 17

?C0001:

RET

; END OF _AFUNC

END

這個文件就是你的匯編函數(shù)所在文件,把函數(shù)里面的匯編代碼修改成你所需的匯編函數(shù)就ok了。

建議參考 徐愛鈞,彭秀華所寫的《單片機高級語言C51windows環(huán)境編程與應(yīng)用》或馬忠梅所寫的

《單片機的c語言應(yīng)用程序設(shè)計》有關(guān)混合語言編程有關(guān)章節(jié)

..................

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

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

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

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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