




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、第5章 單片機(jī)C語言與匯編語言混合編程第5章 單片機(jī)C語言與匯編語言混合編程5.1 混合編程概述5.1.1 單片機(jī)匯編語言的特點(diǎn)1執(zhí)行速度、效率高和實(shí)時(shí)性強(qiáng)2編寫的程序代碼短,對(duì)硬件操作方便3保持了機(jī)器語言的優(yōu)點(diǎn),具有直接和簡潔的特點(diǎn)4可維護(hù)性和可讀性差5可移植性差 第5章 單片機(jī)C語言與匯編語言混合編程5.1.2 單片機(jī)C語言的特點(diǎn)1可讀性、可移植性好和使用范圍廣2語言簡潔、緊湊、使用方便、靈活 3運(yùn)算符豐富4數(shù)據(jù)結(jié)構(gòu)豐富,具有現(xiàn)代化語言的各種數(shù)據(jù)類型5可進(jìn)行結(jié)構(gòu)化的程序設(shè)計(jì)6可以直接對(duì)計(jì)算機(jī)硬件進(jìn)行操作7生成的目標(biāo)代碼質(zhì)量高,程序執(zhí)行效率高第5章 單片機(jī)C語言與匯編語言混合編程5.1.3
2、單片機(jī)混合編程的優(yōu)點(diǎn)1編程效率高 2執(zhí)行速度快 3可讀性、可移植性好和使用范圍廣5.1.4 單片機(jī)混合編程的基本方式1匯編中調(diào)用C51程序 單片機(jī)C語言和匯編語言混合編程分為匯編中調(diào)用C51函數(shù)和C51程序中引用匯編,通常使用的是在C51程序中引用匯編。在C51程序中使用匯編語言有兩種情況: C51程序調(diào)用匯編程序模塊的變量和函數(shù)和嵌入式匯編 C語言是結(jié)構(gòu)化程序設(shè)計(jì)語言,C語言程序以函數(shù)為單位,在匯編程序中可以訪問C51程序中的變量和函數(shù)。第5章 單片機(jī)C語言與匯編語言混合編程(1)對(duì)于變量: 普通變量:_變量名數(shù)組:_數(shù)組名+偏移量如用_XX可以訪問C語言程序中定義的變量XX;用_XX+3可
3、以訪問數(shù)組中的XX3。(2)對(duì)于函數(shù): 函數(shù)沒有參數(shù):函數(shù)名函數(shù)有參數(shù):_函數(shù)名 ,并且調(diào)用函數(shù)前還要準(zhǔn)備好參數(shù)。如在C51程序中定義了沒有參數(shù)的函數(shù)fun1(),則在匯編程序中用子程序調(diào)用指令調(diào)用fun1即可;如定義了有參數(shù)的函數(shù)fun2(),則在匯編程序中調(diào)用時(shí),子程序名用成_fun2。 注意: 為了能夠讓匯編語言訪問到C語言中定義的變量和函數(shù),在C程序中它們必須聲明為外部變量,即加extern 前綴 第5章 單片機(jī)C語言與匯編語言混合編程2在C51中嵌入?yún)R編程序 嵌入?yún)R編程序是通過C51中的預(yù)處理指令#pragma asm/endasm 語句來實(shí)現(xiàn)的。其格式如下:#pragma ASM;
4、匯編程序代碼#pragma ENDASM3. 在C51中調(diào)用匯編程序 這種方法應(yīng)用較多,C模塊與匯編模塊的接口較簡單,分別用C51與A51對(duì)源程序進(jìn)行編譯,然后用L51將obj文件連接即可,關(guān)鍵問題在于C函數(shù)與匯編函數(shù)之間的參數(shù)傳遞和得到正確的返回值,以保證模塊間的數(shù)據(jù)交換。 第5章 單片機(jī)C語言與匯編語言混合編程5.2 混合匯編的參數(shù)傳遞與實(shí)現(xiàn)5.2.1 混合匯編的參數(shù)傳遞1匯編程序調(diào)用C51函數(shù)的參數(shù)傳遞 如C51函數(shù)有參數(shù),則匯編程序在調(diào)用C51函數(shù)前要準(zhǔn)備好參數(shù)。在匯編程序中C51函數(shù)最左邊的一個(gè)參數(shù)由寄存器A傳遞,其他的參數(shù)按順序通過堆棧給出。C51函數(shù)的返回值是返回到A寄存器或者由
5、A寄存器給出的地址。 2在C51中嵌入?yún)R編程序的參數(shù)傳遞 通過變量或特殊功能寄存器來實(shí)現(xiàn) 3在C51中調(diào)用匯編程序的參數(shù)傳遞 C51中調(diào)用匯編程序進(jìn)行參數(shù)傳遞時(shí)都必須嚴(yán)格遵守C51函數(shù)的參數(shù)和返回值的相關(guān)約定。 C51中調(diào)用匯編程序進(jìn)行參數(shù)傳遞的方式有兩種,一種是通過寄存器傳遞參數(shù),第二種是通過固定存儲(chǔ)區(qū)傳遞。 第5章 單片機(jī)C語言與匯編語言混合編程1)通過寄存器傳遞參數(shù)最多可通過51單片機(jī)的工作寄存器傳遞3個(gè)參數(shù),余下的通過固定存儲(chǔ)區(qū)傳遞, 參數(shù)類型charintlong/float通用指針第1個(gè)R7R6、R7R4R7R1、R2、R3第2個(gè)R5R4、R5R4R7R1、R2、R3第3個(gè)R3R2
6、、R3無R1、R2、R3func1(int a)唯一一個(gè)參數(shù)a在寄存器R6和R7中傳遞func2(int b,int c,int *d)第一個(gè)參數(shù)b在寄存器R6和R7中傳遞,第二個(gè)參數(shù)c在寄存器R4和R5中傳遞,第三個(gè)參數(shù)d在寄存器R1、R2和R3中傳遞第5章 單片機(jī)C語言與匯編語言混合編程2)通過固定存儲(chǔ)區(qū)傳遞用固定存儲(chǔ)區(qū)傳遞參數(shù)給匯編程序,參數(shù)段首地址用段名?function_name?BYTE和?function_name?BIT保存,function_name為函數(shù)的名稱,其中,?function_name?BIT保存位參數(shù)段首地址,?function_name?BYTE保存別的參數(shù)段
7、首地址,即使通過寄存器傳遞參數(shù),參數(shù)也將在這些段中分配空間,并按聲明的先后在每個(gè)段中順序保存。3)函數(shù)返回值 函數(shù)返回值通常用寄存器傳遞 返回值類型寄 存 器說 明BitC由位運(yùn)算器C返回(unsigned)charR7在R7返回單個(gè)字節(jié)(unsigned)intR6、R7高位在R6,低位在R7(unsigned) longR4R7高位在R4,低位在R7floatR4R732位IEEE格式通用指針R1、R2、R3存儲(chǔ)類型在R3,高位在R2,低位在R1第5章 單片機(jī)C語言與匯編語言混合編程5.2.2 混合匯編的實(shí)現(xiàn)1C51中嵌入?yún)R編程序的實(shí)現(xiàn)方法第一步:在C文件中以如下方式嵌入?yún)R編程序。#inc
8、lude void main(void)P2=1;#pragma asm MOV R7,#10DEL:MOV R6,#20 DJNZ R6,$ DJNZ R7,DEL#pragma endasmP2=0;第二步:在Keil C51軟件的Project 窗口右擊嵌入?yún)R編程序的C文件,在彈出的快捷菜單中選擇Options for .命令,選中右邊的Generate Assembler SRC File和Assemble SRC File復(fù)選框,使檢查框由灰色變成黑色(有效)狀態(tài)。 第5章 單片機(jī)C語言與匯編語言混合編程第三步:根據(jù)選擇的編譯模式,把相應(yīng)的庫文件(如 Small 模式時(shí),是 Keil
9、C51LibC51S.Lib)加入到工程中,該文件必須作為工程的最后文件。 第四步:編譯,即可生成目標(biāo)代碼。 2C51中調(diào)用匯編程序的實(shí)現(xiàn)方法第一步:先用C語言程序編寫出程序框架,如文件名為a1.c(注意參數(shù))。第二步:在Keil C51的Project窗口中右擊該C語言文件,在彈出的快捷菜單中選擇Options for .,右邊的Generate Assembler SRCFile和Assemble SRC File,使檢查框由灰色變成黑色(有效)狀態(tài); 第三步:根據(jù)選擇的編譯模式,把相應(yīng)的庫文件(如Small模式時(shí),是KeilC51Lib C51S.Lib)加入工程中,該文件必須作為工程的最后文件。 第5章 單片機(jī)C語言與匯編語言混合編程第四步:編譯后將會(huì)產(chǎn)生一個(gè)SRC的文件,將這個(gè)文件擴(kuò)展名改為ASM。這樣就形成了可供C51程序調(diào)用
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 承包合同終止協(xié)議
- 木材公司銷售合同
- 平面模特拍攝合同
- 電力施工勞務(wù)合同
- 漫畫助理外包合同
- 油漆勞務(wù)分包合同協(xié)議書
- 無人機(jī)物流配送運(yùn)營合作項(xiàng)目合同
- 商丘幼兒師范高等??茖W(xué)?!堵眯猩缃?jīng)營管理》2023-2024學(xué)年第二學(xué)期期末試卷
- 山東管理學(xué)院《高階地質(zhì)資源勘查與評(píng)價(jià)》2023-2024學(xué)年第二學(xué)期期末試卷
- 文華學(xué)院《地理科學(xué)類專業(yè)導(dǎo)論》2023-2024學(xué)年第二學(xué)期期末試卷
- 《公路路基路面現(xiàn)場(chǎng)測(cè)試規(guī)程》(3450-2019)
- 對(duì)北京古建筑天壇的調(diào)查報(bào)告
- E時(shí)代大學(xué)英語-讀寫教程2 第五單元
- 部編版三年級(jí)語文下冊(cè)第一單元《1.古詩三首-絕句》教案
- 小學(xué)三年級(jí)語文質(zhì)量分析課件
- 腹腔化療腫瘤課件
- 四川省成都市武侯區(qū)2022-2023學(xué)年七年級(jí)下學(xué)期期末英語試卷(含答案)
- 腦卒中患者護(hù)理查房
- 智能機(jī)器人與傳感器PPT完整全套教學(xué)課件
- 高效空調(diào)制冷機(jī)房智能控制系統(tǒng)技術(shù)規(guī)程
- 《動(dòng)物王國開大會(huì)》說課PPT
評(píng)論
0/150
提交評(píng)論