色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

電子發燒友App

硬聲App

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示
創作
電子發燒友網>電子資料下載>可編程邏輯>51單片機asm與C混合編程資料下載

51單片機asm與C混合編程資料下載

2021-04-21 | pdf | 220.97KB | 次下載 | 2積分

資料介紹

單片機應用系統設計中,過去主要采用匯編語言開發程序。匯編語言編寫的程序對單片機硬件操作很方便,編寫的程序代碼短,效率高,但系統設計的周期長,可讀性和可移植性都很差。C語言程序開發是近年來單片機系統開發應用所采用的主要開發方式之一,C 語言功能豐富、表達能力強、使用靈活方便、開發周期短、可讀性強、可移植性好。但是,采用C 語言編程還是存在著如對硬件沒有匯編方便、效率沒有匯編高、編寫延時程序精確度不高等缺點,因而現在單片機系統開發中經常用到C 語言與匯編語言混合編程技術。混合編程技術可以把C 語言和匯編語言的優點結合起來,編寫出性能優良的程序。單片機混合編程技術通常是,程序的框架或主體部分用C 語言編寫,對那些使用頻率高、要求執行效率高、延時精確的部分用匯編語言編寫,這樣既保證了整個程序的可讀性,又保證了單片機應用系統的性能。1、混合編程的基本方式C 語言與匯編語言混合編程通常有兩種基本方法:在C 語言中嵌入匯編程序和在C 語言中調用匯編程序。1.1 在C51 中嵌入匯編程序在C51 中嵌入匯編程序主要用于實現延時或中斷處理,以便生成精練的代碼,減少運行時間。嵌入式匯編通常用在當匯編函數不大,且內部沒有復雜的跳轉的時候。在單片機C 語言程序中嵌入匯編程序是通過C51 中的預處理指令# pragmaasm/endasm 語句實現,格式如下:#pragmaASM;匯編程序代碼#pragmaENDASM通過# pragma asm 和# pragma endasm 告訴C51 編譯器它們之間的語句行不用編譯成匯編程序代碼。1.2 在C51 中調用匯編程序在C51 中調用匯編程序的方法應用較多,C 模塊與匯編模塊的接口較簡單,分別用C51 與A51 對源程序進行編譯,然后用L51 將obj 文件連接即可,關鍵問題在于C 函數與匯編函數之間的參數傳遞和得到正確返回值,以保證模塊間的數據交換。2、C51 與匯編程序的參數傳遞在C51 中嵌入匯編程序或調用匯編程序,其參數傳遞的過程是不一樣的。2.1在C51 中嵌入匯編程序的參數傳遞對于在C 語言程序中通過# pragma asm 和#pragma endasm 嵌入的匯編程序,C51 編譯器在編譯時只是將當中的匯編程序不編譯,而不做其他任何處理,因此不存在函數調用時的參數傳遞和返回值問題。如果要在C 程序中和匯編程序中實現數據傳遞,可以通過變量或特殊功能寄存器來實現,例如,在C 程序的變量定義部分定義Z 變量,在C 語言程序和匯編程序中共同訪問Z 變量,這樣,C 語言程序可以通過Z 變量把參數傳遞給匯編程序,匯編程序可以通過Z 變量把參數返回給C語言程序。2.2在C51 中調用匯編程序的參數傳遞在C51 中調用匯編程序是通過函數調用的形式來實現的。由于C51 程序函數有明確的參數和返回值約定,因此在C51 中調用匯編程序進行參數傳遞時都必須嚴格遵守C51 函數的參數和返回值相關約定。在C51 中調用匯編程序進行參數傳遞關鍵在于要弄清C51 函數的參數傳遞規則。在C51 中調用匯編程序進行參數傳遞的方式有兩種:一種是通過寄存器傳遞參數;一種是通過固定存儲區傳遞。2.2.1 通過寄存器傳遞參數。Franklin C51 規定調用函數最多可通過51 單片機的工作寄存器傳遞3 個參數,余下的通過固定存儲區傳遞。可以用“NOREGPARMS”命令取消用寄存器傳遞參數,如果用寄存器傳遞參數取消或參數太多,參數通過固定存儲區傳遞。用寄存器傳遞參數的函數,在生成代碼時被Cx51 編譯器在函數名前加上一個下劃線“_”的前綴,在固定存儲區傳遞參數的函數則沒有下劃線。不同的參數用到的寄存器不一樣,不同的數據類型用到的寄存器也不同。通過寄存器傳遞的參數如表1 所示。表1 中,int 型和long 型數據傳遞時高位數據在低位寄存器中,低位數據在高位寄存器中;float型數據滿足32 位的IEEE 格式,指數和符號位在R7 中;通用指針存儲類型在R3 中,高位在R2 中。函數參數傳遞舉例情況如表2 所示。2.2.2 通過固定存儲區傳遞。用固定存儲區傳遞參數給匯編程序,參數段首地址用段名“ function-nAMEBYTE”和“function-name ? BIT”保存,function-name 為函數的名稱,其中“, ? function-name ? BIT”保存位參數段首地址,“ function-name BYTE”保存別的參數段首地址,即使通過寄存器傳遞參數,參數也將在這些段中分配空間,參數按聲明的先后在每個段中順序保存。用做參數傳遞的固定存儲區可在內部數據區或外部數據區,這由存儲模式決定。 Small 模式的參數段用內部數據區,Compact 和Large 模式用外部數據區。2.2.3 函數返回值。函數返回值通常用寄存器傳遞,表3 列出了可能的返回值和所用的寄存器。3、C51 中嵌入匯編程序的實現方法通常,在C51 程序中嵌入匯編程序的處理方法如下:第一步,在C 文件中以如下方式嵌入匯編程序。#pragmaASM;匯編程序#pragmaENDASM第二步,在keil C51 軟件的Project 窗口右鍵單擊嵌入匯編程序的C 文件,選擇“Options for ?”,點擊右邊的“Generate Assembler SRC File”和“AssembleSRC File”,使檢查框由灰色變成黑色(有效) 狀態。第三步,根據選擇的編譯模式,把相應的庫文件(如Small 模式時, 是Keil \ C51 \ Lib \ C51S。Lib) 加入工程中, 該文件必須作為工程的最后文件。庫文件與編譯模式的關系如下:C51S.LIB - 沒有浮點運算的Small modelC51C.LIB - 沒有浮點運算的Compact modelC51L.LIB - 沒有浮點運算的Large modelC51FPS.LIB - 帶浮點運算的Small modelC51FPC.LIB - 帶浮點運算的Compact modelC51FPL.LIB - 帶浮點運算的Large model第四步,編譯,即可生成目標代碼。keil軟件中c編程如何制作一個庫函數并在其他地方隨意調用?在項目的Output設置中選擇輸出lib而不是可執行目標文件。4、C51 中調用匯編程序的實現方法為了能夠在C 語言中調用匯編程序,要求匯編程序的編寫必須符合C 語言的相關命名規則。C51 程序在調用匯編程序時,除了前面參數傳遞的相關規則外,函數及其相關段也需要滿足一定的規則。一個C51 源程序模塊被編譯后,其中的每一個函數以“ ? PR ? 函數名? 模塊名”為名的命名規則被分配到一個獨立的CODE 段。 例如,如果模塊“FUNC51”內包含一個名為“func”的函數, 則其CODE 段的名字是“ ? PR ? FUNC ? FUNC51”,如果函數中還包含有data 和bit 對象的局部變量,編譯器將按“ ? 函數名? BYTE 和? 函數名? BIT”命令規則建立一個data 和bit 段,它們代表所要傳遞參數的起始位置,其偏移值為零。段內代碼與數據定義也遵循一定的規則。這些段是公開的,它們的地址可被其他模塊訪問。另外,這些段被編譯器賦予“OVERLAYABLE”標志,其可被L51 連接P定位器做覆蓋分析。下面是一個簡單的C51 程序編譯時形成的匯編程序。C 語言源程序如下:#defineucharunsignedcharucharmax(ucharx,uchary){ucharz;z=(x>=y)?x:y;return(z);}匯編后形成的SRC 文件(只須擴展名改為.a51就變成匯編程序) 如下:NAMEA1;定義模塊名稱?PR?_max?A1SEGMENTCODE;定義程序代碼PUBLIC_max;定義公共符號;#defineucharunsignedchar;ucharmax(ucharx,uchary)RSEG?PR?_max?A1;程序代碼段_max:;起始地址USING0;SOURCELINE#2;??Variable’y?041’assignedtoRegister’R5’??;??Variable’x?040’assignedtoRegister’R7’??;{;SOURCELINE#3;ucharz;;z=(x>=y)?x:y;;SOURCELINE#5MOVA,R7;R7中為第二個字節參數CLRCSUBBA,R5;R5中為第一個字節參數JC?C0001SJMP?C0002?C0001:MOVR7,AR5;R7中為返回值?C0002:;??Variable’z?042’assignedtoRegister’R7’??;return(z);;SOURCELINE#6;SOURCELINE#7;}?C0003:RET;ENDOF-maxEND可以看出,要編寫為C51 調用的匯編程序,除了參數必須按前面規定的寄存器或存儲器傳送外,程序格式也有相應的規則。這些規則比較繁瑣,在實際處理中往往按下面方式處理:第一步,先用C 語言程序編寫出程序框架,如文件名為a1.c (注意參數) 。第二步,在keil C51 的Project 窗口中用右鍵單擊該C 語言文件,在右鍵菜單中選擇“Options for?”,點擊右邊的“Generate Assembler SRCFile”和“Assemble SRC File”,使檢查框由灰色變成黑色(有效) 狀態。第三步,根據選擇的編譯模式,把相應的庫文件(如Small 模式時,是Keil \ C51 \ Lib \ C51S.Lib) 加入工程中,該文件必須作為工程的最后文件。 庫文件與編譯模式的關系如前面所述。第四步,編譯后將會產生一個SRC 的文件,將這個文件擴展名改為ASM。這樣就形成了可供C51程序調用的匯編程序。隨后可在該文件的代碼段中加入所需指令代碼。第五步,將該匯編程序與調用它的主程序一起加到工程文件中,這時工程文件中不再需要原來的C 語言文件和庫文件,主程序只需要在程序開始處用EXTERN 對所調用的匯編程序中的函數作聲明,主程序中可調用匯編程序中的函數。(mbbeetchina)
下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1電子電路原理第七版PDF電子教材免費下載
  2. 0.00 MB  |  1491次下載  |  免費
  3. 2單片機典型實例介紹
  4. 18.19 MB  |  95次下載  |  1 積分
  5. 3S7-200PLC編程實例詳細資料
  6. 1.17 MB  |  27次下載  |  1 積分
  7. 4筆記本電腦主板的元件識別和講解說明
  8. 4.28 MB  |  18次下載  |  4 積分
  9. 5開關電源原理及各功能電路詳解
  10. 0.38 MB  |  11次下載  |  免費
  11. 6100W短波放大電路圖
  12. 0.05 MB  |  4次下載  |  3 積分
  13. 7基于單片機和 SG3525的程控開關電源設計
  14. 0.23 MB  |  4次下載  |  免費
  15. 8基于AT89C2051/4051單片機編程器的實驗
  16. 0.11 MB  |  4次下載  |  免費

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234313次下載  |  免費
  3. 2PADS 9.0 2009最新版 -下載
  4. 0.00 MB  |  66304次下載  |  免費
  5. 3protel99下載protel99軟件下載(中文版)
  6. 0.00 MB  |  51209次下載  |  免費
  7. 4LabView 8.0 專業版下載 (3CD完整版)
  8. 0.00 MB  |  51043次下載  |  免費
  9. 5555集成電路應用800例(新編版)
  10. 0.00 MB  |  33562次下載  |  免費
  11. 6接口電路圖大全
  12. 未知  |  30320次下載  |  免費
  13. 7Multisim 10下載Multisim 10 中文版
  14. 0.00 MB  |  28588次下載  |  免費
  15. 8開關電源設計實例指南
  16. 未知  |  21539次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935053次下載  |  免費
  3. 2protel99se軟件下載(可英文版轉中文版)
  4. 78.1 MB  |  537793次下載  |  免費
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420026次下載  |  免費
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234313次下載  |  免費
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費
  11. 6電路仿真軟件multisim 10.0免費下載
  12. 340992  |  191183次下載  |  免費
  13. 7十天學會AVR單片機與C語言視頻教程 下載
  14. 158M  |  183277次下載  |  免費
  15. 8proe5.0野火版下載(中文版免費下載)
  16. 未知  |  138039次下載  |  免費
