




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第5章 單片機C語言與匯編語言混合編程第5章 單片機C語言與匯編語言混合編程5.1 混合編程概述5.1.1 單片機匯編語言的特點1執行速度、效率高和實時性強2編寫的程序代碼短,對硬件操作方便3保持了機器語言的優點,具有直接和簡潔的特點4可維護性和可讀性差5可移植性差 第5章 單片機C語言與匯編語言混合編程5.1.2 單片機C語言的特點1可讀性、可移植性好和使用范圍廣2語言簡潔、緊湊、使用方便、靈活 3運算符豐富4數據結構豐富,具有現代化語言的各種數據類型5可進行結構化的程序設計6可以直接對計算機硬件進行操作7生成的目標代碼質量高,程序執行效率高第5章 單片機C語言與匯編語言混合編程5.1.3
2、單片機混合編程的優點1編程效率高 2執行速度快 3可讀性、可移植性好和使用范圍廣5.1.4 單片機混合編程的基本方式1匯編中調用C51程序 單片機C語言和匯編語言混合編程分為匯編中調用C51函數和C51程序中引用匯編,通常使用的是在C51程序中引用匯編。在C51程序中使用匯編語言有兩種情況: C51程序調用匯編程序模塊的變量和函數和嵌入式匯編 C語言是結構化程序設計語言,C語言程序以函數為單位,在匯編程序中可以訪問C51程序中的變量和函數。第5章 單片機C語言與匯編語言混合編程(1)對于變量: 普通變量:_變量名數組:_數組名+偏移量如用_XX可以訪問C語言程序中定義的變量XX;用_XX+3可
3、以訪問數組中的XX3。(2)對于函數: 函數沒有參數:函數名函數有參數:_函數名 ,并且調用函數前還要準備好參數。如在C51程序中定義了沒有參數的函數fun1(),則在匯編程序中用子程序調用指令調用fun1即可;如定義了有參數的函數fun2(),則在匯編程序中調用時,子程序名用成_fun2。 注意: 為了能夠讓匯編語言訪問到C語言中定義的變量和函數,在C程序中它們必須聲明為外部變量,即加extern 前綴 第5章 單片機C語言與匯編語言混合編程2在C51中嵌入匯編程序 嵌入匯編程序是通過C51中的預處理指令#pragma asm/endasm 語句來實現的。其格式如下:#pragma ASM;
4、匯編程序代碼#pragma ENDASM3. 在C51中調用匯編程序 這種方法應用較多,C模塊與匯編模塊的接口較簡單,分別用C51與A51對源程序進行編譯,然后用L51將obj文件連接即可,關鍵問題在于C函數與匯編函數之間的參數傳遞和得到正確的返回值,以保證模塊間的數據交換。 第5章 單片機C語言與匯編語言混合編程5.2 混合匯編的參數傳遞與實現5.2.1 混合匯編的參數傳遞1匯編程序調用C51函數的參數傳遞 如C51函數有參數,則匯編程序在調用C51函數前要準備好參數。在匯編程序中C51函數最左邊的一個參數由寄存器A傳遞,其他的參數按順序通過堆棧給出。C51函數的返回值是返回到A寄存器或者由
5、A寄存器給出的地址。 2在C51中嵌入匯編程序的參數傳遞 通過變量或特殊功能寄存器來實現 3在C51中調用匯編程序的參數傳遞 C51中調用匯編程序進行參數傳遞時都必須嚴格遵守C51函數的參數和返回值的相關約定。 C51中調用匯編程序進行參數傳遞的方式有兩種,一種是通過寄存器傳遞參數,第二種是通過固定存儲區傳遞。 第5章 單片機C語言與匯編語言混合編程1)通過寄存器傳遞參數最多可通過51單片機的工作寄存器傳遞3個參數,余下的通過固定存儲區傳遞, 參數類型charintlong/float通用指針第1個R7R6、R7R4R7R1、R2、R3第2個R5R4、R5R4R7R1、R2、R3第3個R3R2
6、、R3無R1、R2、R3func1(int a)唯一一個參數a在寄存器R6和R7中傳遞func2(int b,int c,int *d)第一個參數b在寄存器R6和R7中傳遞,第二個參數c在寄存器R4和R5中傳遞,第三個參數d在寄存器R1、R2和R3中傳遞第5章 單片機C語言與匯編語言混合編程2)通過固定存儲區傳遞用固定存儲區傳遞參數給匯編程序,參數段首地址用段名?function_name?BYTE和?function_name?BIT保存,function_name為函數的名稱,其中,?function_name?BIT保存位參數段首地址,?function_name?BYTE保存別的參數段
7、首地址,即使通過寄存器傳遞參數,參數也將在這些段中分配空間,并按聲明的先后在每個段中順序保存。3)函數返回值 函數返回值通常用寄存器傳遞 返回值類型寄 存 器說 明BitC由位運算器C返回(unsigned)charR7在R7返回單個字節(unsigned)intR6、R7高位在R6,低位在R7(unsigned) longR4R7高位在R4,低位在R7floatR4R732位IEEE格式通用指針R1、R2、R3存儲類型在R3,高位在R2,低位在R1第5章 單片機C語言與匯編語言混合編程5.2.2 混合匯編的實現1C51中嵌入匯編程序的實現方法第一步:在C文件中以如下方式嵌入匯編程序。#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 窗口右擊嵌入匯編程序的C文件,在彈出的快捷菜單中選擇Options for .命令,選中右邊的Generate Assembler SRC File和Assemble SRC File復選框,使檢查框由灰色變成黑色(有效)狀態。 第5章 單片機C語言與匯編語言混合編程第三步:根據選擇的編譯模式,把相應的庫文件(如 Small 模式時,是 Keil
9、C51LibC51S.Lib)加入到工程中,該文件必須作為工程的最后文件。 第四步:編譯,即可生成目標代碼。 2C51中調用匯編程序的實現方法第一步:先用C語言程序編寫出程序框架,如文件名為a1.c(注意參數)。第二步:在Keil C51的Project窗口中右擊該C語言文件,在彈出的快捷菜單中選擇Options for .,右邊的Generate Assembler SRCFile和Assemble SRC File,使檢查框由灰色變成黑色(有效)狀態; 第三步:根據選擇的編譯模式,把相應的庫文件(如Small模式時,是KeilC51Lib C51S.Lib)加入工程中,該文件必須作為工程的最后文件。 第5章 單片機C語言與匯編語言混合編程第四步:編譯后將會產生一個SRC的文件,將這個文件擴展名改為ASM。這樣就形成了可供C51程序調用
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025企業標準租車協議范本
- 公司工作流程管理制度
- 公司環境體系管理制度
- 湖南省長沙麓山國際實驗學校2025屆高三下學期二模英語試卷(含答案無聽力音頻及聽力原文)
- 福建省龍巖市2024~2025學年 高二下冊第二次月考(3月)數學試卷附解析
- 2025年中考語文(長沙用)課件:主題4 尋訪家鄉文化講好家鄉故事綜合實踐活動
- 雨水用水量徑流控制計算書
- 2025屆安徽省宣城市寧國市中考二模數學試卷含答案
- 2024年南充市順慶區考調真題
- 西安工程大學招聘筆試真題2024
- 2022年版初中物理課程標準解讀-課件
- 混凝土回彈法測試原始記錄表
- 《英語詞匯學》期末考試試卷附答案
- 2022年7月浙江省普通高中學業水平考試語文試題(原卷版)
- 2023年南京市中考歷史試題及答案
- DLT 1051-2019電力技術監督導則
- 2024屆安徽省淮南市西部地區七年級數學第二學期期末達標測試試題含解析
- 學校食堂食品安全追溯體系
- 新入職護士婦產科出科小結
- 第4課《直面挫折+積極應對》第1框《認識挫折+直面困難》【中職專用】《心理健康與職業生涯》(高教版2023基礎模塊)
- 第一課學會使用栽培工具
評論
0/150
提交評論