《8051單片機(jī)原理及應(yīng)用》 課件 郭玲 第1-3章 單片機(jī)里的數(shù)、單片機(jī)的基本結(jié)構(gòu)、輸入輸出GPIO_第1頁(yè)
《8051單片機(jī)原理及應(yīng)用》 課件 郭玲 第1-3章 單片機(jī)里的數(shù)、單片機(jī)的基本結(jié)構(gòu)、輸入輸出GPIO_第2頁(yè)
《8051單片機(jī)原理及應(yīng)用》 課件 郭玲 第1-3章 單片機(jī)里的數(shù)、單片機(jī)的基本結(jié)構(gòu)、輸入輸出GPIO_第3頁(yè)
《8051單片機(jī)原理及應(yīng)用》 課件 郭玲 第1-3章 單片機(jī)里的數(shù)、單片機(jī)的基本結(jié)構(gòu)、輸入輸出GPIO_第4頁(yè)
《8051單片機(jī)原理及應(yīng)用》 課件 郭玲 第1-3章 單片機(jī)里的數(shù)、單片機(jī)的基本結(jié)構(gòu)、輸入輸出GPIO_第5頁(yè)
已閱讀5頁(yè),還剩195頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

網(wǎng)絡(luò)空間安全學(xué)院網(wǎng)絡(luò)安全基礎(chǔ)技術(shù)應(yīng)用第一章單片機(jī)里的數(shù)目錄CONTENT1.二進(jìn)制數(shù)2.進(jìn)制的轉(zhuǎn)換和有符號(hào)數(shù)3.單片機(jī)程序中的數(shù)據(jù)類型1.1.1二進(jìn)制數(shù)的電路實(shí)現(xiàn)單片機(jī)是一顆集成電路芯片,如圖1.1-1所示。集成電路是采用特定的制造工藝,將晶體管、電容、電阻和電感等元件以及布線互聯(lián),制作在半導(dǎo)體晶片上,進(jìn)而封裝在一個(gè)管殼內(nèi),變成具有某種電路功能的微型電子器件。集成電路的基本元器件是晶體管(包括了三極管、場(chǎng)效應(yīng)管等),它的開(kāi)關(guān)特性構(gòu)成了計(jì)算機(jī)世界0和1的物理基礎(chǔ),是計(jì)算機(jī)信息存儲(chǔ)和運(yùn)算的基石。圖1.1-2是三極管輸出特性。圖1.1-1單片機(jī)芯片圖1.1-2三極管的輸出特性曲線1.1.1二進(jìn)制數(shù)的電路實(shí)現(xiàn)1.當(dāng)三極管處于飽和區(qū),VCE間電壓很小,近似0V,相當(dāng)于短路。因此三極管飽和時(shí),三極管輸出低電平,用二進(jìn)制符號(hào)“0”表示,如圖1.1-3(a)所示。2.當(dāng)三極管處于截止?fàn)顟B(tài),IC=0,相當(dāng)于斷路。C極電壓等于電源電壓VCC,三極管輸出高電平,用二進(jìn)制符號(hào)“1”表示,如圖1.1-3(b)所示。圖1.1-3是三極管開(kāi)關(guān)等效電路圖1.1-3中三極管具有二態(tài)性,要么關(guān)閉要么打開(kāi),二進(jìn)制數(shù)也有這樣的特點(diǎn),要么“1”要“0”,用二進(jìn)制數(shù)完美表達(dá)了三極管的二態(tài)性,因此我們忽略計(jì)算機(jī)的底層器件,只關(guān)注計(jì)算機(jī)的數(shù)。圖1.1-3(a)圖1.1-3(b)圖1.1-31.1.2數(shù)的符號(hào)和記法古代人們用石頭記數(shù)、結(jié)繩記數(shù)、刻痕記數(shù),后來(lái)出現(xiàn)了阿拉伯?dāng)?shù)字0~9,這10個(gè)數(shù)字和人類10個(gè)手指的數(shù)量正好吻合,且符號(hào)好寫好記,很快成為國(guó)際通用數(shù)字符號(hào)。阿拉伯?dāng)?shù)字是十進(jìn)制數(shù),采用位值法,加上小數(shù)點(diǎn)、正負(fù)號(hào),可以表示所有的有理數(shù)。所謂進(jìn)制,就是進(jìn)位的方法:二進(jìn)制——逢2進(jìn)1;八進(jìn)制——逢8進(jìn)1;十進(jìn)制——逢10進(jìn)1;十六進(jìn)制——逢16進(jìn)1。1.1.2數(shù)的符號(hào)和記法每種進(jìn)制使用的符號(hào)是不一樣的,“符號(hào)”意味著一種表示方法。二進(jìn)制的符號(hào)最少,十六進(jìn)制的符號(hào)最多。如表1.1-1所示。二進(jìn)制符號(hào)0,1。八進(jìn)制符號(hào):0到7十進(jìn)制符號(hào):0到9。十六進(jìn)制符號(hào):0到F。表1.1-1不同進(jìn)制數(shù)的符號(hào)(字母不區(qū)分大小寫)進(jìn)制符號(hào)進(jìn)位法則二進(jìn)制0,1逢二進(jìn)一八進(jìn)制0,1,2,3,4,5,6,7逢八進(jìn)一十進(jìn)制0,1,2,3,4,5,6,7,8,9逢十進(jìn)一十六進(jìn)制0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f逢十六進(jìn)一1.1.2數(shù)的符號(hào)和記法所謂位值法,是一種計(jì)數(shù)方法。一組有順序的數(shù)字,每個(gè)數(shù)字所表示的大小,既和它本身的數(shù)值有關(guān),也和它所在的位置有關(guān)。位值法中,數(shù)字所在的位置也稱權(quán)重。位值法的核心思想是,相同的數(shù)字在不同的位置上具有不同的數(shù)值。表1.1-1中的進(jìn)制都采用位值法計(jì)數(shù),以整數(shù)部分是4位,小數(shù)部分也是4位的任意數(shù)為例,不同進(jìn)制下的權(quán)重如表1.1-2所示。表1.1-2不同進(jìn)制的權(quán)重(X代表某進(jìn)制的任意符號(hào))進(jìn)制XXXX.XXXX二進(jìn)制232221202-12-22-32-4八進(jìn)制838281808-18-28-38-4十進(jìn)制10310210110010-110-210-310-4十六進(jìn)制16316216116016-116-216-316-41.1.2數(shù)的符號(hào)和記法八、十、十六進(jìn)制數(shù)的權(quán)重基數(shù)分別是2、8、10、16,權(quán)重的冪和位置有關(guān)。在位值法中,當(dāng)數(shù)值超過(guò)了符號(hào)表達(dá)的范圍,就從左往右進(jìn)位。表1.1-3列出了0~20不同進(jìn)制下的記數(shù),如果要表達(dá)相同數(shù)值的數(shù)字,二進(jìn)制數(shù)最長(zhǎng),十六進(jìn)制數(shù)最短。表1.1-3數(shù)字0~20在不同進(jìn)制下的記法十進(jìn)制二進(jìn)制16進(jìn)制0001112102311341004510156110671117810008910019101010A十進(jìn)制二進(jìn)制16進(jìn)制111011B121100C131101D141110E151111F1610000101710001111810010121910011132010100141.1.2數(shù)的符號(hào)和記法為了區(qū)分各種進(jìn)制,采用后綴、前綴、下標(biāo)等標(biāo)記方法書寫不同進(jìn)制的數(shù)。通常匯編程序使用后綴法,C語(yǔ)言程序使用前綴法,不區(qū)分大小寫。(1)后綴法。B:binary,二進(jìn)制,123BO:octonary,八進(jìn)制,123OD:decimal,十進(jìn)制,123DH:hexadecimal,十六進(jìn)制,123H。(2)下標(biāo)法:(101001)2(1321)8(100)10,也可以不寫下標(biāo),直接寫100,不寫下標(biāo)默認(rèn)是十進(jìn)制。(3AC)161.1.2數(shù)的符號(hào)和記法(3)前綴法。0b:表示二進(jìn)制。舉例:0b101001,0b11000o:表示八進(jìn)制。舉例:0o1321,0o144沒(méi)有前綴:表示十進(jìn)制。舉例:10,20,25,1000x:表示16進(jìn)制數(shù)。舉例:0x64,0x3AC表1.1-4展示了數(shù)字100在不同進(jìn)制下程序里的前后綴表示方法,單片機(jī)程序中最常使用的是十六進(jìn)制和十進(jìn)制。表1.1-4計(jì)算機(jī)語(yǔ)言中不同進(jìn)制的前后綴(以100為例,不區(qū)分大小寫)進(jìn)制英文符號(hào)前綴(C語(yǔ)言)后綴(匯編語(yǔ)言)二進(jìn)制Binary0,10b0110010001100100B八進(jìn)制Octal0-70o144144O十進(jìn)制Decimal0-9100100D十六進(jìn)制Hexadecimal0-9,A-F0x6464H1.1.3數(shù)的長(zhǎng)度1.比特(bit)一位二進(jìn)制的數(shù)字要么是0,要么是1,我們說(shuō)二進(jìn)制的一個(gè)數(shù)字位就是1個(gè)比特(bit)。比特也是信息量單位。一串二進(jìn)制符號(hào)構(gòu)成了一個(gè)信息塊,信息塊有多少個(gè)二進(jìn)制符號(hào),就說(shuō)有多少個(gè)bit的信息量。在計(jì)算機(jī)物質(zhì)世界里,1個(gè)比特是1個(gè)半導(dǎo)體晶體管開(kāi)關(guān)器件,參考圖1.1-3,它有“0”或“1”兩種可能值,1比特是1個(gè)二進(jìn)制數(shù)字位。怎么理解bit的概念呢?將圖1.1-3中的三極管替換成游戲手柄,1號(hào)手柄控制前進(jìn)和后退兩個(gè)方向,手柄向前是前進(jìn),手柄向后是后退,此時(shí)該“手柄”就是1個(gè)bit?,F(xiàn)在增加2號(hào)手柄,控制左右兩個(gè)方向:手柄向左是左拐,手柄向右是右拐。它和1號(hào)手柄組合在一起,可控制四個(gè)方向,用四組編碼表示:左前=00右前=10左后=01右后=111.1.3數(shù)的長(zhǎng)度由此可知,兩位二進(jìn)制數(shù),有四種組合,一個(gè)組合稱為一個(gè)“碼字”,在這個(gè)舉例里有4個(gè)碼字,分別是00、01、10、11。比特位數(shù)越多,編出的碼字就越多。碼字?jǐn)?shù)量用2的冪次方計(jì)算,對(duì)應(yīng)關(guān)系如表1.1-5所示。表1.1-5二進(jìn)制位數(shù)和碼字?jǐn)?shù)量對(duì)應(yīng)關(guān)系二進(jìn)制位數(shù)碼字?jǐn)?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ù)的長(zhǎng)度觀察表1.1-5,有如下2個(gè)結(jié)論:二進(jìn)制位的數(shù)量決定了碼字?jǐn)?shù)量,碼字?jǐn)?shù)量隨著二進(jìn)制位數(shù)的增加呈冪增長(zhǎng)。 (公式1)2個(gè)比特能編出4個(gè)碼字;3個(gè)比特能編出8個(gè)碼字。第1列“位數(shù)”和第2列中“0”的個(gè)數(shù)一致,比如,10位二進(jìn)制數(shù),碼字?jǐn)?shù)量是1024個(gè),1024用二進(jìn)制表示,1的后面有10個(gè)“0”,互相呼應(yīng)。1.1.3數(shù)的長(zhǎng)度2.字節(jié)(byte)1個(gè)字節(jié)由8位二進(jìn)制數(shù)構(gòu)成。表1.1-5表明1個(gè)字節(jié)的碼字?jǐn)?shù)量是256,可編碼字從0b00000000到0b11111111,對(duì)應(yīng)數(shù)值范圍0~255。一個(gè)字節(jié)足以表達(dá)某種生活中很多事務(wù)的狀態(tài),比如天氣的變化,各種組合都沒(méi)超出256種;通用計(jì)算機(jī)的鍵盤也沒(méi)達(dá)到256個(gè)按鍵,……。因此,在計(jì)算機(jī)世界里字節(jié)是基本單位,單片機(jī)程序里使用最多的數(shù)據(jù)類型就是1個(gè)字節(jié)長(zhǎng)度的數(shù)據(jù)。圖1.1-4展示了1個(gè)字節(jié)按位展開(kāi)的格式,位值高(最高有效位,MSB)的在前,位值低(最低有效位,LSB)的在后。圖1.1-4也是單片機(jī)的1個(gè)存儲(chǔ)單元,1個(gè)存儲(chǔ)單元的容量是1個(gè)字節(jié)。bit7bit6bit5bit4bit3bit2bit1bit0字節(jié)Byte

