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

正文內(nèi)容

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

2024-10-01 18:27 本頁面


【正文】 上一頁 下一頁 返回 C51的數(shù)據(jù)結(jié)構(gòu) ? 5. 位常量 ? 它的值只能取 1或 0兩種值。 ? C51的變量與存儲類型 ? 變量是一種在程序執(zhí)行過程中值不斷變化的量。在使用變量之前,必須進(jìn)行定義,用一個標(biāo)識符作為變量名并指出它的數(shù)據(jù)類型和存儲模式,以便編譯系統(tǒng)為它分配相應(yīng)的存儲單元。 C51對變量的定義格式如下: ? [存儲種類 ] 數(shù)據(jù)類型 [存儲器類型 ] 變量名表; ? 下面分別介紹變量定義格式中的各項。 ? 1. 存儲種類 上一頁 下一頁 返回 C51的數(shù)據(jù)結(jié)構(gòu) ? 該項為可選項。變量的存儲種類有四種:自動( auto)、外部( extern)、靜態(tài)( static)和寄存器( register)。如果在定義變量時省略該項,則默認(rèn)為自動( auto)變量。 ? 自動變量( auto)指定被說明的對象放在內(nèi)存的堆棧中。只有在定義它的函數(shù)被調(diào)用,或是定義它的復(fù)合語句被執(zhí)行時,編譯器才為其分配內(nèi)存空間。當(dāng)函數(shù)調(diào)用結(jié)束返回時,自動變量所占用的空間就被釋放。 ? 外部變量( extern)指在函數(shù)外部定義的變量,也稱全局變量。只要一個外部變量被定義后,它就被分配了固定的內(nèi)存空間,即使函數(shù)調(diào)用結(jié)束返回,其存儲空間也不被釋放。 上一頁 下一頁 返回 C51的數(shù)據(jù)結(jié)構(gòu) ? 靜態(tài)變量( static)分為內(nèi)部靜態(tài)變量和外部靜態(tài)變量兩種。如果希望定義的變量在離開函數(shù)后到下次進(jìn)入函數(shù)前變量值保持不變,就需要使用靜態(tài)變量說明。使用這種類型對變量進(jìn)行說明后,變量的地址是固定的。 ? 寄存器變量( register)指定將變量放在 CPU的寄存器中,程序執(zhí)行效率最高。 ? 2. 數(shù)據(jù)類型 ? 該項為必選項。變量的數(shù)據(jù)類型可以使用 所有數(shù)據(jù)類型。 ? 3. 存儲器類型 上一頁 下一頁 返回 C51的數(shù)據(jù)結(jié)構(gòu) ? 該項為可選項。 Keil Cx51編譯器完全支持 51系列單片機(jī)的硬件結(jié)構(gòu)和存儲器組織,對每個變量可以定義 表 94中的存儲器類型。 ? 若在定義變量時省略了存儲器類型項,則按編譯時使用的存儲器模式來確定變量的存儲器空間。 Keil Cx51編譯器的三種存儲器模式為 SMALL、 LARGE和 COMPACT,這三種模式對變量的影響如 表 95所示。 ? 變量應(yīng)用舉例 ? char data var。 /* 在 data區(qū)定義字符型 變量 var */ 上一頁 下一頁 返回 C51的數(shù)據(jù)結(jié)構(gòu) ? int a=5。 /* 定義整型變量 a,同時賦初值 等于 5,變量 a位于由編譯器的存儲 器模式確定的默認(rèn)存儲區(qū)中 */ ? char code text[]=”HELLO!”。 /*在 code區(qū)定義字 符串?dāng)?shù)組 */ ? unsigned int xdata time。 /*在 xdata區(qū)定義無 符號整型變量 time */ ? extern float idata x,y,z。 /*在 idata區(qū)定義外 部浮點型變量 x,y,z */ ? char xdata *px。 /*指針 px指向 char型 xdata 區(qū),指針 px自身在默認(rèn)存儲 區(qū),指針長度為 2字節(jié) */ 上一頁 下一頁 返回 C51的數(shù)據(jù)結(jié)構(gòu) ? char pdata * data py。 /*指針 py指向 char 型 pdata區(qū),指針 px自身在 data區(qū),指針長度為 1字節(jié) */ ? static bit data port。 /*在 data區(qū)定 義了一個靜態(tài)位變量 port */ ? int bdata x。 /*在 bdata區(qū)定義了一個整型 變量 x */ ? sbit x0=x^0。 /*在 bdata區(qū)定義了一個位變 量 x0 */ ? sfr P0=0x80。 /*定義特殊功能寄存器名 P0 */ ? sfr16 T2=0xCC。 /*定義特殊功能寄存器名 T2 */ 上一頁 下一頁 返回 C51的數(shù)據(jù)結(jié)構(gòu) ? 數(shù)據(jù)類型、變量定義中的常見問題 ? 1. 重新定義數(shù)據(jù)類型的方法 ? 在 C51中,除了可以采用上面所介紹的數(shù)據(jù)類型外,用戶還可以根據(jù)自己的需要對數(shù)據(jù)類型進(jìn)行重新定義。重新定義的方法如下: ? typedef 已有的數(shù)據(jù)類型 新的數(shù)據(jù)類型 ? “ typedef”的作用只是將 C51中原有的數(shù)據(jù)類型用新的名稱做了置換,并沒有創(chuàng)造出新的數(shù)據(jù)類型。在用 typedef重新定義數(shù)據(jù)類型后,可以用新的數(shù)據(jù)類型名對變量進(jìn)行定義,但不能直接用 typedef定義變量。 上一頁 下一頁 返回 C51的數(shù)據(jù)結(jié)構(gòu) ? 例如: ? typedef unsigned char BYTE。 /* 定義BYTE為新的字符型數(shù)據(jù)類型名 */ ? BYTE x,y。 /* 定義x,y為 BYTE型,即 char型變量 */ ? 上例中,用 BYTE置換了 char,在后面的程序中就可以用BYTE定義變量的數(shù)據(jù)類型了。此時, BYTE就等效于 char。 ? 通常,用 typedef定義的新數(shù)據(jù)類型用大寫字母表示。 ? 2. 指針型變量的數(shù)據(jù)類型定義 ? 由于 C51是與 51單片機(jī)硬件相關(guān)的,在 C51中的指針變量的用法就類似于匯編語言中的間接尋址的用法。 上一頁 下一頁 返回 C51的數(shù)據(jù)結(jié)構(gòu) 在匯編語言中,對同一個外部數(shù)據(jù)存儲器,既有 @Ri分頁尋址,又有 @DPTR尋址,其中 Ri與 DPTR本身的地址范圍是不同的。因此, C51中的指針與匯編中的這兩種寄存器類似,指針本身是一個需要進(jìn)行類型定義的變量,而它所指向的變量也需要進(jìn)行類型定義。使用類型定義就可以描述指針變量及指針?biāo)赶虻淖兞空紟讉€字節(jié)、應(yīng)放在什么存儲區(qū)。例如: ? char xdata *px。 /* 指針px指向 char型 xdata區(qū),指針 px自身在默認(rèn) ? 存儲區(qū),指針長度為 2字節(jié) */ 上一頁 下一頁 返回 C51的數(shù)據(jù)結(jié)構(gòu) ? char pdata * data py。 /* 指針py指向 char型 pdata區(qū),指針 px自身在 data ? 區(qū),指針長度為 1字節(jié) */ ? 由此可知,指針?biāo)赶虻淖兞看鎯ζ黝愋投x為data/idata/pdata時,指針本身長度為 1個字節(jié);指針?biāo)赶虻淖兞看鎯ζ黝愋投x為 code/xdata時,指針本身長度為 2個字節(jié)。 ? 若想使指針能適用于指向任何存儲空間,則可以定義指針為通用型,此時指針本身的長度為 3個字節(jié),第一個字節(jié)表示存儲器類型編碼,第二、三字節(jié)表示所指地址的高位和低位。通用型指針的存儲器類型編碼見 表 96。 上一頁 返回 C51的運算符 ? C語言對數(shù)據(jù)有很強(qiáng)的表達(dá)能力,具有十分豐富的運算符。以下為 C51中常用的運算符。 ? 1. 賦值運算符 ? C51的賦值運算符為 = ,它的作用是將運算符右邊的數(shù)據(jù)或表達(dá)式的值賦給運算符左邊一個變量。賦值表達(dá)式的格式為: ? 變量 = 表達(dá)式 ? 例如: ? a=b=0x1000。 /* 將常數(shù) 0x1000同時賦值給變量 a,b */ ? 2. 算術(shù)運算符 下一頁 返回 C51的運算符 ? C51的算術(shù)運算符有以下 5種: ? + 加或取正運算符 ? ? 減或取負(fù)運算符 ? * 乘運算符 ? / 除運算符 ? % 取余運算符 ? 算術(shù)表達(dá)式的格式為: ? 表達(dá)式 1 算術(shù)運算符 表達(dá)式 2 ? 例如: ? a+b/ x*5+y 上一頁 下一頁 返回 C51的運算符 ? 算術(shù)運算符的優(yōu)先級由高到低依次為:取負(fù) ? → 乘 *、除 /、取余 % → 加 +、減 ? 。 ? 若要改變運算符的優(yōu)先級,可采用圓括號實現(xiàn)。例如: ? ( a+b) /10 ? 3. 增量和減量運算符 ? C51的增量和減量運算符如下: ? ++ 增量運算符 ? ?? 減量運算符 ? 例如: ? ++i。 /* 先將 i值加 1,再使用 i */ ? j??。 /* 在使用 j之后,再使 j值減 1 */ 上一頁 下一頁 返回 C51的運算符 ? 4. 關(guān)系運算符 ? C51的有以下 6種: ? 大于運算符 ? 小于運算符 ? = 大于等于運算符 ? = 小于等于運算符 ? = = 等于運算符 ? != 不等于運算符 ? 前四種關(guān)系運算符的優(yōu)先級相同,后兩種關(guān)系運算符的優(yōu)先級也相同但比前四種低。 ? 關(guān)系表達(dá)式的格式為: 上一頁 下一頁 返回 C51的運算符 ? 表達(dá)式 1 關(guān)系運算符 表達(dá)式 2 ? 例如: ? x+y= (a+1)!=c ? 5. 邏輯運算符 ? C51的有以下 3種: ? amp。amp。 邏輯與 ? || 邏輯或 ? ! 邏輯非 ? 邏輯表達(dá)式的格式為: ? 邏輯與、邏輯或的表達(dá)式為: 條件式 1 邏輯運算符 條件式 2 上一頁 下一頁 返回 C51的運算符 ? 邏輯非的表達(dá)式為: !條件式 ? 邏輯運算符的優(yōu)先級由高到低依次為:邏輯非 ! → 邏輯與amp。amp。 → 邏輯或 || 。 ? 例如: ? x amp。amp。 y、 ! c ? 6. 位運算符 ? C51的位運算符有以下 6種: ? ~ 按位取反 ? 左移 ? 右移 ? amp。 按位與 上一頁 下一頁 返回 C51的運算符 ? ^ 按位異或 ? | 按位或 ? 位運算符的優(yōu)先級由高到低依次為:按位取反 ~ → 左移 、右移 → 按位與 amp。 → 按位異或 ^ → 按位或 | 。 ? 位運算符中的左移和右移操作與匯編語言中的移位操作不同。匯編語言中的移位是循環(huán)移位,而 C51中的移位會將移出的位值丟棄,補(bǔ)位時補(bǔ)入 0(若是有符號數(shù)的負(fù)數(shù)右移,則補(bǔ)入符號位 1)。例如: a=0x8f,進(jìn)行左移運算 a2時,全部的二進(jìn)制位值一起向左移動了 2位,最左端的 2位被丟棄,并在最右端 2位補(bǔ)入 0。因此,移位后的 a=0x3C。 上一頁 下一頁 返回 C51的運算符 ? 7. 復(fù)合賦值
點擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1