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

正文內(nèi)容

單片機第14章c語言程序設計-文庫吧資料

2025-01-22 17:56本頁面
  

【正文】 SJMP指令程序會繼續(xù)向下執(zhí)行,并不能跳出分支選擇語句。 56 1. 分支結(jié)構(gòu)程序 (1) 只有兩條分支的時候用 If (條件 ) {分支 1} else {分支 2} (2) 分支較多時 在 分支較多時的情況下使用 switch語句。順序結(jié)構(gòu)是程序的基本結(jié)構(gòu),程序自上而下,從main()的函數(shù)開始一直到程序運行結(jié)束,程序只有一條路可走,沒有其他的路徑可以選擇。 表 147 位運算其說明 符號 說明 = 賦值 * 指向運算符 amp。 位邏輯與 Ι 位邏輯或 ^ 位異或 ~ 位取反 位左移 位右移 54 5. 賦值、指針和取值運算符 是對變量操作的基本運算。 邏輯與 ΙΙ 邏輯或 ! 邏輯非 52 表 145 關(guān)系運算符及其說明 符號 說明 大于 小于 = 大于或等于 = 小于或等于 == 等于 != 不等于 53 4. 位運算 位運算符及其說明如 表 146所示。 符號 說明 amp。 51 表 144 邏輯運算符及其說明 3. 關(guān)系運算符 判斷兩個數(shù)之間的關(guān)系。 在例 141中可以看到有關(guān)自增和自減運算符的應用。 50 例如: 若 i=4,則執(zhí)行 x=++i時,先使 i加 1,再引用結(jié)果,即 x=5,運算結(jié)果為 i=5, x=5。 ++i, i:在使用 i之前,先使 i值加(減) 1。例如 “ 5/3”的結(jié)果(商) 為 1,而“ 5%3”的結(jié)果 為 2(余數(shù))。 48 表 143 算術(shù)運算符及其說明 符號 說明 + 加法運算 減法運算 * 乘法運算 / 除法運算 % 取模運算 ++ 自增 1 自減 1 49 對于 “ /” 和 “ %” 往往會有疑問。本節(jié)對 C51中用到的 標準 C運算符進行復習 ,為 C51的程序設計打下基礎。 ? 在參數(shù)的傳遞上,實際參數(shù)可以傳遞給間接調(diào)用的再入函數(shù)。 47 ? 再入函數(shù)不能包括位操作以及 51單片機的未尋址區(qū)。 再入函數(shù) 是一種可以在函數(shù)體內(nèi)直接或間接調(diào)用自身的一種函數(shù),在 Keil C51中遞歸函數(shù)必須是可重入的,可重入的函數(shù)需要加上 reentrant。 46 ( 2)嵌套調(diào)用 是在被調(diào)用的函數(shù)中 又調(diào)用其他函數(shù)的語句 。調(diào)用分為以下幾種。 例如, 例 141中的第 8行的 “;” 就是一個空語句。程序最初設計時,往往只涉及最基本的功能模塊的函數(shù),其他模塊的功能函數(shù)可以在以后補上。調(diào)用空函數(shù)時, 什么工作也不做,不起任何作用。 例如, 例 141中的 第 3行 的“ i” 是 形式參數(shù) 。 ( 1)無參數(shù)函數(shù) 此種函數(shù)在被調(diào)用時,既無參數(shù)輸入,也不返回結(jié)果給調(diào)用函數(shù),只是為完成某種操作而編寫的。 每個 語句最后必須有一個 分號 ,分號是 C語句的必要組成部分。如果一個函數(shù)體內(nèi)有多個花括號,則最外層的一對“ { }”為函數(shù)體的范圍。 42 函數(shù)的 首部(函數(shù)的第 1行), 包括函數(shù)名、函數(shù)類型、函數(shù)屬性、函數(shù)參數(shù)(形式參數(shù))名、參數(shù)類型。如 例 141中的Delay函數(shù) 。 用戶可以直接調(diào)用 C51的庫函數(shù) 而不需要為這個函數(shù)寫任何代碼,只需要包含具有該函數(shù)說明的頭文件即可。 ( 1)標準庫函數(shù) Keil C51具有功能強大、資源豐富的標準庫函數(shù),由C51編譯器提供。 2. 用戶自定義函數(shù)與庫函數(shù) 從結(jié)構(gòu)上劃分,函數(shù)分為 主函數(shù) main ( )和 普通函數(shù)兩種。 注意, 若 Delay( )的定義寫在 main函數(shù)的后面,則需要先作出聲明,否則編譯無法通過,因為編譯到 main函數(shù)中的 Delay( )語句時,找不到相應的函數(shù)體。 相比之下調(diào)用外層循環(huán) for(; i0; i){ }時的這1+2+i*(1002+1+2)可以近似為 i*1002,即 i個 ms。}在反匯編時不對應任何語句,即不占用機器周期。j++) {。 注意, 內(nèi)層循環(huán) for( j=0。 38 第 3行 ~第 9行 對 函數(shù) Delay進行了 事先定義 ,只有這樣,才能在主程序中被主函數(shù) main ( )調(diào)用。 程序的 第 2行 用符號 P10來表示 。 37 打開 “ sfr P1=0x90;”, 即定義符號 P1與地址 0x90對應,而 P1口的地址就是 0x90。文件“ ”包含了 51單片機全部的特殊功能寄存器的字節(jié)地址及可尋址位的位地址定義。已知 單片機時鐘晶振為 12MHz,即每個機器周期 1μs,采用軟件延時的方法,參考程序如下: 34 include /* 包含 頭文件 */ sbit P10=P1^0; /* 定義位變量 ,也可使用 sbit P10=0x90*/ void Delay(unsigned int i) /* 延時函數(shù) Delay( ), i是形式參數(shù) */ { /* 兩個花括號之間為函數(shù) Delay( )的函數(shù)體 */ unsigned int j; /* 定義變量 j */ } for(; i0; i) /* 如果 i0,則 i減 1 */ { for(j=0; j333; j++) /* 如果 j 333,則 j加 1 */ { ; /*空函數(shù) */ } } } 35 void main(void) /* 主函數(shù) main( )*/ { while( 1) /* 主程序輪詢 */ { P10=1; /* ,發(fā)光二極管滅 */ Delay(800) ; /* 將實際參數(shù) 800傳遞給形式參數(shù) i, 延時 800ms*/ P10=0; /* ,發(fā)光二極管亮 */ Delay(800) /* 將實際參數(shù) 800傳遞給形式參數(shù) i,延時 800ms*/ } } 36 下面對 程序進行 簡要說明 。 33 1. C51程序與函數(shù) 下面通過一個簡單 C51程序, 認識 C51程序與函數(shù)。 一個 C51源程序無論包含了多少函數(shù),它 總是從 main()函數(shù) 開始執(zhí)行 , 不論 main()函數(shù) 位于程序的什么位置 。例如: bit *ptr ; /* 錯誤,不能用位變量來定義指針 */ bit aarray[ ] ; /* 錯誤,不能用位變量來定義數(shù)組 */ 在定義位變量時,允許定義存儲類型,位變量都被放入一個位段,此段總是位于 AT89S51片內(nèi) RAM中,因此其存儲器類型限制為 bdata, data 或 idata,如果將位變量定義成其他類型都會在編譯時出錯。C51中位變量 bit的具體定義如下: 1. 位變量的 C51定義方法 C51通過關(guān)鍵字“ bit”來定義位變量, 格式 為: bit bitname ; 例如: bit ovflag ; /* 將 ovflag定義為位變量 */ 30 2. C51程序函數(shù)的“ bit”參數(shù)及返回值 C51程序函數(shù)可以包含類型為“ bit”的參數(shù),也可將其作為返回值。 另外,通常的單片機應用都是面對小型的控制,代碼比較短,對于程序存儲區(qū)的大小要求很低,常常是片內(nèi)RAM很緊張而片內(nèi) Flash ROM很富裕,因此如果實時性 28 要求不高, 可考慮使用 宏 ,以及將一些子函數(shù)的常量數(shù)據(jù)做成數(shù)據(jù)表,放置在程序存儲區(qū),當程序運行時,進入子函數(shù)動態(tài)調(diào)用下載至 RAM即可,退出子函數(shù)后立即釋放該內(nèi)存空間。 選擇外部數(shù)據(jù)存儲器可 先選擇 pdata類型 , 最后選用 xdata類型 。對于那些經(jīng)常使用的變量要使用內(nèi) 27 部尋址。對于 51系列這樣的定點機而言,浮點類型變量將明顯增加運算時間和程序長度,如果可以的話,盡量使用靈活巧妙的算法來避免浮點變量的引入。 26 定義 變量類型 應考慮如下問題: 程序運行時該變量可能的取值范圍,是否有負值,絕對值有多大,以及相應需要的存儲空間大小。 在資源有限的條件下,如何節(jié)省存儲單元并保證運行效率,是對開發(fā)者的一個考驗。 ( 3)片外程序存儲器 code: 外部程序存儲器的 64KB空間。 24 25 ( 2)片外數(shù)據(jù)存儲器 pdata: 片外數(shù)據(jù)存儲器頁,一頁為 256字節(jié)。 bdata: 片內(nèi)位尋址區(qū) ,位于片內(nèi) RAM位尋址區(qū)20H~2FH。下面對 表 142作以說明。 C51編譯器 通過將變量、常量定義成不同存儲類型的方法將它們定義在不同的存儲區(qū)中。 3. 數(shù)據(jù)的存儲類型 C51完全支持 51單片機硬件系統(tǒng)的所有部分。 bit用來定義普通的位變量,值只能是二進制的 0或 1。 例如: sfr PSW=0xd0 ; /*定義 PSW寄存器地址為 0xd0*/ sbit PSW ^2 = 0xd2 ; /*定義 OV位為 */ 符號“ ^”前面是特殊功能寄存器的名字,“ ^”的后面數(shù)字定義特殊功能寄存器可尋址位在寄存器中的位置,取值必須是 0~7。在后面的語句中可以對 DPTR進行操作。所不同的是它用于操作占兩個字節(jié)的特殊功能寄存器。 ( 3)特殊功能寄存器 sfr16 “ sfr16”數(shù)據(jù)類型 占用兩個內(nèi)存單元。利用它可訪問 AT89S51內(nèi)部的所有特殊功能寄存器。 ( 1)位變量 bit bit的值可以是 1( true) , 也可以是 0( false)。 E+38, 浮點數(shù) (精確到 7位 ) double 64 8 177。 注意: 擴展的 4種數(shù)據(jù)類型,不能使用指針對它們存取。 C51語言中的數(shù)據(jù) 1. 數(shù)據(jù)類型 Keil C51的基本數(shù)據(jù)類型如 表 141所示。 如果程序設計者具備了有關(guān)標準 C的編程基礎,只要注意Keil C51與標準 C的不同之處,并熟悉 AT89S51單片機的硬件結(jié)構(gòu),就能夠較快地掌握 Keil C51的編程。其次,標準 C所具備的遞歸特性不被 Keil C51支持,在 C51中,要使用遞歸特性,必須用 reentrant進行聲明才能使用。 ( 6)程序結(jié)構(gòu)的差異 。 15 有一些庫函數(shù)可以繼續(xù)使用, 但這些庫函數(shù)都必須針對 51單片機的硬件特點來作出相應的開發(fā),與標準 C庫函數(shù)的構(gòu)成與用法有很大的不同。 ( 5) Keil C51與標準 C的 庫函數(shù) 有較大的不同。 此外,對于 AT89C51單片機中大量的 特殊功能寄存器 也沒有定義 。 C語言最初是為通用計算機設計的,在通用計算機中只有一個程序和數(shù)據(jù)統(tǒng)一尋址的內(nèi)存空間, 而 51系列單片機 有片內(nèi)、外程序存儲器,還有片內(nèi)、外數(shù)據(jù)存儲器。 51系列單片機包含位操作空間和豐富的位操作指令,因此 Keil C51與 ANSI C相比又擴展了4種類型,以便能夠靈活地進行操作。因此,Keil C51系列的頭文件 集中體現(xiàn)了各系列芯片的不同資源及功能。 13 C51與 標準 C的主要區(qū)別如下: ( 1)頭文件的差異。Keil C51的基本語法與標準 C相同,但對標準 C進行了擴展。 12 在 用戶目標板調(diào)試方式 下,利用硬件目標板中的監(jiān)控程序可以直接調(diào)試目標硬件系統(tǒng),使用戶節(jié)省購買硬件仿真器的費用。Vision3還 支持軟件模擬仿真( Simulator) 和 用戶目標板調(diào)試 (Monitor51)兩種工作方式 。Vision3內(nèi)部集成了 源程序編輯器, 并允許用戶在編輯源文件時就可設置程序調(diào)試斷點,便于在程序調(diào)試過程中快速檢查和修改程序。Vision3,指的是用于51單片機的 C51程序編寫、調(diào)試的 集成開發(fā)環(huán)境 。Keil C51一般 簡寫為 C51,指的是 51單片機編程所用的 C語言;而 Keil 181。 11 本章經(jīng)常用到 Keil C51和 Keil 181。Vision3中,該環(huán)境下 集成了 文件編輯處理、編譯鏈接、項目( Project)管理、窗口、工具引用和仿真軟件模擬器以及 Monitor51硬件目標調(diào)試器等多種功能,這些功能均可在 Keil 181。 10 Keil公司目前已推出 C51編譯器 ,為51單片機軟件開發(fā)提供了全新的 C語言環(huán)境,同時保留了匯編代碼高效、快速的特點。 Keil C51在兼容 ANSI C的基礎上,又增加很多與 51單片機硬件相關(guān)的編譯特性,使得開發(fā) 51系列單片機程序更為方便和快捷,程序代碼運行速度快,所需存儲器空間小,完全可以和匯編語言相媲美。當前較好的 C51語言編譯系統(tǒng)編譯出來的代碼效率只比直接使用匯編語言 低 20%左右,如果使用 優(yōu)化編譯選項 ,效果會更好。例如,為 51單片機編寫的程序通過改寫頭文件以及少量的程序行,就可以方便地移植到 PIC單片機上。 8
點擊復制文檔內(nèi)容
畢業(yè)設計相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1