圖1.1-4字節(jié)按位展開(kāi)1.1.4二進(jìn)制編碼計(jì)算機(jī)處理的信息除了數(shù)字,還有字母、圖形、漢字、聲音等非數(shù)值數(shù)據(jù),這樣就出現(xiàn)了編碼的需求?!熬幋a”是信息從一種形式轉(zhuǎn)換為另一種形式的過(guò)程,具體講就是讓多位二進(jìn)制數(shù)表達(dá)某個(gè)特定的信息。因?yàn)閚位二進(jìn)制數(shù)可以組合成2的n次方個(gè)不同的信息,所以給每個(gè)信息規(guī)定一個(gè)具體碼字,這個(gè)過(guò)程就叫編碼。1.BCD碼(Binary-CodedDecimal)BCD碼以4位二進(jìn)制數(shù)為一個(gè)單位表示1位十進(jìn)制數(shù)。按照表1.1-5,4位二進(jìn)制數(shù)有16個(gè)碼字,但是十進(jìn)制數(shù)只有0~9十個(gè)數(shù)字符號(hào),多出來(lái)6個(gè),所以BCD碼只用了前10個(gè)0000~1001表示十進(jìn)制的0~9,剩下的碼字不用。BCD碼也用來(lái)表示十六進(jìn)制數(shù),此時(shí)16個(gè)碼字全部使用。因?yàn)槎M(jìn)制各位的權(quán)值為8、4、2、1,二進(jìn)制對(duì)十進(jìn)制、十六進(jìn)制的編碼是加權(quán)求和,因此也稱8421有權(quán)碼。1.1.4二進(jìn)制編碼表1.1-6列出了BCD編碼。多位的十進(jìn)制數(shù)要用多組BCD碼表示。十六進(jìn)制同理。例1:十進(jìn)制的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:十六進(jìn)制數(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二進(jìn)制編碼十進(jìn)制數(shù)BCD碼

十六進(jìn)制數(shù)BCD碼00000000001000110001200102001030011300114010040100501015010160110601107011170111810008100091001910011000010000A10101100010001B10111200010010C11001300010011D11011400010100E11101500010101F111116000101101000010000表1.1-6BCD編碼1.2.1十進(jìn)制數(shù)轉(zhuǎn)換為R進(jìn)制計(jì)算機(jī)里二進(jìn)制的數(shù)據(jù)有以下幾種長(zhǎng)度:位(bit):一個(gè)二進(jìn)制數(shù)就是一個(gè)位,稱為比特,數(shù)值范圍0、1。字節(jié)(byte):8位二進(jìn)制數(shù)構(gòu)成,數(shù)值范圍0~255或0x00~0xFF。字(word):4個(gè)字節(jié)構(gòu)成,對(duì)應(yīng)32位二進(jìn)制數(shù),數(shù)值范圍0~4294967295(0x00000000~0xFFFFFFFF)。半字(halfword):2個(gè)字節(jié)構(gòu)成,對(duì)應(yīng)16位二進(jìn)制數(shù),數(shù)值范圍0~65535(0x0000~0xFFFF)。1.2.1十進(jìn)制數(shù)轉(zhuǎn)換為R進(jìn)制計(jì)算機(jī)里二進(jìn)制的數(shù)據(jù)有以下幾種長(zhǎng)度:位(bit):一個(gè)二進(jìn)制數(shù)就是一個(gè)位,稱為比特,數(shù)值范圍0、1。字節(jié)(byte):8位二進(jìn)制數(shù)構(gòu)成,數(shù)值范圍0~255或0x00~0xFF。字(word):4個(gè)字節(jié)構(gòu)成,對(duì)應(yīng)32位二進(jìn)制數(shù),數(shù)值范圍0~4294967295(0x00000000~0xFFFFFFFF)。半字(halfword):2個(gè)字節(jié)構(gòu)成,對(duì)應(yīng)16位二進(jìn)制數(shù),數(shù)值范圍0~65535(0x0000~0xFFFF)。1.2.1十進(jìn)制數(shù)轉(zhuǎn)換為R進(jìn)制采用模運(yùn)算方法,取余數(shù)的逆序。所謂模運(yùn)算就是兩個(gè)整數(shù)相除,得到的余數(shù)就是模運(yùn)算結(jié)果。例1和例2用短除法開(kāi)展除法運(yùn)算,每個(gè)短除號(hào)的里面是被除數(shù),左邊是除數(shù),下面是商,右邊是余數(shù),當(dāng)商為0時(shí)運(yùn)算結(jié)束,轉(zhuǎn)換結(jié)果是余數(shù)的逆序。例1:(1688)10=(011010011000)2開(kāi)展模2運(yùn)算例2:(1688)10=(698)16開(kāi)展模16運(yùn)算0166161051616888961.2.2R進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制采用加權(quán)求和運(yùn)算方法,按照位值展開(kāi)求和,最左邊的是最低有效位用LSB表示;最右邊的是最高有效位用MSB表示。例1:(011010011000)2=(1688)10首先把二進(jìn)制按照“位值”展開(kāi):MSB

LSB權(quán)重21121029282726252423222120位值0110100110001.2.2R進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制其次對(duì)不為0的位求和:1×23+1×24+1×27+1×29+1×210=1688例2:(698)16=(1688)10首先把二進(jìn)制按照“位值”展開(kāi):MSB

LSB權(quán)重162161160位值698其次對(duì)不為0的位求和:8×160+9×161+6×162=16881.2.3有符號(hào)數(shù)二進(jìn)制數(shù)分“無(wú)符號(hào)數(shù)”和“有符號(hào)數(shù)”。“無(wú)符號(hào)數(shù)”都是正數(shù),沒(méi)有符號(hào)位;“有符號(hào)數(shù)”有正數(shù)也有負(fù)數(shù),最高位是符號(hào)位:0——正數(shù);1——負(fù)數(shù)。在編寫程序時(shí),如果數(shù)據(jù)是事務(wù)狀態(tài)的抽象,如天氣、鍵盤符號(hào)等,就用“無(wú)符號(hào)數(shù)”;如果數(shù)據(jù)是參與計(jì)算的數(shù)值,如溫度,就使用“有符號(hào)數(shù)”。表1.2-1是1個(gè)字節(jié)的有符號(hào)數(shù),數(shù)值范圍從-128~127,而不是0~255。表1.2-1有符號(hào)數(shù)(1個(gè)字節(jié))二進(jìn)制16進(jìn)制十進(jìn)制000000000x000000000010x011………011111110x7f127100000000x80–128100000010x81–127100000100x82–126…。。。。。。111111110xff-11.2.3有符號(hào)數(shù)計(jì)算機(jī)中有符號(hào)數(shù)用補(bǔ)碼表示。1.原碼計(jì)算機(jī)中數(shù)的原碼由符號(hào)位和數(shù)值部分組成。最高位是符號(hào)位,0代表正數(shù),1代表負(fù)數(shù),其余位是數(shù)值位,數(shù)值部分與數(shù)的二進(jìn)制表示一致。原碼表示法舉例:(00000000)2=(0)10;(01111111)2=(127)10;(10000001)2=(-1)10;(11111111)2=(-127)101.2.3有符號(hào)數(shù)2.反碼反碼是原碼和補(bǔ)碼之間的過(guò)渡碼,正數(shù)的反碼和原碼相同;負(fù)數(shù)的反碼,其符號(hào)位和原碼相同,數(shù)值位按原碼取反。反碼表示法舉例:(00000000)2=(0)10;(01111111)2=(127)10;(11111110)2=(-1)10;(11111111)2=(-0)10;0無(wú)所謂正負(fù),綜上,“0”在反碼中有兩個(gè)表達(dá)方式。1.2.3有符號(hào)數(shù)3.補(bǔ)碼為了避免反碼中“0”的不唯一,補(bǔ)碼規(guī)定:正數(shù)的補(bǔ)碼和原碼相同;負(fù)數(shù)的補(bǔ)碼,其符號(hào)位和原碼相同,數(shù)值位在反碼上加1。補(bǔ)碼表示法舉例:(00000000)2=(0)10;(01111111)2=(127)10;(11111110)2=(-2)10;(11111111)2=(-1)10;1.2.3有符號(hào)數(shù)3.補(bǔ)碼為了避免反碼中“0”的不唯一,補(bǔ)碼規(guī)定:正數(shù)的補(bǔ)碼和原碼相同;負(fù)數(shù)的補(bǔ)碼,其符號(hào)位和原碼相同,數(shù)值位在反碼上加1。補(bǔ)碼表示法舉例:(00000000)2=(0)10;(01111111)2=(127)10;(11111110)2=(-2)10;(11111111)2=(-1)10;1.2.4小知識(shí):電腦計(jì)算器使用電腦自帶的“計(jì)算器”小程序可以實(shí)現(xiàn)進(jìn)制轉(zhuǎn)換。打開(kāi)電腦里的計(jì)算器,在“查看”下拉菜單里選擇“程序員”模式,選擇進(jìn)制。圖1.2-1設(shè)置電腦“計(jì)算器”程序員模式;圖1.2-2輸入二進(jìn)制數(shù)10100,點(diǎn)擊其他進(jìn)制,就實(shí)現(xiàn)了進(jìn)制轉(zhuǎn)換。圖1.2-1計(jì)算器里的“程序員”模式圖1.2-2在計(jì)算器里進(jìn)行數(shù)制轉(zhuǎn)換1.3單片機(jī)程序中的數(shù)據(jù)類型C語(yǔ)言是一門面向過(guò)程的、抽象化的通用計(jì)算機(jī)編程語(yǔ)言,它可讀性好,易于調(diào)試、修改和移植,C語(yǔ)言兼顧了高級(jí)語(yǔ)言和匯編語(yǔ)言的優(yōu)點(diǎn),編譯效率高,各種計(jì)算機(jī)平臺(tái)包括嵌入式處理器、超級(jí)計(jì)算機(jī)等都支持C語(yǔ)言的編譯,是計(jì)算機(jī)產(chǎn)業(yè)最重要的編程語(yǔ)言,在編程語(yǔ)言中的具有舉足輕重的地位。C語(yǔ)言的特點(diǎn):1.具有結(jié)構(gòu)化的控制語(yǔ)句C語(yǔ)言是一種結(jié)構(gòu)化的語(yǔ)言,它有專門的流程控制語(yǔ)句。如順序結(jié)構(gòu)語(yǔ)句、if...else和switch等選擇分支語(yǔ)句、for,while等循環(huán)語(yǔ)句,這些可以實(shí)現(xiàn)程序流程的邏輯控制。C語(yǔ)言的主體是函數(shù),一個(gè)C語(yǔ)言程序就是由若干頭文件和函數(shù)組成,但是主函數(shù)只有一個(gè),其他函數(shù)都可以被主函數(shù)調(diào)用,可以以函數(shù)為單位實(shí)現(xiàn)模塊化的程序搭建。1.3單片機(jī)程序中的數(shù)據(jù)類型2.豐富的數(shù)據(jù)類型C語(yǔ)言包含的數(shù)據(jù)類型廣泛,除了傳統(tǒng)的字符型、整型、浮點(diǎn)型、數(shù)組等數(shù)據(jù)類型,還有指針類型,可以對(duì)硬件內(nèi)存地址直接進(jìn)行讀寫。3.豐富的運(yùn)算符C語(yǔ)言包含34個(gè)運(yùn)算符,賦值、括號(hào)、分號(hào)都是運(yùn)算符,算術(shù)運(yùn)算、邏輯運(yùn)算都有對(duì)應(yīng)的運(yùn)算符,這些使得C語(yǔ)言的表達(dá)式類型和運(yùn)算符類型非常豐富。面向單片機(jī)編程的C語(yǔ)言稱為單片機(jī)C語(yǔ)言,簡(jiǎn)稱C51,C51符合ANSI-C標(biāo)準(zhǔn),且有一定的擴(kuò)充,其擴(kuò)充部分與單片機(jī)硬件特性有關(guān)。1.3.1數(shù)據(jù)類型計(jì)算機(jī)程序由數(shù)據(jù)和算法構(gòu)成,所謂數(shù)據(jù)是指具有一定格式的數(shù)字或數(shù)值。數(shù)據(jù)是計(jì)算機(jī)操作的對(duì)象,不管使用任何語(yǔ)言、何種算法進(jìn)行程序設(shè)計(jì),最終在計(jì)算機(jī)中運(yùn)行的只有數(shù)據(jù)流。數(shù)據(jù)的不同格式叫做數(shù)據(jù)類型。數(shù)據(jù)按一定的數(shù)據(jù)類型進(jìn)行的排列、組合及架構(gòu)稱為數(shù)據(jù)結(jié)構(gòu)。C語(yǔ)言有三種數(shù)據(jù)類型:基本型,包括整型(char、int)、實(shí)型(float)兩種;構(gòu)造型,包括數(shù)組、結(jié)構(gòu)體等用戶自定義結(jié)構(gòu)的數(shù)據(jù)類型;指針型,指向存儲(chǔ)單元地址的數(shù)據(jù)類型。相比普通C語(yǔ)言,C51多出了位、特殊功能寄存器兩種數(shù)據(jù)類型,這兩種數(shù)據(jù)類型都和硬件有關(guān),完整的數(shù)據(jù)類型見(jiàn)表1.3-1,表中深色底的是C51擴(kuò)充數(shù)據(jù)類型,C51編譯器自動(dòng)識(shí)別這些擴(kuò)充數(shù)據(jù)類型。1.3.1數(shù)據(jù)類型數(shù)據(jù)類型名稱長(zhǎng)度數(shù)值范圍unsignedchar無(wú)符號(hào)字符型1字節(jié)0~255signedchar有符號(hào)字符型1字節(jié)-128~+127unsignedint無(wú)符號(hào)整型2字節(jié)0~65535signedint有符號(hào)整型2字節(jié)-32768~+32767unsignedlong無(wú)符號(hào)長(zhǎng)整型4字節(jié)0~4294967295signedlong有符號(hào)長(zhǎng)整型4字節(jié)-2147483648~+2147483647float浮點(diǎn)型4字節(jié)±1.175494E-38~±3.402823E+38*指針型1~3字節(jié)對(duì)象的地址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ù)的格式和存儲(chǔ)空間大小。1.字符型(char)字符型有signedchar和unsignedchar之分,默認(rèn)signedchar,char型數(shù)據(jù)占用1個(gè)字節(jié)的存儲(chǔ)空間。unsignedchar是無(wú)符號(hào)的整型數(shù)據(jù),表示的數(shù)值范圍為0~255,用來(lái)存放西文字符、或者某種狀態(tài)值,如天氣;signedchar是有符號(hào)整型數(shù)據(jù),最高位是符號(hào)位,0表示正數(shù),1表示負(fù)數(shù),負(fù)數(shù)用補(bǔ)碼表示,數(shù)值范圍為-128~127。2.整型(int)整型有signedint和unsignedint之分,默認(rèn)signedint,Int型數(shù)據(jù)占用2個(gè)字節(jié)的存儲(chǔ)空間,用于存放雙字節(jié)數(shù)據(jù)。Unsignedint是兩字節(jié)的無(wú)符號(hào)數(shù),數(shù)值范圍0~65535,用來(lái)存放循環(huán)變量等,當(dāng)循環(huán)次數(shù)超過(guò)256次,那么就要定義它為unsignedint類型;signedint是兩字節(jié)的有符號(hào)數(shù),負(fù)數(shù)用補(bǔ)碼表示,數(shù)值范圍-32768~32767。1.3.1數(shù)據(jù)類型3.長(zhǎng)整型(long)長(zhǎng)整型有signedlong和unsignedlong之分,默認(rèn)signedlong,long型數(shù)據(jù)占用4個(gè)字節(jié)的存儲(chǔ)空間,用于存放四字節(jié)數(shù)據(jù)。Unsignedlong是四字節(jié)的無(wú)符號(hào)數(shù),數(shù)值范圍0~4294967295;signedlong是四字節(jié)的有符號(hào)數(shù),負(fù)數(shù)用補(bǔ)碼表示,數(shù)值范圍-2147483648~2147483647。4.浮點(diǎn)型(float)浮點(diǎn)型數(shù)據(jù)是帶小數(shù)點(diǎn)的數(shù),占用4個(gè)字節(jié)的存儲(chǔ)空間,數(shù)值以科學(xué)記數(shù)法標(biāo)記,浮點(diǎn)數(shù)不能進(jìn)行位操作或者邏輯運(yùn)算。1.3.1數(shù)據(jù)類型5.指針型指針型數(shù)據(jù)是整型數(shù)據(jù),保存指向另一個(gè)數(shù)據(jù)的存儲(chǔ)單元地址。6.位型位型數(shù)據(jù)是C51擴(kuò)充數(shù)據(jù)類型,只占用字節(jié)中的1個(gè)位,分為bit和sbit兩種類型。bit是RAM中20H~27H中的可尋址位;sbit是特殊功能寄存器中的可尋址位。7.特殊功能寄存器特殊功能寄存器(SpecialFunctionRegister)是C51擴(kuò)充數(shù)據(jù)類型,分為sfr和sfr16兩種類型。sfr在單片機(jī)RAM中占用一個(gè)存儲(chǔ)單元,且位置固定。sfr16在單片機(jī)RAM中占用兩個(gè)存儲(chǔ)單元,且位置固定。1.3.2數(shù)據(jù)的運(yùn)C語(yǔ)言提供了豐富的運(yùn)算符,運(yùn)算功能強(qiáng)大,在單片機(jī)C語(yǔ)言中,位運(yùn)算功能強(qiáng)大,常常與硬件相關(guān),C51中的運(yùn)算符總結(jié)如下。1.算術(shù)運(yùn)算符:進(jìn)行加減乘除運(yùn)算,運(yùn)算符號(hào)連接兩個(gè)操作數(shù),如表1.3-2所示。運(yùn)算名稱運(yùn)算符功能加法+求兩個(gè)數(shù)的和,1+1=2減法-求兩個(gè)數(shù)的差,10-8=2乘法*求兩個(gè)數(shù)的積,25*4=200除法/求除法運(yùn)算的商,25/4=6模運(yùn)算%求除法運(yùn)算的余,25%4=1表1.3-2算術(shù)運(yùn)算符1.3.2數(shù)據(jù)的運(yùn)2.賦值運(yùn)算符:賦值運(yùn)算符“=”的作用是給變量賦值。書寫格式:變量=表達(dá)式;//必須以分號(hào)結(jié)尾,表示一個(gè)賦值語(yǔ)句結(jié)束。舉例:unsignedchara=10,b;//變量a的初值是10unsignedintc;b=a+9; //變量b的值是19c=a+b; //變量c的值是29,運(yùn)算結(jié)果是無(wú)符號(hào)int類型。由此可見(jiàn),賦值語(yǔ)句將右邊的表達(dá)式結(jié)果賦值給左邊。如果“=”兩邊的數(shù)據(jù)類型不一致,編譯器自動(dòng)進(jìn)行類型轉(zhuǎn)換,轉(zhuǎn)換后保持左邊的數(shù)據(jù)類型。1.3.2數(shù)據(jù)的運(yùn)3.關(guān)系運(yùn)算符:表示兩個(gè)數(shù)據(jù)對(duì)象的大小關(guān)系,運(yùn)算結(jié)果是邏輯真(1)或邏輯假(0),關(guān)系運(yùn)算符如表1.3-3所示。運(yùn)算名稱運(yùn)算符功能大于>左邊和右邊的關(guān)系是否成立,如果成立,運(yùn)算結(jié)果是邏輯真(1);如果不成立,運(yùn)算結(jié)果是邏輯假(0)。大于等于>=小于<小于等于<=等于==不等于!=表1.3-3關(guān)系運(yùn)算符舉例:unsignedchara=10,b=9;//變量a的初值是10,b的初值是9b+2>a; //成立,表達(dá)式的值為1a==b; //不成立,表達(dá)式的值為0。1.3.2數(shù)據(jù)的運(yùn)4.邏輯運(yùn)算符:是與、或、非運(yùn)算的統(tǒng)稱,運(yùn)算結(jié)果是邏輯真或邏輯假,邏輯真通常用“1”表示,邏輯假通常用“0”表示。邏輯運(yùn)算符如表1.3-4所示。運(yùn)算名稱運(yùn)算符運(yùn)算規(guī)則與&&True&&True=TrueTrue&&False=FalseFalse&&False=False或||True||True=TrueTrue||False=TrueFalse||False=False非!!True=False!False=True表1.3-4邏輯運(yùn)算符1.3.2數(shù)據(jù)的運(yùn)(1)邏輯與(and)“&&”,雙目運(yùn)算符,運(yùn)算符兩側(cè)數(shù)據(jù)要么真(非0的數(shù)都是真),要么假(等于0的數(shù)都是假),只有兩個(gè)都為真的數(shù),運(yùn)算結(jié)果才為真。舉例:unsignedchara=10,b=9,c=0;//變量a的初值是10,b的初值是9,c的初值是0。a&&b; //運(yùn)算結(jié)果為真(1),a和b都非0a&&c; //運(yùn)算結(jié)果為假(0),c的值為0a-b&&c-b; //運(yùn)算結(jié)果為真(1),符號(hào)兩邊都非01.3.2數(shù)據(jù)的運(yùn)(2)邏輯或(or)“||”,雙目運(yùn)算符,運(yùn)算符兩側(cè)數(shù)據(jù)要么真(非0的數(shù)都是真),要么假(等于0的數(shù)都是假),只要有1個(gè)為真,運(yùn)算結(jié)果就為真,只有兩個(gè)都為假的數(shù),運(yùn)算結(jié)果才為假。舉例:unsignedchara=10,b=9,c=0;//變量a的初值是10,b的初值是9,c的初值是0a||b; //運(yùn)算結(jié)果為真(1),a和b是真a==b||c; //運(yùn)算結(jié)果為假(0),符號(hào)兩邊的值都為假a>b||c>b; //運(yùn)算結(jié)果為真(1),a>b是真,c>b是假,有一個(gè)是真。(3)邏輯非(not)“!”,單目運(yùn)算符,運(yùn)算結(jié)果要么真(1)要么假(0)。舉例:unsignedchara=10,b=9,c=0;//變量a的初值是10,b的初值是9,c的初值是0!(a+b); //運(yùn)算結(jié)果為假(0),a和b相加后非0,取非后是0!(a==b); //運(yùn)算結(jié)果為真(1),a和b不相等,取非后是真1.3.2數(shù)據(jù)的運(yùn)5.位運(yùn)算符:C51位運(yùn)算和單片機(jī)管腳密切相關(guān),運(yùn)算時(shí),要把十進(jìn)制、十六進(jìn)制數(shù)先轉(zhuǎn)換為二進(jìn)制,然后按位操作,表1.3-5列出了位運(yùn)算符和運(yùn)算規(guī)則。運(yùn)算名稱運(yùn)算符運(yùn)算規(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左移<<二進(jìn)制數(shù)往左移位,空出的位補(bǔ)0右移>>二進(jìn)制數(shù)往右移位,空出的位補(bǔ)0表1.3-5位運(yùn)算符1.3.2數(shù)據(jù)的運(yùn)舉例:unsignedchara=10,b=9;//求a和b的位運(yùn)算結(jié)果。首先將a,b轉(zhuǎn)換成二進(jìn)制,其次按照位運(yùn)算規(guī)則進(jìn)行二進(jìn)制的按位運(yùn)算。a轉(zhuǎn)換成二進(jìn)制數(shù)是1010,b轉(zhuǎn)換成二進(jìn)制數(shù)是1001,每種位運(yùn)算的結(jié)果見(jiàn)表1.3-6所示。表1.3-6a與b的位運(yùn)算示意圖運(yùn)算式a&ba|ba^b~aa<<2b>>3運(yùn)算結(jié)果10000001表1.3-6a與b的位運(yùn)算示意圖1.3.2數(shù)據(jù)的運(yùn)表1.3-7中a<<2的過(guò)程演示如下,首先左移1位得到0100;繼續(xù)左移1位得到1000。a左移1位:10100移出

