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

正文內(nèi)容

[工學(xué)]單片機應(yīng)用技術(shù)第九章-文庫吧資料

2024-10-22 18:27本頁面
  

【正文】 data *p。 ? : ? CBYTE /*訪問 code區(qū) char型數(shù)據(jù) */ ? DBYTE /*訪問 data區(qū) char型數(shù)據(jù) */ ? PBYTE /*訪問 pdata區(qū)或 I/O區(qū) char型數(shù)據(jù) */ ? XBYTE /*訪問 xdata區(qū)或 I/O區(qū) char型數(shù)據(jù) */ ? CWORD /*訪問 code區(qū) int型數(shù)據(jù) */ ? DWORD /*訪問 data區(qū) int型數(shù)據(jù) */ 上一頁 下一頁 返回 C51應(yīng)用舉例 ? PWORD /*訪問 pdata區(qū)或 I/O區(qū) int型數(shù)據(jù) */ ? XWORD /*訪問 xdata區(qū)或 I/O區(qū) int型數(shù)據(jù) */ ? 程序一:用指針變量實現(xiàn)。 下一頁 返回 C51應(yīng)用舉例 ? 說明:在進行 51單片機應(yīng)用系統(tǒng)程序設(shè)計時,有時需要直接操作系統(tǒng)的各個存儲器地址空間。 ? 下面舉例說明 C51程序設(shè)計中的實際應(yīng)用技巧。 C51與 C語言一樣,有 3種基本結(jié)構(gòu):順序結(jié)構(gòu)、分支結(jié)構(gòu)及循環(huán)結(jié)構(gòu)。 ? 3. 格式三 ? if 表達式 1 上一頁 下一頁 返回 C51的編譯預(yù)處理 ? 程序段 1 ? elif 表達式 2 ? 程序段 2 ? … ? else ? 程序段 n ? endif ? 這種格式表示,當(dāng)指定的表達式 1的值為真,則編譯程序段 1,否則對第二個表達式進行判斷,如此進行,直到遇到 else或 endif為止。 ? 例如:對于工作于 6MHz和 12MHz時鐘頻率下的 8051和8052單片機,可以采用如下條件編譯使編寫的程序具有通用性。 上一頁 下一頁 返回 C51的編譯預(yù)處理 ? 條件編譯 ? 一般情況下對 C51源程序進行編譯時,所有的程序行都要被編譯,但有時希望在滿足一定條件下才編譯源程序中的相應(yīng)部分,這就是條件編譯。為了適應(yīng)模塊化編程的需要,可以將比較常用的函數(shù)、公用的符號常量、帶參數(shù)的宏等定義在一個獨立的文件中,在編寫其他程序時,如果需要再將其包含進來。它的格式為: 上一頁 下一頁 返回 C51的編譯預(yù)處理 ? include “文件名 ” ? 或 include 文件名 ? 若使用 “ 文件名 ” 格式時,在當(dāng)前源文件所在的目錄中查找指定文件;若使用 文件名 格式時,則在系統(tǒng)指定的頭文件目錄中查找指定文件。其格式如下: define 宏符號名(參數(shù)表) 表達式 ? 例如: 上一頁 下一頁 返回 C51的編譯預(yù)處理 ? define X(A,B) A*B*B ? 在程序中如果有語句: ? y=X(4,3) ? 經(jīng)替換后變?yōu)? ? y=4*3*3 ? 文件包含 ? 文件包含是指一個程序文件將另一個指定的文件的全部內(nèi)容包含進來。 ? ( 5)宏定義對字符串不起作用。一般放在程序的最前面。 上一頁 下一頁 返回 C51的編譯預(yù)處理 ? ( 3)在進行宏定義時,可以使用已經(jīng)定義過和宏符號名,但最多不能超過 8級嵌套。 下一頁 返回 C51的編譯預(yù)處理 ? 1. 不帶參數(shù)的宏定義 ? 它的一般格式為: ? define 宏符號名 常量表達式 ? 例如: ? define PI ? define R5 ? define D 2*R ? 在使用宏定義時,應(yīng)注意: ? ( 1)一般將宏符號名用大寫字母表示。 ? 宏定義 ? 宏定義的作用就是用一個字符串來進行替換。 ? 常用的預(yù)處理命令有:宏定義、文件包含和條件編譯命令。 ? 例如: ? void timer1( void) interrupt 3 using 3 ? { ? } 上一頁 返回 C51的編譯預(yù)處理 ? C51的編譯預(yù)處理命令類似于匯編語言中的偽指令。中斷函數(shù)是禁止被直接調(diào)用的,否則會產(chǎn)生編譯錯誤。 上一頁 下一頁 返回 C51的函數(shù) ? 使用中斷服務(wù)函數(shù)必須注意:中斷函數(shù)必須是無參數(shù)無返回值的函數(shù)。對應(yīng)于 51系列單片機片內(nèi) RAM中的 4個工作寄存器組。為了滿足編寫中斷服務(wù)程序的需要, C51編譯器增加了一個關(guān)鍵字 interrupt,用于定義中斷服務(wù)函數(shù),其一般格式為: ? 函數(shù)類型 函數(shù)名(形式參數(shù)表) [interrupt m] [using n] ? 其中,關(guān)鍵字 interrupt m后面的 m表示中斷號,取值范圍為 0~31。由于采用再入函數(shù)需要用再入棧來保存相關(guān)變量數(shù)據(jù),占用較大內(nèi)存,處理速度較慢,因此,一般情況下盡量避免使用遞歸調(diào)用。 上一頁 下一頁 返回 C51的函數(shù) ? 再入函數(shù)的定義格式為: ? 函數(shù)類型 函數(shù)名(形式參數(shù)表) [reentrant] ? 使用再入函數(shù)時必須注意,再入函數(shù)是不能傳送 bit類型的參數(shù),也不能定義一個局部位變量,再入函數(shù)不能包括位操作以及可位尋址區(qū)。 ? 如: fun1( 3, 4) ? 函數(shù)的調(diào)用有以下 3種: ? 1. 函數(shù)語句 ? 如: fun() 上一頁 下一頁 返回 C51的函數(shù) ? 2. 函數(shù)表達式 ? 如: result=5* fun1( a, b) ? 3. 函數(shù)參數(shù) ? 如: result= fun1( fun1( a, b), c) ? C51中的特殊函數(shù) ? 1. 再入函數(shù) ? 如果在調(diào)用一個函數(shù)的過程中,又間接或直接調(diào)用該函數(shù)本身,稱為函數(shù)的遞歸調(diào)用。 “ 實際參數(shù)表 ” 就是與形式參數(shù)對應(yīng)的一組變量,它的作用就是將它的值傳遞給被調(diào)用函數(shù)中的形式參數(shù)。 上一頁 下一頁 返回 C51的函數(shù) ? C51程序中的函數(shù)是可以互相調(diào)用的。 ? 函數(shù)的說明與調(diào)用 ? 與使用變量一樣,在調(diào)用一個函數(shù)之前,必須對該函數(shù)的類型進行說明。即: return(z)中的 z是 char型,與函數(shù)的類型 char一致。 /*返回函數(shù)的值 z*/ ? } 上一頁 下一頁 返回 C51的函數(shù) ? 在上例中,如果要將函數(shù)的值返回到主調(diào)用函數(shù)中去,則需要用 return語句。 /*定義函數(shù)內(nèi)部的局部變量 */ ? z=x+y。 /*說明形式參數(shù)的類型 */ ? char y。 ? 下面是一個簡單的例子。 上一頁 下一頁 返回 C51的函數(shù) ? “局部變量定義 ” 是對在函數(shù)內(nèi)部使用的局部變量進行定義。 ? “ 形式參數(shù)表 ” 中的形式參數(shù)的類型必須加以說明。無值型表示函數(shù)沒有返回值。 ? 用戶自定義函數(shù)是用戶根據(jù)自己需要編寫的能實現(xiàn)特定功能的函數(shù),它必須先進行定義后才能調(diào)用。 ? 標(biāo)準(zhǔn)庫函數(shù)是由 C51編譯器提供的,它不需要用戶進行定義和編寫,可以直接由用戶調(diào)用,如 。 /*將 j變量的內(nèi)容為地址的單元的內(nèi)容賦給 py*/ ? 以上就是 C51中的各種常用運算符及其基本用法。i。 取地址運算符 ? 取內(nèi)容和取地址的運算格式為: ? 變量 = * 指針變量 /*將指針變量所指向的目標(biāo)變量值賦給左邊的變量 */ ? 指針變量 = amp。 ? 例如: max=(ab)? a:b 的執(zhí)行結(jié)果是比較 a與 b的大小,若 ab,則為真, max=a;若 ab,則為假, max=b。 ? 復(fù)合賦值運算的格式為: ? 變量 復(fù)合賦值運算符 表達式 ? 例如: a+=5相當(dāng)于 a=a+5。=、 |=、 ^=、 ~=等。 上一頁 下一頁 返回 C51的運算符 ? 7. 復(fù)合賦值運算符 ? 在賦值運算符 “ =”的前面加上其他運算符,就構(gòu)成了復(fù)合賦值運算符。例如: a=0x8f,進行左移運算 a2時,全部的二進制位值一起向左移動了 2位,最左端的 2位被丟棄,并在最右端 2位補入 0。 ? 位運算符中的左移和右移操作與匯編語言中的移位操作不同。 按位與 上一頁 下一頁 返回 C51的運算符 ? ^ 按位異或 ? | 按位或 ? 位運算符的優(yōu)先級由高到低依次為:按位取反 ~ → 左移 、右移 → 按位與 amp。amp。 → 邏輯或 || 。 邏輯與 ? || 邏輯或 ? ! 邏輯非 ? 邏輯表達式的格式為: ? 邏輯與、邏輯或的表達式為: 條件式 1 邏輯運算符 條件式 2 上一頁 下一頁 返回 C51的運算符 ? 邏輯非的表達式為: !條件式 ? 邏輯運算符的優(yōu)先級由高到低依次為:邏輯非 ! → 邏輯與amp。 ? 關(guān)系表達式的格式為: 上一頁 下一頁 返回 C51的運算符 ? 表達式 1 關(guān)系運算符 表達式 2 ? 例如: ? x+y= (a+1)!=c ? 5. 邏輯運算符 ? C51的有以下 3種: ? amp。 /* 先將 i值加 1,再使用 i */ ? j??。 ? 若要改變運算符的優(yōu)先級,可采用圓括號實現(xiàn)。賦值表達式的格式為: ? 變量 = 表達式 ? 例如: ? a=b=0x1000。以下為 C51中常用的運算符。通用型指針的存儲器類型編碼見 表 96。 /* 指針py指向 char型 pdata區(qū),指針 px自身在 data ? 區(qū),指針長度為 1字節(jié) */ ? 由此可知,指針?biāo)赶虻淖兞看鎯ζ黝愋投x為data/idata/pdata時,指針本身長度為 1個字節(jié);指針?biāo)赶虻淖兞看鎯ζ黝愋投x為 code/xdata時,指針本身長度為 2個字節(jié)。例如: ? char xdata *px。因此, C51中的指針與匯編中的這兩種寄存器類似,指針本身是一個需要進行類型定義的變量,而它所指向的變量也需要進行類型定義。 ? 2. 指針型變量的數(shù)據(jù)類型定義 ? 由于 C51是與 51單片機硬件相關(guān)的,在 C51中的指針變量的用法就類似于匯編語言中的間接尋址的用法。此時, BYTE就等效于 char。 /* 定義BYTE為新的字符型數(shù)據(jù)類型名 */ ? BYTE x,y。在用 typedef重新定義數(shù)據(jù)類型后,可以用新的數(shù)據(jù)類型名對變量進行定義,但不能直接用 typedef定義變量。 /*定義特殊功能寄存器名 T2 */ 上一頁 下一頁 返回 C51的數(shù)據(jù)結(jié)構(gòu) ? 數(shù)據(jù)類型、變量定義中的常見問題 ? 1. 重新定義數(shù)據(jù)類型的方法 ? 在 C51中,除了可以采用上面所介紹的數(shù)據(jù)類型外,用戶還可以根據(jù)自己的需要對數(shù)據(jù)類型
點擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1