版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
網(wǎng)絡空間安全學院網(wǎng)絡安全基礎技術(shù)應用第一章單片機里的數(shù)目錄CONTENT1.二進制數(shù)2.進制的轉(zhuǎn)換和有符號數(shù)3.單片機程序中的數(shù)據(jù)類型1.1.1二進制數(shù)的電路實現(xiàn)單片機是一顆集成電路芯片,如圖1.1-1所示。集成電路是采用特定的制造工藝,將晶體管、電容、電阻和電感等元件以及布線互聯(lián),制作在半導體晶片上,進而封裝在一個管殼內(nèi),變成具有某種電路功能的微型電子器件。集成電路的基本元器件是晶體管(包括了三極管、場效應管等),它的開關(guān)特性構(gòu)成了計算機世界0和1的物理基礎,是計算機信息存儲和運算的基石。圖1.1-2是三極管輸出特性。圖1.1-1單片機芯片圖1.1-2三極管的輸出特性曲線1.1.1二進制數(shù)的電路實現(xiàn)1.當三極管處于飽和區(qū),VCE間電壓很小,近似0V,相當于短路。因此三極管飽和時,三極管輸出低電平,用二進制符號“0”表示,如圖1.1-3(a)所示。2.當三極管處于截止狀態(tài),IC=0,相當于斷路。C極電壓等于電源電壓VCC,三極管輸出高電平,用二進制符號“1”表示,如圖1.1-3(b)所示。圖1.1-3是三極管開關(guān)等效電路圖1.1-3中三極管具有二態(tài)性,要么關(guān)閉要么打開,二進制數(shù)也有這樣的特點,要么“1”要“0”,用二進制數(shù)完美表達了三極管的二態(tài)性,因此我們忽略計算機的底層器件,只關(guān)注計算機的數(shù)。圖1.1-3(a)圖1.1-3(b)圖1.1-31.1.2數(shù)的符號和記法古代人們用石頭記數(shù)、結(jié)繩記數(shù)、刻痕記數(shù),后來出現(xiàn)了阿拉伯數(shù)字0~9,這10個數(shù)字和人類10個手指的數(shù)量正好吻合,且符號好寫好記,很快成為國際通用數(shù)字符號。阿拉伯數(shù)字是十進制數(shù),采用位值法,加上小數(shù)點、正負號,可以表示所有的有理數(shù)。所謂進制,就是進位的方法:二進制——逢2進1;八進制——逢8進1;十進制——逢10進1;十六進制——逢16進1。1.1.2數(shù)的符號和記法每種進制使用的符號是不一樣的,“符號”意味著一種表示方法。二進制的符號最少,十六進制的符號最多。如表1.1-1所示。二進制符號0,1。八進制符號:0到7十進制符號:0到9。十六進制符號:0到F。表1.1-1不同進制數(shù)的符號(字母不區(qū)分大小寫)進制符號進位法則二進制0,1逢二進一八進制0,1,2,3,4,5,6,7逢八進一十進制0,1,2,3,4,5,6,7,8,9逢十進一十六進制0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f逢十六進一1.1.2數(shù)的符號和記法所謂位值法,是一種計數(shù)方法。一組有順序的數(shù)字,每個數(shù)字所表示的大小,既和它本身的數(shù)值有關(guān),也和它所在的位置有關(guān)。位值法中,數(shù)字所在的位置也稱權(quán)重。位值法的核心思想是,相同的數(shù)字在不同的位置上具有不同的數(shù)值。表1.1-1中的進制都采用位值法計數(shù),以整數(shù)部分是4位,小數(shù)部分也是4位的任意數(shù)為例,不同進制下的權(quán)重如表1.1-2所示。表1.1-2不同進制的權(quán)重(X代表某進制的任意符號)進制XXXX.XXXX二進制232221202-12-22-32-4八進制838281808-18-28-38-4十進制10310210110010-110-210-310-4十六進制16316216116016-116-216-316-41.1.2數(shù)的符號和記法八、十、十六進制數(shù)的權(quán)重基數(shù)分別是2、8、10、16,權(quán)重的冪和位置有關(guān)。在位值法中,當數(shù)值超過了符號表達的范圍,就從左往右進位。表1.1-3列出了0~20不同進制下的記數(shù),如果要表達相同數(shù)值的數(shù)字,二進制數(shù)最長,十六進制數(shù)最短。表1.1-3數(shù)字0~20在不同進制下的記法十進制二進制16進制0001112102311341004510156110671117810008910019101010A十進制二進制16進制111011B121100C131101D141110E151111F1610000101710001111810010121910011132010100141.1.2數(shù)的符號和記法為了區(qū)分各種進制,采用后綴、前綴、下標等標記方法書寫不同進制的數(shù)。通常匯編程序使用后綴法,C語言程序使用前綴法,不區(qū)分大小寫。(1)后綴法。B:binary,二進制,123BO:octonary,八進制,123OD:decimal,十進制,123DH:hexadecimal,十六進制,123H。(2)下標法:(101001)2(1321)8(100)10,也可以不寫下標,直接寫100,不寫下標默認是十進制。(3AC)161.1.2數(shù)的符號和記法(3)前綴法。0b:表示二進制。舉例:0b101001,0b11000o:表示八進制。舉例:0o1321,0o144沒有前綴:表示十進制。舉例:10,20,25,1000x:表示16進制數(shù)。舉例:0x64,0x3AC表1.1-4展示了數(shù)字100在不同進制下程序里的前后綴表示方法,單片機程序中最常使用的是十六進制和十進制。表1.1-4計算機語言中不同進制的前后綴(以100為例,不區(qū)分大小寫)進制英文符號前綴(C語言)后綴(匯編語言)二進制Binary0,10b0110010001100100B八進制Octal0-70o144144O十進制Decimal0-9100100D十六進制Hexadecimal0-9,A-F0x6464H1.1.3數(shù)的長度1.比特(bit)一位二進制的數(shù)字要么是0,要么是1,我們說二進制的一個數(shù)字位就是1個比特(bit)。比特也是信息量單位。一串二進制符號構(gòu)成了一個信息塊,信息塊有多少個二進制符號,就說有多少個bit的信息量。在計算機物質(zhì)世界里,1個比特是1個半導體晶體管開關(guān)器件,參考圖1.1-3,它有“0”或“1”兩種可能值,1比特是1個二進制數(shù)字位。怎么理解bit的概念呢?將圖1.1-3中的三極管替換成游戲手柄,1號手柄控制前進和后退兩個方向,手柄向前是前進,手柄向后是后退,此時該“手柄”就是1個bit。現(xiàn)在增加2號手柄,控制左右兩個方向:手柄向左是左拐,手柄向右是右拐。它和1號手柄組合在一起,可控制四個方向,用四組編碼表示:左前=00右前=10左后=01右后=111.1.3數(shù)的長度由此可知,兩位二進制數(shù),有四種組合,一個組合稱為一個“碼字”,在這個舉例里有4個碼字,分別是00、01、10、11。比特位數(shù)越多,編出的碼字就越多。碼字數(shù)量用2的冪次方計算,對應關(guān)系如表1.1-5所示。表1.1-5二進制位數(shù)和碼字數(shù)量對應關(guān)系二進制位數(shù)碼字數(shù)量121=2=(10)2222=4=(100)2323=8=(1000)2424=16=(10000)2525=32=(100000)2626=64=(1000000)2727=128=(10000000)2828=256=(100000000)2929=512=(1000000000)210210=1024=(10000000000)211211=2048=(100000000000)212212=4096=(1000000000000)21.1.3數(shù)的長度觀察表1.1-5,有如下2個結(jié)論:二進制位的數(shù)量決定了碼字數(shù)量,碼字數(shù)量隨著二進制位數(shù)的增加呈冪增長。 (公式1)2個比特能編出4個碼字;3個比特能編出8個碼字。第1列“位數(shù)”和第2列中“0”的個數(shù)一致,比如,10位二進制數(shù),碼字數(shù)量是1024個,1024用二進制表示,1的后面有10個“0”,互相呼應。1.1.3數(shù)的長度2.字節(jié)(byte)1個字節(jié)由8位二進制數(shù)構(gòu)成。表1.1-5表明1個字節(jié)的碼字數(shù)量是256,可編碼字從0b00000000到0b11111111,對應數(shù)值范圍0~255。一個字節(jié)足以表達某種生活中很多事務的狀態(tài),比如天氣的變化,各種組合都沒超出256種;通用計算機的鍵盤也沒達到256個按鍵,……。因此,在計算機世界里字節(jié)是基本單位,單片機程序里使用最多的數(shù)據(jù)類型就是1個字節(jié)長度的數(shù)據(jù)。圖1.1-4展示了1個字節(jié)按位展開的格式,位值高(最高有效位,MSB)的在前,位值低(最低有效位,LSB)的在后。圖1.1-4也是單片機的1個存儲單元,1個存儲單元的容量是1個字節(jié)。bit7bit6bit5bit4bit3bit2bit1bit0字節(jié)Byte
圖1.1-4字節(jié)按位展開1.1.4二進制編碼計算機處理的信息除了數(shù)字,還有字母、圖形、漢字、聲音等非數(shù)值數(shù)據(jù),這樣就出現(xiàn)了編碼的需求?!熬幋a”是信息從一種形式轉(zhuǎn)換為另一種形式的過程,具體講就是讓多位二進制數(shù)表達某個特定的信息。因為n位二進制數(shù)可以組合成2的n次方個不同的信息,所以給每個信息規(guī)定一個具體碼字,這個過程就叫編碼。1.BCD碼(Binary-CodedDecimal)BCD碼以4位二進制數(shù)為一個單位表示1位十進制數(shù)。按照表1.1-5,4位二進制數(shù)有16個碼字,但是十進制數(shù)只有0~9十個數(shù)字符號,多出來6個,所以BCD碼只用了前10個0000~1001表示十進制的0~9,剩下的碼字不用。BCD碼也用來表示十六進制數(shù),此時16個碼字全部使用。因為二進制各位的權(quán)值為8、4、2、1,二進制對十進制、十六進制的編碼是加權(quán)求和,因此也稱8421有權(quán)碼。1.1.4二進制編碼表1.1-6列出了BCD編碼。多位的十進制數(shù)要用多組BCD碼表示。十六進制同理。例1:十進制的123用BCD碼表示:0001001000111:1=0×23+0×22+0×21+1×20,1的編碼是0001;2:2=0×23+0×22+1×21+0×20,2的編碼是0010;3:3=0×23+0×22+1×21+1×20,3的編碼是0011;例2:十六進制數(shù)0x6F8用BCD碼表示:0110111110006:1=0×23+1×22+1×21+0×20,6的編碼是0110;F:15=1×23+1×22+1×21+1×20,F(xiàn)的編碼是1111;8:8=1×23+0×22+0×21+0×20,8的編碼是1000;1.1.4二進制編碼十進制數(shù)BCD碼
十六進制數(shù)BCD碼00000000001000110001200102001030011300114010040100501015010160110601107011170111810008100091001910011000010000A10101100010001B10111200010010C11001300010011D11011400010100E11101500010101F111116000101101000010000表1.1-6BCD編碼1.2.1十進制數(shù)轉(zhuǎn)換為R進制計算機里二進制的數(shù)據(jù)有以下幾種長度:位(bit):一個二進制數(shù)就是一個位,稱為比特,數(shù)值范圍0、1。字節(jié)(byte):8位二進制數(shù)構(gòu)成,數(shù)值范圍0~255或0x00~0xFF。字(word):4個字節(jié)構(gòu)成,對應32位二進制數(shù),數(shù)值范圍0~4294967295(0x00000000~0xFFFFFFFF)。半字(halfword):2個字節(jié)構(gòu)成,對應16位二進制數(shù),數(shù)值范圍0~65535(0x0000~0xFFFF)。1.2.1十進制數(shù)轉(zhuǎn)換為R進制計算機里二進制的數(shù)據(jù)有以下幾種長度:位(bit):一個二進制數(shù)就是一個位,稱為比特,數(shù)值范圍0、1。字節(jié)(byte):8位二進制數(shù)構(gòu)成,數(shù)值范圍0~255或0x00~0xFF。字(word):4個字節(jié)構(gòu)成,對應32位二進制數(shù),數(shù)值范圍0~4294967295(0x00000000~0xFFFFFFFF)。半字(halfword):2個字節(jié)構(gòu)成,對應16位二進制數(shù),數(shù)值范圍0~65535(0x0000~0xFFFF)。1.2.1十進制數(shù)轉(zhuǎn)換為R進制采用模運算方法,取余數(shù)的逆序。所謂模運算就是兩個整數(shù)相除,得到的余數(shù)就是模運算結(jié)果。例1和例2用短除法開展除法運算,每個短除號的里面是被除數(shù),左邊是除數(shù),下面是商,右邊是余數(shù),當商為0時運算結(jié)束,轉(zhuǎn)換結(jié)果是余數(shù)的逆序。例1:(1688)10=(011010011000)2開展模2運算例2:(1688)10=(698)16開展模16運算0166161051616888961.2.2R進制數(shù)轉(zhuǎn)換為十進制采用加權(quán)求和運算方法,按照位值展開求和,最左邊的是最低有效位用LSB表示;最右邊的是最高有效位用MSB表示。例1:(011010011000)2=(1688)10首先把二進制按照“位值”展開:MSB
LSB權(quán)重21121029282726252423222120位值0110100110001.2.2R進制數(shù)轉(zhuǎn)換為十進制其次對不為0的位求和:1×23+1×24+1×27+1×29+1×210=1688例2:(698)16=(1688)10首先把二進制按照“位值”展開:MSB
LSB權(quán)重162161160位值698其次對不為0的位求和:8×160+9×161+6×162=16881.2.3有符號數(shù)二進制數(shù)分“無符號數(shù)”和“有符號數(shù)”?!盁o符號數(shù)”都是正數(shù),沒有符號位;“有符號數(shù)”有正數(shù)也有負數(shù),最高位是符號位:0——正數(shù);1——負數(shù)。在編寫程序時,如果數(shù)據(jù)是事務狀態(tài)的抽象,如天氣、鍵盤符號等,就用“無符號數(shù)”;如果數(shù)據(jù)是參與計算的數(shù)值,如溫度,就使用“有符號數(shù)”。表1.2-1是1個字節(jié)的有符號數(shù),數(shù)值范圍從-128~127,而不是0~255。表1.2-1有符號數(shù)(1個字節(jié))二進制16進制十進制000000000x000000000010x011………011111110x7f127100000000x80–128100000010x81–127100000100x82–126…。。。。。。111111110xff-11.2.3有符號數(shù)計算機中有符號數(shù)用補碼表示。1.原碼計算機中數(shù)的原碼由符號位和數(shù)值部分組成。最高位是符號位,0代表正數(shù),1代表負數(shù),其余位是數(shù)值位,數(shù)值部分與數(shù)的二進制表示一致。原碼表示法舉例:(00000000)2=(0)10;(01111111)2=(127)10;(10000001)2=(-1)10;(11111111)2=(-127)101.2.3有符號數(shù)2.反碼反碼是原碼和補碼之間的過渡碼,正數(shù)的反碼和原碼相同;負數(shù)的反碼,其符號位和原碼相同,數(shù)值位按原碼取反。反碼表示法舉例:(00000000)2=(0)10;(01111111)2=(127)10;(11111110)2=(-1)10;(11111111)2=(-0)10;0無所謂正負,綜上,“0”在反碼中有兩個表達方式。1.2.3有符號數(shù)3.補碼為了避免反碼中“0”的不唯一,補碼規(guī)定:正數(shù)的補碼和原碼相同;負數(shù)的補碼,其符號位和原碼相同,數(shù)值位在反碼上加1。補碼表示法舉例:(00000000)2=(0)10;(01111111)2=(127)10;(11111110)2=(-2)10;(11111111)2=(-1)10;1.2.3有符號數(shù)3.補碼為了避免反碼中“0”的不唯一,補碼規(guī)定:正數(shù)的補碼和原碼相同;負數(shù)的補碼,其符號位和原碼相同,數(shù)值位在反碼上加1。補碼表示法舉例:(00000000)2=(0)10;(01111111)2=(127)10;(11111110)2=(-2)10;(11111111)2=(-1)10;1.2.4小知識:電腦計算器使用電腦自帶的“計算器”小程序可以實現(xiàn)進制轉(zhuǎn)換。打開電腦里的計算器,在“查看”下拉菜單里選擇“程序員”模式,選擇進制。圖1.2-1設置電腦“計算器”程序員模式;圖1.2-2輸入二進制數(shù)10100,點擊其他進制,就實現(xiàn)了進制轉(zhuǎn)換。圖1.2-1計算器里的“程序員”模式圖1.2-2在計算器里進行數(shù)制轉(zhuǎn)換1.3單片機程序中的數(shù)據(jù)類型C語言是一門面向過程的、抽象化的通用計算機編程語言,它可讀性好,易于調(diào)試、修改和移植,C語言兼顧了高級語言和匯編語言的優(yōu)點,編譯效率高,各種計算機平臺包括嵌入式處理器、超級計算機等都支持C語言的編譯,是計算機產(chǎn)業(yè)最重要的編程語言,在編程語言中的具有舉足輕重的地位。C語言的特點:1.具有結(jié)構(gòu)化的控制語句C語言是一種結(jié)構(gòu)化的語言,它有專門的流程控制語句。如順序結(jié)構(gòu)語句、if...else和switch等選擇分支語句、for,while等循環(huán)語句,這些可以實現(xiàn)程序流程的邏輯控制。C語言的主體是函數(shù),一個C語言程序就是由若干頭文件和函數(shù)組成,但是主函數(shù)只有一個,其他函數(shù)都可以被主函數(shù)調(diào)用,可以以函數(shù)為單位實現(xiàn)模塊化的程序搭建。1.3單片機程序中的數(shù)據(jù)類型2.豐富的數(shù)據(jù)類型C語言包含的數(shù)據(jù)類型廣泛,除了傳統(tǒng)的字符型、整型、浮點型、數(shù)組等數(shù)據(jù)類型,還有指針類型,可以對硬件內(nèi)存地址直接進行讀寫。3.豐富的運算符C語言包含34個運算符,賦值、括號、分號都是運算符,算術(shù)運算、邏輯運算都有對應的運算符,這些使得C語言的表達式類型和運算符類型非常豐富。面向單片機編程的C語言稱為單片機C語言,簡稱C51,C51符合ANSI-C標準,且有一定的擴充,其擴充部分與單片機硬件特性有關(guān)。1.3.1數(shù)據(jù)類型計算機程序由數(shù)據(jù)和算法構(gòu)成,所謂數(shù)據(jù)是指具有一定格式的數(shù)字或數(shù)值。數(shù)據(jù)是計算機操作的對象,不管使用任何語言、何種算法進行程序設計,最終在計算機中運行的只有數(shù)據(jù)流。數(shù)據(jù)的不同格式叫做數(shù)據(jù)類型。數(shù)據(jù)按一定的數(shù)據(jù)類型進行的排列、組合及架構(gòu)稱為數(shù)據(jù)結(jié)構(gòu)。C語言有三種數(shù)據(jù)類型:基本型,包括整型(char、int)、實型(float)兩種;構(gòu)造型,包括數(shù)組、結(jié)構(gòu)體等用戶自定義結(jié)構(gòu)的數(shù)據(jù)類型;指針型,指向存儲單元地址的數(shù)據(jù)類型。相比普通C語言,C51多出了位、特殊功能寄存器兩種數(shù)據(jù)類型,這兩種數(shù)據(jù)類型都和硬件有關(guān),完整的數(shù)據(jù)類型見表1.3-1,表中深色底的是C51擴充數(shù)據(jù)類型,C51編譯器自動識別這些擴充數(shù)據(jù)類型。1.3.1數(shù)據(jù)類型數(shù)據(jù)類型名稱長度數(shù)值范圍unsignedchar無符號字符型1字節(jié)0~255signedchar有符號字符型1字節(jié)-128~+127unsignedint無符號整型2字節(jié)0~65535signedint有符號整型2字節(jié)-32768~+32767unsignedlong無符號長整型4字節(jié)0~4294967295signedlong有符號長整型4字節(jié)-2147483648~+2147483647float浮點型4字節(jié)±1.175494E-38~±3.402823E+38*指針型1~3字節(jié)對象的地址bit位型1位0或1sfr特殊功能寄存器型1字節(jié)0~255sfr1616位特殊功能寄存器型2字節(jié)0~65535sbit特殊功能寄存器里的位1位0或1表1.3-1C51數(shù)據(jù)類型1.3.1數(shù)據(jù)類型數(shù)據(jù)類型規(guī)定了數(shù)據(jù)的格式和存儲空間大小。1.字符型(char)字符型有signedchar和unsignedchar之分,默認signedchar,char型數(shù)據(jù)占用1個字節(jié)的存儲空間。unsignedchar是無符號的整型數(shù)據(jù),表示的數(shù)值范圍為0~255,用來存放西文字符、或者某種狀態(tài)值,如天氣;signedchar是有符號整型數(shù)據(jù),最高位是符號位,0表示正數(shù),1表示負數(shù),負數(shù)用補碼表示,數(shù)值范圍為-128~127。2.整型(int)整型有signedint和unsignedint之分,默認signedint,Int型數(shù)據(jù)占用2個字節(jié)的存儲空間,用于存放雙字節(jié)數(shù)據(jù)。Unsignedint是兩字節(jié)的無符號數(shù),數(shù)值范圍0~65535,用來存放循環(huán)變量等,當循環(huán)次數(shù)超過256次,那么就要定義它為unsignedint類型;signedint是兩字節(jié)的有符號數(shù),負數(shù)用補碼表示,數(shù)值范圍-32768~32767。1.3.1數(shù)據(jù)類型3.長整型(long)長整型有signedlong和unsignedlong之分,默認signedlong,long型數(shù)據(jù)占用4個字節(jié)的存儲空間,用于存放四字節(jié)數(shù)據(jù)。Unsignedlong是四字節(jié)的無符號數(shù),數(shù)值范圍0~4294967295;signedlong是四字節(jié)的有符號數(shù),負數(shù)用補碼表示,數(shù)值范圍-2147483648~2147483647。4.浮點型(float)浮點型數(shù)據(jù)是帶小數(shù)點的數(shù),占用4個字節(jié)的存儲空間,數(shù)值以科學記數(shù)法標記,浮點數(shù)不能進行位操作或者邏輯運算。1.3.1數(shù)據(jù)類型5.指針型指針型數(shù)據(jù)是整型數(shù)據(jù),保存指向另一個數(shù)據(jù)的存儲單元地址。6.位型位型數(shù)據(jù)是C51擴充數(shù)據(jù)類型,只占用字節(jié)中的1個位,分為bit和sbit兩種類型。bit是RAM中20H~27H中的可尋址位;sbit是特殊功能寄存器中的可尋址位。7.特殊功能寄存器特殊功能寄存器(SpecialFunctionRegister)是C51擴充數(shù)據(jù)類型,分為sfr和sfr16兩種類型。sfr在單片機RAM中占用一個存儲單元,且位置固定。sfr16在單片機RAM中占用兩個存儲單元,且位置固定。1.3.2數(shù)據(jù)的運C語言提供了豐富的運算符,運算功能強大,在單片機C語言中,位運算功能強大,常常與硬件相關(guān),C51中的運算符總結(jié)如下。1.算術(shù)運算符:進行加減乘除運算,運算符號連接兩個操作數(shù),如表1.3-2所示。運算名稱運算符功能加法+求兩個數(shù)的和,1+1=2減法-求兩個數(shù)的差,10-8=2乘法*求兩個數(shù)的積,25*4=200除法/求除法運算的商,25/4=6模運算%求除法運算的余,25%4=1表1.3-2算術(shù)運算符1.3.2數(shù)據(jù)的運2.賦值運算符:賦值運算符“=”的作用是給變量賦值。書寫格式:變量=表達式;//必須以分號結(jié)尾,表示一個賦值語句結(jié)束。舉例:unsignedchara=10,b;//變量a的初值是10unsignedintc;b=a+9; //變量b的值是19c=a+b; //變量c的值是29,運算結(jié)果是無符號int類型。由此可見,賦值語句將右邊的表達式結(jié)果賦值給左邊。如果“=”兩邊的數(shù)據(jù)類型不一致,編譯器自動進行類型轉(zhuǎn)換,轉(zhuǎn)換后保持左邊的數(shù)據(jù)類型。1.3.2數(shù)據(jù)的運3.關(guān)系運算符:表示兩個數(shù)據(jù)對象的大小關(guān)系,運算結(jié)果是邏輯真(1)或邏輯假(0),關(guān)系運算符如表1.3-3所示。運算名稱運算符功能大于>左邊和右邊的關(guān)系是否成立,如果成立,運算結(jié)果是邏輯真(1);如果不成立,運算結(jié)果是邏輯假(0)。大于等于>=小于<小于等于<=等于==不等于!=表1.3-3關(guān)系運算符舉例:unsignedchara=10,b=9;//變量a的初值是10,b的初值是9b+2>a; //成立,表達式的值為1a==b; //不成立,表達式的值為0。1.3.2數(shù)據(jù)的運4.邏輯運算符:是與、或、非運算的統(tǒng)稱,運算結(jié)果是邏輯真或邏輯假,邏輯真通常用“1”表示,邏輯假通常用“0”表示。邏輯運算符如表1.3-4所示。運算名稱運算符運算規(guī)則與&&True&&True=TrueTrue&&False=FalseFalse&&False=False或||True||True=TrueTrue||False=TrueFalse||False=False非!!True=False!False=True表1.3-4邏輯運算符1.3.2數(shù)據(jù)的運(1)邏輯與(and)“&&”,雙目運算符,運算符兩側(cè)數(shù)據(jù)要么真(非0的數(shù)都是真),要么假(等于0的數(shù)都是假),只有兩個都為真的數(shù),運算結(jié)果才為真。舉例:unsignedchara=10,b=9,c=0;//變量a的初值是10,b的初值是9,c的初值是0。a&&b; //運算結(jié)果為真(1),a和b都非0a&&c; //運算結(jié)果為假(0),c的值為0a-b&&c-b; //運算結(jié)果為真(1),符號兩邊都非01.3.2數(shù)據(jù)的運(2)邏輯或(or)“||”,雙目運算符,運算符兩側(cè)數(shù)據(jù)要么真(非0的數(shù)都是真),要么假(等于0的數(shù)都是假),只要有1個為真,運算結(jié)果就為真,只有兩個都為假的數(shù),運算結(jié)果才為假。舉例:unsignedchara=10,b=9,c=0;//變量a的初值是10,b的初值是9,c的初值是0a||b; //運算結(jié)果為真(1),a和b是真a==b||c; //運算結(jié)果為假(0),符號兩邊的值都為假a>b||c>b; //運算結(jié)果為真(1),a>b是真,c>b是假,有一個是真。(3)邏輯非(not)“!”,單目運算符,運算結(jié)果要么真(1)要么假(0)。舉例:unsignedchara=10,b=9,c=0;//變量a的初值是10,b的初值是9,c的初值是0!(a+b); //運算結(jié)果為假(0),a和b相加后非0,取非后是0!(a==b); //運算結(jié)果為真(1),a和b不相等,取非后是真1.3.2數(shù)據(jù)的運5.位運算符:C51位運算和單片機管腳密切相關(guān),運算時,要把十進制、十六進制數(shù)先轉(zhuǎn)換為二進制,然后按位操作,表1.3-5列出了位運算符和運算規(guī)則。運算名稱運算符運算規(guī)則按位與&遇0得0:0&0=00&1=01&0=01&1=1按位或|遇1得1:0|0=00|1=11|0=11|1=1按位異或^相異為1:0^0=00^1=11^0=11^1=0按位取反~~0=1~1=0左移<<二進制數(shù)往左移位,空出的位補0右移>>二進制數(shù)往右移位,空出的位補0表1.3-5位運算符1.3.2數(shù)據(jù)的運舉例:unsignedchara=10,b=9;//求a和b的位運算結(jié)果。首先將a,b轉(zhuǎn)換成二進制,其次按照位運算規(guī)則進行二進制的按位運算。a轉(zhuǎn)換成二進制數(shù)是1010,b轉(zhuǎn)換成二進制數(shù)是1001,每種位運算的結(jié)果見表1.3-6所示。表1.3-6a與b的位運算示意圖運算式a&ba|ba^b~aa<<2b>>3運算結(jié)果10000001表1.3-6a與b的位運算示意圖1.3.2數(shù)據(jù)的運表1.3-7中a<<2的過程演示如下,首先左移1位得到0100;繼續(xù)左移1位得到1000。a左移1位:10100移出
補充
a左移2位:101000移出
補充1.3.2數(shù)據(jù)的運6.運算符優(yōu)先級:一個表達式中有多個運算符時,按照優(yōu)先級的順序依次運算。優(yōu)先級從高到低的排列順序見表1.3-7:
表1.3-7運算符優(yōu)先級優(yōu)先級順序(從高到低)運算符號括號()邏輯非!算術(shù)運算符*+-關(guān)系運算符>邏輯與&&邏輯或||賦值運算符=1.3.2數(shù)據(jù)的運7.復合賦值運算符:凡是二目運算符,都可以與賦值運算符“=”一起組成復合賦值運算符,由于賦值運算符“=”優(yōu)先級最低,所以一個表達式總是最后執(zhí)行賦值運算,由此形成了復合賦值運算符見表1.3-8。格式為:變量 復合賦值運算符 表達式復合賦值運算符簡化了書寫步驟,使代碼更加簡潔,因為變量只出現(xiàn)1次,所以編譯效率更高。表1.3-8復合賦值運算符運算符舉例等價于運算結(jié)果(a初值是10)+=a+=5;a=a+5;15-=a-=5;a=a-5;5*=a*=5;a=a*5;50/=a/=5;a=a/5;2%=a%=5;a=a%5;0<<=a<<=5;a=a<<5;0>>=a>>=5;a=a>>5;0&=a&=5;a=a&5;0^=a^=5;a=a^5;15|=a|=5;a=a|5;15++a++;a=a+1;11--a--;a=a-1;9謝謝&提問網(wǎng)絡空間安全學院網(wǎng)絡安全基礎技術(shù)應用第二章單片機的基本結(jié)構(gòu)目錄CONTENT2.1.單片機發(fā)展簡史和定義2.2.單片機內(nèi)部結(jié)構(gòu)概述2.3.中央處理器CPU2.4.程序存儲器ROM2.5.數(shù)據(jù)存儲器RAM2.6.常量和變量2.7.單片機最小系統(tǒng)2.8.擴展閱讀:C51編譯器2.1單片機發(fā)展簡史和定義20世紀70年代初,英特爾(Intel)公司推出了世界上第一臺微處理器4004,能夠處理4bit的數(shù)據(jù)如圖2-1所示。到了80年代初,Intel推出了8051單片機,能夠處理8bit的數(shù)據(jù),這個單片機不僅僅是微處理器,它還把存儲器、通用輸入輸出接口、串行通信接口、定時器系統(tǒng)、中斷系統(tǒng)等都集成在了單顆芯片,是一款單片微型計算機,這樣的單芯片結(jié)構(gòu)應用極為廣泛,比如控制一個馬達一顆單芯片就可以搞定。單片機結(jié)構(gòu)簡單、價格低廉,廣泛應用于家用電器、汽車、工業(yè)測控、通信等設備中,可以說有“智能”的產(chǎn)品,都有單片機的影子。圖2.1-1
Intel4位處理器2.1單片機發(fā)展簡史和定義Intel在1980年代授權(quán)了8051單片機的設計,世界許多IC制造廠商都能生產(chǎn)基于Intel8051架構(gòu)的單片機,因此,現(xiàn)在市場上有許多不同制造商生產(chǎn)的8051單片機,其架構(gòu)和指令集基本上與Intel的原始8051兼容。如MicrochipTechnology(原Atmel)生產(chǎn)的AT89C51、AT89C52、AT89S52RC等、NXPSemiconductors(原Philips)生產(chǎn)的P89C51、WinbondElectronicsCorporation(華邦)的W77、W78系列、STC公司STC89、STC15、STC8、STC32等系列都是基于8051內(nèi)核的單片機,圖2.1-2是STC公司一款雙列直插單片機外觀。圖2.1-28051單片機
2.1單片機發(fā)展簡史和定義單片機是一顆封裝好的微型計算機芯片,在工業(yè)控制領(lǐng)域應用極為廣泛,也稱微控制器(Micro-ControllerUnit,MCU),單片機把具有數(shù)據(jù)處理能力的中央處理器(CentralProcessingUnit,CPU)、只讀存儲器(ReadOnlyMemory,ROM)、隨機存儲器(RandomAccessMemory,RAM)、定時計數(shù)器(Timer/Counter)、輸入輸出并行接口(Input/Output,I/O)、串行通信接口(SerialCommunication)、中斷系統(tǒng)(InterruptSystem)等功能都集成到一塊硅片上,構(gòu)成了一個小而完善的微型計算機系統(tǒng)。傳統(tǒng)8051單片機(特指早期單片機)內(nèi)部結(jié)構(gòu)如圖2.1-3所示,CPU機器周期是12T,RAM有256字節(jié)、ROM有4K字節(jié),還提供4個8位并口、1個全雙工串行口、2個16位定時/計數(shù)器,5個中斷源的中斷系統(tǒng)。圖2.1-3傳統(tǒng)8051單片機內(nèi)部結(jié)構(gòu)
2.2單片機內(nèi)部結(jié)構(gòu)概述隨著技術(shù)的發(fā)展,現(xiàn)代8051單片機,無論是運行速度還是性能都比傳統(tǒng)8051單片機優(yōu)越,稱為增強型單片機。圖2.2-1展示了STC8x系列單片機內(nèi)部結(jié)構(gòu)圖,CPU、存儲器、數(shù)字外設都比傳統(tǒng)8051單片機性能強。擁有超高速1T8位8051微處理器內(nèi)核,比傳統(tǒng)8051快約12倍。內(nèi)置高精度R/C時鐘,時鐘頻率可任意設置。ROM直接使用Flash閃存,具有斷電數(shù)據(jù)不丟失的特性,讀取速度快,容量可以達到128K字節(jié)。RAM直接使用靜態(tài)RAM(StaticRAM,SRAM),SRAM到目前為止是讀寫速度最快的內(nèi)存工藝之一,傳統(tǒng)8051的RAM容量只有256字節(jié),但是現(xiàn)代單片機的RAM容量可以擴展到12K字節(jié)。內(nèi)置ISP引導代碼。傳統(tǒng)8051單片機需要手動添加ISP引導碼,現(xiàn)代單片機將ISP引導碼內(nèi)置在芯片里,通過上位機軟件直接串口下載程序,無需使用編程器。2.2單片機內(nèi)部結(jié)構(gòu)概述傳統(tǒng)8051單片機只有4組GPIO,且只有P3口提供第二功能,現(xiàn)代單片機的GPIO口可以達到8組或更多,每個GPIO口都有擴展功能,所有GPIO均支持4種工作模式?,F(xiàn)代單片機定時器數(shù)量增多,有3~5個16位定時器;串行接口數(shù)量增多,有2~4個高速串口。數(shù)字外設增多,自帶超高速ADC模數(shù)轉(zhuǎn)換器,支持SPI、I2C總線協(xié)議。內(nèi)置復位電路,支持上電復位、復位腳復位、看門狗溢出復位、低壓檢測復位,還支持軟件復位。有4級嵌套中斷系統(tǒng)。傳統(tǒng)8051只有5個中斷源,現(xiàn)代單片機可提供幾十個中斷源,這些中斷源可根據(jù)情況設置為4級嵌套優(yōu)先。
有DMA(DirectMemoryAccess)直接存儲器存取功能,該功能使得單片機可不通過CPU直接訪問單片機內(nèi)部存儲器。2.2單片機內(nèi)部結(jié)構(gòu)概述有看門狗定時器,防止單片機程序跑飛或陷入死循環(huán)。綜上所述,現(xiàn)代51單片機速度更快,存儲容量更大,外設更加豐富,集成度更高,適用于低、中、高多種應用場景的使用。除了8位的STC8H新型單片機,STC公司還推出32位8051內(nèi)核(1T)單片機,比傳統(tǒng)8051快約70倍,內(nèi)嵌DMA、LCD驅(qū)動8080接口,性能可以與ARMCortex微控制器相比擬。圖2.2-1STC8x系列單片機內(nèi)部結(jié)構(gòu)2.2單片機內(nèi)部結(jié)構(gòu)概述STC單片機命名規(guī)則STC公司成立于1999年,STC系列單片機最大特點是擁有超強抗干擾能力,且所有產(chǎn)品都具備在系統(tǒng)可編程(InSystemProgramming,ISP)下載功能,指令幾乎都可以單時鐘完成。STC系列單片機的發(fā)展歷史如表2.2-1所示。年份事件單片機特點2004年STC公司推出STC89系列8051單片機具有ISP在系統(tǒng)編程功能,與傳統(tǒng)8051內(nèi)部結(jié)構(gòu)一致。2006年STC公司推出STC12系列8051單片機全球首款大批量生產(chǎn)的1T8051單片機,工作速度提升2011年STC公司推出STC15系列8051單片機具有IAP在應用編程功能,采用STC-Y5超高速CPU內(nèi)核2019年STC公司推出STC8H/STC8G/STC8A系列超高速8051單片機STC公司最快的1T8051單片機,采用STC-Y6超高速CPU內(nèi)核2021年STC公司推出首款STC32x系列8051單片機32位8051單片機,工作速度更快。表2.2-1STC8051單片機的發(fā)展歷史2.2單片機內(nèi)部結(jié)構(gòu)概述單片機的RAM和ROM容量是非常重要的兩個性能指標,STC單片機命名規(guī)則里就體現(xiàn)了存儲器容量以及增強性的功能特點。STC單片機命名規(guī)則如圖2.2-2所示,由廠家代碼、系列編號、存儲器容量、增強功能等組成,其符號如表2.2-2所示。圖2.2-2STC命名規(guī)則2.2單片機內(nèi)部結(jié)構(gòu)概述廠家系列工作電壓RAM容量ROM容量增強功能STC
8912158X32XF:3.8-5.5V,F(xiàn)lash工作電壓L:2.4-3.6V低電壓W:2.5-5.5V,寬電壓1K:1024字節(jié)2K:2048字節(jié)8K:8192字節(jié)12K:12K字節(jié)08:8K字節(jié)16:16K字節(jié)28:28K字節(jié)60:60K字節(jié)64:64K字節(jié)128:128K字節(jié)W:有掉電喚醒功能專用定時器。S2:有兩組串口S4:有四組串口U:USB接口表2.2-2STC單片機命名規(guī)則2.2單片機內(nèi)部結(jié)構(gòu)概述舉例:STC15F2K60S2:STC公司15系列單片機,程序存儲區(qū)(ROM)是Flash,工作電壓在3.8~5.5V,2K字節(jié)的RAM,60K字節(jié)ROM,有兩組串口。IAP15F2K61S2:IAP(InApplicationProgramming,在應用編程)開頭,表明Flash程序存儲區(qū)可以作為EEPROM使用,單片機通過應用程序就可以改寫程序?qū)崿F(xiàn)仿真。是STC公司15系列單片機,F(xiàn)lash型的ROM有61K字節(jié),RAM有2K字節(jié),有兩組串口。STC8H8K64U:STC公司8H系列單片機,8K字節(jié)的RAM,64K字節(jié)ROM,提供USB接口。STC32G12K128:STC公司32G系列單片機,12K字節(jié)的RAM,128K字節(jié)ROM。說明:1.從STC8H系列開設命名里沒有“F”字母,但ROM依然是Flash工藝,F(xiàn)lash已經(jīng)是標配,且都具有IAP在應用下載和仿真功能。2.從STC32G系列開設命名里沒有“U”字母,但芯片依然提供USB接口,USB已經(jīng)是標配。2.2單片機內(nèi)部結(jié)構(gòu)概述任務1.認識單片機本節(jié)講述了現(xiàn)代8051單片機特點,請你對照手上的開發(fā)板,找到單片機芯片,仔細看看,這個單片機是什么型號,型號代碼有什么意義?打開單片機供應商的官方網(wǎng)站,看看網(wǎng)站上都提供了哪些和單片機有關(guān)的資料。找到單片機的使用說明書,說說看這份說明書都講述了哪些內(nèi)容?2.3中央處理器CPU中央處理器(CentralProcessingUnit,簡稱CPU)是計算機系統(tǒng)的運算和控制核心,相當于人的大腦,是計算機程序的執(zhí)行者,圖2.3-1表明CPU由運算器和控制器組成,CPU和存儲器、輸入輸出設備都有聯(lián)系。最早的CPU只能并行操作4位二進制數(shù),很快發(fā)展到8位、16位、32位,現(xiàn)在通用計算機都已經(jīng)是64位處理器了,CPU并行操作的位數(shù)越多,處理速度越快,另外CPU的處理速度還受系統(tǒng)時鐘影響,系統(tǒng)時鐘也稱“主頻”,主頻越高,處理速度越快。圖2.3-1計算機體系結(jié)構(gòu)
CPU運算器控制器數(shù)據(jù)流指令流控制流輸入設備存儲器輸出設備2.3.1CPU工作過程CPU是單片機的核心配件,是單片機的運算核心和控制核心。CPU由運算器和控制器兩部分組成。1.運算器:運算器由算術(shù)邏輯單元(ALU)、累加器和寄存器組成,ALU完成兩個功能:執(zhí)行加減乘除等算術(shù)運算;執(zhí)行邏輯與,或,比較等邏輯運算。ALU的輸入源是兩個數(shù)據(jù),分別來自累加器和數(shù)據(jù)寄存器,ALU的運算結(jié)果存回累加器,取代累加器原來的內(nèi)容。運算器執(zhí)行的操作全部由控制器發(fā)出的控制信號指揮,一個算術(shù)操作產(chǎn)生一個運算結(jié)果,一個邏輯操作產(chǎn)生一個真假判決。2.控制器:控制器協(xié)調(diào)和控制整個計算機系統(tǒng)的操作,主要由以下幾個寄存器/控制器組成。(1)程序計數(shù)器PC(ProgramCounter):也稱程序指針,保存下一條指令的地址,CPU在執(zhí)行程序時,自動修改PC的內(nèi)容,使得它始終指向下一條指令的存放地址。(2)指令寄存器IR(InstructionRegister):保存當前正在執(zhí)行的一條指令。當執(zhí)行一條指令時,先把它從程序存儲器中取出,然后再傳送到指令寄存器。2.3.2單片機時鐘樹STC8H系列通用系統(tǒng)時鐘結(jié)構(gòu)如圖2.3-2所示,它也是現(xiàn)代單片機典型時鐘樹。豎梯圖形是多選一復用器。主時鐘MCLK可選內(nèi)部高速IRC、外部高速晶振、外部32K晶振或內(nèi)部32KHz,由于32KHz頻率太低,僅用于RTC時鐘,因此MCLK主要在外部高速晶振和內(nèi)部高速高精度IRC之間選擇。主時鐘MCLK經(jīng)過CLKDIV分頻后,得到系統(tǒng)時鐘SYSCLK。SYSCLK就是單片機CPU的工作時鐘。當CLKDIV=1時,系統(tǒng)時鐘與時鐘源的頻率一致。STC8H系列的IRC有四個中心頻率6MHz、10MHz、27MHz、44MHz,圍繞中心頻率,可變化范圍在±27%,從而產(chǎn)生有小數(shù)點的頻率。圖2.3-2STC8H系列通用系統(tǒng)時鐘結(jié)構(gòu)2.3.3CPU的工作時間單片機內(nèi)部是一個同步數(shù)字系統(tǒng),CPU和存儲器等通過一個統(tǒng)一的節(jié)拍工作,這個統(tǒng)一的節(jié)拍就是單片機系統(tǒng)時鐘,也稱主頻,是圖2.3-2時鐘樹中的SYSCLK。STC主頻在4~48MHz可調(diào)。單片機按照節(jié)拍工作,節(jié)拍的頻率f和節(jié)拍的時間T互為倒數(shù):
——公式2.3-12.3.3CPU的工作時間CPU有以下幾種工作時間:1.時鐘周期:單片機R/C時鐘電路發(fā)生的振蕩周期,也稱主頻周期、振蕩周期、時鐘節(jié)拍,是單片機最小時間單位。2.機器周期:CPU執(zhí)行一個基本操作所需要的時間稱為機器周期,STC單片機有兩種機器周期方式:12T:和傳統(tǒng)8051單片機一致,一個機器周期由12個時鐘周期組成,稱為12T工作時間。1T:一個機器周期由1個時鐘周期組成,稱為1T工作時間。單片機時鐘周期和機器周期的關(guān)系如圖2.3-3所示。圖2.3-3單片機的工作周期2.3.3CPU的工作時間3.指令周期:CPU執(zhí)行一條指令所需要的時間稱為指令周期,它由若干個機器周期組成。如果指令在一個機器周期內(nèi)完成,就稱為單周期指令;如果指令在兩個機器周期內(nèi)完成,就稱為雙周期指令;還有的指令需要三、四個機器周期才能完成。程序中經(jīng)常用到的跳轉(zhuǎn)指令是單周期指令,執(zhí)行時間最短,加法指令是四周期指令,執(zhí)行時間最長。如果單片機的時鐘源是12MHz晶振,根據(jù)公式2.3-1,時鐘周期是1/12us。表2.3-1列出了1T和12T工作方式下CPU工作時間??梢?T單片機的CPU運行速度遠比12T單片機的CPU快得多。表2.3-1單片機工作時間1T工作方式12T工作方式時鐘周期1/12us1/12us機器周期1/12us1us單周期指令時間1/12us1us雙周期指令時間1/6us2us任務2.安裝KeilC51軟件任務2.安裝KeilC51軟件任務要求:在電腦上安裝KeiluVision5forC51軟件。步驟1:下載KeilC51安裝軟件包,教材使用版本KeilC51v960auVision5。步驟2:雙擊安裝包,按照提示要求進行安裝。步驟3:在STC官方網(wǎng)站下載最新的STC-ISP編程燒錄軟件,雙擊進行安裝。步驟4:在Keil安裝目錄下添加STC芯片型號和頭文件庫。以上步驟操作視頻見二維碼2.3-1。二維碼2.3-1
keil軟件的安裝任務3.建立一個hello測試工程任務3.建立一個hello測試工程任務要求:在Keil軟件下建立一個hello測試程序,該程序能夠和上位機實現(xiàn)usb通信。步驟1:建立工程文件夾hellotest。在書寫代碼前,先建立工程文件夾,項目相關(guān)文件都在放此文件夾下,方便工程項目的管理。步驟2:新建工程。打開Keil軟件,點擊Project菜單,選中“NewuVisionProject”,如圖2.3-4所示。給工程命名并保存在步驟1建立的文件夾里如圖2.3-5所示。圖2.3-4新建工程
圖2.3-5工程保存及命名2.3.3CPU的工作時間步驟3:選擇器件庫。本項目使用STC8H8K64U芯片,因此首先在Vendor里選擇STCMCUDatabase,如圖2.3-6所示。步驟4:選擇CPU型號。在STCMCUDatabase中尋找STC8H系列單片機,找到STC8H8K64U,如圖2.3-7所示。圖2.3-6選擇器件庫圖2.3-7選擇CPU型號2.3.3CPU的工作時間首次建立工程會跳出“Copy‘STARTUP.a51’toProjectFolderandAddFiletoProject?”的對話框,選擇“是”,如圖2.3-8所示,進入到工程代碼書寫階段。圖2.3-8在工程里自動添加啟動文件步驟5:書寫程序。第1步點擊“新建”按鈕,打開文本編輯器;第2步點擊“保存”按鈕在工程目錄下保存新文件;第3步輸入文件名稱,因為該文件是主文件(main函數(shù)所在的文件),文件名可以和工程名一致,注意后綴名是.c。如圖2.3-9所示。步驟6:在工程文件里添加庫文件如圖2.3-10所示。圖2.3-9新建C語言文件圖2.3-10添加usb-hid庫文件2.3.3CPU的工作時間步驟7:Keil軟件界面的文本框輸入以下語句。#include"stc.h"#include"usb.h"#include"string.h"voidsys_init();char*USER_DEVICEDESC=NULL;char*USER_PRODUCTDESC=NULL;voidmain(){ sys_init();usb_init();//USB初始化EA=1;2.3.3CPU的工作時間while(1){if(bUsbOutReady){if(UsbOutBuffer[0]=='h'&&UsbOutBuffer[1]=='e'&&UsbOutBuffer[2]=='l'&&UsbOutBuffer[3]=='l'&&UsbOutBuffer[4]=='o') { printf_hid("ok"); }usb_OUT_done();//接收應答(固定格式)}}2.3.3CPU的工作時間voidsys_init(){P_SW2|=0x80;//擴展寄存器(XFR)訪問使能P0M1=0x00;P0M0=0x00;//設置為準雙向口P1M1=0x00;P1M0=0x00;//設置為準雙向口P2M1=0x00;P2M0=0x00;//設置為準雙向口P3M1=0x00;P3M0=0x00;//設置為準雙向口P4M1=0x00;P4M0=0x00;//設置為準雙向口P5M1=0x00;P5M0=0x00;//設置為準雙向口2.3.3CPU的工作時間P6M1=0x00;P6M0=0x00;//設置為準雙向口P7M1=0x00;P7M0=0x00;//設置為準雙向口P3M0&=~0x03;P3M1|=0x03;//設置USB使用的時鐘源IRC48MCR=0x80;//使能內(nèi)部48M高速IRCwhile(!(IRC48MCR&0x01));//等待時鐘穩(wěn)定}2.3.3CPU的工作時間步驟8:準備編譯,在編譯前,點擊“OptionsforTarget”菜單,進行如下幾項設置:(1)Device欄目里選擇Linker,如圖2.3-11所示。圖2.3-11選擇Linker2.3.3CPU的工作時間(2)在LX51Misc里添加宏控制語句,如圖2.3-12所示。圖2.3-12添加宏控制語句2.3.3CPU的工作時間步驟9:編譯。點擊“編譯”按鈕,根據(jù)編譯提示結(jié)果進行修改,編譯后的結(jié)果必須是0errors。如圖2.3-13所示。圖2.3-13編譯按鈕和編譯結(jié)果2.3.3CPU的工作時間以上步驟操作視頻見二維碼2.3-2。二維碼2.3-2
建立hello測試工程。2.4程序存儲器ROMROM是只讀存儲器(ReadOnlyMemory)的縮寫,主要用于存放用戶程序以及一些初始化數(shù)據(jù)等,所以也稱程序存儲器。ROM是非易失性存儲器,即使掉電,數(shù)據(jù)也依然保持,可以理解成計算機的硬盤。ROM從字面上看只能讀、不能寫,實際上內(nèi)容可以修改。早期的單片機使用電可擦寫EEPROM(也稱E2PROM),速度慢且讀寫次數(shù)有限?,F(xiàn)在的單片機大多采用Flash閃存工藝,它最大的特點是讀取數(shù)據(jù)快,不僅有EEPROM電可擦除重寫的功能,還有斷電不丟失數(shù)據(jù)、快速讀取數(shù)據(jù)的特點。2.4.2特殊的ROM存儲單元(1)程序計數(shù)器PC程序計數(shù)器(ProgramCounter,PC)保存當前欲執(zhí)行指令的地址,也稱指令指針或程序指針。CPU從ROM里取指,首先要訪問PC寄存器,從PC寄存器里拿到單元地址后,再到ROM的存儲單元取指令,CPU工作的最后一個過程是結(jié)果寫回,這個過程就包括了寫回PC,如果CPU執(zhí)行的指令是單周期的,那么PC里的內(nèi)容就自動增1,如果指令是雙周期的,那么PC里的內(nèi)容就自動增2,所以PC里的內(nèi)容始終指向下一個要執(zhí)行的ROM單元地址。單片機復位后,PC的內(nèi)容為0000H,從0000H單元開始執(zhí)行程序。(2)中斷向量入口地址中斷服務程序的入口地址、中斷編號合起來稱為中斷向量。當中斷發(fā)生并被CPU響應后,單片機就會自動跳轉(zhuǎn)到相應的中斷入口地址獲取指令。2.4.2特殊的ROM存儲單元傳統(tǒng)8051單片機只有5個中斷源,對應5個中斷向量,如表2.4-1所示。中斷編號中斷源入口地址0外部中斷00003H1定時器0000BH2外部中斷10013H3定時器1001BH4串口0023H表2.4-1傳統(tǒng)8051單片機的中斷向量2.4.2特殊的ROM存儲單元STC8系列單片機支持22個中斷源,STC32系列單片機中斷源可達64個。表2.4-2列出了STC8系列單片機常用中斷向量,相較傳統(tǒng)8051,現(xiàn)代單片機增加了ADC、SPI、I2C等中斷源。中斷編號中斷源入口地址
中斷編號中斷源入口地址0外部中斷0(INT0)0003H
11外部中斷3(INT3)005BH1定時器0(Timer0)000BH
12定時器2(Timer2)0063H2外部中斷1(INT1)0013H
13-15系統(tǒng)保留
3定時器1(Timer1)001BH
16外部中斷4(INT4)0083H4串口1(UART1)0023B
17串口3(UART3)008BH5數(shù)模轉(zhuǎn)換(ADC)002BH
18串口4(UART4)0093H6低壓檢測(LVD)0033H
19定時器(Timer3)009BH7比較捕獲(CCP/PCA/PWM)003BH
20定時器(Timer4)00A3H8串口2(UART2)0043B
21比較器(CMP)
9串行接口外設(SPI)004BH
24I2C總線00C3H10外部中斷2(INT2)0053H
25USB00CBH表2.4-2STC8系列對應的中斷向量2.4.3ROM存儲單元的讀寫程序存儲器用于存放用戶程序、數(shù)據(jù)以及表格等信息。1.用戶程序的讀寫方法:首先在編譯軟件里編寫代碼并編譯成二進制文件,然后使用下載軟件或燒寫器將文件下載到單片機ROM存儲單元,單片機上電后,CPU從ROM首地址讀程序。2.用戶數(shù)據(jù)的讀寫方法:程序中用到的查表信息如數(shù)碼管顯示字型、漢字字庫等,這些數(shù)據(jù)是固定不變的,且占用較多存儲空間,此時數(shù)據(jù)可保存在程序存儲器ROM中,減少對RAM空間的消耗,在編寫程序時,通過聲明存儲器類型規(guī)定存儲位置。以8位共陰數(shù)碼管字型編碼為例,在數(shù)據(jù)類型“unsignedchar”后面增加“code”標識符:unsignedcharcodetab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};“code”是存儲器類型,表明存儲位置在程序存儲器ROM里。上述舉例定義數(shù)組常量tab[],數(shù)組元素分別是字型0~F的數(shù)碼管顯示編碼。任務4.hello測試程序的下載和驗證任務4.hello測試程序的下載和驗證任務要求:將hello程序的hex文件下載到開發(fā)板,連接上位機,上位機發(fā)送“hello”,單片機返回“ok”。步驟1:打開hello工程文件,生成hex文件。(1)在任務1的工程里,打開OptionsforTarget窗;(2)勾選CreatHEXFile;(3)點擊OK;點擊“編譯”快捷鍵。如圖2.4-2所示。圖2.4-2生成hex文件并編譯任務4.hello測試程序的下載和驗證步驟2:開發(fā)板連接電腦,usb線纜兩端分別連接開發(fā)板usb插座和電腦USB口;步驟3:打開STC-ISP軟件,設置下載條件。(1)選擇芯片型號,和開發(fā)板中CPU的型號一致。(2)點擊“打開程序文件”,在任務1工程文件目錄的Objects下找到要下載的hex文件,選中并點擊“打開”按鈕。如圖2.4-3所示。圖2.4-3選擇芯片型號,打開程序文件任務4.hello測試程序的下載和驗證步驟4:下載hex文件到開發(fā)板。先按住實驗箱上的INT0按鍵,然后按住ON/OFF電源按鍵,接著松開ON/OFF電源按鍵,最后松開INT0按鍵,正常情況下就能識別出“STCUSBWriter(HID1)”設備。選擇CPU的內(nèi)部時鐘頻率,然后點擊“下載/編程”,若下載成功,提示欄會顯示“成功”,如圖2.4-4中1-3步所示。圖2.4-4程序下載和USB-HID通信驗證2.4.3ROM存儲單元的讀寫步驟5:通信測試。借助USB-HID助手,實現(xiàn)電腦和開發(fā)板的握手,過程如圖2.4-4中4-7步。(1)在STC-ISP軟件中打開“USB-HID助手”的界面;(2)在設備欄選擇“STC\USB-ISP”,點擊“打開設備”。(3)在發(fā)送緩沖書寫“hello”點擊“發(fā)送”。此時,在接收緩沖區(qū)收到“ok”。(4)每點擊“發(fā)送”一次,就收到一個“ok”。圖2.4-4程序下載和USB-HID通信驗證任務4.hello測試程序的下載和驗證步驟5:通信測試。借助USB-HID助手,實現(xiàn)電腦和開發(fā)板的握手,過程如圖2.4-4中4-7步。(1)在STC-ISP軟件中打開“USB-HID助手”的界面;(2)在設備欄選擇“STC\USB-ISP”,點擊“打開設備”。(3)在發(fā)送緩沖書寫“hello”點擊“發(fā)送”。此時,在接收緩沖區(qū)收到“ok”。(4)每點擊“發(fā)送”一次,就收到一個“ok”。圖2.4-4程序下載和USB-HID通信驗證任務4.hello測試程序的下載和驗證以上步驟操作視頻見二維碼2.4-1。二維碼2.4-1hello程序的下載和驗證。2.5數(shù)據(jù)存儲器RAMRAM是隨機存取存儲器(RandomAccessMemory)的縮寫,斷電之后數(shù)據(jù)丟失,用于存放臨時性數(shù)據(jù),也就是我們俗稱的“內(nèi)存”。STC單片機的RAM采用靜態(tài)RAM(StaticRandom-AccessMemory,SRAM)工藝,在通電情況下,SRAM里存儲數(shù)據(jù)可以恒常保持,但是當斷電后,SRAM儲存的數(shù)據(jù)會消失,它最大的特點是速度快,在普通個人計算機里,SRAM是計算機的一級緩存。單片機型號不同,RAM存儲容量也不同,如:STC15F2K60S2單片機RAM存儲容量2KByte,STC8H8K64U單片機RAM存儲容量8KByte,STC32G12K128單片機的RAM容量是12KByte。RAM內(nèi)部結(jié)構(gòu)和ROM相同,由存儲單元組成,但是RAM和ROM不一樣的地方在于,CPU訪問ROM的時候,ROM地址是固定的,由PC寄存器內(nèi)容指示,而訪問RAM的時候單元地址是隨機的。2.5.1STC單片機RAM結(jié)構(gòu)傳統(tǒng)8051單片機的RAM空間由256個存儲單元構(gòu)成,稱為內(nèi)部RAM?,F(xiàn)代單片機擴展了內(nèi)部RAM空間,分為兩個地址空間——內(nèi)部RAM(256字節(jié))和擴展RAM。圖2.5-1展示了STC不同單片機型號的RAM內(nèi)部空間。傳統(tǒng)8051單片機的內(nèi)存256個存儲單元,地址范圍00H~FFH;STC15F2K60S2系列有2K個RAM存儲單元,地址范圍00H~07FFH;STC8H4K64U的內(nèi)存地址00H~0FFFH,對應4K個存儲單元;STC8H8K64U的內(nèi)存地址00H~1FFFH,對應8K個存儲單元。STC32G12K28的內(nèi)存地址00H~2FFFH,對應12K個存儲單元。2.5.1STC單片機RAM結(jié)構(gòu)傳統(tǒng)8051單片機的RAM空間由256個存儲單元構(gòu)成,稱為內(nèi)部RAM。現(xiàn)代單片機擴展了內(nèi)部RAM空間,分為兩個地址空間——內(nèi)部RAM(256字節(jié))和擴展RAM。圖2.5-1展示了STC不同單片機型號的RAM內(nèi)部空間。傳統(tǒng)8051單片機的內(nèi)存256個存儲單元,地址范圍00H~FFH;STC15F2K60S2系列有2K個RAM存儲單元,地址范圍00H~07FFH;STC8H4K64U的內(nèi)存地址00H~0FFFH,對應4K個存儲單元;STC8H8K64U的內(nèi)存地址00H~1FFFH,對應8K個存儲單元。STC32G12K28的內(nèi)存地址00H~2FFFH,對應12K個存儲單元。2.5.1STC單片機RAM結(jié)構(gòu)圖2.5-1STC系列單片機RAM內(nèi)部結(jié)構(gòu)2.5.1STC單片機RAM結(jié)構(gòu)單片機存儲器類型如表2.5-2所示。當常量或變量的存儲器類型省略時,默認數(shù)據(jù)是idata存儲類型。存儲器類型說明data可直接尋址的片內(nèi)數(shù)據(jù)存儲器(內(nèi)部RAM低128字節(jié)),訪問速度最快idata單片機內(nèi)部自帶RAM空間(256字節(jié))bdata可位尋址的片內(nèi)數(shù)據(jù)存儲器(20H~2FH)xdata單片機擴展RAM空間,當EXTRAM=0,指示單片機內(nèi)部擴展RAM,當EXTRAM=1,指示單片機外部擴展RAMcode程序存儲器ROM表2.5-2STC單片機存儲器類型2.5.2內(nèi)部RAM(256字節(jié))和SFR內(nèi)部RAM共256字節(jié),分為三個部分:低128字節(jié)RAM、高128字節(jié)RAM以及特殊功能寄存器區(qū)。高128字節(jié)RAM和SFR區(qū)共用地址如圖2.5-2(a)所示,都使用80H~FFH,地址空間貌似重疊,但物理上是獨立的,在使用的時候,SFR區(qū)的數(shù)據(jù)類型是sfr,實現(xiàn)了獨立映射。1.低128字節(jié)RAM低128字節(jié)RAM也稱通用RAM區(qū),包含4個工作組、1個位尋址區(qū)、及用戶RAM/堆棧區(qū),內(nèi)部結(jié)構(gòu)如圖2.5-2(b)所示。4個工作組,每組包含8個8位的工作寄存器,編號均為R0-R7,通過使用工作寄存器組,可以提高運算速度。圖2.5-2傳統(tǒng)8051內(nèi)部RAM組成2.5.2內(nèi)部RAM(256字節(jié))和SFR可位尋址區(qū)20H~2FH如表2.5-2所示,位尋址區(qū)的存儲單元既可以按字節(jié)存取,也可以對單元中的任何一位單獨存取。位尋址區(qū)20H~2FH的位數(shù)據(jù)類型是bit。RAM地址位尋址地址B7B6B5B4B3B2B1B02FH7FH7EH7DH7CH7BH7AH79H78H2EH77H76H75H74H73H72H71H70H2DH6FH6EH6DH6CH6BH6AH69H68H2CH67H66H65H64H63H62H61H60H2BH5FH5EH5DH5CH5BH5AH59H58H2AH57H56H55H54H53H52H51H50H29H4FH4EH4DH4CH4BH4AH49H48H28H47H46H45H44H43H42H41H40H27H3FH3EH3DH3CH3BH3AH39H38H26H37H36H35H34H33H32H31H30H25H2FH2EH2DH2CH2BH2AH29H28H24H27H26H25H24H23H22H21H20H23H1FH1EH1DH1CH1BH1AH19H18H22H17H16H15H14H13H12H11H10H21H21H.70FH21H.60EH21H.50DH21H.40CH21H.30BH21H.20AH21H.109H21H.008H20H20H.707H20H.606H20H.505H20H.404H20H.303H20H.202H20H.101H20H.000H表2.5-2位尋址區(qū)域2.5.2內(nèi)部RAM(256字節(jié))和SFR2.堆棧低128字節(jié)RAM中的30H~7FH以及高128字節(jié)80H~FFH是用戶RAM和堆棧區(qū)。在計算機領(lǐng)域中堆棧是一個連續(xù)的存儲空間,用來存儲計算機程序活動中需要暫時保護的數(shù)據(jù),堆棧區(qū)域一端固定稱為棧底,一端向上生長稱為棧頂,為了指示棧頂位置,引入特殊功能寄存器堆棧指針SP,它是一個8位專用寄存器,它指示出堆棧頂部在內(nèi)部RAM塊中的位置,堆棧的規(guī)則是先進后出,如圖2.5-3所示。數(shù)據(jù)入棧(PUSH)的過程:SP先在原值的基礎上自動加1(SP=SP+1),然后將要入棧的數(shù)據(jù)存放在SP指定的存儲單元中;數(shù)據(jù)出棧(POP)的過程:先將SP指向的棧頂單元的內(nèi)容傳送到POP指令給定的寄存器或內(nèi)部RAM單元中,然后SP自動減1(SP=SP-1)。`圖2.5-3堆棧先進后出示意圖2.5.2內(nèi)部RAM(256字節(jié))和SFR3.特殊功能寄存器區(qū)單片機RAM的高
溫馨提示
- 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-2030年中國流延聚丙烯(CPP)薄膜行業(yè)需求狀況及發(fā)展風險研究報告
- 2024-2030年中國潔牙設備行業(yè)發(fā)展現(xiàn)狀及未來投資策略分析報告版
- 2024-2030年中國沙發(fā)布料行業(yè)發(fā)展狀況規(guī)劃分析報告
- 2024-2030年中國汽車標準件行業(yè)競爭趨勢及發(fā)展策略分析報告
- 2024-2030年中國氯蟲苯甲酰胺行業(yè)運行狀況及投資可行性分析報告
- 2022年大學森林資源專業(yè)大學物理二月考試卷B卷-附解析
- 2022年大學儀器儀表專業(yè)大學物理下冊模擬考試試卷A卷-附解析
- 北京版四年級上冊數(shù)學第一單元 大數(shù)的認識 測試卷附參考答案【奪分金卷】
- 2022年高考小題集訓《地理景觀圖》(解析版)
- 第8講+隋唐的文化
- 管網(wǎng)設計分析報告
- 珍愛生命拒絕危險游戲
- 高中數(shù)學教師的專業(yè)發(fā)展路徑
- 《地球是怎樣形成的》課件
- 建筑機電系統(tǒng)全過程調(diào)試技術(shù)及工藝
- 六西格瑪之控制階段詳解
- 《領(lǐng)導梯隊:全面打造領(lǐng)導力驅(qū)動型公司》解讀
- 護理質(zhì)量安全與風險管理的案例分析
- 工程流體力學課后習題答案-(杜廣生)
- AI智能客服應用實踐
評論
0/150
提交評論