補(bǔ)充

a左移2位:101000移出

補(bǔ)充1.3.2數(shù)據(jù)的運(yùn)6.運(yùn)算符優(yōu)先級(jí):一個(gè)表達(dá)式中有多個(gè)運(yùn)算符時(shí),按照優(yōu)先級(jí)的順序依次運(yùn)算。優(yōu)先級(jí)從高到低的排列順序見(jiàn)表1.3-7:

表1.3-7運(yùn)算符優(yōu)先級(jí)優(yōu)先級(jí)順序(從高到低)運(yùn)算符號(hào)括號(hào)()邏輯非!算術(shù)運(yùn)算符*+-關(guān)系運(yùn)算符>邏輯與&&邏輯或||賦值運(yùn)算符=1.3.2數(shù)據(jù)的運(yùn)7.復(fù)合賦值運(yùn)算符:凡是二目運(yùn)算符,都可以與賦值運(yùn)算符“=”一起組成復(fù)合賦值運(yùn)算符,由于賦值運(yùn)算符“=”優(yōu)先級(jí)最低,所以一個(gè)表達(dá)式總是最后執(zhí)行賦值運(yùn)算,由此形成了復(fù)合賦值運(yùn)算符見(jiàn)表1.3-8。格式為:變量 復(fù)合賦值運(yùn)算符 表達(dá)式復(fù)合賦值運(yùn)算符簡(jiǎn)化了書寫步驟,使代碼更加簡(jiǎn)潔,因?yàn)樽兞恐怀霈F(xiàn)1次,所以編譯效率更高。表1.3-8復(fù)合賦值運(yùn)算符運(yùn)算符舉例等價(jià)于運(yùn)算結(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èn)網(wǎng)絡(luò)空間安全學(xué)院網(wǎng)絡(luò)安全基礎(chǔ)技術(shù)應(yīng)用第二章單片機(jī)的基本結(jié)構(gòu)目錄CONTENT2.1.單片機(jī)發(fā)展簡(jiǎn)史和定義2.2.單片機(jī)內(nèi)部結(jié)構(gòu)概述2.3.中央處理器CPU2.4.程序存儲(chǔ)器ROM2.5.數(shù)據(jù)存儲(chǔ)器RAM2.6.常量和變量2.7.單片機(jī)最小系統(tǒng)2.8.擴(kuò)展閱讀:C51編譯器2.1單片機(jī)發(fā)展簡(jiǎn)史和定義20世紀(jì)70年代初,英特爾(Intel)公司推出了世界上第一臺(tái)微處理器4004,能夠處理4bit的數(shù)據(jù)如圖2-1所示。到了80年代初,Intel推出了8051單片機(jī),能夠處理8bit的數(shù)據(jù),這個(gè)單片機(jī)不僅僅是微處理器,它還把存儲(chǔ)器、通用輸入輸出接口、串行通信接口、定時(shí)器系統(tǒng)、中斷系統(tǒng)等都集成在了單顆芯片,是一款單片微型計(jì)算機(jī),這樣的單芯片結(jié)構(gòu)應(yīng)用極為廣泛,比如控制一個(gè)馬達(dá)一顆單芯片就可以搞定。單片機(jī)結(jié)構(gòu)簡(jiǎn)單、價(jià)格低廉,廣泛應(yīng)用于家用電器、汽車、工業(yè)測(cè)控、通信等設(shè)備中,可以說(shuō)有“智能”的產(chǎn)品,都有單片機(jī)的影子。圖2.1-1

