国产一级无码毛片视频果冻视频_国产熟女高潮一区二区三区_亚洲成人视屏在线观看_电车魔女在线亚洲91_精品亚洲AⅤ无码午夜在线

招賢納士網(wǎng)

單片機的高級語言編程FranklinC51簡介

發(fā)布于:02-11

一、變量的定義和變量的空間?對8位單片機,直接支持的變量的類型只有無符號字符和位。注意兩個原則:?其一、總是使用盡可能最小的數(shù)據(jù)類型;?對8位機,顯然對char類型的對象的操作比對int或long類型的對象方便得多。C51編譯器直接支持所有字符操作。例如:兩



一、變量的定義和變量的空間?

對8位單片機,直接支持的變量的類型只有無符號字符和位。注意兩個原則:?



其一、總是使用盡可能最小的數(shù)據(jù)類型;?



對8位機,顯然對“char”類型的對象的操作比對“int”或“l(fā)ong”類型的對象方便得多。C51編譯器直接支持所有字符操作。例如:兩個“char”類型對象相乘與“MUL?AB”8051指令相符合。如果用“int”型完成同樣運算,則需要調(diào)用庫函數(shù)。?



其二、只要有可能,使用“unsigned”數(shù)據(jù)類型。?



8051系列單片機不直接支持有符號數(shù)的運算,為此,編譯器必須產(chǎn)生與之相關(guān)的更多的代碼以解決問題。若使用無符號數(shù)據(jù)類型,產(chǎn)生的代碼要少得多。?



在頭文件reg51.h中有8051所有SFR及可位尋址位的定義,如:?



#include??//源文件開始寫?



//………….?



P1=0x10;?//在編程
中可使用?



TMOD=0x1;?



TR0=1;?



EA=1;?



減少變量占有的空間的方式:??

內(nèi)容來自單片機之家www.dpj100.com




#?利用#define?定義只讀的常量?



#?使用位域?



#?使用聯(lián)合?



1、存儲空間中的對象定位?



8051單片機的存儲器是哈佛結(jié)構(gòu),即程序存儲器和數(shù)據(jù)存儲器分開,并有各自的尋址機構(gòu)和方式。因為Franklin?C51是面向8051系列單片機及硬件控制系統(tǒng)的開發(fā)工具。它定義的任何數(shù)據(jù)類型必須以一定的數(shù)據(jù)方式定位在8051?的某一存儲區(qū)中。該編譯器將變量、常量定義成不同的存儲類型,把它們定位在不同的存儲區(qū)中。類型和區(qū)域的對照如下:?



code?:程序存儲區(qū)(64KB),由MOVC?A,?@A+DPTR訪問?



xdata:?外部數(shù)據(jù)存儲區(qū)?(64KB),?由MOVX?A,?@DPTR訪問?



pdata:?分頁(256B)外部數(shù)據(jù)存儲區(qū),?由MOVX?A,@Ri訪問?



data:?直接尋址內(nèi)部數(shù)據(jù)存儲區(qū)(128B),?訪問變量速度快?



bdata:?可位尋址的內(nèi)部數(shù)據(jù)存儲區(qū),?允許位與字節(jié)混合訪問(16B).?



idata:?間接尋址內(nèi)部數(shù)據(jù)存儲區(qū)(128B)?



例:?



#include??



#define?uchar?unsigned?char?



#define?uint?unsigned?int?



bit?flag;布爾值?



code?uchar?table[]={1,2,3,"help",oxff};??



內(nèi)容來自單片機之家www.dpj100.com



idata?uint?temp;?



data?char?vra;?/char?data?var?;?等價,盡量用后一種?



static?unsigned?long?xdata?array[100];?靜態(tài)變量?



extern?float?idata?x,y,z;?外部變量?



uint?pdata?dimension;?



uchar?xdata?vector[10][4];?



char?bdata?flags;?



sbit?flag_0=flags^0;?



sbit?p_1=p1^1;?



定義時如果省略存儲類型,存儲模式將自動決定變量的默認類型如下:?



一般指針”SMALL:參數(shù)和局部變量放入可直接尋址的內(nèi)部數(shù)據(jù)存儲區(qū)(默認data)?



COMPACT:參數(shù)和局部變量放入分頁外部數(shù)據(jù)存儲區(qū)(默認pdata)?



LARGE:參數(shù)和局部變量放入外部數(shù)據(jù)存儲區(qū)(默認xdata)?



在C語言中變量和函數(shù)的存儲屬性關(guān)系到它們的可見性和生存期(即作用域和時限)。存儲屬性分三類:auto自動?extern外部?static靜態(tài)。?



Franklin?C51支持“基于存儲器的指針”和“一般指針”。?



基于存儲器的指針:由C源程序中的存儲類型決定它的存儲單元數(shù)。用這種指針可高效訪問對象,且只要1~2個字節(jié)。??






一般指針:需要3個字節(jié)(2個字節(jié)偏移,1個字節(jié)存儲類型)。?



各類指針變量:?



float?*p?3字節(jié)長?指向8051存儲區(qū)中的“float”?



char?data?*dp?1字節(jié)?------?“data”存儲區(qū)中的“char”?



int?idata?*ip?1字節(jié)?------?“idata”?存儲區(qū)中的“int”?



long?pdata?*pp?1字節(jié)?------?



char?xdata?*xp?2字節(jié)?------?



int?code?*cp?2字節(jié)?-------?



2、?動態(tài)和靜態(tài)變量?



動態(tài)變量:自動變量?



靜態(tài)變量:外部變量(extern),靜態(tài)變量(static)?



3、全局和局部變量?



靜態(tài)局部變量?



自動變量(說明符auto可缺?。?



靜態(tài)全局變量?



外部變量?



例:?



char?xdata?*px;指針自身在默認區(qū)(取決于存儲模式)?



char?xdata?*data?pdx?;指針明確位于內(nèi)部數(shù)據(jù)存儲區(qū)(data)?



data?char?xdata?*pdx?;同上?



聲明:本站部分內(nèi)容來源于網(wǎng)絡(luò),本站僅提供信息存儲,版權(quán)歸原作者所有,不承擔相關(guān)法律責任,不代表本站的觀點和立場,如有侵權(quán)請聯(lián)系刪除。
閱讀 3