freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

keil中的變量和常量定位問題(已修改)

2025-06-19 13:35 本頁(yè)面
 

【正文】 //*****************************************************************************************keil中的變量和常量定位問題變量定位:char tab1[10] _at_ 0x200。 賦值:在函數(shù)中賦值,如tab1[0]=0x01。 常量定位及初始化: , 寫入 char code table[]={ 初始值}。 KEIL定位:選擇 optionBL51 Locate, 在CODE:欄中寫入如: ?CO?TABLE(0x7000) 這樣,table[]表就定位到了0x7000開始的程序段。 //*******************************************************************************************如何在 KEIL C51() 中調(diào)用匯編函數(shù)的一個(gè)示例 [ycong_kuang]有關(guān)c51調(diào)用匯編的方法已經(jīng)有很多帖子講到,但是一般只講要點(diǎn),很少有對(duì)整個(gè)過程作詳細(xì)描述,對(duì)于初學(xué)者是不夠的,這里筆者通過一個(gè)簡(jiǎn)單例子對(duì)這個(gè)過程進(jìn)行描述,希望能對(duì)初學(xué)者有所幫助。幾年來,在這個(gè)論壇里筆者得到很多熱心人指導(dǎo),因此也希望藉此盡一點(diǎn)綿薄之力。在這個(gè)例子里,闡述了編寫c51程序調(diào)用匯編函數(shù)的一種方法,這個(gè)外部函數(shù)的入口參數(shù)是一個(gè)字符型變量和一個(gè)位變量,返回值是一個(gè)整型變量。例中,先用c51寫出這個(gè)函數(shù)的主體,然后用SRC控制指令編譯產(chǎn)生asm文件,進(jìn)一步修改這個(gè)asm文件就得到我們所要的匯編函數(shù)。該方法讓編譯器自動(dòng)完成各種段的安排,提高了匯編程序的編寫效率。step1. 按寫普通c51程序方法,建立工程。相關(guān)文件如下://include define uchar unsigned chardefine uint unsigned intextern 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)。}//define uchar unsigned chardefine uint unsigned intuint 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_vint8)。}step2. 在 Project 窗口中包含匯編代碼的 C 文件上右鍵,選擇“Options for ...”,點(diǎn)擊右邊的“Generate Assembler SRCFile”和“Assemble SRC File”,使檢查框由灰色變成黑色(有效)狀態(tài)。step3. 根據(jù)選擇的編譯模式,把相應(yīng)的庫(kù)文件(如 Small 模式時(shí),是 Keil\C51\Lib\)加入工程中,該文件必須作為工程的最后文件;step4. ,(件),然后在工程里去掉庫(kù)文件(),。//.\ generated from: NAME CFUNC?PR?_AFUNC?CFUNC SEGMENT CODE?BI?_AFUNC?CFUNC SEGMENT BIT OVERLAYABLEPUBLIC ?_AFUNC?BITPUBLIC _AFUNCRSEG ?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 39。v_achr?04039。 assigned to Register 39。R739。 。 {。 SOURCE LINE 6。 uchar tmp_vchr。 uint tp_vint。 tmp_vchr=v_achr。 SOURCE LINE 10。 Variable 39。tmp_vchr?04239。 assigned to Register 39。R539。 MOV R5,AR7。 tp_vint=(uint)v_bflag。 SOURCE LINE 11MOV C,v_bflag?041CLR ARLC A。 Variable 39。tp_vint?04339。 assigned to Register 39。R6/R739。 。 return tmp_vchr+(tp_vint8)。 SOURCE LINE 12MOV R6,AMOV R4,00HCLR AADD A,R5MOV R7,AMOV A,R4ADDC A,R6MOV R6,A。 }。 SOURCE LINE 13?C0001:RET。 END OF _AFUNCENDstep5. “Generate Assembler SRC File”和“Assemble SRC File”是否有效,若是有效則點(diǎn)擊使檢查框變成無效狀態(tài);再次build這個(gè)工程,到此你已經(jīng)得到匯編函數(shù)的主體,修改函數(shù)里面的匯編代碼就得到你所需的匯編函數(shù)了。參考文獻(xiàn):,彭秀華。單片機(jī)高級(jí)語(yǔ)言C51windows環(huán)境編程與應(yīng)用,電子工業(yè)出版社.................................................................................................................keil中匯編函數(shù)調(diào)用c51函數(shù) [ycong_kuang]第一步在工程里多了一個(gè)被匯編調(diào)用的c51的函數(shù)文件(),至于匯編函數(shù)還是先用c51編寫出主體(),這樣匯編程序接口和段都交給編譯器處理,你只管在編譯成匯編代碼后按你的要求改寫匯編代碼就行了。例程如下://include define uchar unsigned chardefine uint unsigned intextern 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)。}//define uchar unsigned chardefine uint unsigned intextern 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)用一個(gè)c51函數(shù)}//define uchar unsigned chardefine uint unsigned intuint CFUNC(uint v_int) //被匯編函數(shù)調(diào)用c51函數(shù){return v_int2。}第二步是按89852帖子的step2,3,4把用c51寫的(匯編)函數(shù)變成a51文件(今天我試了一下step3可以不要)例程編譯結(jié)果如下:。 .\ generated from: NAME A51FUNC?PR?_AFUNC?A51FUNC SEGMENT CODE?DT?_AFUNC?A51FUNC SEGMENT DATA OVERLAYABLE?BI?_AFUNC?A51FUNC SEGMENT BIT OVERLAYABLEEXTRN CODE (_CFUNC)PUBLIC ?_AFUNC?BITPUBLIC _AFUNCRSEG ?DT?_AFUNC?A51FUNC?_AFUNC?BYTE:tmp_vchr?042: DS 1RSEG ?BI?_AFUNC?A51FUNC?_AFUNC?BIT:v_bflag?041: DBIT 1。 //。 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 39。v_achr?04039。 assigned to Register 39。R739。 。 {。 SOURCE LINE 9。 uchar tmp_vchr。 uint tp_vint。 tmp_vchr=v_achr。 SOURCE LINE 13MOV tmp_vchr?042,R7。 tp_vint=(uint)v_bflag。 SOURCE LINE 14MOV C,v_bflag?041CLR AMOV R6,ARLC AMOV R7,A。 Variable 39。tp_vint?04339。 assigned to Register 39。R6/R739。 。 這里說明R6,R7內(nèi)容就是tp_vint。 return CFUNC(tp_vint)。 SOURCE LINE 16LCALL _CFUNC 。這里調(diào)用了用c51寫的函數(shù)。 }。 SOURCE LINE 17?C0001:RET。 END OF _AFUNCEND這個(gè)文件就是你的匯編函數(shù)所在文件,把函數(shù)里面的匯編代碼修改成你所需的匯編函數(shù)就ok了。建議參考 徐愛鈞,彭秀華所寫的《單片機(jī)高級(jí)語(yǔ)言C51windows環(huán)境編程與應(yīng)用》或馬忠梅所寫的《單片機(jī)的c語(yǔ)言應(yīng)用程序設(shè)計(jì)》有關(guān)混合語(yǔ)言編程有關(guān)章節(jié).//****************************************************************************************** 關(guān)于在 KEIL C51 中直接嵌入?yún)R編。 [Youth]*************************************************************************************有時(shí)在C51程序中需要嵌入一些匯編代碼,這時(shí)當(dāng)然可以用通常的作法:按照 C51 與匯編的接口寫一個(gè)匯編函數(shù),然后在 C51 程序中調(diào)用該函數(shù)。(此種方法可在論壇里搜索,以前有很多帖子講到,不再重復(fù))下面介紹直接嵌入?yún)R編代碼的方法:在 C 文件中要嵌入?yún)R編代碼片以如下方式加入?yún)R編代碼:pragma ASM。 Assembler Code Herepragma ENDASM在 Project 窗口中包含匯編代碼的 C 文件上右鍵,選擇“Options for ...”,點(diǎn)擊右邊的“Generate Assembler SRC File”和“Assemble SRC File”,使檢查框由灰色變成黑色(有效)狀態(tài);根據(jù)選擇的編譯模式,把相應(yīng)的庫(kù)文件(如 Small 模式時(shí),是 Keil\C51\Lib\)加入工程中, 該文件必須作為工程的最后文件;編譯,即可生成目標(biāo)代碼。 在單片機(jī)的開發(fā)應(yīng)用中,已逐漸開始引入高級(jí)語(yǔ)言,C語(yǔ)言就是其中的一種。對(duì)用慣了匯編的人來說,總覺得高級(jí)語(yǔ)言’可控性’不好,不如匯編那樣隨心所欲。但是只要我們掌握了一定的C語(yǔ)言知識(shí),有些東西還是容易做出來的,以下是筆者實(shí)際工作中遇到的幾個(gè)問題,希望對(duì)初學(xué)C51者有所幫助。一、C51熱啟動(dòng)代碼的編制對(duì)于工業(yè)控制計(jì)算機(jī),往往設(shè)有有看門狗電路,當(dāng)看門狗動(dòng)作,使計(jì)算機(jī)復(fù)位,這就是熱啟動(dòng)。熱啟動(dòng)時(shí),一般不允許從頭開始,這將導(dǎo)致現(xiàn)有的已測(cè)量到或計(jì)算到的值復(fù)位,導(dǎo)致系統(tǒng)工作異常。因而在程序必須判斷是熱啟動(dòng)還是冷啟動(dòng),常用的方法是:確定某內(nèi)存單位為標(biāo)志位(如0x7f位和0x7e位),啟動(dòng)時(shí)首先讀該內(nèi)存單元的內(nèi)容,如果它等于一個(gè)特定的值(例如兩個(gè)內(nèi)存單元的都是0xaa),就認(rèn)為是熱啟動(dòng),否則就是冷啟動(dòng),程序執(zhí)行初始化部份,并將0xaa賦與這兩個(gè)內(nèi)存單元。根據(jù)以上的設(shè)計(jì)思路,編程時(shí),設(shè)置一個(gè)指針,讓其指向特定的內(nèi)存單元如0x7f,然后在程序中判斷,程序如下:void main(){ char data *HotPoint=(char *)0x7f。
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)教案相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
公安備案圖鄂ICP備17016276號(hào)-1