Intel4位處理器2.1單片機(jī)發(fā)展簡(jiǎn)史和定義Intel在1980年代授權(quán)了8051單片機(jī)的設(shè)計(jì),世界許多IC制造廠商都能生產(chǎn)基于Intel8051架構(gòu)的單片機(jī),因此,現(xiàn)在市場(chǎng)上有許多不同制造商生產(chǎn)的8051單片機(jī),其架構(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)核的單片機(jī),圖2.1-2是STC公司一款雙列直插單片機(jī)外觀。圖2.1-28051單片機(jī)

2.1單片機(jī)發(fā)展簡(jiǎn)史和定義單片機(jī)是一顆封裝好的微型計(jì)算機(jī)芯片,在工業(yè)控制領(lǐng)域應(yīng)用極為廣泛,也稱微控制器(Micro-ControllerUnit,MCU),單片機(jī)把具有數(shù)據(jù)處理能力的中央處理器(CentralProcessingUnit,CPU)、只讀存儲(chǔ)器(ReadOnlyMemory,ROM)、隨機(jī)存儲(chǔ)器(RandomAccessMemory,RAM)、定時(shí)計(jì)數(shù)器(Timer/Counter)、輸入輸出并行接口(Input/Output,I/O)、串行通信接口(SerialCommunication)、中斷系統(tǒng)(InterruptSystem)等功能都集成到一塊硅片上,構(gòu)成了一個(gè)小而完善的微型計(jì)算機(jī)系統(tǒng)。傳統(tǒng)8051單片機(jī)(特指早期單片機(jī))內(nèi)部結(jié)構(gòu)如圖2.1-3所示,CPU機(jī)器周期是12T,RAM有256字節(jié)、ROM有4K字節(jié),還提供4個(gè)8位并口、1個(gè)全雙工串行口、2個(gè)16位定時(shí)/計(jì)數(shù)器,5個(gè)中斷源的中斷系統(tǒng)。圖2.1-3傳統(tǒng)8051單片機(jī)內(nèi)部結(jié)構(gòu)

