版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第一章 從外行到內(nèi)行的引言一、計(jì)算機(jī)能干什么?1. 讓我們看下面的例子:(計(jì)算機(jī)的缺點(diǎn):必須描述非常詳細(xì)并清楚)拿著足夠的錢(qián),打算去買(mǎi)酸奶,桔子和面包,計(jì)劃如下:如果酸奶打折就買(mǎi)兩盒,否則就買(mǎi)一盒,買(mǎi)20個(gè)帶綠葉的桔子,買(mǎi)最新鮮的面包一個(gè)。要求很簡(jiǎn)單,但是寫(xiě)出程序很復(fù)雜,首先寫(xiě)好左邊一列的文字,然后畫(huà)出右列的流程圖,然后就可以使用任何一門(mén)程序語(yǔ)言編程。(1)出門(mén),超市(2)來(lái)到酸奶柜前。(3)酸奶打折嗎?打折拿兩盒,不打折拿一盒。(4)來(lái)到賣(mài)橘子的大筐前。(5)看自己的筐里有20個(gè)砂糖桔嗎?有則跳到(6),否則往下。 拿起下一個(gè)橘子,如果帶綠葉就放在筐里,否則放棄。 回到(5)(6)來(lái)到買(mǎi)面包
2、的架子前,拿起一個(gè)面包。(7)架子上還有其他沒(méi)有看過(guò)的面包嗎?沒(méi)有則跳到(8),否則往下。 查看下一個(gè)面包,如生產(chǎn)日期晚于手上這個(gè),則把兩個(gè)面包換一換,否則不動(dòng)作。 回到(7)(8)來(lái)到收銀臺(tái),付賬。 回家。例二:讓計(jì)算機(jī)解方程(計(jì)算機(jī)的優(yōu)點(diǎn):重復(fù)大量的工作速度很快)讓計(jì)算機(jī)解一元二次方程。x2+bx+c=0,二元一次方程有兩個(gè)系數(shù)。要讓計(jì)算機(jī)解方程,首先要告訴它已知的這兩個(gè)系數(shù),然后它根據(jù)求根公式x1=-b+(b2-4c)1/2,給出兩個(gè)解。(求根公式是數(shù)學(xué)家給出的,只要知道代入b和c可以算出根即可。)計(jì)算機(jī)的執(zhí)行過(guò)程是這樣的:(1)在輸入設(shè)備上輸入b,(2)在輸入設(shè)備上輸入c,(3)調(diào)用事
3、先設(shè)定好的公式,在計(jì)算機(jī)內(nèi)部的運(yùn)算器上,求出x1和x2,(4)在輸出設(shè)備上顯示x1,(5)在輸出設(shè)備上顯示x2。這五步和上個(gè)例子的多個(gè)步驟是一個(gè)概念。通常把這五步稱為程序,把這段程序?qū)懙接?jì)算機(jī)中,就可以讓計(jì)算機(jī)執(zhí)行這段程序,完成“讓計(jì)算機(jī)解方程”的功能。要讓計(jì)算機(jī)解一個(gè)方程,得不償失,但是解一萬(wàn)個(gè)方程就合適了。不過(guò)如何輸入和獲得結(jié)果?可以寫(xiě)這樣一個(gè)文本文件,讓計(jì)算機(jī)讀取后改寫(xiě),幾分鐘可能就搞定了。輸入的文件形式輸出的文件形式b=3 c=2b=7 c=12b=7 c=15b=3 c=2 : x1=1 x2=2b=7 c=12 : x1=3 x2=4b=8 c=15 : x1=3 x2=5綜上所述
4、,要使用計(jì)算機(jī),就要克服其缺點(diǎn),利用其優(yōu)點(diǎn)。要耐心詳細(xì)的編制程序,然后把這個(gè)程序反復(fù)運(yùn)行很多遍。程序(program)是為實(shí)現(xiàn)特定目標(biāo)或解決特定問(wèn)題而用計(jì)算機(jī)語(yǔ)言編寫(xiě)的命令序列的集合。為實(shí)現(xiàn)預(yù)期目的而進(jìn)行操作的一系列語(yǔ)句和指令。二、計(jì)算機(jī)的結(jié)構(gòu):計(jì)算機(jī)硬件由運(yùn)算器、控制器、存儲(chǔ)器、輸入設(shè)備和輸出設(shè)備五大部件組成。 由于運(yùn)算器和控制器一般做在一個(gè)芯片上,合稱CPU(Central Processing Unit,中央處理單元)。CPU的發(fā)展是多樣化的。就像動(dòng)物進(jìn)化,一開(kāi)始大家都是單細(xì)胞動(dòng)物,發(fā)展到后來(lái)變成了鳥(niǎo),魚(yú),人類,或者牛羊。CPU發(fā)展到后來(lái),追求的目標(biāo)不一樣,包括運(yùn)算速度更快,能
5、力更高,體積更小,更便宜,更省電,等等。發(fā)展至今,科學(xué)用的超大型計(jì)算機(jī)非專業(yè)人士看不到不用管,一般的臺(tái)式計(jì)算機(jī)用的CPU追求的是“更快更強(qiáng)”,但體積太大,發(fā)熱量太大,太耗電。手機(jī)用CPU,追求的是“低功耗,性能好,體積小”,但價(jià)格太貴;一般玩具用簡(jiǎn)單控制CPU,雖然能力差,但夠用就行,而且體積小,價(jià)格便宜。所以,不要用最好的,要用就用最合適的。這就是為什么35年前的8051芯片,現(xiàn)在只賣(mài)10塊錢(qián)但是仍然那么流行。下面三行分別就是臺(tái)式機(jī)、手機(jī)和8051的芯片圖片。本節(jié)只引入CPU和存儲(chǔ)器的概念??刂破骱瓦\(yùn)算器稱CPU,其功能就是讀取指令和執(zhí)行指令。指令在存儲(chǔ)器存放。其中控制器比較復(fù)雜,本節(jié)僅引入
6、一個(gè)基本功能。下面用一個(gè)例子來(lái)說(shuō)明CPU和存儲(chǔ)器??紤]某房間有一個(gè)人,一個(gè)工作臺(tái),很多排列整齊的抽屜,一個(gè)入口和一個(gè)出口。這個(gè)人就是控制器,(他帶著一個(gè)能夠跳數(shù)字的物品,稱為程序指針)。工作臺(tái)就是運(yùn)算器,抽屜是存儲(chǔ)器,每個(gè)存儲(chǔ)器中放一個(gè)紙條,這個(gè)紙條就稱為程序;入口和出口是輸入和輸出。一上電,相當(dāng)于這個(gè)人就醒了,他醒了之后就看自己的“程序指針”,發(fā)現(xiàn)是000,于是他就去看第0個(gè)抽屜。(注意,計(jì)算機(jī)都是從0開(kāi)始編號(hào),所以首個(gè)編號(hào)是0);他從抽屜0中拿出紙條放在工作臺(tái)上,然后把程序指針撥動(dòng)一下到1,然后低頭看紙條內(nèi)容。上面寫(xiě)著,“請(qǐng)到入口接一個(gè)數(shù)b”,于是這個(gè)人就到入口等著,會(huì)有人給他一個(gè)數(shù),拿到
7、數(shù)了以后,當(dāng)前放在工作臺(tái)上的紙條的命令就執(zhí)行結(jié)束了;他看一下“程序指針”,現(xiàn)在指著1;他打開(kāi)抽屜1,拿出紙條放在工作臺(tái)上,把程序指針撥動(dòng)一下到2,然后低頭看內(nèi)容,“把b這個(gè)數(shù)放在9號(hào)抽屜”,于是他打開(kāi)9號(hào)抽屜把b放入,此條程序執(zhí)行完成; 他看一下“程序指針”,現(xiàn)在指著2;他打開(kāi)抽屜2,拿出紙條放在工作臺(tái)上,把程序指針撥動(dòng)一下到3,然后低頭看內(nèi)容,“請(qǐng)到入口接一個(gè)數(shù)c”,于是做了這件事情,此條程序執(zhí)行完成;他看一下“程序指針”,現(xiàn)在指著7;他打開(kāi)抽屜7,拿出紙條放在工作臺(tái)上,把程序指針撥動(dòng)一下到8,然后低頭看內(nèi)容,“請(qǐng)把程序指針減一”,于是他把程序指針減一,改成了7,然后此條程序執(zhí)行完成;(這一
8、句一直在循環(huán))抽屜0請(qǐng)到入口接一個(gè)數(shù)b抽屜1把b這個(gè)數(shù)放在9號(hào)抽屜抽屜2請(qǐng)到入口接一個(gè)數(shù)c抽屜3把c這個(gè)數(shù)放在10號(hào)抽屜抽屜4把9號(hào)抽屜和10號(hào)抽屜的數(shù)做運(yùn)算,結(jié)果送到11號(hào)抽屜抽屜5抽屜6把11號(hào)抽屜的數(shù)送到出口抽屜7站在原地不動(dòng)。抽屜8抽屜9這里會(huì)放一個(gè)數(shù)b抽屜10這里會(huì)放一個(gè)數(shù)c抽屜11這里會(huì)放一個(gè)計(jì)算好的數(shù)等在這里重要注釋:存儲(chǔ)器是一個(gè)個(gè)排列有序的格子,這個(gè)是硬件;存儲(chǔ)器中存放的內(nèi)容是軟件。我們要建立一個(gè)概念,同樣是存儲(chǔ)器,可以放用來(lái)執(zhí)行的程序,也可以放用來(lái)計(jì)算的數(shù)據(jù),就看寫(xiě)程序的人怎么指定,純屬程序員的個(gè)人愛(ài)好。例如,編號(hào)是120-127號(hào)的這段存儲(chǔ)器可以存放“請(qǐng)輸出a+b”這段程序
9、;而編號(hào)128-199號(hào)這段存儲(chǔ)器可以空著;編號(hào)是200-208號(hào)的這段存儲(chǔ)器可以存放“1,2,3,4,5,6,7,8”這幾個(gè)數(shù)字。重要注釋:為什么到6不結(jié)束,因?yàn)槌绦驔](méi)有結(jié)束指令,只要上電就必須一直的運(yùn)行。所以只能用一個(gè)死循環(huán)假裝結(jié)束。第二章 存儲(chǔ)器一、存儲(chǔ)器的各項(xiàng)指標(biāo):首選我們建立一個(gè)概念,就是存儲(chǔ)器是有寬度的。假設(shè)一排的抽屜一共8192個(gè),第一個(gè)抽屜編號(hào)是0,第二個(gè)抽屜編號(hào)是1,最后一個(gè)編號(hào)是8191?,F(xiàn)在我們要去買(mǎi)標(biāo)簽紙給抽屜編號(hào),請(qǐng)問(wèn)需要買(mǎi)能寫(xiě)下多少個(gè)數(shù)字的標(biāo)簽紙?答:能寫(xiě)下4個(gè)數(shù)字的標(biāo)簽紙。于是8192號(hào)就正好寫(xiě)下了,那么0號(hào)怎么寫(xiě)?寫(xiě)最左邊還是最右邊?最好的辦法是寫(xiě)成0000;同
10、理,可以把10號(hào)寫(xiě)成0010。123號(hào)寫(xiě)成0123。其實(shí)拉開(kāi)抽屜也是一樣,一個(gè)抽屜也就是一個(gè)存儲(chǔ)單元,只能放下八個(gè)二進(jìn)制的1,等于存放一個(gè)字母“A”的大小,一個(gè)單詞“Apple”需要連續(xù)存放五個(gè)抽屜即五個(gè)存儲(chǔ)單元?;旧衔覀兡芤?jiàn)到的存儲(chǔ)器,寬度都是一樣的,我們稱為該寬度是一個(gè)字節(jié)。既然每個(gè)存儲(chǔ)單元的容量是一樣的,該存儲(chǔ)器的總?cè)萘坑卸嗌?,取決于它有多少個(gè)存儲(chǔ)單元,普通的計(jì)算機(jī)有很多,對(duì)于8051來(lái)說(shuō),只有幾百個(gè)。二、存儲(chǔ)器如何存儲(chǔ)數(shù)據(jù)?計(jì)算機(jī)只能存儲(chǔ)0和1,我們?nèi)绾斡?和1存儲(chǔ)數(shù)字,字母,符號(hào)和漢字?1、二進(jìn)制,十進(jìn)制和十六進(jìn)制二進(jìn)制數(shù)表示逢二進(jìn)一,十六進(jìn)制表示逢十六進(jìn)一,二進(jìn)制后綴用B表示,例
11、如10001000B;十進(jìn)制用D表示,例如57D;十六進(jìn)制用H表示,例如CH;在十六進(jìn)制中,因?yàn)閿?shù)字只有0-9,所以人們用A表示10,B表示11,C表示12,D表示13,E表示14,F(xiàn)表示15。所以CH其實(shí)就是十進(jìn)制的12D。因?yàn)槿藗兂S檬M(jìn)制,所以凡是不帶后綴的,都視為十進(jìn)制,也就是57D可以簡(jiǎn)化成57。為什么要用十進(jìn)制?因?yàn)槿藗兌家盟?;為什么要用二進(jìn)制?因?yàn)橛?jì)算機(jī)要用它;可是為什么要用十六進(jìn)制呢?因?yàn)樗膫€(gè)二進(jìn)制等于一個(gè)十六進(jìn)制,也就是說(shuō),十六進(jìn)制是二進(jìn)制的縮寫(xiě)。極大了方便了人們的描述。因此人們和計(jì)算機(jī)打交道的時(shí)候通常先使用十六進(jìn)制進(jìn)行描述,向計(jì)算機(jī)寫(xiě)的時(shí)候,機(jī)器會(huì)自動(dòng)按照一變四的方式直接
12、轉(zhuǎn)化為二進(jìn)制。所以,二進(jìn)制和十六進(jìn)制的互相轉(zhuǎn)化很簡(jiǎn)單,因?yàn)?,可以把二進(jìn)制每四個(gè)分成一組,每組直接轉(zhuǎn)化,對(duì)于每個(gè)存儲(chǔ)單元中的八個(gè)二進(jìn)制數(shù),正好可以轉(zhuǎn)化成兩個(gè)十六進(jìn)制數(shù),如下:0000B=0H0001B=1H0010B=2H0011B=3H0100B=4H0101B=5H0110B=6H0111B=7H1000B=8H1001B=9H1010B=AH1011B=BH1100B=CH1101B=DH1110B=EH1111B=FH例子:00001111B = 0000 1111 B = 0FH;0000 0000 = 00H00010001B = 0001 0001 B = 11H;1111 111
13、1 = FFH所以,上面所述,一個(gè)存儲(chǔ)單元有八個(gè)二進(jìn)制數(shù)11111111B,那么改為:一個(gè)存儲(chǔ)單元有兩個(gè)十六進(jìn)制數(shù)FFH。2. 二進(jìn)制表示正整數(shù)最簡(jiǎn)單的是正整數(shù)的存儲(chǔ),例如57,用0和1怎么表示,這就是二進(jìn)制和十進(jìn)制的轉(zhuǎn)化,書(shū)上的例子自己可以看,我們抓住其本質(zhì),就是任何一個(gè)進(jìn)制下的數(shù)都可以用十進(jìn)制數(shù)的下列公式表示。對(duì)每一位做:數(shù)值乘以進(jìn)制的“位數(shù)減一次方”,然后求和。(如果描述不好請(qǐng)參考下面的例子)例如十進(jìn)制57D 等于5乘以10的一次方加7乘以10的零次方。十進(jìn)制以10為底: 二進(jìn)制以2為底: 十六進(jìn)制以16為底:上面的三個(gè)等式,左邊是不同的進(jìn)制,右邊是某個(gè)常用的統(tǒng)一的進(jìn)制,因?yàn)槭M(jìn)制是人們
14、普遍熟悉的,因此右邊通常采用十進(jìn)制。上面提到一個(gè)存儲(chǔ)單元可以放八個(gè)1,也就是最小00000000(即00H),最大11111111(即FFH)。也就是一個(gè)存儲(chǔ)單元存正整數(shù),可以表示0到255。為了方便轉(zhuǎn)化,需要牢記2的次方如下:例一:存儲(chǔ)單元中有一個(gè)數(shù)是00001111請(qǐng)問(wèn)這個(gè)數(shù)十進(jìn)制是多少?答:例二:請(qǐng)問(wèn)把十進(jìn)制正整數(shù)17放入存儲(chǔ)器后是二進(jìn)制多少?答:反過(guò)來(lái)轉(zhuǎn)化通常使用湊數(shù)法,把17寫(xiě)成各個(gè)2的不同次方相加。17D因?yàn)槎际前宋?,最后前面補(bǔ)全,最終結(jié)果17D=00010001B3. 二進(jìn)制表示正小數(shù)(帶小數(shù)點(diǎn)的數(shù)):上面的表示法同樣適用于小數(shù),例如:十進(jìn)制: 二進(jìn)制:十六進(jìn)制:例一:把25.8
15、H轉(zhuǎn)化為十進(jìn)制。答:例二:把12.25D轉(zhuǎn)化為二進(jìn)制和十六進(jìn)制。同上,把12.25D表示乘2的次方。補(bǔ)全為:0000 1100.0100 0000B,每四位化成一個(gè)十六進(jìn)制:0C.40H習(xí)題:把35.8H化成十進(jìn)制。(答案:53.5D)把7.75化成十六進(jìn)制和二進(jìn)制。(答案:7.CH或07.C0H)4. 二進(jìn)制表示負(fù)整數(shù)上面說(shuō)了,一個(gè)存儲(chǔ)單元八個(gè)二進(jìn)制數(shù),可以表示正整數(shù)0-255共256個(gè)數(shù)。那么如何表示負(fù)數(shù)?起先,人們使用左邊最高位作為符號(hào)位,其他的作為數(shù)字位,例如00000001表示正1,10000001表示負(fù)1,這樣的表示直觀,但是這樣會(huì)出現(xiàn)一個(gè)問(wèn)題,00000000表示正0,10000
16、000表示負(fù)0,這樣,0這個(gè)數(shù)就有兩種表示方法,不科學(xué),因此,人們想出了另一種方法,在00000000八位中,最高位如果是1,表示負(fù)128,其他七位表示正數(shù)。在了解原理之后,在計(jì)算時(shí),通常使用兩種方法,算法1:按照定義,先從被求數(shù)中提出一個(gè)-128,剩下的按照正數(shù)計(jì)算,通常遠(yuǎn)離0的數(shù)用此方法。算法2:按照書(shū)上的方法,先算被求數(shù)的正數(shù),然后全部取反,然后加1計(jì)算。通??拷?的數(shù)用此方法。例1:計(jì)算十進(jìn)制-121的二進(jìn)制。答:-121遠(yuǎn)離0,使用算法1:先從-121中提出一個(gè)-128,剩下的按照正數(shù)計(jì)算。例2:計(jì)算十進(jìn)制-2的二進(jìn)制。答:-2靠近0,使用算法2:先求正2的二進(jìn)制,然后按位取反加1。
17、取反表示把0改成1,1改成0,請(qǐng)看例子。(1)(2) 按位取反為 ,(3) (4)最終得到:例3:計(jì)算十進(jìn)制-128、127、-1的二進(jìn)制。答:11111111B如果按照正數(shù)解釋是255,如果按照負(fù)數(shù)解釋是-1。同樣一個(gè)內(nèi)容可以表達(dá)不同的意思,正如你給人寫(xiě)張紙條,約人明天8點(diǎn)見(jiàn)面,紙條只負(fù)責(zé)記錄8點(diǎn)這個(gè)數(shù),它不知道是上午還是下午八點(diǎn),只有寫(xiě)的人和看的人才知道。綜上:用一個(gè)字節(jié),也就是八位的二進(jìn)制來(lái)表示數(shù),如果最高位是0,即01111111,此時(shí)沒(méi)有分歧,無(wú)論如何都表示0127;如果最高位是1,即11111111,那么需要判斷,如果表示正數(shù),則最高位的1表示128,此時(shí)該二進(jìn)制可以表示0255,
18、如果表示負(fù)數(shù),則最高位表示-128,此時(shí)該八位二進(jìn)制可表示-128127。習(xí)題一:把-10,-110化成二進(jìn)制。習(xí)題二:1000011B表示正數(shù)時(shí)是多少?表示負(fù)數(shù)時(shí)是多少?5.二進(jìn)制表示字母和其他符號(hào)。一百二十三即123是數(shù)字,但是0、1等本身可以作為字符,例如昵稱HYC1975,不能說(shuō)這個(gè)昵稱是三個(gè)字母和一個(gè)數(shù)組成,而說(shuō)是由七個(gè)字符組成。像a、b、c這樣的52個(gè)字母、一些常用的符號(hào)(例如*、#、等)在計(jì)算機(jī)中存儲(chǔ)時(shí)也要使用二進(jìn)制數(shù)來(lái)表示。為了表示這些字符,人們把這些字符進(jìn)行了排序并且編號(hào),美國(guó)有關(guān)的標(biāo)準(zhǔn)化組織出臺(tái)了ASCII編碼,統(tǒng)一規(guī)定了上述常用符號(hào)用哪些二進(jìn)制數(shù)來(lái)表示。例如大寫(xiě)字母A的編
19、號(hào)是65號(hào)。下表是最簡(jiǎn)單版本的ASCII表格,分為三個(gè)部分,最上面一行是“高位”,讀取的時(shí)候統(tǒng)一在左邊填一個(gè)零;最左邊一列是“低位”;右下方一個(gè)矩形是符號(hào)的位置,一共8*16=128個(gè)符號(hào),分別用00000000111111表示。我們可以這樣查:看到符號(hào)“A”,向上看到100,填零變成0100,向左看到0001,那么A的編號(hào)就是0100 0001B,也就是十六進(jìn)制的41H,十進(jìn)制的65D。也就是說(shuō),按照國(guó)際規(guī)定,從一個(gè)存儲(chǔ)單元讀出41H,如果看作是數(shù)字,就是65,如果看作是字符,就是A。上表中,我們需要記住關(guān)鍵的字符,0 011 0001是字符“1”或文本“1”,0 100 0001是大寫(xiě)的A
20、,0 110 0001是小寫(xiě)的a。記住這幾個(gè),其他的數(shù)字字符,大寫(xiě)和小寫(xiě)字母都能計(jì)算出來(lái)。還有常用的空格是32D,也就是20H,0010 0000B。例一:查出B的在計(jì)算機(jī)中存儲(chǔ)。答:找到B,向上為0100,向左為0010,因此(B)=01000010B=42H例二:從計(jì)算機(jī)某存儲(chǔ)單元讀出一個(gè)01111001B,它做什么字符解釋?答:去掉第一位0,先查111豎列,1001橫列,得到y(tǒng)。習(xí)題一:查出g在計(jì)算機(jī)中存儲(chǔ)。習(xí)題二:從計(jì)算機(jī)某存儲(chǔ)單元讀出01101000B,做什么字符解釋?6.二進(jìn)制表示漢字。(略)三、通用存儲(chǔ)器和8051的特殊存儲(chǔ)器的其他知識(shí):1、通用存儲(chǔ)器堆和棧的概念在計(jì)算機(jī)領(lǐng)域,棧
21、是一個(gè)不容忽視的概念,棧是一種數(shù)據(jù)項(xiàng)按序排列的數(shù)據(jù)結(jié)構(gòu),只能在一端(稱為棧頂(top)對(duì)數(shù)據(jù)項(xiàng)進(jìn)行插入和刪除。單片機(jī)應(yīng)用中,堆棧是個(gè)特殊的存儲(chǔ)區(qū),主要功能是暫時(shí)存放數(shù)據(jù)和地址,通常用來(lái)保護(hù)斷點(diǎn)和現(xiàn)場(chǎng)。我們這里只要知道,在存儲(chǔ)器中,需要單獨(dú)保留出一塊區(qū)域,用來(lái)留給棧使用即可。2、8051特殊寄存器一些概念8051分程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器。其中程序存儲(chǔ)器專門(mén)放程序,數(shù)據(jù)存儲(chǔ)器專門(mén)放數(shù)據(jù)。8051可以訪問(wèn)到的程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器都是65536個(gè),但是作為一個(gè)小芯片,8051內(nèi)部不可能有那么大的空間裝怎么多存儲(chǔ)器,所以,要建立8051具有內(nèi)部程序存儲(chǔ)器和內(nèi)部數(shù)據(jù)存儲(chǔ)器的概念。外部程序存儲(chǔ)器和外部數(shù)據(jù)
22、存儲(chǔ)器需要外接硬件,后面再闡述。還要建立型號(hào)的概念,例如8031和8051的區(qū)別就在于后者有內(nèi)部程序存儲(chǔ)器,而前者沒(méi)有。這就像手機(jī)榮耀7i (ATH-AL00)和榮耀7i (ATH-TL00H),型號(hào)差一個(gè)字母,前者3G的內(nèi)存,后者2GB內(nèi)存,其他地方一模一樣。8031,8051,80C51,89C52、等等許多芯片,統(tǒng)稱為8051系列。對(duì)于我們學(xué)習(xí)的8051,其片內(nèi)有4096個(gè)字節(jié)的程序存儲(chǔ)器,學(xué)習(xí)編程用足夠了,更重要的是片內(nèi)有255個(gè)數(shù)據(jù)存儲(chǔ)器,其中可以自由用的只有幾十個(gè),其它都被CPU征用掉了,包括剛才的棧。后面再闡述。注釋:(可以略過(guò))存儲(chǔ)器分哈佛結(jié)構(gòu)和馮諾依曼結(jié)構(gòu)。哈佛結(jié)構(gòu)把程序和數(shù)
23、據(jù)分來(lái)放,馮諾依曼結(jié)構(gòu)把兩者放在一起。但是哈佛結(jié)構(gòu)還要求數(shù)據(jù)和地址線獨(dú)用,所以8051也不能算哈佛結(jié)構(gòu)。3、存儲(chǔ)器其他概念:有些存儲(chǔ)器失去電源了,內(nèi)容還在,例如優(yōu)盤(pán)和硬盤(pán);另一些例如臺(tái)式機(jī)、手機(jī)的內(nèi)存,失電了內(nèi)容就沒(méi)了。前者稱為非易失性存儲(chǔ)器,后者稱為易失性存儲(chǔ)器。在非易失性存儲(chǔ)器中,又可以分為不可改寫(xiě)的存儲(chǔ)器,例如光盤(pán);紫外線可擦除的存儲(chǔ)器,例如某些專用存儲(chǔ)器;電可擦除存儲(chǔ)器,例如優(yōu)盤(pán),也就是閃存盤(pán),硬盤(pán)。上面講的大部分正確,但是在存儲(chǔ)器日新月異的現(xiàn)代,某些分類變得越來(lái)越模糊,所以很難區(qū)分某些存儲(chǔ)器屬于哪一類。存儲(chǔ)器讀取的速度通常比較寫(xiě)的速度快;更多存儲(chǔ)器的概念請(qǐng)看專業(yè)書(shū)籍。第三章 CPU執(zhí)
24、行程序和指令系統(tǒng)一、CPU的時(shí)序和指令人的心臟從出生開(kāi)始就永久的周期性運(yùn)行。心臟舒張時(shí)靜脈血液回流入心,心臟收縮時(shí)血液泵到動(dòng)脈。心臟每收縮和舒張一次構(gòu)成一個(gè)心動(dòng)周期。如以成年人平均心率每分鐘75次計(jì),每一心動(dòng)周期平均為0.8秒,其中心房收縮期平均為0.1秒,舒張期平均為0.7秒。單片機(jī)的CPU和人的心臟一樣,一旦上電,就按照一定的頻率執(zhí)行指令,根據(jù)這個(gè)頻率,產(chǎn)生幾個(gè)周期概念。最短的周期是晶振做振蕩一次,稱為一個(gè)振蕩周期;12個(gè)振蕩周期構(gòu)成一個(gè)機(jī)器周期,在一個(gè)機(jī)器周期內(nèi),CPU可以完成取指令和執(zhí)行大部分簡(jiǎn)單指令的動(dòng)作。和心臟不同的是,人的血液是均勻的,指令不是,有些指令一個(gè)機(jī)器周期完成不了,需要
25、兩個(gè)機(jī)器周期或者四個(gè)機(jī)器周期才能完成。8051系列的單片機(jī)一共有111條指令,其中64條單周期指令,45條雙周期指令和2條四周期指令。二、CPU的常用控制資源CPU要從存儲(chǔ)單元中取出指令并執(zhí)行,前面提到至少需要一個(gè)稱為“程序指針”的資源,來(lái)判定從哪里讀取下一條指令。其實(shí)還需要很多其他的附屬資源。所有這些資源其實(shí)都不是額外的,芯片設(shè)計(jì)者事先定好了存儲(chǔ)器的某些特殊地址來(lái)存放這些資源,CPU在執(zhí)行時(shí)可以照章辦事的使用這些資源。80C51單片機(jī)內(nèi)部有多個(gè)用于存儲(chǔ)各個(gè)參數(shù)的存儲(chǔ)單元,稱為寄存器:累加寄存器,簡(jiǎn)稱累加器:A,是專門(mén)存放算術(shù)或邏輯運(yùn)算的一個(gè)操作數(shù)和運(yùn)算結(jié)果的寄存器。能進(jìn)行加、減、讀出、移位、
26、循環(huán)移位和求補(bǔ)等操作。是運(yùn)算器的主要部分。芯片設(shè)計(jì)者指定存儲(chǔ)單元E0H作為A的地址。普通寄存器:R0R7共8個(gè)。用來(lái)存放一般數(shù)據(jù),其實(shí)R0就是內(nèi)部數(shù)據(jù)存儲(chǔ)器00H的別稱,“向R0中存數(shù)據(jù)”和“向00H中存數(shù)據(jù)”是一個(gè)意思。標(biāo)志寄存器:PSW;這是一個(gè)存放條件標(biāo)志、控制標(biāo)志的寄存器,主要用于反映處理器的狀態(tài)和運(yùn)算結(jié)果的某些特征及控制指令的執(zhí)行。后面用到時(shí)解釋。設(shè)計(jì)者指定內(nèi)部數(shù)據(jù)存儲(chǔ)器的第D0H號(hào)單元作為PSW的地址。80C51單片機(jī)內(nèi)部有三個(gè)常用的指針,即:程序指針PC:存放下一條將要從程序存儲(chǔ)器取出的指令的地址;PC是唯一一個(gè)沒(méi)有地址的資源。數(shù)據(jù)指針DPTR: 16位的特殊功能寄存器, 其高位
27、字節(jié)寄存器用DPH表示,低位字節(jié)寄存器用DPL表示,DPTR既可以作為一個(gè)16位的寄存器來(lái)處理,也可以作為兩個(gè)獨(dú)立的8位寄存器來(lái)使用。主要功能是存放16位地址,作為片外RAM尋址用的地址寄存器(間接尋址),故稱數(shù)據(jù)指針,也可以將外部RAM中地址的內(nèi)容傳送到內(nèi)部RAM的地址所指向的內(nèi)容中。DPH和DPL的地址分別為83H、82H。堆棧指針SP:80C51在片內(nèi)數(shù)據(jù)存儲(chǔ)器中開(kāi)辟棧區(qū),按"先進(jìn)后出"的原則存取數(shù)據(jù)。堆棧指針總是指向棧頂元素,開(kāi)機(jī)復(fù)位后,單片機(jī)棧底和棧頂?shù)刂窞?7H。數(shù)據(jù)入棧的時(shí)候,堆棧指針先加1,再壓棧。出棧的時(shí)候先彈出數(shù)據(jù),堆棧指針再減1。棧的用處主要用來(lái)保存臨
28、時(shí)數(shù)據(jù),局部變量和中斷/調(diào)用子程序程序的返回地址。SP的地址為81H。三、8051系列的指令系統(tǒng)任何復(fù)雜的結(jié)構(gòu)都是由簡(jiǎn)單的結(jié)構(gòu)組成的,世界上多么復(fù)雜的數(shù)學(xué)公式,都是由六種最基本的公式經(jīng)過(guò)四則運(yùn)算和復(fù)合組成的。任何一種計(jì)算機(jī)程序也是一樣,8051的設(shè)計(jì)者一共提供了111種指令,就可以實(shí)現(xiàn)絕大多數(shù)的需求了。180C51指令的分類:80C51的指令系統(tǒng)共有111條指令,按其功能可分為5大類:數(shù)據(jù)傳送類指令,算術(shù)運(yùn)算類指令,邏輯運(yùn)算類指令,控制轉(zhuǎn)移類指令和布爾操作類指令。在80C51系列的指令系統(tǒng)中,有單子節(jié)指令,雙子節(jié)指令,和三字節(jié)指令。還可按指令執(zhí)行時(shí)間分類: 單周期指令(65),雙周期指令(44
29、條),四周期指令(2條)。2. 80C51的尋址方式:?jiǎn)纹瑱C(jī)尋址方式就是指尋找操作數(shù)或操作地址的方式,常用的尋址方式有七種。在用到的時(shí)候,請(qǐng)自行查閱上的相關(guān)表格。第四章 8051的純軟程序示例一、執(zhí)行程序段后,PSW的結(jié)果;CPU的使用的多種資源中,有一個(gè)資源是PSW,稱為程序狀態(tài)字,因?yàn)橐粋€(gè)字節(jié)是八個(gè)二進(jìn)制,因此PSW可以記錄八個(gè)狀態(tài)。其中初學(xué)者需要關(guān)心的是下面四個(gè):(1)Cy(PSW.7),進(jìn)位標(biāo)志位,表示加法運(yùn)算中的進(jìn)位和減法運(yùn)算中的借位,加法運(yùn)算中有進(jìn)位或減法運(yùn)算中有借位則CY位置1,否則為0(2)Ac(PSW.6),輔助進(jìn)位標(biāo)志位,當(dāng)?shù)退奈幌蚋咚奈唤柽M(jìn)位時(shí)Ac被置1,否則清0。(5)
30、OV(PSW.2)溢出標(biāo)志位,在執(zhí)行有符號(hào)運(yùn)算時(shí),若運(yùn)算結(jié)果超過(guò)了8位二進(jìn)制數(shù)所能表示數(shù)據(jù)的范圍即有符號(hào)數(shù)-128+127,則標(biāo)志位置1。(7)P(PSW.0):奇偶標(biāo)志位,判斷累加器A中1的個(gè)數(shù),如是奇數(shù)個(gè)就被置1。例一:MOV A, #0ACH ; 解釋成無(wú)符號(hào)數(shù)是173,解釋成有符號(hào)數(shù)是-84ADD A, #80H ; 解釋成無(wú)符號(hào)數(shù)是128,解釋成有符號(hào)數(shù)是-128二進(jìn)制計(jì)算有符號(hào)數(shù)計(jì)算1010 1100+ 1000 0000(1) 0010 1110 =2EH第四位向第五位沒(méi)有進(jìn)位,因此Ac=0;00101110中1的個(gè)數(shù)4,因此P=0 -84+ -128 -212看上面的表格,80
31、51在做ADD A,80H的時(shí)候,不管程序員存的是無(wú)符號(hào)還是有符號(hào)數(shù),一概按表格最左邊二進(jìn)制方法計(jì)算,然后把0010 1110這個(gè)數(shù)存入A。對(duì)于狀態(tài)字,因?yàn)槎M(jìn)制計(jì)算時(shí)有進(jìn)位,因此CY=1;然后再按表格右邊有符號(hào)數(shù)計(jì)算一次,如果超過(guò)-128127,就把OV置一。所以,上述例子的執(zhí)行結(jié)果是:(A)=2EH,(Cy)=1,(AC)=0,(P)=0,(OV)=1例二:MOV A, #0D3H ; 解釋成無(wú)符號(hào)數(shù)是211,解釋成有符號(hào)數(shù)是 -45ADD A, #0E8H ; 解釋成無(wú)符號(hào)數(shù)是232,解釋成有符號(hào)數(shù)是 -24二進(jìn)制計(jì)算有符號(hào)數(shù)計(jì)算1101 0011+) 1110 1000 (1) 101
32、1 1011 = BBH第四位向第五位沒(méi)有進(jìn)位,因此Ac=0;10111011中1的個(gè)數(shù)6,因此P=0- 45 + - 24 - 69 因?yàn)槎M(jìn)制計(jì)算時(shí)有進(jìn)位,所以Cy=1;按有符號(hào)計(jì)算沒(méi)有超限,所以O(shè)V=0。則結(jié)果: CY=1,AC=0,P=0,OV=0,(A)=BBH (按有符號(hào)計(jì)算則D3H+E8H=BBH是正確)例三:設(shè)(A)=49H,Cy=0,執(zhí)行SUBB A,#54H (49H=73D;54H=84D)二進(jìn)制計(jì)算有符號(hào)數(shù)計(jì)算49H = 0100 1001-) 54H = 0101 0100 1111 0101 = F5H第四位向第五位沒(méi)有進(jìn)位,因此Ac=0;1111 0101中1的個(gè)
33、數(shù)4,因此P=0 73 - 84 - 11D = F5H因?yàn)橛薪栉?,所以Cy=1;按有符號(hào)計(jì)算沒(méi)有超限,所以O(shè)V=0。則結(jié)果:CY=1,AC=0,P=0,OV=0,(A)=F5H(真值-11,按有符號(hào)計(jì)算是正確的)二、軟件延時(shí):寫(xiě)高級(jí)語(yǔ)言時(shí),寫(xiě)個(gè)sleep(1),就可以延時(shí)1秒;寫(xiě)匯編語(yǔ)言,計(jì)算的就比較精確,設(shè)單片機(jī)的晶振頻率為12MHz,則震蕩一次的時(shí)間為秒,一個(gè)機(jī)器周期等于12個(gè)震蕩周期,即一個(gè)機(jī)器周期的時(shí)間是秒。下面是延時(shí)的標(biāo)準(zhǔn)程序,事先查出指令MOV Rn, #data的執(zhí)行時(shí)間是1個(gè)機(jī)器周期,指令NOP是1個(gè)機(jī)器周期,指令DJNZ Rn, Rel是2個(gè)機(jī)器周期。則計(jì)算方法如下:DEL
34、AY:MOV R7, #200; DEL1: MOV R6, #123; NOP;DJNZ R6, $;DJNZ R7, DEL1; RET;看右邊的流程圖,執(zhí)行第1條指令花去了一個(gè)機(jī)器周期,執(zhí)行第2、3條指令各花去一個(gè)機(jī)器周期,執(zhí)行一次第4條指令花費(fèi)兩個(gè)機(jī)器周期,這一條指令會(huì)反復(fù)執(zhí)行123次,共花費(fèi)123*2個(gè)機(jī)器周期,然后才會(huì)落到第5條指令,所以,從第2條指令執(zhí)行到第5條需要的機(jī)器周期為:1*1 + 1*1 + 123*2 +1*2第5條指令會(huì)根據(jù)R7的內(nèi)容判斷,前199次會(huì)跳到標(biāo)號(hào)處執(zhí)行,也就是第2條指令到第5條指令這一段,會(huì)重復(fù)執(zhí)行200次。其指令的指令周期公式為:200 *(1*1
35、+ 1*1 + 123*2 +1*2) 加上第一條和第六條指令各執(zhí)行了一次,前后各加一,得到最終的公式:t=1+200(1+1+2*123+2)+1»50000us=50ms三、數(shù)據(jù)傳送將片內(nèi)RAM從20H開(kāi)始(增址方向)存放的8個(gè)單字節(jié)數(shù)據(jù)傳送到片內(nèi)30H開(kāi)始(增址方向)的單元中。本段為原實(shí)驗(yàn)注釋:分析:數(shù)據(jù)塊傳送,注意數(shù)據(jù)存放位置和順序。流程:初始化、取數(shù)、送數(shù)、循環(huán)。尋址方式:源、目的兩操作數(shù)均用寄存器間址(r0,r1)。注意:循環(huán)次數(shù)及循環(huán)結(jié)束控制方式。org 0 ;偽指令,告訴芯片從0000號(hào); 存儲(chǔ)單元開(kāi)始存放程序。mov 20H, #01H ;在20H這個(gè)地址先放一個(gè)數(shù)
36、01mov 21H, #02H ;在21H這個(gè)地址先放一個(gè)數(shù)02mov 27H, #07H ;示例而已其他五個(gè)數(shù)不放不要緊deliver: mov r0, #20H;把20H這個(gè)數(shù)放入R0 mov r1, #30H;把30H這個(gè)數(shù)放入R1 mov r2, #8 ;把8這個(gè)數(shù)放入R2 ;程序執(zhí)行到這里見(jiàn)右側(cè)“內(nèi)容1”deloop: mov a, r0 ;見(jiàn)下面解釋。 mov r1, a inc r0 ;R0里面的數(shù)增1 inc r1 djnz r2, deloop ;R2先減1,如不等0跳轉(zhuǎn)到deloop sjmp $ ;原地踏步 end ;程序執(zhí)行到這里見(jiàn)右側(cè)“內(nèi)容2”地址編號(hào)地址內(nèi)容1地址內(nèi)
37、容2。31H空02H30H空01H。21H02H不變20H01H不變。R28H0HR130H38HR020H28H看了上面的程序,MOV 20H,#01H;MOV r0,#20H;inc r0;sjmp $;這些指令都好理解。請(qǐng)自行看書(shū)上的相關(guān)說(shuō)明。mov a, r0 表示R0的內(nèi)容作為地址,帶的指令要讀兩次,第一次讀到R0的內(nèi)容是“20H”,第二次以這個(gè)“20H”為地址讀取其中的內(nèi)容是“01H”,所以是把“01H”放入到寄存器a中。四、數(shù)據(jù)搜索查找在內(nèi)部RAM的20H50H單元中是否有0AAH這一數(shù)據(jù),若有則將51H單元置為01H;若未找到,則將51H單元置為0。分析:將被檢索數(shù)據(jù)集逐一與關(guān)
38、鍵字進(jìn)行比較(作減法)。流程:初始化、取數(shù)、比較、置結(jié)果、循環(huán)。尋址方式:寄存器間址(r0或r1)。比較方式:用SUBB或CJNE均可作比較。注意:循環(huán)次數(shù)及循環(huán)結(jié)束控制方式。org 0search: mov r0, 20H mov a, #0AAH mov 51h, #0seloop: clr c subb a, r0 jnz senext mov 51h, #1 sjmp sedonesenext: inc r0 cjne r0, #50H, seloopsedone: sjmp $ end說(shuō)明:(1) 請(qǐng)查閱帶借位減法subb,累加器A中的內(nèi)容減去另一個(gè)操作數(shù)的內(nèi)容,還要減去進(jìn)位位CY。
39、所以為什么上一條指令要清CY標(biāo)志。(2) JNZ表示累加器A不為零則跳轉(zhuǎn)。JNZ意為Jump if acc is Not Zero(3) cjne這條指令是比較R0與#50H,因?yàn)槭菑?0H開(kāi)始找,找不到就找下一個(gè)地址21H,一直找到50H五、分段賦值:假設(shè)P1口接一速度傳感器,試編寫(xiě)程序根據(jù)速度值設(shè)定寄存器R1的值;要求:速度<10H時(shí),R1=1;速度=10H時(shí),R1=2;速度>10H時(shí)。R1=3ORG 0050HMOV A, P1;CJNE A, #10, L1;MOV R1, #2;LJMP L3;L1: JC L2;MOV R1, #3LJMP L3L2: MOV R1,
40、#1;L3: SJMP $END把P1的值讀入放到累加器A。比較R0與#10H,如果兩者不相等則跳轉(zhuǎn)到L1。如相等就執(zhí)行到這一句,把速度為10H時(shí)該賦的值賦上既然速度等于10H,執(zhí)行完賦值就直接跳到結(jié)尾。速度不為10H就跳到這里。這個(gè)JC有講究見(jiàn)下面。如上句不跳轉(zhuǎn),執(zhí)行到這句說(shuō)明速度>10H,因此賦3賦值完跳轉(zhuǎn)到結(jié)尾。如果JC判斷跳轉(zhuǎn)就到這里,說(shuō)明速度<10H,因此賦1原地踏步程序必須有END做結(jié)尾。CJNE這個(gè)指令教材上有專門(mén)的講解,若兩者相等則罷,如果不相當(dāng),因?yàn)槠鋵?shí)際做了一次減法,因此會(huì)產(chǎn)生CY標(biāo)志,對(duì)于CJNE A, #10, L1;來(lái)說(shuō),如果A中的數(shù)小于#10,則該指令執(zhí)
41、行后,會(huì)導(dǎo)致CY=1,這一點(diǎn)就在JC L2;這一句被利用上了。這一句就是判斷CY,如果CY=1則跳轉(zhuǎn)。結(jié)合上面CJNE這一句,如果A小于#10,就會(huì)導(dǎo)致CY=1,這里就會(huì)跳轉(zhuǎn)。六、使用查表指令編寫(xiě)程序。通常,程序放在程序存儲(chǔ)器,數(shù)據(jù)放在數(shù)據(jù)存儲(chǔ)器,一般,在執(zhí)行程序期間,程序存儲(chǔ)器是只讀的,數(shù)據(jù)存儲(chǔ)器是可讀可寫(xiě)的。但是某些程序中,有一些數(shù)據(jù)是固定的,可以提前設(shè)好的,最典型的就是七段數(shù)碼管,顯示零的時(shí)候點(diǎn)亮某幾個(gè)管子,顯示一的時(shí)候點(diǎn)亮另外某幾個(gè)管子;這些數(shù)據(jù)因?yàn)閺膩?lái)不變,因此可以當(dāng)做是只讀的,可以放在程序存儲(chǔ)器。下面給出一例:將存放在片內(nèi)50H的1位十六進(jìn)制數(shù)轉(zhuǎn)換成相應(yīng)的ASCII碼,保存回原地址
42、。答:因?yàn)橐粋€(gè)存儲(chǔ)單元是8位的,即11111111,換成16進(jìn)制是兩個(gè)F即FF;因此一個(gè)單元其實(shí)存放了兩位的十六進(jìn)制,先只需將1位十六進(jìn)制轉(zhuǎn)換,則這里把高位去掉再轉(zhuǎn)換。此外,請(qǐng)回過(guò)去看本文第二章存儲(chǔ)器的第五點(diǎn),一個(gè)數(shù)字“1”,可以看做一個(gè)數(shù)值,這是保存在存儲(chǔ)器中是01H,但是如果把這個(gè)“1”看成字符,則根據(jù)ASCII表,其保存在存儲(chǔ)器中就是31H。本題的目的就是若原50H內(nèi)的值是1,就表示其數(shù)值為“1”,將轉(zhuǎn)化為ASCII即為31。ORG 0000HMOV A, 50H; /把50H的內(nèi)容放到AANL A, #0FH; /與操作,執(zhí)行后A中原數(shù)為XYH,現(xiàn)在就是0YH,高位被清零MOV DPT
43、R, #TABLE; /把#TABLE的地址的值賦給DPTRMOVC A, A+DPTR; /把程序存儲(chǔ)器中A+DPTR這個(gè)地址的內(nèi)容賦給AMOV 50H, A; /把A的內(nèi)容存入50HSJMP $TABLE: DB 0, 1, 2, 3, 4, 5, 6, 7, 8, 9;DB A, B, C, D, E, F;END本例中這兩句最關(guān)鍵:MOV DPTR, #TABLE; MOVC A, A+DPTR;(1)要理解MOV DPTR, #TABLE;先要說(shuō)道CPU執(zhí)行指令的過(guò)程。先要有編譯軟件把匯編語(yǔ)言改寫(xiě)成機(jī)器碼,然后才能寫(xiě)到存儲(chǔ)器中。編譯軟件先按照書(shū)上的一一對(duì)應(yīng)關(guān)系,把MOV A,0x50
44、 改寫(xiě)成E5 50,放到00 00的存儲(chǔ)器位置。因?yàn)镋5 50占兩個(gè)位置,因此占據(jù)了00 01這兩個(gè)位置。接下來(lái)ANL A,#0x0F被翻譯成54 0F,接著放,那么就放到02 03這兩個(gè)位置,以此類推。寫(xiě)到MOV DPTR, #TABLE;這一句時(shí),知道先把MOV DPTR, XXXX翻譯成90XXXX,后面的這兩個(gè)位置不知道寫(xiě)什么,因此就先把位置占著,繼續(xù)翻譯,直到全部程序翻譯完,如下表。第二次編譯時(shí),才把漏掉的TABLE位置填上。存儲(chǔ)器機(jī)器碼 匯編語(yǔ)言0x00 00E5 50MOV A,0x500x00 0254 0FANL A,#0x0F0x00 0490 00 0CMOV DPTR,
45、#0x000C;這里的00 0C是第二遍翻譯時(shí)寫(xiě)上的0x00 0793 MOVC A,A+DPTR0x00 08F5 50MOV 0x50,A0x00 0A80 FESJMP $0x00 0C30 31 32 33這里開(kāi)始是數(shù)據(jù) ;編譯程序第一遍翻譯到這里,才知道0x00 1034 35 36 27 ;原來(lái)TABLE是代表00 0C的位置。0x00 1438 39 3A 3B0x00 183C一地址放一數(shù)據(jù),只不過(guò)看著方便才把一組數(shù)據(jù)并起來(lái)0x00 193D0x00 1A3E0x00 1B3F(2)MOVC A, A+DPTR;MOVC是從程序存儲(chǔ)器中讀取,讀取的內(nèi)容是從RPTR開(kāi)始算,偏移A
46、個(gè)位置,然后讀出的數(shù)據(jù)放入A保存。例如,A中是3,那么由于DPTR是TABLE的值,也就是000C,因此從A偏移3個(gè)正好是33,33正好代表數(shù)字3的ASCII表示。這個(gè)表示非常典型,可以當(dāng)做一個(gè)整體來(lái)記憶?;旧暇褪瞧叨螖?shù)碼管會(huì)用到。第五章 8051的外部接口一、單片機(jī)的接口89C51共40個(gè)外接管腳,可以分批考慮:(1)主電源引腳VCC,VSS。(2)時(shí)鐘引腳XTAL1,XTAL2。(3)輸入輸出引腳P0、P1、P2、P3共32根。(4)控制引腳:暫時(shí)牢記即可 ALE/PROG(上劃線):地址鎖存有效信號(hào)。 PSEN(上劃線):片外存儲(chǔ)器讀選通信號(hào)。RESET:復(fù)位EA/Vpp:片外存儲(chǔ)器選
47、用端。附:89C51單片機(jī)的低功耗方式包括待機(jī)方式和掉電保護(hù)方式。二、單片機(jī)的擴(kuò)展在由單片機(jī)構(gòu)成的實(shí)際測(cè)控系統(tǒng)中,最小應(yīng)用系統(tǒng)往往不能滿足要求,因此在系統(tǒng)設(shè)計(jì)時(shí)首先要解決系統(tǒng)擴(kuò)展問(wèn)題。單片機(jī)的系統(tǒng)擴(kuò)展主要有程序存儲(chǔ)器(ROM)擴(kuò)展,數(shù)據(jù)存儲(chǔ)器(RAM)擴(kuò)展以及I/O口的擴(kuò)展。89C51單片機(jī)的并行擴(kuò)展三總線包括:地址總線、數(shù)據(jù)總線和控制總線。目前單片機(jī)系統(tǒng)擴(kuò)展的方法有并行擴(kuò)展和串行擴(kuò)展。上面是微機(jī)原理及應(yīng)用的前期內(nèi)容。除此之外,通常89C51額外接其他以下芯片來(lái)實(shí)現(xiàn)常用的功能:例如串口,并口,等。在后續(xù)的課程中會(huì)提到。三、片外擴(kuò)展程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器詳解:這里本次補(bǔ)考復(fù)習(xí)暫時(shí)忽略。深刻體會(huì)上面提到的兩個(gè)
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 上海第二工業(yè)大學(xué)《網(wǎng)絡(luò)直播》2023-2024學(xué)年第一學(xué)期期末試卷
- 弱電入地施工方案
- 2025年度煤礦基建項(xiàng)目施工安全責(zé)任協(xié)議書(shū)4篇
- 2025年度會(huì)議會(huì)展行業(yè)發(fā)展趨勢(shì)研究合同2篇
- 二零二五版餐飲連鎖企業(yè)員工派遣及管理合同3篇
- 二零二五年度集團(tuán)內(nèi)部貸款合同信息化管理協(xié)議2篇
- 江蘇省鹽城市明達(dá)中學(xué)2025屆中考生物適應(yīng)性模擬試題含解析
- 二零二五年度空調(diào)內(nèi)外機(jī)清洗與智能化節(jié)能系統(tǒng)升級(jí)協(xié)議3篇
- 二零二五年度臨建場(chǎng)地安全防護(hù)工程承包合同4篇
- 二零二四年度上海升學(xué)家庭教育培訓(xùn)與規(guī)劃合同3篇
- 領(lǐng)導(dǎo)溝通的藝術(shù)
- 發(fā)生用藥錯(cuò)誤應(yīng)急預(yù)案
- 南潯至臨安公路(南潯至練市段)公路工程環(huán)境影響報(bào)告
- 綠色貸款培訓(xùn)課件
- 大學(xué)生預(yù)征對(duì)象登記表(樣表)
- 主管部門(mén)審核意見(jiàn)三篇
- 初中數(shù)學(xué)校本教材(完整版)
- 父母教育方式對(duì)幼兒社會(huì)性發(fā)展影響的研究
- 新課標(biāo)人教版數(shù)學(xué)三年級(jí)上冊(cè)第八單元《分?jǐn)?shù)的初步認(rèn)識(shí)》教材解讀
- (人教版2019)數(shù)學(xué)必修第一冊(cè) 第三章 函數(shù)的概念與性質(zhì) 復(fù)習(xí)課件
- 重慶市銅梁區(qū)2024屆數(shù)學(xué)八上期末檢測(cè)試題含解析
評(píng)論
0/150
提交評(píng)論