版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、上課所提到變量就是一種在程序執(zhí)行過程中其值能不斷變化的量。要在程序中使用變量必須先用標識符作為變量名,并所用的數(shù)據(jù)類型和模式,這樣編譯系統(tǒng)才能為變量分配相應的空間。定義一個變量的格式如下:種類數(shù)據(jù)類型 器類型變量名表在定義格式中除了數(shù)據(jù)類型和變量名表是必要的,其它都是可選項。種類有四種:自動(auto),外部(extern),靜態(tài)(sic)和寄存器(register),缺省類型為自動(auto)。這些種類的具體含義和使用方法,將在第七課變量的中進一步進行學習。而這里的數(shù)據(jù)類型則是和在第四課中學習到的名種數(shù)據(jù)類型的定義是一樣的。說明了一個變量的數(shù)據(jù)類型后,還可選擇說明該變量的器類型。器類型的說明
2、就是指定該變量在單片機 c 語言硬件系統(tǒng)中所使用的區(qū)域,并在編譯時準確的定位。表 61 中是 KEIL uVi2 所能認別的器類型。注意的是在 AT89c51中 RAM 只有低 128位,位于 80H 到 FFH 的高 128 位則在 52中才有用,并和特殊寄存器地址。特殊寄存器(SFR)的地址表請看附錄二AT89c51 特殊功能寄存器列表如果省略器類型,系統(tǒng)則會按編譯模式PACT 或 LARGE 所規(guī)定的默模式都能變量在任何的 8051認器類型去指定變量的區(qū)域。無論什么區(qū)范圍,然而把最常用令如循環(huán)計數(shù)器和隊列索引放在內(nèi)部數(shù)據(jù)區(qū)能顯著的提高系統(tǒng)性能。還有要的就是變量的種類與器類型是完全無關(guān)的。
3、表 61器類型器類型說明data直接內(nèi)部數(shù)據(jù)器(128 字節(jié)),速度最快bdata可位尋址內(nèi)部數(shù)據(jù)器(16 字節(jié)),允許位與字節(jié)混合idata間接內(nèi)部數(shù)據(jù)器(256 字節(jié)),允許全部內(nèi)部地址pdata分頁外部數(shù)據(jù)器(256 字節(jié)),用 MOVX Ri 指令xdata外部數(shù)據(jù)器(64KB),用 MOVX DPTR 指令code程序器(64KB),用 MOVC TR 指令. 數(shù)據(jù)模式模式?jīng)Q定了沒有明確指定類型的變量,函數(shù)參數(shù)等的缺省區(qū)域,共三種:1. 1. Small 模式所有缺省變量參數(shù)均裝入內(nèi)部 RAM,優(yōu)點是速度快,缺點是空間有限,只適用序。2. 2. Compact 模式所有缺省變量均位于
4、外部 RAM 區(qū)的一頁(256Bytes),具體哪一頁可由 P2 口指定,在 STARTUP.A51 文件中說明,也可用 pdata 指定,優(yōu)點是空間較 Small 為寬裕速度較 Small 慢,較large 要快,是一種中間狀態(tài)。3. 3. large 模式所有缺省變量可放在多達 64KB 的外部 RAM 區(qū),優(yōu)點是空間大,可存變量多,缺點是速度較慢。提示:模式在單片機 c 語言編譯器選項中選擇。之前提到簡單提到 sfr,sfr16,sbit 定義變量的方法,下面再來仔細看看。sfr 和 sfr16 能直接對 51 單片機的特殊寄存器進行定義,定義方法如下:sfr 特殊功能寄存器名= 特殊功
5、能寄存器地址常數(shù);sfr16 特殊功能寄存器名= 特殊功能寄存器地址常數(shù);能這樣定義 AT89c51 的 P1 口sfr P1 = 0 x90; /定義 P1 I/O 口,其地址 90Hsfr 關(guān)鍵定后面是一個要定義的名字,可任意選取,但要符合標識符名規(guī)則,名字最好有一定的含義如 P1 口能用 P1 為名,這樣程序會變的好讀好多。等號后面必須是常數(shù),不允許有帶運算符的表達式,而且該常數(shù)必須在特殊功能寄存器的地址范圍之內(nèi)(80HFFH),具體可查看附錄中的相關(guān)表。sfr 是定義 8 位的特殊功能寄存器而 sfr16 則是用來定義 16 位特殊功能寄存器,如 8052 的T2 定時器,能定義為:s
6、fr16 T2 = 0 xCC; /這里定義 8052 定時器 2,地址為 T2L=CCH,T2H=CDH用 sfr16 定義 16 位特殊功能寄存器時,等號后面是它的低位地址,地址一定要位于物理低位地址之上。注意的是不能用于定時器 0 和 1 的定義。sbit 可定義可位尋址對象。如特殊功能寄存器中的某位。其實這樣應用是經(jīng)常要用的如要P1 口中的第 2 個引腳 P1.1。能照以下的方法去定義:(1)sbit 位變量名位地址sbit P1_1 = Ox91;這樣是把位的絕對地址賦給位變量。同 sfr 一樣 sbit 的位地址必須位于 80H-FFH 之間。(2)Sbit 位變量名特殊功能寄存器
7、名位位置sft P1 = 0 x90;sbit P1_1 = P1 1; /先定義一個特殊功能寄存器名再指定位變量名所在的位置當可尋址位位于特殊功能寄存器中時可采用這種方法(3)sbit 位變量名字節(jié)地址位位置sbit P1_1 = 0 x90 1;這種方法其實和 2 是一樣的,只是把特殊功能寄存器的位址直接用常數(shù)表示。在單片機 c 語言器類型中供給有一個 bdata 的器類型,這個是指可位尋址的數(shù)據(jù)器,位于單片機的可位尋址區(qū)中,能將要求可位錄址的數(shù)據(jù)定義為 bdata,如:unsigned char bdata ib; /在可位錄址區(qū)定義 ucsigned char 類型的變量 ibbdat
8、a ab2; /在可位尋址區(qū)定義數(shù)組 ab2,這些也稱為可尋址位對象sbit ib7=ib7 /用關(guān)鍵字 sbit 定義位變量來獨立可尋址位對象的其中一位sbit ab12=ab112;操作符后面的位位置的最大值取決于指定的基址類型,char0-7,0-15,long0-31。下面用上一課的電路來實踐一下這一課的知識。同樣是做一下簡單的跑馬燈實驗,項目名為 RunLED2。程序如下:sfr P1 = 0 x90; /這里沒有使用預定義文件,sbitP1_0=P1 0; /而是自己定義特殊寄存器sbitP1_7=0 x90 7; /之前使用的預定義文件其實就是這個作用sbitP1_1=0 x91
9、; /這里分別定義 P1 端口和 P10,P11,P17 引腳void main(void)unsigneda;unsigned char b;dofor (a=0;a50000;a+)P1_0 = 0; /點亮 P1_0for (a=0;a50000;a+)P1_7 = 0; /點亮 P1_7for (b=0;b255;b+)for (a=0;a10000;a+)P1 = b; /用b 的值來做跑馬燈的花樣P1 = 255; /熄滅 P1 上的LEDfor (b=0;b255;b+)for (a=0;a10000;a+)/P1_1 閃爍P1_1 = 0;for (a=0;a10000;a+)
10、P1_1 = 1;while(1);. Keil c51 指針變量單片機 c 語言支持一般指針(GenericPoer)和器指針(Memory_Specific Poer).1. 1. 一般指針一般指針的和使用均與標準 C 相同,不過同時還能說明指針的類型,例如:long * se;為一個指向 long 型整數(shù)的指針,而 se 本身則依模式存放。char * xdata ptr;ptr 為一個指向 char 數(shù)據(jù)的指針,而 ptr 本身放于外部 RAM 區(qū),以上的 long,char 等指針指向的數(shù)據(jù)可存放于任何器中。一般指針本身用 3 個字節(jié)存放,分別為器類型,偏移,低位偏移量。2. 2.器
11、指針基于器的指針說明時即指定了存貯類型,例如:char data * str;str 指向data 區(qū)中 char 型數(shù)據(jù)xdata *;指向外部 RAM 的型整數(shù)。這種指針存放時,只需一個字節(jié)或 2 個字節(jié)就夠了,因為只需存放偏移量。3. 3. 指針轉(zhuǎn)換即指針在上兩種類型之間轉(zhuǎn)化:l 當基于器的指針作為一個實參傳遞給需要一般指針的函數(shù)時,指針自動轉(zhuǎn)化。l 如果不說明外部函數(shù),基于器的指針自動轉(zhuǎn)化為一般指針,導致錯誤,因而請用“include”說明所有函數(shù)。l 能強行改變指針類型。變量的類別一、sic(靜態(tài)局部)變量。1、靜態(tài)局部變量在程序整個運行期間都不會內(nèi)存。2、對于靜態(tài)局部變量,是在編譯
12、的時候賦初值的,即只賦值一次。如果在程序運行時已經(jīng)有初值,則以后每次調(diào)用的時候不再重新賦值。3、如果定義局部變量的時候不賦值,則編譯的時候自動賦值為 0。而對于自動變量而言,定義的時候不賦值,則是一個不確定的值。4、雖然靜態(tài)變量在函數(shù)調(diào)用結(jié)束后仍然存在,但是其他函數(shù)不能。二、用 extern外部變量。用 extern外部變量,是為了擴展外部變量的作用范圍。比如一個程序能由多個源程序文件組成。如果一個程序中需要另外一個文件中已經(jīng)定義的外部變量,就需要使用 extern 來。正確的做法是在一個文件中定義外部變量,而在另外一個文件中使用 extern 對該變量作外部變量。一個文件中:abc;另外一個
13、文件中: extern abc;例子:用 extern 將外部變量的作用域擴展到其他文件:文件 1:/用 extern 將外部變量的作用域擴展到其他文件中#include#include#includeunsignedarray10;void fillarray();void init_ser()SCON=0X50;TMOD|=0X20;TH1=0XF3;TR1=1;TI=1;void main()unsignedi;init_ser();fillarray();for(i=0;i10;i+)prf(array%d=%dn,i,arrayi);for(;);文件 2:externarray10
14、;void fillarray()unsigned char i;for(i=0;i10;i+)arrayi=i;在單片機 c 語言中變量的空間分配幾個方法1、 data 區(qū)空間小,所以只有頻繁用到或?qū)\算速度要求很高的變量才放到 data 區(qū)內(nèi),比如 for 循環(huán)中的計數(shù)值。2、 data 區(qū)內(nèi)最好放局部變量。因為局部變量的空間是能覆蓋的某個函數(shù)的局部變量空間在退出該函數(shù)是就,由別的函數(shù)的局部變量覆蓋),能提高內(nèi)存利用率。當然靜態(tài)局部變量除外,其內(nèi)存使用方式與全局變量相同;3、 確保你的程序中沒有未調(diào)用的函數(shù)。在 Keil C 里遇到未調(diào)用函數(shù),編譯器就將其認為可能是中斷函數(shù)。函數(shù)里用的局部變量的空間是不,也就是同全局變量一樣處理。這一點 Keil C 做得很愚蠢,但也沒辦法。4、 程序中遇到的邏輯標志變量能定義到 bdata 中,能大大降低內(nèi)存占用空間。在 51 系列中有 16 個字節(jié)位尋址區(qū) bdata,其中能定義 8*16=128 個邏輯變量。定義方法是: bdata bit LedSe;但位類型不能用在數(shù)組和結(jié)構(gòu)體中。5、 其他不頻繁用到和對運算速度要求不高的變量都放到 xdata 區(qū)。6、 如果想節(jié)省 data 空間就必須用 large 模式,將未定義內(nèi)存位置的變量全放到 xdata 區(qū)。當然最好
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024銅門制安工程賠償合同
- 2025年度不銹鋼板材行業(yè)綠色制造與可持續(xù)發(fā)展合同范本2篇
- 2024藥品研發(fā)項目合作開發(fā)與成果轉(zhuǎn)讓合同3篇
- 2025年度智能倉儲物流服務(wù)合同范本二零二五年度4篇
- 《銀伯爵珠寶培訓》課件
- 2024版商鋪轉(zhuǎn)讓協(xié)議書范本
- 中國魔芋素食品行業(yè)發(fā)展前景預測及投資方向研究報告
- 2025年水電工程安裝與智能化改造合同范本
- 2025年鞍鋼集團工程技術(shù)有限公司招聘筆試參考題庫含答案解析
- 2025年中咨工程管理咨詢有限公司招聘筆試參考題庫含答案解析
- 導尿及留置導尿技術(shù)
- 情人合同范例
- 建筑公司勞務(wù)合作協(xié)議書范本
- 安徽省合肥市2023-2024學年高一上學期物理期末試卷(含答案)
- 《基于杜邦分析法的公司盈利能力研究的國內(nèi)外文獻綜述》2700字
- 儒家思想講解課程設(shè)計
- 2024年個人汽車抵押借款合同范本(四篇)
- 2024-2025學年九年級化學上冊 第二單元 單元測試卷(人教版)
- 軌道交通設(shè)備更新項目可行性研究報告-超長期國債
- 2024-2030年中國一氧化二氮氣體行業(yè)市場發(fā)展趨勢與前景展望戰(zhàn)略分析報告
- NB/T 11446-2023煤礦連采連充技術(shù)要求
評論
0/150
提交評論