




已閱讀5頁,還剩23頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
單片機原理與應用,2019/7/21,第3部分 C語言篇(擴展) 1,學習內(nèi)容和目標 開發(fā)MCU系統(tǒng)的基本平臺 必須注意的事項 軟件操作指導 注意: 思維一定要開闊一些,多問為什么。 允許不用舉手,并隨時打斷,向我提任何和課程相關的問題。,2019/7/21,2,本節(jié)學習目標,1.1 引言 Keil C51 軟件是眾多單片機應用開發(fā)的優(yōu)秀軟件之一 集編輯,編譯,仿真于一體 支持匯編、PLM 語言和C 語言的程序設計 界面友好,易學易用。,2019/7/21,3,1 Keil軟件的基本使用,多看HELP,學習使用菜單下的各個內(nèi)容:,2019/7/21,4,1.2 Keil C51的編輯界面,流程: 建立工程; 選擇單片機型號(考慮非單片機怎么辦) 建立程序文件; 根據(jù)目的編寫程序; 調(diào)試程序; 編譯程序:理解編譯器 燒寫程序到目標機:燒寫方法必須根據(jù)單片機確定; 請到百度或google上搜索keil C的使用方法 自己動手是熟悉編程/編譯平臺的不二法門。,2019/7/21,5,1.3 Keil編程的主要流程,2.1 引言 請帶著以下問題理解將來講述的內(nèi)容() : C語言的程序結(jié)構是怎樣的? C語言的語法是怎樣的,有何特點? C程序中從表達內(nèi)容上可以怎樣分? 程序即邏輯,那么C如何表現(xiàn)邏輯的? 需要注意C程序的編寫方式么? 常說的“模塊”是怎樣的?有什么具體要求么? 對于MCU而言,編程是怎樣的?,2019/7/21,6,2 C語言總略,C語言的發(fā)展過程如下: 1960年:ALGOL 1963年:CPL 1967年:BCPL 1970年:B 1972年:C C語言是目前世界上流行最廣的通用程序設計語言。 介乎于高級語言和匯編語言之間,兼有兩者的優(yōu)點。 引用結(jié)構化程序結(jié)構,便于軟件工程化。 語言簡潔,且表達能力強,使用靈活,易于學習和應用。 可移植性好 。,2019/7/21,7,2.2 C語言的發(fā)展及其特點,考慮: 這種結(jié)構的特點是什么? 各個區(qū)域中如何實現(xiàn)的? 具體用法是怎樣的? 如何更好的實現(xiàn)調(diào)用?,2019/7/21,8,2.3 C程序的結(jié)構,2019/7/21,9,2.4 C語言的幾個知識點(),3.1 標識符 標識符:在高級語言程序中由用戶(即程序員)或編譯程序(有時稱系統(tǒng))定義的常量、變量、自定義的數(shù)據(jù)類型、函數(shù)、過程和程序等的名字。 標識符的組成規(guī)則:由字母(AZ,az)、下劃線_和數(shù)字(09)組成,其第一個字母或下劃線_。字母要區(qū)分大小寫。 標識符的有效長度:能夠被編譯程序識別的標識符的字符的數(shù)目稱為標識符的有效長度。標準C規(guī)定標識符的有效長度為31。,2019/7/21,10,3基本語法單位(復習)(),關鍵字由固定的小寫字母組成,是系統(tǒng)預定的名字,用于表示C語言的語句,數(shù)據(jù)類型、存儲類型或運算符。關鍵字又稱為保留字 。 標準C定義的32個關鍵字如下:,2019/7/21,11,3.2關鍵字,分隔符:包括空格符、制表符、換行符、換頁符及注釋符。程序中兩個相鄰的標識符、關鍵字和常量之間必須用分隔符分開(通常用空格符)。 常量:程序中其數(shù)值不發(fā)生變化的量。C語言中常用的的常量有三類:數(shù),字符和字符串 。此外,C語言中還經(jīng)常使用兩種表現(xiàn)形式不同的常量:換碼序列和符號常量。常量的類型是由常量的文字自身隱含說明的 。 請注意:一個優(yōu)秀的編程人員會靈活和有效的使用常量。,2019/7/21,12,3.3 分隔符與常量,4.1 如何定義(說明)各種類型的變量 在程序執(zhí)行過程中,值可以改變的量稱為變量。變量定義的格式(定義一個變量的語句這樣寫): 存儲類型 數(shù)據(jù)類型 變量名 = 初值; 如上例中的 int i ; 即定義了一個int 型(整型)變量i;也可以一條語句定義多個變量,格式為: 存儲類型 數(shù)據(jù)類型 變量名表; 如: int i, j, k; i,j,k是變量名, int 是數(shù)據(jù)類型。,2019/7/21,13,4 數(shù)據(jù)類型和變量定義(復習)(),請務必掌握各個數(shù)據(jù)類型的定義方法,并明確在何種條件使用。 變量定義與存儲類型相關。,2019/7/21,14,4.2 數(shù)據(jù)類型,原則1:明確公共變量的含義、作用、取值范圍及公共變量間的關系。(說明:在對變量聲明的同時,應對其含義、作用及取值范圍進行注釋說明,同時若有必要還應說明與其它變量的關系。) 原則2:使用嚴格形式定義的、可移植的數(shù)據(jù)類型,盡量不要使用與具體硬件或軟件環(huán)境關系密切的變量。 原則3:在變量中務必說明該變量的數(shù)據(jù)類型:例如一個整型變量,可以在當前添加字母i描述。下表是我常用的前綴。 原則4:望文生義 總之:書寫規(guī)范是為了便于交流。,2019/7/21,15,4.3 定義數(shù)據(jù)類型的規(guī)范,幾個新的定義:bit、sbit、sfr和sfr16是為訪問MCS-51硬件中的內(nèi)部RAM中的位、SRF中的位以及8位SRF和16位SFR(如DPTR)所特有的類型,它們不是ANSI C的一部分,不能用指針對它們進行訪問,也不能定義包含這些類型元素的數(shù)組、結(jié)構體、聯(lián)合體等。 與存儲器結(jié)構相關,可以指定存儲區(qū)域:4個存儲區(qū) 例:char data varl; unsigned long xdata array100; float idata x,y,z;,2019/7/21,16,4.4 MSC-51的變量定義,特殊功能寄存器的聲明: sfr 特殊功能寄存器名稱=地址常數(shù) sfr P0=0x80; sfr P1=0x90; 定義特殊功能寄存器中的地址必須在0x800xff范圍內(nèi)。 定義特殊功能寄存器,必須放在函數(shù)外面作為全局變量。 用sfr或sfr16每次只能定義一個特殊功能寄存器。 像sbit一樣,用sfr或sfr16定義的是絕對定位的變量(因為名字是與確定地址對應的),具有特定的意義,在應用時不能像一般變量那樣隨便使用。 16bit特殊功能寄存器的聲明: sfr16 特殊功能寄存器名稱=地址常數(shù) sfr16 T2=0xcc;,2019/7/21,17,4.5 MSC-51中寄存器及接口定義,特殊功能寄存器中特定位的聲明: sbit 位變量名特殊功能寄存器名位的位置 sbit 位變量名字節(jié)地址位的位置 sbit 位變量名位地址 用sbit定義的位變量,必須能夠按位操作,而不能夠?qū)o位操作功能的位定義位變量。 用sbit定義位變量,必須放在函數(shù)外面作為全局位變量,而不能在函數(shù)內(nèi)部定義。 用sbit每次只能定義一個位變量。 對其它模塊定義的位變量(bit型或 sbit型)的引用聲明,都使用bit。 用sbit定義的是一種絕對定位的位變量(因為名字是與確定位地址對應的),具有特定的意義,在應用時不能像bit型位變量那樣隨便使用。,2019/7/21,18,4.5 MSC-51中寄存器及接口定義(續(xù)1),對存儲器的訪問: CBYTE (訪問code區(qū)字符型) CWORD (訪問code區(qū)int型) DBYTE (訪問data區(qū)字符型) DWORD (訪問data區(qū)int型) PBYTE (訪問pdata或I/O區(qū)字符型) PWORD (訪問pdata區(qū)int型) XBYTE (訪問xdata或I/O區(qū)字符型) XWORD (訪問xdata區(qū)int型) 這些宏定義原型放在absacc.h文件中,使用時需要用預處理命令把該頭文件包含到文件中,形式為:#include 。 #include DBYTE0x30=48; /給片內(nèi)RAM送數(shù)據(jù) XBYTE0x0002=0x36; /給片外RAM送數(shù)據(jù) dis_buf0=CBYTETABLE+5; /從CODE區(qū)讀數(shù)據(jù),2019/7/21,19,4.5 MSC-51中寄存器及接口定義(續(xù)2),對外部I/O接口的訪問: MCS-51單片機I/O接口與外部數(shù)據(jù)存儲區(qū)是統(tǒng)一編址的,因此對I/O接口地址可用XBYTE或PBYTE。 例如:XBYTE0x7fff0x30;將30H輸出到地址為7FFFH的接口。 幾點說明: 使用typedef方便移植:typedef int integer; sbit用于定義位變量的名字和地址,地址是確定的且不用編譯器分配。定義范圍為整個位尋址空間。 bit用于定義位變量的名字,編譯器會對其分配地址。位變量分配在內(nèi)部RAM的位尋址區(qū),位地址范圍為00H7FH。,2019/7/21,20,4.5 MSC-51中寄存器及接口定義(續(xù)3),5.1 C運算符 算術運算符有5個: 算術運算時的自動類型轉(zhuǎn)換可描述為:雙目運算符的兩個運算量中,值域較窄的類型向值域較寬的類型轉(zhuǎn)換?!爸涤颉本褪穷愋退鼙硎镜闹档淖畲蠓秶?。,2019/7/21,21,5 C運算符及其使用,表達式中的有符號和無符號字符以及短整型一律被轉(zhuǎn)換為整型,如果int類型能表示原來類型的值,則轉(zhuǎn)換成int類型,否則轉(zhuǎn)換成unsigned類型。 當一個運算量為long類型,另一個為unsigned類型時,如果long能表示unsigned的全部值,則將unsigned轉(zhuǎn)換成long,否則將兩個運算量都轉(zhuǎn)換為unsigned long。 賦值轉(zhuǎn)換將右值表達式結(jié)果的類型轉(zhuǎn)成左值表達式的數(shù)據(jù)類型。賦值轉(zhuǎn)換具有強制性,它不受算術轉(zhuǎn)換規(guī)則的約束,轉(zhuǎn)換結(jié)果的類型完全由左子表達式的類型決定。 強制類型轉(zhuǎn)換是靠強制類型轉(zhuǎn)換運算符來實現(xiàn)數(shù)據(jù)類型轉(zhuǎn)換的,因此強制類型轉(zhuǎn)換也叫做顯式轉(zhuǎn)換 。它的作用是將表達式轉(zhuǎn)換成“類型名”所指定的類型。表達式形式為: (類型名) 表達式,2019/7/21,22,5.2 C運算符注意事項,C語言中的關系運算符包括: =(大于或等于) (大于) != (不等于) 關系運算符用來比較兩個運算量之間的關系。用關系運算符將前、后兩個運算量連接起來的式子稱為“關系表達式”,這兩個運算量可以是任意表達式。當關系表達式成立時,表達式的結(jié)果為整數(shù)1,否則為整數(shù)0 。 C語言中的邏輯運算符包括: & (邏輯與) | (邏輯或) ! (邏輯非),2019/7/21,23,5.3 關系運算符和邏輯運算符,重要內(nèi)容:,2019/7/21,24,5.4 位運算符,自增自減運算符: 賦值運算符與賦值表達式: 復合賦值運算:(不推薦) 例如: i += j 等價于 i = i + j x *= y - 5 等價于 x = x * (y-5) m = 2 等價于 m = m 2 條件運算符: (不推薦) 它的格式是: 表達式1 ? 表達式2 : 表達式3 它的操作過程是:判斷表達式1的值,如果為非0值,則求解表達式2的值,并將其作為該條件表達式的值;如果表達式1
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2021-2022學年廣東省廣州市南武教育集團七年級(下)期中數(shù)學試卷(含答案)
- 遺產(chǎn)繼承顧問服務合同(2篇)
- 環(huán)保工程承包與實施合同
- 樣機報廢說明
- 電子會議參與情況統(tǒng)計表
- 四川省達州市渠縣中學2025屆高三下學期二模考試地理試題(含答案)
- 汽車維修技術發(fā)動機原理與故障診斷試題
- 在公司年會上的致辭報告
- 《光的三原色原理及其應用:初中物理教學教案》
- 物流行業(yè)貨物運輸延誤免責協(xié)議書
- 統(tǒng)編版五年級語文下冊第二單元快樂讀書吧:讀古典名著品百味人生教案
- 志愿服務證明(多模板)
- 中小企業(yè)園天然氣配管工程停氣碰口方案及預案
- 項目成本管控要素集成庫
- 閭山秘籍(精編版)
- 《地基與復合地基靜荷載試驗》考試參考題庫(含答案)
- 人力資源服務許可證、勞務派遣經(jīng)營許可證年檢報告書
- 患者搬運法評分標準最終
- 《槍炮、病菌與鋼鐵》-基于地理視角的歷史解釋(沐風學堂)
- 水泥粉磨工藝(行業(yè)經(jīng)驗)
- 國家自然科學基金(NSFC)申請書樣本
評論
0/150
提交評論