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

正文內(nèi)容

[工學(xué)]單片機c語言(已修改)

2025-01-31 11:14 本頁面
 

【正文】 單片機 C語言及程序設(shè)計 C51概述 C51數(shù)據(jù)類型及存儲 C51變量的定義及數(shù)據(jù)存儲區(qū)域 C51位變量的定義 C51特殊功能寄存器的定義 C51指令的定義 C51的輸入 /輸出 C51函數(shù)的定義 C51與匯編語言混合編程 C51集成開發(fā)軟件 Keil C 目 錄 本章主要討論 C51變量的定義和函數(shù)的定義,以及 Keil C軟件的使用等。 本章內(nèi)容的安排,認(rèn)為讀者已經(jīng)學(xué)習(xí)過 C語言,具有 C語言的基本知識,因此,本章內(nèi)容完全是結(jié)合單片機來講解,也就是補充C語言在單片機方面的概念、數(shù)據(jù)定義和函數(shù)定義等。 通過本章學(xué)習(xí),使讀者能夠比較順利地編寫 C51程序。 C51概述 主要內(nèi)容 C語言編程的優(yōu)勢 C51與 ANSI C的區(qū)別 C51擴展的關(guān)鍵字 C51概述 學(xué)習(xí)單片機 C語言的必要性 隨著單片機性能的不斷提高, C語言編譯調(diào)試工具的不斷完善,以及現(xiàn)在對單片機產(chǎn)品輔助功能的要求、對開發(fā)周期不斷縮短的要求,使得 越來越多的單片機編程人員轉(zhuǎn)向使用 C語言 ,因此有必要在單片機課程中講授“單片機 C語言”。 “ C51”概念: 為了與 ANSI C區(qū)別, 把“單片機 C語言”稱為“ C51”,也稱為“ Keil C”。 C語言編程的優(yōu)勢 在編程方面,使用 C51較匯編語言有諸多優(yōu)勢: 1)編程容易 2)容易實現(xiàn)復(fù)雜的數(shù)值計算 3)容易閱讀與交流 4)容易調(diào)試與維護程序 5)容易實現(xiàn)模塊化開發(fā) 6)程序可移植性好 C語言與 ANSI 的區(qū)別 用匯編語言編寫單片機程序時,必須要考慮其存儲器的結(jié)構(gòu) ,尤其要考慮其片內(nèi)數(shù)據(jù)存儲器、特殊功能寄存器是否正確合理的使用,以及按照實際地址端口數(shù)據(jù)的處理。 用 C51編寫程序,雖然不像匯編語言那樣需要具體地組織、分配存儲器資源,但是C51對數(shù)據(jù)類型和變量的定義,必須要與單片機的存儲結(jié)構(gòu)相關(guān)聯(lián) ,否則編譯器不能正確地映射定位。 用 C51編寫單片機程序,與用 ANSI C編寫程序的 不同之處是 , 需要根據(jù)單片機存儲器結(jié)構(gòu)及內(nèi)部資源,定義相應(yīng)的數(shù)據(jù)類型和變量 。 其它的語法規(guī)定、程序結(jié)構(gòu)及程序設(shè)計方法,都與 ANSI C相同。所以 本章主要介紹 C51各種變量的定義、指針定義、函數(shù)定義和混合編程 。 C51擴展的關(guān)鍵字 由于單片機在結(jié)構(gòu)及編程上的特殊要求, C51有自己的特殊關(guān)鍵字,稱之為 C51擴展的關(guān)鍵字 ,下面給出常用的 C51擴展的關(guān)鍵字。 _at_ bdata data idata pdata xdata bit sbit sfr sfr16 code interrupt reentrant using volatile 這些關(guān)鍵字在后面會陸續(xù)接觸到,此處先不給出它們的含義。 C51數(shù)據(jù)類型及存儲 主要內(nèi)容 C51的數(shù)據(jù)類型 C51數(shù)據(jù)的存儲 表 41 C51數(shù)據(jù)類型、長度和數(shù)值范圍 數(shù)據(jù)類型 表示方法 長 度 數(shù) 值 范 圍 無符號 字符 型 unsigned char 1字節(jié) 0~ 255 有符號字符型 signed char 1字節(jié) 128~ 127 無符號 整型 unsigned int 2字節(jié) 0~ 65535 有符號整型 signed int 2字節(jié) 32768~ 32767 無符號 長整型 unsigned long 4字節(jié) 0~ 4294967295 有符號長整型 signed long 4字節(jié) 2147483648~ 2147483647 浮點型 float 4字節(jié) 177。 ~ 177。 +38 特殊功能寄存器型 sfr sfr16 1字節(jié) 2字節(jié) 0~ 255 0~ 65535 位類型 bit、 sbit 1位 0或 1 數(shù)據(jù)類型轉(zhuǎn)換 1)自動轉(zhuǎn)換 轉(zhuǎn)換規(guī)則是 向高精度 數(shù)據(jù)類型轉(zhuǎn)換、向有符號數(shù)據(jù)類型轉(zhuǎn)換 。如字符型變量與整型變量相加時,則位變量先轉(zhuǎn)換字符型或整型數(shù)據(jù),然后相加。 2)強制轉(zhuǎn)換 像 ANSI C一樣, 通過強制類型轉(zhuǎn)換的方式進行轉(zhuǎn)換 。如: unsigned int b。 float c。 b=(int)c。 C51數(shù)據(jù)的存儲 MCS51單片機只有 bit和 unsigned char兩種數(shù)據(jù)類型支持 機器指令 ,而其它類型的數(shù)據(jù)都需要 轉(zhuǎn)換成 bit或 unsigned char型進行 存儲 。 為了 減少 單片機的 存儲空間 和 提高 運行速度 ,要 盡可能地使用 unsigned char型數(shù)據(jù)。 一、位變量的存儲 bit和 sbit型位變量,直接存于 RAM的位尋址空間,包括低 128位和特殊功能寄存器位。 二、字符變量的存儲 字符變量 ( char) : 無論是 unsigned char數(shù)據(jù)還是 signed char數(shù)據(jù),均為 1個字節(jié),能夠被直接存儲在 RAM中,可以存儲在 0~ 0x7f區(qū)域,也可以存儲在 0x80~ 0xff區(qū)域,與變量的定義有關(guān)。 unsigned char數(shù): 可直接被 MSC51接受 signed char數(shù)據(jù): 用補碼表示。 需要額外的操作 來測試、處理符號位,使用的是兩種庫函數(shù), 代碼量大,運算速度降低 。 三、整型變量的存儲 整型變量 ( int) : 不管是unsigned int數(shù)據(jù)還是 signed int數(shù)據(jù),均為 2個字節(jié),其 存儲方法是高位字節(jié)保存在低地址 (在前面), 低位字節(jié)保存在高地址 (在后面) 。 例如, 整型變量的值為 0x1234,在內(nèi)存中的存放如右圖所示。 signed int數(shù)據(jù) 用補碼表示 。 地址 低 高 : : 12 34 : : 四、長 整型變量的存儲 長整型變量( long)為 4個字節(jié),其存儲方法與整型數(shù)據(jù)一樣,是 最高位字節(jié)保存的地址最低 (在最前面), 最低位字節(jié)保存的地址最高 (在最后面)。 如長整型變量的值為 0x12345678,在內(nèi)存中的存放方法如右圖所示。不管是unsigned long數(shù)據(jù)還是 signed long數(shù)據(jù)。 地址 低 高 : : 12 34 56 78 : : 五、浮點 型變量的存儲 浮點型變量 ( fload)占 4個字節(jié), 用指數(shù)方式表示 ,其 具體格式與編譯器有關(guān) 。 對于 Keil C,采用的是 IEEE754標(biāo)準(zhǔn) ,具有 24位精度,尾數(shù)的最高位始終為 1,因而不保存。 具體分布為: 1位符號位, 8位階碼位, 23位尾數(shù),如下圖所示。 字節(jié)地址 0 1 2 3 浮點數(shù) 內(nèi)容 SEEE EEEE EMMM MMMM MMMM MMMM MMMM MMMM 符號和階碼 尾數(shù)高位 尾數(shù)低位 符號位 S: 1表示負(fù)數(shù), 0表示正數(shù)。 階碼: 用 移碼 表示。如,實際階碼 126用 1表示,實際階碼 0用 127表示, 即實際階碼數(shù)加上 127得到階碼的表達(dá)數(shù) 。 階碼的表達(dá)數(shù) =實際階碼數(shù) +127 階碼數(shù)值范圍: 126~ +128。 例如浮點數(shù) 符號位為 1, =+0011, 階碼數(shù)值為3+127=130=10000010B, 尾數(shù)為 1001。 因此,其十六進制數(shù)為0xC1480000,則存儲結(jié)構(gòu)如右圖所示。 地址 低 高 : : C1 48 00 00 : : C51變量的定義及數(shù)據(jù)存儲區(qū)域 主要內(nèi)容 C51變量的定義 C51變量的存儲類型 C51變量的存儲區(qū)域 C51變量定義舉例 C51變量的存儲模式 C51變量的絕對定位 C51變量的定義 C51變量定義的一般格式為: [存儲類型 ] 數(shù)據(jù)類型 [存儲區(qū) ] 變量名 1[=初值 ] [,變量名 2[=初值 ]] [,…] 或 [存儲類型 ] [存儲區(qū) ] 數(shù)據(jù)類型 變量名 1[=初值 ] [,變量名 2[=初值 ]] [,…] 可見變量 (非位變量) 的定義由 4部分 組成 ,即在變量定義時,指定變量 4種屬性。 數(shù)據(jù)類型: 在前面的 ,對于變量名也無須多說, 下面主要解釋“存儲類型”和“存儲區(qū)”等概念 。 C51變量的存儲類型 存儲類型這個屬性我們?nèi)匝赜?ANSI C的說法 ,盡量不改變原來的含義。 按照 ANSI C, C語言的變量有 4種存儲類型 : 動態(tài)存儲( auto) 靜態(tài)存儲( static) 全局存儲( extern) 寄存器存儲( register) 一、動態(tài)存儲 動態(tài)(存儲)變量: 用 auto定義的為動態(tài)變量,也叫自動變量 。 作用范圍: 在定義它的 函數(shù)內(nèi)或復(fù)合語句內(nèi)部 。 當(dāng)定義它的函數(shù)或復(fù)合語句執(zhí)行時, C51才為變量分配存儲空間,結(jié)束時所占用的 存儲空間釋放 。 定義變量時, auto可以省略 ,或者說 如果省略了存儲類型 項,則認(rèn)為是動態(tài)變量。 動態(tài)變量一般分配 使用寄存器或堆棧 。 二、靜態(tài)存儲 靜態(tài)(存儲)變量: 用 static定義的為靜態(tài)變量 。分為 內(nèi)部 靜態(tài)和 外部 靜態(tài)變量。 內(nèi)部靜態(tài)變量: 在函數(shù)體內(nèi)定義的為內(nèi)部靜態(tài)變量 。 在函數(shù)內(nèi)可以任意使用和修改,函數(shù)運行結(jié)束后會 一直存在 ,但在函數(shù)外不可見,即在函數(shù) 體外得到保護 。 外部靜態(tài)變量: 在函數(shù)體外部定義的為外部靜態(tài)變量 。在定義的文件內(nèi)可以任意使用和修改,外部靜態(tài)變量會一直存在,但在文件外不可見,即在文件外得到保護。 三、外部存儲 外部(存儲)變量: 用 extern聲明 的變量為外部變量 ,是在其它文件定義過的全局變量。 用 extern聲明后,便可以在所聲明的文件中使用。 需要注意的是: 在定義變量時,即便是全局變量,也不能使用 extern定義 。 四、寄存器存儲 寄存器(存儲)變量: 用 register定義的變量為寄存器變量 。 寄存器變量存放在 CPU的寄存器中 ,這種變量處理 速度快 ,但 數(shù)目少 。 C51中的寄存器變量: C51的編譯器在編譯時,能夠自動識別程序中使用 頻率高的變量 ,并將其 安排為寄存器變量 , 用戶不用專門聲明。 C51變量的存儲區(qū)域 變量的存儲區(qū)屬性是單片機擴展的概念 ,非常重要, 它涉及到 7個新的關(guān)鍵字 。 MCS51單片機有四個存儲空間 ,分成三類,它們是片內(nèi)數(shù)據(jù)存儲空間、片外數(shù)據(jù)存儲空間和程序存儲空間。 MCS51單片機有更多的存儲區(qū)域: 由于片內(nèi)數(shù)據(jù)存儲器和片外數(shù)據(jù)存儲器又分成不同的區(qū)域,所以 單片機的變量有更多的存儲區(qū)域 。 在定義變量時,必須明確指出是存放在哪個區(qū)域 。 表 12 C51存儲區(qū)與存儲空間的對應(yīng)關(guān)系 關(guān)鍵字 對應(yīng)的存儲空間及范圍 code ROM空間, 64KB全空間 data 片內(nèi) RAM,直接尋址,低 128字節(jié) (00x7F) bdata 片內(nèi) RAM, 位 尋址區(qū) 0x20~ 0x2f,可字節(jié)訪問 idata 片內(nèi) RAM,間接尋址, 256字節(jié),與 @Ri 對應(yīng) pdata 片外 RAM,分頁尋址的 256字節(jié) (P2不變 ), P2 改變可尋址 64KB全空間,與 MOVX @Ri 對應(yīng) xdata 片外 RAM, 64KB全空間 bit 片內(nèi) RAM位尋找區(qū) , 位地址 0x00~ 0x7f, 128位 C51變量定義舉例 1)定義存儲在 data區(qū)域 的 動態(tài) unsigned char變量: unsigned char data sec=0, min=0, hou=0。 2)定義存儲在 data區(qū)域 的 靜態(tài) unsigned char變量: static unsigned char data scan_code=0xfe。 3)定義存儲在 data區(qū)域 的 靜態(tài) unsigned int變量: static unsigned int data dd。 4)定義存儲在 bdata區(qū)域
點擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
公安備案圖鄂ICP備17016276號-1