2.2單片機(jī)內(nèi)部結(jié)構(gòu)概述隨著技術(shù)的發(fā)展,現(xiàn)代8051單片機(jī),無(wú)論是運(yùn)行速度還是性能都比傳統(tǒng)8051單片機(jī)優(yōu)越,稱為增強(qiáng)型單片機(jī)。圖2.2-1展示了STC8x系列單片機(jī)內(nèi)部結(jié)構(gòu)圖,CPU、存儲(chǔ)器、數(shù)字外設(shè)都比傳統(tǒng)8051單片機(jī)性能強(qiáng)。擁有超高速1T8位8051微處理器內(nèi)核,比傳統(tǒng)8051快約12倍。內(nèi)置高精度R/C時(shí)鐘,時(shí)鐘頻率可任意設(shè)置。ROM直接使用Flash閃存,具有斷電數(shù)據(jù)不丟失的特性,讀取速度快,容量可以達(dá)到128K字節(jié)。RAM直接使用靜態(tài)RAM(StaticRAM,SRAM),SRAM到目前為止是讀寫速度最快的內(nèi)存工藝之一,傳統(tǒng)8051的RAM容量只有256字節(jié),但是現(xiàn)代單片機(jī)的RAM容量可以擴(kuò)展到12K字節(jié)。內(nèi)置ISP引導(dǎo)代碼。傳統(tǒng)8051單片機(jī)需要手動(dòng)添加ISP引導(dǎo)碼,現(xiàn)代單片機(jī)將ISP引導(dǎo)碼內(nèi)置在芯片里,通過(guò)上位機(jī)軟件直接串口下載程序,無(wú)需使用編程器。2.2單片機(jī)內(nèi)部結(jié)構(gòu)概述傳統(tǒng)8051單片機(jī)只有4組GPIO,且只有P3口提供第二功能,現(xiàn)代單片機(jī)的GPIO口可以達(dá)到8組或更多,每個(gè)GPIO口都有擴(kuò)展功能,所有GPIO均支持4種工作模式?,F(xiàn)代單片機(jī)定時(shí)器數(shù)量增多,有3~5個(gè)16位定時(shí)器;串行接口數(shù)量增多,有2~4個(gè)高速串口。數(shù)字外設(shè)增多,自帶超高速ADC模數(shù)轉(zhuǎn)換器,支持SPI、I2C總線協(xié)議。內(nèi)置復(fù)位電路,支持上電復(fù)位、復(fù)位腳復(fù)位、看門狗溢出復(fù)位、低壓檢測(cè)復(fù)位,還支持軟件復(fù)位。有4級(jí)嵌套中斷系統(tǒng)。傳統(tǒng)8051只有5個(gè)中斷源,現(xiàn)代單片機(jī)可提供幾十個(gè)中斷源,這些中斷源可根據(jù)情況設(shè)置為4級(jí)嵌套優(yōu)先。

有DMA(DirectMemoryAccess)直接存儲(chǔ)器存取功能,該功能使得單片機(jī)可不通過(guò)CPU直接訪問(wèn)單片機(jī)內(nèi)部存儲(chǔ)器。2.2單片機(jī)內(nèi)部結(jié)構(gòu)概述有看門狗定時(shí)器,防止單片機(jī)程序跑飛或陷入死循環(huán)。綜上所述,現(xiàn)代51單片機(jī)速度更快,存儲(chǔ)容量更大,外設(shè)更加豐富,集成度更高,適用于低、中、高多種應(yīng)用場(chǎng)景的使用。除了8位的STC8H新型單片機(jī),STC公司還推出32位8051內(nèi)核(1T)單片機(jī),比傳統(tǒng)8051快約70倍,內(nèi)嵌DMA、LCD驅(qū)動(dòng)8080接口,性能可以與ARMCortex微控制器相比擬。圖2.2-1STC8x系列單片機(jī)內(nèi)部結(jié)構(gòu)2.2單片機(jī)內(nèi)部結(jié)構(gòu)概述STC單片機(jī)命名規(guī)則STC公司成立于1999年,STC系列單片機(jī)最大特點(diǎn)是擁有超強(qiáng)抗干擾能力,且所有產(chǎn)品都具備在系統(tǒng)可編程(InSystemProgramming,ISP)下載功能,指令幾乎都可以單時(shí)鐘完成。STC系列單片機(jī)的發(fā)展歷史如表2.2-1所示。年份事件單片機(jī)特點(diǎn)2004年STC公司推出STC89系列8051單片機(jī)具有ISP在系統(tǒng)編程功能,與傳統(tǒng)8051內(nèi)部結(jié)構(gòu)一致。2006年STC公司推出STC12系列8051單片機(jī)全球首款大批量生產(chǎn)的1T8051單片機(jī),工作速度提升2011年STC公司推出STC15系列8051單片機(jī)具有IAP在應(yīng)用編程功能,采用STC-Y5超高速CPU內(nèi)核2019年STC公司推出STC8H/STC8G/STC8A系列超高速8051單片機(jī)STC公司最快的1T8051單片機(jī),采用STC-Y6超高速CPU內(nèi)核2021年STC公司推出首款STC32x系列8051單片機(jī)32位8051單片機(jī),工作速度更快。表2.2-1STC8051單片機(jī)的發(fā)展歷史2.2單片機(jī)內(nèi)部結(jié)構(gòu)概述單片機(jī)的RAM和ROM容量是非常重要的兩個(gè)性能指標(biāo),STC單片機(jī)命名規(guī)則里就體現(xiàn)了存儲(chǔ)器容量以及增強(qiáng)性的功能特點(diǎn)。STC單片機(jī)命名規(guī)則如圖2.2-2所示,由廠家代碼、系列編號(hào)、存儲(chǔ)器容量、增強(qiáng)功能等組成,其符號(hào)如表2.2-2所示。圖2.2-2STC命名規(guī)則2.2單片機(jī)內(nèi)部結(jié)構(gòu)概述廠家系列工作電壓RAM容量ROM容量增強(qiáng)功能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:有掉電喚醒功能專用定時(shí)器。S2:有兩組串口S4:有四組串口U:USB接口表2.2-2STC單片機(jī)命名規(guī)則2.2單片機(jī)內(nèi)部結(jié)構(gòu)概述舉例:STC15F2K60S2:STC公司15系列單片機(jī),程序存儲(chǔ)區(qū)(ROM)是Flash,工作電壓在3.8~5.5V,2K字節(jié)的RAM,60K字節(jié)ROM,有兩組串口。IAP15F2K61S2:IAP(InApplicationProgramming,在應(yīng)用編程)開(kāi)頭,表明Flash程序存儲(chǔ)區(qū)可以作為EEPROM使用,單片機(jī)通過(guò)應(yīng)用程序就可以改寫程序?qū)崿F(xiàn)仿真。是STC公司15系列單片機(jī),F(xiàn)lash型的ROM有61K字節(jié),RAM有2K字節(jié),有兩組串口。STC8H8K64U:STC公司8H系列單片機(jī),8K字節(jié)的RAM,64K字節(jié)ROM,提供USB接口。STC32G12K128:STC公司32G系列單片機(jī),12K字節(jié)的RAM,128K字節(jié)ROM。說(shuō)明:1.從STC8H系列開(kāi)設(shè)命名里沒(méi)有“F”字母,但ROM依然是Flash工藝,F(xiàn)lash已經(jīng)是標(biāo)配,且都具有IAP在應(yīng)用下載和仿真功能。2.從STC32G系列開(kāi)設(shè)命名里沒(méi)有“U”字母,但芯片依然提供USB接口,USB已經(jīng)是標(biāo)配。2.2單片機(jī)內(nèi)部結(jié)構(gòu)概述任務(wù)1.認(rèn)識(shí)單片機(jī)本節(jié)講述了現(xiàn)代8051單片機(jī)特點(diǎn),請(qǐng)你對(duì)照手上的開(kāi)發(fā)板,找到單片機(jī)芯片,仔細(xì)看看,這個(gè)單片機(jī)是什么型號(hào),型號(hào)代碼有什么意義?打開(kāi)單片機(jī)供應(yīng)商的官方網(wǎng)站,看看網(wǎng)站上都提供了哪些和單片機(jī)有關(guān)的資料。找到單片機(jī)的使用說(shuō)明書,說(shuō)說(shuō)看這份說(shuō)明書都講述了哪些內(nèi)容?2.3中央處理器CPU中央處理器(CentralProcessingUnit,簡(jiǎn)稱CPU)是計(jì)算機(jī)系統(tǒng)的運(yùn)算和控制核心,相當(dāng)于人的大腦,是計(jì)算機(jī)程序的執(zhí)行者,圖2.3-1表明CPU由運(yùn)算器和控制器組成,CPU和存儲(chǔ)器、輸入輸出設(shè)備都有聯(lián)系。最早的CPU只能并行操作4位二進(jìn)制數(shù),很快發(fā)展到8位、16位、32位,現(xiàn)在通用計(jì)算機(jī)都已經(jīng)是64位處理器了,CPU并行操作的位數(shù)越多,處理速度越快,另外CPU的處理速度還受系統(tǒng)時(shí)鐘影響,系統(tǒng)時(shí)鐘也稱“主頻”,主頻越高,處理速度越快。圖2.3-1計(jì)算機(jī)體系結(jié)構(gòu)