主站蜘蛛池模板: 大桥未久电影在线| 大肥婆丰满大肥奶bbw肥| 狠狠射首页| 视频一区在线免费观看| 亚洲精品色情APP在线下载观看| 东北小伙FREECHINESE野外| 欧美wwwvideos在线观看| 亚洲高清无在码在线电影| 丰满艳妇亲伦| 芒果影院网站在线观看| 午夜快车神马影视| fyeex性欧美人与曾| 回复术士勇者免费观看全集| 热久久视久久精品2015| 99re这里只有精品国产| 毛片在线播放网址| 最新无码国产在线视频| 国模沟沟一区二区三区| 日本在线免费| 调教椅上的调教SM总裁被调教| 人人碰79免费视频| 成人免费公开视频| 日日摸夜添夜夜夜添高潮| 跪趴式啪啪GIF动态图27报| 少妇系列之白嫩人妻| 国产精品高潮AV久久无码| 蜜臀AV精品一区二区三区| 亚洲精品中文字幕无码A片蜜桃| 国产在线精品视频免费观看| 亚洲AV无码一区二区三区乱子伦| 国产一区二区高清| 亚洲色噜噜狠狠站欲八| 高H内射NP古文| 添加一点爱与你电视剧免费观看| fyeex性欧美人与曾| 日本激情在线| 国产激情视频在线| 色狠狠婷婷97| 国产精品永久免费视频| 婷婷午夜影院| 国产一区二区精品视频|