CPU運(yùn)算器控制器數(shù)據(jù)流指令流控制流輸入設(shè)備存儲(chǔ)器輸出設(shè)備2.3.1CPU工作過(guò)程CPU是單片機(jī)的核心配件,是單片機(jī)的運(yùn)算核心和控制核心。CPU由運(yùn)算器和控制器兩部分組成。1.運(yùn)算器:運(yùn)算器由算術(shù)邏輯單元(ALU)、累加器和寄存器組成,ALU完成兩個(gè)功能:執(zhí)行加減乘除等算術(shù)運(yùn)算;執(zhí)行邏輯與,或,比較等邏輯運(yùn)算。ALU的輸入源是兩個(gè)數(shù)據(jù),分別來(lái)自累加器和數(shù)據(jù)寄存器,ALU的運(yùn)算結(jié)果存回累加器,取代累加器原來(lái)的內(nèi)容。運(yùn)算器執(zhí)行的操作全部由控制器發(fā)出的控制信號(hào)指揮,一個(gè)算術(shù)操作產(chǎn)生一個(gè)運(yùn)算結(jié)果,一個(gè)邏輯操作產(chǎn)生一個(gè)真假判決。2.控制器:控制器協(xié)調(diào)和控制整個(gè)計(jì)算機(jī)系統(tǒng)的操作,主要由以下幾個(gè)寄存器/控制器組成。(1)程序計(jì)數(shù)器PC(ProgramCounter):也稱程序指針,保存下一條指令的地址,CPU在執(zhí)行程序時(shí),自動(dòng)修改PC的內(nèi)容,使得它始終指向下一條指令的存放地址。(2)指令寄存器IR(InstructionRegister):保存當(dāng)前正在執(zhí)行的一條指令。當(dāng)執(zhí)行一條指令時(shí),先把它從程序存儲(chǔ)器中取出,然后再傳送到指令寄存器。2.3.2單片機(jī)時(shí)鐘樹(shù)STC8H系列通用系統(tǒng)時(shí)鐘結(jié)構(gòu)如圖2.3-2所示,它也是現(xiàn)代單片機(jī)典型時(shí)鐘樹(shù)。豎梯圖形是多選一復(fù)用器。主時(shí)鐘MCLK可選內(nèi)部高速IRC、外部高速晶振、外部32K晶振或內(nèi)部32KHz,由于32KHz頻率太低,僅用于RTC時(shí)鐘,因此MCLK主要在外部高速晶振和內(nèi)部高速高精度IRC之間選擇。主時(shí)鐘MCLK經(jīng)過(guò)CLKDIV分頻后,得到系統(tǒng)時(shí)鐘SYSCLK。SYSCLK就是單片機(jī)CPU的工作時(shí)鐘。當(dāng)CLKDIV=1時(shí),系統(tǒng)時(shí)鐘與時(shí)鐘源的頻率一致。STC8H系列的IRC有四個(gè)中心頻率6MHz、10MHz、27MHz、44MHz,圍繞中心頻率,可變化范圍在±27%,從而產(chǎn)生有小數(shù)點(diǎn)的頻率。圖2.3-2STC8H系列通用系統(tǒng)時(shí)鐘結(jié)構(gòu)2.3.3CPU的工作時(shí)間單片機(jī)內(nèi)部是一個(gè)同步數(shù)字系統(tǒng),CPU和存儲(chǔ)器等通過(guò)一個(gè)統(tǒng)一的節(jié)拍工作,這個(gè)統(tǒng)一的節(jié)拍就是單片機(jī)系統(tǒng)時(shí)鐘,也稱主頻,是圖2.3-2時(shí)鐘樹(shù)中的SYSCLK。STC主頻在4~48MHz可調(diào)。單片機(jī)按照節(jié)拍工作,節(jié)拍的頻率f和節(jié)拍的時(shí)間T互為倒數(shù):

——公式2.3-12.3.3CPU的工作時(shí)間CPU有以下幾種工作時(shí)間:1.時(shí)鐘周期:?jiǎn)纹瑱C(jī)R/C時(shí)鐘電路發(fā)生的振蕩周期,也稱主頻周期、振蕩周期、時(shí)鐘節(jié)拍,是單片機(jī)最小時(shí)間單位。2.機(jī)器周期:CPU執(zhí)行一個(gè)基本操作所需要的時(shí)間稱為機(jī)器周期,STC單片機(jī)有兩種機(jī)器周期方式:12T:和傳統(tǒng)8051單片機(jī)一致,一個(gè)機(jī)器周期由12個(gè)時(shí)鐘周期組成,稱為12T工作時(shí)間。1T:一個(gè)機(jī)器周期由1個(gè)時(shí)鐘周期組成,稱為1T工作時(shí)間。單片機(jī)時(shí)鐘周期和機(jī)器周期的關(guān)系如圖2.3-3所示。圖2.3-3單片機(jī)的工作周期2.3.3CPU的工作時(shí)間3.指令周期:CPU執(zhí)行一條指令所需要的時(shí)間稱為指令周期,它由若干個(gè)機(jī)器周期組成。如果指令在一個(gè)機(jī)器周期內(nèi)完成,就稱為單周期指令;如果指令在兩個(gè)機(jī)器周期內(nèi)完成,就稱為雙周期指令;還有的指令需要三、四個(gè)機(jī)器周期才能完成。程序中經(jīng)常用到的跳轉(zhuǎn)指令是單周期指令,執(zhí)行時(shí)間最短,加法指令是四周期指令,執(zhí)行時(shí)間最長(zhǎng)。如果單片機(jī)的時(shí)鐘源是12MHz晶振,根據(jù)公式2.3-1,時(shí)鐘周期是1/12us。表2.3-1列出了1T和12T工作方式下CPU工作時(shí)間。可見(jiàn)1T單片機(jī)的CPU運(yùn)行速度遠(yuǎn)比12T單片機(jī)的CPU快得多。表2.3-1單片機(jī)工作時(shí)間1T工作方式12T工作方式時(shí)鐘周期1/12us1/12us機(jī)器周期1/12us1us單周期指令時(shí)間1/12us1us雙周期指令時(shí)間1/6us2us任務(wù)2.安裝KeilC51軟件任務(wù)2.安裝KeilC51軟件任務(wù)要求:在電腦上安裝KeiluVision5forC51軟件。步驟1:下載KeilC51安裝軟件包,教材使用版本KeilC51v960auVision5。步驟2:雙擊安裝包,按照提示要求進(jìn)行安裝。步驟3:在STC官方網(wǎng)站下載最新的STC-ISP編程燒錄軟件,雙擊進(jìn)行安裝。步驟4:在Keil安裝目錄下添加STC芯片型號(hào)和頭文件庫(kù)。以上步驟操作視頻見(jiàn)二維碼2.3-1。二維碼2.3-1

keil軟件的安裝任務(wù)3.建立一個(gè)hello測(cè)試工程任務(wù)3.建立一個(gè)hello測(cè)試工程任務(wù)要求:在Keil軟件下建立一個(gè)hello測(cè)試程序,該程序能夠和上位機(jī)實(shí)現(xiàn)usb通信。步驟1:建立工程文件夾hellotest。在書寫代碼前,先建立工程文件夾,項(xiàng)目相關(guān)文件都在放此文件夾下,方便工程項(xiàng)目的管理。步驟2:新建工程。打開(kāi)Keil軟件,點(diǎn)擊Project菜單,選中“NewuVisionProject”,如圖2.3-4所示。給工程命名并保存在步驟1建立的文件夾里如圖2.3-5所示。圖2.3-4新建工程

圖2.3-5工程保存及命名2.3.3CPU的工作時(shí)間步驟3:選擇器件庫(kù)。本項(xiàng)目使用STC8H8K64U芯片,因此首先在Vendor里選擇STCMCUDatabase,如圖2.3-6所示。步驟4:選擇CPU型號(hào)。在STCMCUDatabase中尋找STC8H系列單片機(jī),找到STC8H8K64U,如圖2.3-7所示。圖2.3-6選擇器件庫(kù)圖2.3-7選擇CPU型號(hào)2.3.3CPU的工作時(shí)間首次建立工程會(huì)跳出“Copy‘STARTUP.a51’toProjectFolderandAddFiletoProject?”的對(duì)話框,選擇“是”,如圖2.3-8所示,進(jìn)入到工程代碼書寫階段。圖2.3-8在工程里自動(dòng)添加啟動(dòng)文件步驟5:書寫程序。第1步點(diǎn)擊“新建”按鈕,打開(kāi)文本編輯器;第2步點(diǎn)擊“保存”按鈕在工程目錄下保存新文件;第3步輸入文件名稱,因?yàn)樵撐募侵魑募╩ain函數(shù)所在的文件),文件名可以和工程名一致,注意后綴名是.c。如圖2.3-9所示。步驟6:在工程文件里添加庫(kù)文件如圖2.3-10所示。圖2.3-9新建C語(yǔ)言文件圖2.3-10添加usb-hid庫(kù)文件2.3.3CPU的工作時(shí)間步驟7:Keil軟件界面的文本框輸入以下語(yǔ)句。#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的工作時(shí)間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();//接收應(yīng)答(固定格式)}}2.3.3CPU的工作時(shí)間voidsys_init(){P_SW2|=0x80;//擴(kuò)展寄存器(XFR)訪問(wèn)使能P0M1=0x00;P0M0=0x00;//設(shè)置為準(zhǔn)雙向口P1M1=0x00;P1M0=0x00;//設(shè)置為準(zhǔn)雙向口P2M1=0x00;P2M0=0x00;//設(shè)置為準(zhǔn)雙向口P3M1=0x00;P3M0=0x00;//設(shè)置為準(zhǔn)雙向口P4M1=0x00;P4M0=0x00;//設(shè)置為準(zhǔn)雙向口P5M1=0x00;P5M0=0x00;//設(shè)置為準(zhǔn)雙向口2.3.3CPU的工作時(shí)間P6M1=0x00;P6M0=0x00;//設(shè)置為準(zhǔn)雙向口P7M1=0x00;P7M0=0x00;//設(shè)置為準(zhǔn)雙向口P3M0&=~0x03;P3M1|=0x03;//設(shè)置USB使用的時(shí)鐘源IRC48MCR=0x80;//使能內(nèi)部48M高速IRCwhile(!(IRC48MCR&0x01));//等待時(shí)鐘穩(wěn)定}2.3.3CPU的工作時(shí)間步驟8:準(zhǔn)備編譯,在編譯前,點(diǎn)擊“OptionsforTarget”菜單,進(jìn)行如下幾項(xiàng)設(shè)置:(1)Device欄目里選擇Linker,如圖2.3-11所示。圖2.3-11選擇Linker2.3.3CPU的工作時(shí)間(2)在LX51Misc里添加宏控制語(yǔ)句,如圖2.3-12所示。圖2.3-12添加宏控制語(yǔ)句2.3.3CPU的工作時(shí)間步驟9:編譯。點(diǎn)擊“編譯”按鈕,根據(jù)編譯提示結(jié)果進(jìn)行修改,編譯后的結(jié)果必須是0errors。如圖2.3-13所示。圖2.3-13編譯按鈕和編譯結(jié)果2.3.3CPU的工作時(shí)間以上步驟操作視頻見(jiàn)二維碼2.3-2。二維碼2.3-2

建立hello測(cè)試工程。2.4程序存儲(chǔ)器ROMROM是只讀存儲(chǔ)器(ReadOnlyMemory)的縮寫,主要用于存放用戶程序以及一些初始化數(shù)據(jù)等,所以也稱程序存儲(chǔ)器。ROM是非易失性存儲(chǔ)器,即使掉電,數(shù)據(jù)也依然保持,可以理解成計(jì)算機(jī)的硬盤。ROM從字面上看只能讀、不能寫,實(shí)際上內(nèi)容可以修改。早期的單片機(jī)使用電可擦寫EEPROM(也稱E2PROM),速度慢且讀寫次數(shù)有限?,F(xiàn)在的單片機(jī)大多采用Flash閃存工藝,它最大的特點(diǎn)是讀取數(shù)據(jù)快,不僅有EEPROM電可擦除重寫的功能,還有斷電不丟失數(shù)據(jù)、快速讀取數(shù)據(jù)的特點(diǎn)。2.4.2特殊的ROM存儲(chǔ)單元(1)程序計(jì)數(shù)器PC程序計(jì)數(shù)器(ProgramCounter,PC)保存當(dāng)前欲執(zhí)行指令的地址,也稱指令指針或程序指針。CPU從ROM里取指,首先要訪問(wèn)PC寄存器,從PC寄存器里拿到單元地址后,再到ROM的存儲(chǔ)單元取指令,CPU工作的最后一個(gè)過(guò)程是結(jié)果寫回,這個(gè)過(guò)程就包括了寫回PC,如果CPU執(zhí)行的指令是單周期的,那么PC里的內(nèi)容就自動(dòng)增1,如果指令是雙周期的,那么PC里的內(nèi)容就自動(dòng)增2,所以PC里的內(nèi)容始終指向下一個(gè)要執(zhí)行的ROM單元地址。單片機(jī)復(fù)位后,PC的內(nèi)容為0000H,從0000H單元開(kāi)始執(zhí)行程序。(2)中斷向量入口地址中斷服務(wù)程序的入口地址、中斷編號(hào)合起來(lái)稱為中斷向量。當(dāng)中斷發(fā)生并被CPU響應(yīng)后,單片機(jī)就會(huì)自動(dòng)跳轉(zhuǎn)到相應(yīng)的中斷入口地址獲取指令。2.4.2特殊的ROM存儲(chǔ)單元傳統(tǒng)8051單片機(jī)只有5個(gè)中斷源,對(duì)應(yīng)5個(gè)中斷向量,如表2.4-1所示。中斷編號(hào)中斷源入口地址0外部中斷00003H1定時(shí)器0000BH2外部中斷10013H3定時(shí)器1001BH4串口0023H表2.4-1傳統(tǒng)8051單片機(jī)的中斷向量2.4.2特殊的ROM存儲(chǔ)單元STC8系列單片機(jī)支持22個(gè)中斷源,STC32系列單片機(jī)中斷源可達(dá)64個(gè)。表2.4-2列出了STC8系列單片機(jī)常用中斷向量,相較傳統(tǒng)8051,現(xiàn)代單片機(jī)增加了ADC、SPI、I2C等中斷源。中斷編號(hào)中斷源入口地址

中斷編號(hào)中斷源入口地址0外部中斷0(INT0)0003H

11外部中斷3(INT3)005BH1定時(shí)器0(Timer0)000BH

12定時(shí)器2(Timer2)0063H2外部中斷1(INT1)0013H

13-15系統(tǒng)保留

3定時(shí)器1(Timer1)001BH

16外部中斷4(INT4)0083H4串口1(UART1)0023B

17串口3(UART3)008BH5數(shù)模轉(zhuǎn)換(ADC)002BH

18串口4(UART4)0093H6低壓檢測(cè)(LVD)0033H

19定時(shí)器(Timer3)009BH7比較捕獲(CCP/PCA/PWM)003BH

20定時(shí)器(Timer4)00A3H8串口2(UART2)0043B

21比較器(CMP)

9串行接口外設(shè)(SPI)004BH

24I2C總線00C3H10外部中斷2(INT2)0053H

25USB00CBH表2.4-2STC8系列對(duì)應(yīng)的中斷向量2.4.3ROM存儲(chǔ)單元的讀寫程序存儲(chǔ)器用于存放用戶程序、數(shù)據(jù)以及表格等信息。1.用戶程序的讀寫方法:首先在編譯軟件里編寫代碼并編譯成二進(jìn)制文件,然后使用下載軟件或燒寫器將文件下載到單片機(jī)ROM存儲(chǔ)單元,單片機(jī)上電后,CPU從ROM首地址讀程序。2.用戶數(shù)據(jù)的讀寫方法:程序中用到的查表信息如數(shù)碼管顯示字型、漢字字庫(kù)等,這些數(shù)據(jù)是固定不變的,且占用較多存儲(chǔ)空間,此時(shí)數(shù)據(jù)可保存在程序存儲(chǔ)器ROM中,減少對(duì)RAM空間的消耗,在編寫程序時(shí),通過(guò)聲明存儲(chǔ)器類型規(guī)定存儲(chǔ)位置。以8位共陰數(shù)碼管字型編碼為例,在數(shù)據(jù)類型“unsignedchar”后面增加“code”標(biāo)識(shí)符:unsignedcharcodetab[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,0x77,0x7C,0x39,0x5E,0x79,0x71};“code”是存儲(chǔ)器類型,表明存儲(chǔ)位置在程序存儲(chǔ)器ROM里。上述舉例定義數(shù)組常量tab[],數(shù)組元素分別是字型0~F的數(shù)碼管顯示編碼。任務(wù)4.hello測(cè)試程序的下載和驗(yàn)證任務(wù)4.hello測(cè)試程序的下載和驗(yàn)證任務(wù)要求:將hello程序的hex文件下載到開(kāi)發(fā)板,連接上位機(jī),上位機(jī)發(fā)送“hello”,單片機(jī)返回“ok”。步驟1:打開(kāi)hello工程文件,生成hex文件。(1)在任務(wù)1的工程里,打開(kāi)OptionsforTarget窗;(2)勾選CreatHEXFile;(3)點(diǎn)擊OK;點(diǎn)擊“編譯”快捷鍵。如圖2.4-2所示。圖2.4-2生成hex文件并編譯任務(wù)4.hello測(cè)試程序的下載和驗(yàn)證步驟2:開(kāi)發(fā)板連接電腦,usb線纜兩端分別連接開(kāi)發(fā)板usb插座和電腦USB口;步驟3:打開(kāi)STC-ISP軟件,設(shè)置下載條件。(1)選擇芯片型號(hào),和開(kāi)發(fā)板中CPU的型號(hào)一致。(2)點(diǎn)擊“打開(kāi)程序文件”,在任務(wù)1工程文件目錄的Objects下找到要下載的hex文件,選中并點(diǎn)擊“打開(kāi)”按鈕。如圖2.4-3所示。圖2.4-3選擇芯片型號(hào),打開(kāi)程序文件任務(wù)4.hello測(cè)試程序的下載和驗(yàn)證步驟4:下載hex文件到開(kāi)發(fā)板。先按住實(shí)驗(yàn)箱上的INT0按鍵,然后按住ON/OFF電源按鍵,接著松開(kāi)ON/OFF電源按鍵,最后松開(kāi)INT0按鍵,正常情況下就能識(shí)別出“STCUSBWriter(HID1)”設(shè)備。選擇CPU的內(nèi)部時(shí)鐘頻率,然后點(diǎn)擊“下載/編程”,若下載成功,提示欄會(huì)顯示“成功”,如圖2.4-4中1-3步所示。圖2.4-4程序下載和USB-HID通信驗(yàn)證2.4.3ROM存儲(chǔ)單元的讀寫步驟5:通信測(cè)試。借助USB-HID助手,實(shí)現(xiàn)電腦和開(kāi)發(fā)板的握手,過(guò)程如圖2.4-4中4-7步。(1)在STC-ISP軟件中打開(kāi)“USB-HID助手”的界面;(2)在設(shè)備欄選擇“STC\USB-ISP”,點(diǎn)擊“打開(kāi)設(shè)備”。(3)在發(fā)送緩沖書寫“hello”點(diǎn)擊“發(fā)送”。此時(shí),在接收緩沖區(qū)收到“ok”。(4)每點(diǎn)擊“發(fā)送”一次,就收到一個(gè)“ok”。圖2.4-4程序下載和USB-HID通信驗(yàn)證任務(wù)4.hello測(cè)試程序的下載和驗(yàn)證步驟5:通信測(cè)試。借助USB-HID助手,實(shí)現(xiàn)電腦和開(kāi)發(fā)板的握手,過(guò)程如圖2.4-4中4-7步。(1)在STC-ISP軟件中打開(kāi)“USB-HID助手”的界面;(2)在設(shè)備欄選擇“STC\USB-ISP”,點(diǎn)擊“打開(kāi)設(shè)備”。(3)在發(fā)送緩沖書寫“hello”點(diǎn)擊“發(fā)送”。此時(shí),在接收緩沖區(qū)收到“ok”。(4)每點(diǎn)擊“發(fā)送”一次,就收到一個(gè)“ok”。圖2.4-4程序下載和USB-HID通信驗(yàn)證任務(wù)4.hello測(cè)試程序的下載和驗(yàn)證以上步驟操作視頻見(jiàn)二維碼2.4-1。二維碼2.4-1hello程序的下載和驗(yàn)證。2.5數(shù)據(jù)存儲(chǔ)器RAMRAM是隨機(jī)存取存儲(chǔ)器(RandomAccessMemory)的縮寫,斷電之后數(shù)據(jù)丟失,用于存放臨時(shí)性數(shù)據(jù),也就是我們俗稱的“內(nèi)存”。STC單片機(jī)的RAM采用靜態(tài)RAM(StaticRandom-AccessMemory,SRAM)工藝,在通電情況下,SRAM里存儲(chǔ)數(shù)據(jù)可以恒常保持,但是當(dāng)斷電后,SRAM儲(chǔ)存的數(shù)據(jù)會(huì)消失,它最大的特點(diǎn)是速度快,在普通個(gè)人計(jì)算機(jī)里,SRAM是計(jì)算機(jī)的一級(jí)緩存。單片機(jī)型號(hào)不同,RAM存儲(chǔ)容量也不同,如:STC15F2K60S2單片機(jī)RAM存儲(chǔ)容量2KByte,STC8H8K64U單片機(jī)RAM存儲(chǔ)容量8KByte,STC32G12K128單片機(jī)的RAM容量是12KByte。RAM內(nèi)部結(jié)構(gòu)和ROM相同,由存儲(chǔ)單元組成,但是RAM和ROM不一樣的地方在于,CPU訪問(wèn)ROM的時(shí)候,ROM地址是固定的,由PC寄存器內(nèi)容指示,而訪問(wèn)RAM的時(shí)候單元地址是隨機(jī)的。2.5.1STC單片機(jī)RAM結(jié)構(gòu)傳統(tǒng)8051單片機(jī)的RAM空間由256個(gè)存儲(chǔ)單元構(gòu)成,稱為內(nèi)部RAM。現(xiàn)代單片機(jī)擴(kuò)展了內(nèi)部RAM空間,分為兩個(gè)地址空間——內(nèi)部RAM(256字節(jié))和擴(kuò)展RAM。圖2.5-1展示了STC不同單片機(jī)型號(hào)的RAM內(nèi)部空間。傳統(tǒng)8051單片機(jī)的內(nèi)存256個(gè)存儲(chǔ)單元,地址范圍00H~FFH;STC15F2K60S2系列有2K個(gè)RAM存儲(chǔ)單元,地址范圍00H~07FFH;STC8H4K64U的內(nèi)存地址00H~0FFFH,對(duì)應(yīng)4K個(gè)存儲(chǔ)單元;STC8H8K64U的內(nèi)存地址00H~1FFFH,對(duì)應(yīng)8K個(gè)存儲(chǔ)單元。STC32G12K28的內(nèi)存地址00H~2FFFH,對(duì)應(yīng)12K個(gè)存儲(chǔ)單元。2.5.1STC單片機(jī)RAM結(jié)構(gòu)傳統(tǒng)8051單片機(jī)的RAM空間由256個(gè)存儲(chǔ)單元構(gòu)成,稱為內(nèi)部RAM?,F(xiàn)代單片機(jī)擴(kuò)展了內(nèi)部RAM空間,分為兩個(gè)地址空間——內(nèi)部RAM(256字節(jié))和擴(kuò)展RAM。圖2.5-1展示了STC不同單片機(jī)型號(hào)的RAM內(nèi)部空間。傳統(tǒng)8051單片機(jī)的內(nèi)存256個(gè)存儲(chǔ)單元,地址范圍00H~FFH;STC15F2K60S2系列有2K個(gè)RAM存儲(chǔ)單元,地址范圍00H~07FFH;STC8H4K64U的內(nèi)存地址00H~0FFFH,對(duì)應(yīng)4K個(gè)存儲(chǔ)單元;STC8H8K64U的內(nèi)存地址00H~1FFFH,對(duì)應(yīng)8K個(gè)存儲(chǔ)單元。STC32G12K28的內(nèi)存地址00H~2FFFH,對(duì)應(yīng)12K個(gè)存儲(chǔ)單元。2.5.1STC單片機(jī)RAM結(jié)構(gòu)圖2.5-1STC系列單片機(jī)RAM內(nèi)部結(jié)構(gòu)2.5.1STC單片機(jī)RAM結(jié)構(gòu)單片機(jī)存儲(chǔ)器類型如表2.5-2所示。當(dāng)常量或變量的存儲(chǔ)器類型省略時(shí),默認(rèn)數(shù)據(jù)是idata存儲(chǔ)類型。存儲(chǔ)器類型說(shuō)明data可直接尋址的片內(nèi)數(shù)據(jù)存儲(chǔ)器(內(nèi)部RAM低128字節(jié)),訪問(wèn)速度最快idata單片機(jī)內(nèi)部自帶RAM空間(256字節(jié))bdata可位尋址的片內(nèi)數(shù)據(jù)存儲(chǔ)器(20H~2FH)xdata單片機(jī)擴(kuò)展RAM空間,當(dāng)EXTRAM=0,指示單片機(jī)內(nèi)部擴(kuò)展RAM,當(dāng)EXTRAM=1,指示單片機(jī)外部擴(kuò)展RAMcode程序存儲(chǔ)器ROM表2.5-2STC單片機(jī)存儲(chǔ)器類型2.5.2內(nèi)部RAM(256字節(jié))和SFR內(nèi)部RAM共256字節(jié),分為三個(gè)部分:低128字節(jié)RAM、高128字節(jié)RAM以及特殊功能寄存器區(qū)。高128字節(jié)RAM和SFR區(qū)共用地址如圖2.5-2(a)所示,都使用80H~FFH,地址空間貌似重疊,但物理上是獨(dú)立的,在使用的時(shí)候,SFR區(qū)的數(shù)據(jù)類型是sfr,實(shí)現(xiàn)了獨(dú)立映射。1.低128字節(jié)RAM低128字節(jié)RAM也稱通用RAM區(qū),包含4個(gè)工作組、1個(gè)位尋址區(qū)、及用戶RAM/堆棧區(qū),內(nèi)部結(jié)構(gòu)如圖2.5-2(b)所示。4個(gè)工作組,每組包含8個(gè)8位的工作寄存器,編號(hào)均為R0-R7,通過(guò)使用工作寄存器組,可以提高運(yùn)算速度。圖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ū)的存儲(chǔ)單元既可以按字節(jié)存取,也可以對(duì)單元中的任何一位單獨(dú)存取。位尋址區(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ū)。在計(jì)算機(jī)領(lǐng)域中堆棧是一個(gè)連續(xù)的存儲(chǔ)空間,用來(lái)存儲(chǔ)計(jì)算機(jī)程序活動(dòng)中需要暫時(shí)保護(hù)的數(shù)據(jù),堆棧區(qū)域一端固定稱為棧底,一端向上生長(zhǎng)稱為棧頂,為了指示棧頂位置,引入特殊功能寄存器堆棧指針SP,它是一個(gè)8位專用寄存器,它指示出堆棧頂部在內(nèi)部RAM塊中的位置,堆棧的規(guī)則是先進(jìn)后出,如圖2.5-3所示。數(shù)據(jù)入棧(PUSH)的過(guò)程:SP先在原值的基礎(chǔ)上自動(dòng)加1(SP=SP+1),然后將要入棧的數(shù)據(jù)存放在SP指定的存儲(chǔ)單元中;數(shù)據(jù)出棧(POP)的過(guò)程:先將SP指向的棧頂單元的內(nèi)容傳送到POP指令給定的寄存器或內(nèi)部RAM單元中,然后SP自動(dòng)減1(SP=SP-1)。`圖2.5-3堆棧先進(jìn)后出示意圖2.5.2內(nèi)部RAM(256字節(jié))和SFR3.特殊功能寄存器區(qū)單片機(jī)RAM的高

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論