單片機經(jīng)典教程_第1頁
單片機經(jīng)典教程_第2頁
單片機經(jīng)典教程_第3頁
單片機經(jīng)典教程_第4頁
單片機經(jīng)典教程_第5頁
已閱讀5頁,還剩304頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

養(yǎng)生妙招網(wǎng)單片機經(jīng)典教程1什么是單片機?單片機的結(jié)構(gòu)及組成\o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機,專業(yè)名稱—Micro

Controller

Unit(微控制器件),它是由大名鼎鼎的INTEL公司發(fā)明的,最早的系列是MCS-48,后來有了MCS-51,現(xiàn)在還有MCS-96系列,我們經(jīng)常說的51系列單片機就是MCS-51,它是一種8位的單片機,而MCS-96系列則是一種16位的單片機,至于它們之間有何區(qū)別,我們以后會講到。后來INTEL公司把它的核心技術(shù)轉(zhuǎn)讓給了世界上很多的小公司(不過,再小也有幾個億的銷售/年哦),所以世界上就有許多公司生產(chǎn)51系列兼容單片機,比如飛利浦的87

LPC系列,偉邦的W78L系列,達拉斯的DS87系列,現(xiàn)代GSM97系列等等,目前在我國比較流行的就是美國ATMEL公司的89C51它是一種帶Flash

ROM的單片機(至于什么是Flash

ROM,我在這兒先不作介紹,等以后大家學到相關(guān)的知識時自然就會明白),我們的講座就是以該型號的單片機來作實驗的。講到這里,也許有的人會問:我平時在各種書上看到全是講解8031,8051等型號的單片機,它們又有什么不同呢?其實它們同屬于一個系列,只是89C51的單片機更新型一點(事實上,89C51目前正在用89S51代替,我們的實驗系統(tǒng)采用就是89S52的,兼容89C52)。這里隨便說一下,目前國內(nèi)的單片機教材都是以8051為藍本的,盡管其內(nèi)核也是51系列的,但畢竟8051的單片機已經(jīng)屬于淘汰產(chǎn)品,在市場上也很少見到了,所以由此感嘆,國內(nèi)的高等教育是如此的跟不上時代的發(fā)展需要!這話可能會引起很多人的不滿,所以大家千萬別傳出去哦!

二.主要\o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機的分類

再給大家介紹一下我們經(jīng)常在各種刊物上看到的AVR系列和PIC系列\(zhòng)o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機是怎么回事?以便讓大家對單片機的發(fā)展有一個較全面的認識。在沒有學習單片機之前,這是一個令很多初學者非常困惑的問題,這么多的單片機我該先學哪一種呢?

AVR系列\(zhòng)o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機也是ATMEL公司生產(chǎn)的一種8位單片機,它采用的是一種叫RISC(精簡指令集單片機)的結(jié)構(gòu),所以它的技術(shù)和51系列有所不同,開發(fā)設備也和51系列是不通用的,它的一條指令的運行速度可以達到納秒級(即每秒1000000000次),是8位單片機中的高端產(chǎn)品。由于它的出色性能,目前應用范圍越來越廣,大有取代51系列的趨勢,所以學完了51系列的,看來必須學會AVR的才行,可嘆知識爆炸,人生苦短。說完了AVR的,再來說說另一種--PIC系列單片機,它是美國MICROCHIP公司,唉,又是老美,叫微芯公司的生產(chǎn)的另一種8位單片機,它采用的也是RISC的指令集,它的指令系統(tǒng)和開發(fā)工具與51系列更是不同,但由于它的低價格和出色性能,目前國內(nèi)使用的人越來越多,國內(nèi)也有很多的公司在推廣它,不過它的影響力遠沒有51系列的大,所以作為初學者,51系列當然(不,絕對)是首選。

以上幾種只是比較多見的系列,其實世界上還有許多的公司生產(chǎn)各種各樣的\o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機,比如:MOTOROLA的MC68H系列(老牌的單片機),TI的MSP430C系列(極低功耗的單片機),還有日本的TOSHIBA,日立的HITACH,德國的西門子SIEMENS等等,它們都有各自的結(jié)構(gòu)體系,并不與51系列兼容。為了不搞大家的腦筋,這里就不介紹了,等大家入門了以后自己再去研究它吧!現(xiàn)在我們還是回來了解一下51系列單片機到底是個什么東西,它有那些部分組成,請接著往下看:

三.\o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機的結(jié)構(gòu)及組成

\o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機到底是一種什么東東,它究竟能做什么呢?其實它就是一種能進行數(shù)學和邏輯運算,根據(jù)不同使用對象完成不同控制任務的面向控制而設計的集成電路,此話好象有點繞口,沒關(guān)系,大家都應該知道我們經(jīng)常使用的電腦吧,在電腦上,我們可以用不同的軟件在相同的硬件上實現(xiàn)不同的工作。比如我們用WORD可以打字,用PROTEL可以設計圖紙等等,單片機其實也是如此,同樣的芯片可以根

們不同的要求做出截然不同的產(chǎn)品,只不過電腦是面向應用的,而單片機是面向控制的,比如控制一個指示燈的亮和滅,控制一臺電機的啟動和停止等等。

那么它的內(nèi)部究竟由哪些部件組成的呢?大家都知道我們的電腦有很多的零件,比如CPU(中央處理),RAM(內(nèi)存),ROM(程序存儲器),輸入輸出設備(并行串行口)等等,在單片機中這些部件都有,而且還把它們?nèi)孔龅搅艘粔K芯片上(這就是單片機名稱的由來)。

講到這里,您一定會想,這么多零件集成在一塊芯片上,那為什么\o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機的價格會這么便宜(89S51每塊才10元左右),其實原因很簡單功能有強弱,就象我們平時用的PLC,控制一臺數(shù)控機床要用128點的,而控制一臺電機有幾點的就足夠了,另外這種芯片的產(chǎn)量很大,技術(shù)也非常的成熟,自然價格也就很低了。那么單片機是如何來工作的,我們學習單片機又需要做哪些準備呢?對于一個初學者來說這是很有必要了解的:四.學習\o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機的準備工作

首先您需要一臺電腦,這是最基本的,配置嘛,P2以上的就可以了;然后您需要一套開發(fā)\o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機的軟件,這個軟件叫KEIL

C51,它是美國Keil

Software公司專門為MCS-51系列單片機開發(fā)的第三方軟件,最新版本是V7.09,安裝時選擇Uvision2,雖然有2K代碼的限制,但足以滿足我們學習的需要;其次,您還需要一臺編程器,它一種把程序?qū)戇M單片機芯片的設備,這種設備品種很多,操作也很簡單,大家既可以買現(xiàn)成的產(chǎn)品(價格從200多元到2000多元的都有),也可以自己制作;有了這兩樣東西還不行,為了看到程序執(zhí)行的結(jié)果,我們還需要一塊實驗板。

好在現(xiàn)在出現(xiàn)了一種支持在線下載的\o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機,只要滿足一定的外部條件,就能夠直接把匯編的程序下載到目標單片機中。經(jīng)過反復的實驗,我們開發(fā)設計了這樣的一套實驗系統(tǒng),它采用了一套集源代碼編輯、軟件匯編、程序下載于一體的專業(yè)軟件,采用具有在線下載功能的FLASH

ROM單片機89S52,配合本教程,可以完成教程中的每一個實驗。這樣既免去了您添置編程器和仿真器等設備的昂貴費用,又可以直接在實驗板上看到程序執(zhí)行的結(jié)果,更由于采用的是FLASH

ROM的存儲器,燒寫次數(shù)可以達到1000次以上單片機經(jīng)典教程2單片機引腳功能介紹VCC(40):電源+5V。

2.VSS(20):接地,也就是GND。

3.XTL1(19)和XTL2(18):振蕩電路。

\o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機是一種時序電路,必須有脈沖信號才能工作,在它的內(nèi)部有一個時鐘產(chǎn)生電路,有兩種振蕩方式,一種是內(nèi)部振蕩方式,只要接上兩個電容和一個晶振即可;另一種是外部振蕩方式,采用外部振蕩方式時,需在XTL2上加外部時鐘信號(詳細的內(nèi)容將在以后的課程中專門介紹)。

4.PSEN(29):片外ROM選通信號,低電平有效。

5.ALE/PROG(30):地址鎖存信號輸出端/EPROM編程脈沖輸入端。

6.RST/VPD(9):復位信號輸入端/備用電源輸入端。什么是復位信號,為什么要加復位信號?當然也暫時不去管它。

7.EA/VPP(31):內(nèi)/外部ROM選擇端。在30、9腳的功能上不知大家注意沒有,都有一個/,什么意思呢?這是引腳的第二功能,也就是說,該引腳既可以作前面的功能,也可以作后面的功能,至于它是如何工作的,我們暫時也別去研究

8.P0口(39-32):雙向I/O口。9.P1口(1-8):準雙向通用I/0口。

10.

P2口(21-28):準雙向I/0口。11.P3口(10-17):多用途口。I/O就是英文IN/OUT

的縮寫,這些引腳的功能想必大家也都明白了,(就是輸入/輸出的意思),這32個I/O口就是留給我們作連接外圍電路用的,那么它們之間有些什么不同呢?這個問題稍微有點復雜。

二、\o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機的電路連接和開發(fā)過程

\o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機是如何工作的?我們的實驗是讓一個LED燈亮起來,亮哪一個?這就隨便你了,比如我們就讓LED1

亮起來吧,仔細看一下電路圖,LED1接在什么地方呢?接在\o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機的P1.0的引腳(也就是1腳)上,那么按照該電路圖的連接方法,當1腳為高電平時,LED1是不亮的;只有當1腳為低電平時,LED1才會亮起來,怎樣才能讓1腳由高電平變?yōu)榈碗娖侥??我們讓人做事,就必須對她說一聲,也就是發(fā)布命令,想讓單片機工作,也得發(fā)布命令,不過在計算機中那叫指令,我們要讓1腳變?yōu)榈碗娖降闹噶钍荂LR

P1.0(讓1腳變?yōu)楦唠娖降闹噶钍荢ETB

P1.0),這就是我們通常所說的源代碼,(這是我們開發(fā)產(chǎn)品的第一步—源代碼編輯);怎么做呢?我們首先得打開實驗軟件,屏幕出現(xiàn)一個瀏覽器的軟件窗口,點擊左邊的擴展實驗,選中實驗16—自動溫度控制器,再點擊工具欄里的調(diào)試按鈕,彈出一個記事本對話框,寫入

CLR

P1.0;

(

?

分號必須在英文狀態(tài)下輸入

)

,輸入完畢后選擇文件→保存即可;那么\o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機能讀懂這條指令嗎?當然不能,接下來我們還有一件事情要做,就是把這句指令翻譯成單片機能讀懂的東西,單片機能讀懂什么呢?它其實只懂一樣--就是數(shù)字,因此,我們就把CLR

P1.0翻譯成C2H,90H,至于為什么要翻譯成這樣,這當然是INTEL公司規(guī)定好的,我們就不需要去研究它了。這個過程我們叫作編譯,(這是我們開發(fā)產(chǎn)品的第二步),那么指令是譯過來的呢?這就得靠專業(yè)的軟件了,我們做實驗使用的軟件就有此功能,只要點擊工具欄上的編譯按鈕,稍等片刻即出現(xiàn)一個編譯信息窗口,如果編譯通過就會有編譯完成,結(jié)果如下:0個警告,0個錯誤的編譯信息,如果編譯錯誤則會出現(xiàn)編譯錯誤的信息,并提示錯誤的行號;編譯完了之后通常要進行程序仿真(這是第三步,當然我們的實驗程序很簡單是不需要仿真的;接下來怎么才能把編譯通過的指令寫入單片機中呢?這通常需要借助于一種硬件工具,叫編程器(也叫燒錄器),不過我們的實驗板采用的是具有串行下載功能的單片機,所以您只要直接點擊快捷工具欄上的下載按鈕,程序就進入了實驗(這是第四步—編程)。自此就完成了單片機開發(fā)的全過程。

全部工作結(jié)束后,我們看到了什么?接P1.0(1腳)的LED1亮了起來;改變源代碼,變成SETB

P1.0;進

行編譯,下載,看看結(jié)果是不是LED1不亮了。

單片機經(jīng)典教程3單片機內(nèi)部結(jié)構(gòu)(一)\o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機的內(nèi)部究竟有哪些部分組成的,它們都有些什么作用呢?讓我們先來了解其中的ROM存儲器:

一.半導體存儲器ROM

1.幾個基本概念

上一課我們講到了把編譯后的指令下載到\o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機后這條指令一定在單片機內(nèi)的某個地方,那么它究竟在哪里呢?原來它就放在一個叫程序存儲器的地方,英文名稱ROM(全稱為Read

Only

Memory),叫只讀存儲器。它是一個什么東西呢?在討論這個問題之前,讓我們先來看幾個物理現(xiàn)象:(1)數(shù)和物理現(xiàn)象的關(guān)系

不知大家是否還記得,在學習數(shù)字電路時我們曾用一盞燈的亮和滅來表示電平的高和低,即用“1”來表示高電平,用“0”來表示低電平,如果現(xiàn)在有兩盞燈那它會有幾種狀態(tài)呢?

0

0

0

1

1

0

1

1

兩盞燈的組合就是四種狀態(tài):00,01,10,11。如此看來燈的亮和滅這種物理現(xiàn)象同數(shù)字確實有著某種聯(lián)系,如果我們把它們按一定的規(guī)律排列好,那么電平的高或低就可以用數(shù)字來表了,換句話說:不同的數(shù)字可以代表不同數(shù)量燈的電平高或低。比如:

0000,0001,0010,0011,0100,0101,0110,0111,1000,1001,1010,1011,1100,1101,1110,1111這十六種組合就可以代表四盞燈的狀態(tài),能理解嗎?

(2)位及字節(jié)的含義

在\o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機中,一盞燈(實際上是一根線)我們稱它為一位,它有兩種狀態(tài)(“0”或“1”),分別應電平的高或低,它是單片機最基本的數(shù)量單位,用BIT來表示。8盞燈(八根線)有256種狀態(tài),這8盞燈(也就是8位)我們把它稱為一個字節(jié),用BYTE表示。至于為什么要怎么規(guī)定,這就不需要你我操心了,我們只要記住就可以了。那么單片機是如何來儲存這些數(shù)字所代表的字節(jié)的狀態(tài)的呢?接著往下看:

2.半導體存儲器的工作原理

存儲器就是用來存放數(shù)據(jù)的地方,它其實是利用電平的高或低來存放數(shù)據(jù)的,也就是說,它實際上存放的是電平的高或低的狀態(tài),而不是我們所習慣上認為的“1234”這樣的數(shù)字。那它是如何工作的呢?一個存儲器就象一個小抽屜,一個小抽屜里有8個小盒子每個小盒子用來存放1位“電荷”,電荷通過與它相連的電線傳進來或釋放掉,至于電荷在小盒子里是怎樣存放的,這就不用我們操心了,您可以把電線想象成水管,小盒子里的電荷就象是水,那就好理解了存儲器中的1個小抽屜我們把它稱之為1個“單元”,相當于1個字節(jié),而1個小盒子就相當于1位。有了這么一個構(gòu)造,我們就可以開始存放數(shù)據(jù)了,比如我們要放進一個數(shù)據(jù)“00011010”,我們只要把第2號、第4號和第5號小盒子里存滿電荷,而其它小盒子里的電荷給放掉就行了。可是問題又出來了,一個存儲器有好多相同的單元,線是并聯(lián)著的(看D7-D0),在放入電荷的時候,會將電荷放入所有的字節(jié)單元中,而釋放電荷的時候,會把每個單元中的電荷都放掉,這樣的話,不管存儲器有多少個字節(jié)單元,都只能放同一個數(shù),這當然不是我們所希望的。因此,我們要在結(jié)構(gòu)上稍作變化,看上面的圖,在每個單元上有根線與譯碼器相連,我想要把數(shù)據(jù)放進哪個單元,就通過譯碼器給哪個單元發(fā)一個信號,由譯碼器的通過這根線把相應的開關(guān)打開,這樣電荷就可以自由地進出了。那么這樣是不是就能隨意地向存儲器寫入或者讀出數(shù)據(jù)了呢?其實還不能,當我們向存儲器寫入數(shù)據(jù)時,必須先把這個開關(guān)切換到寫入端;而要讀出數(shù)據(jù)時,就得先把開關(guān)切換到讀出端;而片選端則是為了區(qū)分不同的存儲器設置的。

3.半導體存儲器的譯碼

簡單介紹一下:我們知道,1根線可以代表2種狀態(tài);2根線可以代表4種狀態(tài);3根線可以代表8種;256種狀態(tài)又需要幾根線代表?8根線,所以一片6264存儲器我們只需要16根線就可以了。

4.存儲器的選片及總線的概念

至此,譯碼的問題解決了,讓我們再來關(guān)注另外一個問題:送入每個字節(jié)的8根線又是從什么地方來的呢?它就是從\o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機的外部引腳上接過來的,一般這8根線除了接一個存儲器之外,還要接其它的器件,這樣問題又出來了,這8根線既然不是存儲器和單片機之間專用的,如果總是將某個單元接在這8根線上,就不行了,比如這個存儲器單元中的數(shù)值是“FFH”,另一個存儲器的單元是“00H”,那么這根線到底是處于高電平,還是低電平?豈不是要打架看誰歷害了?所以我們必須讓它們分離。辦法當

然也簡單,當外面的線接到集成電路的引腳上來后,不直接接到各單元去,中間再加一組開關(guān)就行了。這組開關(guān)就是前面提到的控制器(看前面的圖),平時我們讓開關(guān)打開著,如果確實是要向這個存儲器中寫入數(shù)據(jù),或要從存儲器中讀出數(shù)據(jù),再讓開關(guān)切換到相應的位置就行了。這組開關(guān)由三根引線選擇讀控制端、寫控制端和片選端,要將數(shù)據(jù)寫入,先由控制器選中該片,然后發(fā)出相應的寫信號,開關(guān)切換到相應的位置,并將傳過來的數(shù)據(jù)(電荷)寫入片中;如果要讀信號,先選中該片,然后發(fā)出讀信號,開關(guān)也切換到相應的位置上,數(shù)據(jù)就被送出去了;另外讀和寫信號還同時受到譯碼器的控制,由于選端的不同,所以雖有讀或?qū)懶盘?,但沒有片選信號,所以另一個存儲器就不會“誤會”而開門,造成沖突,那么會不會同時選中兩個存儲器呢?只要是設計好的系統(tǒng)就不會,因為它是由計算機來控制的,如

果真的出現(xiàn)同時選中兩個存儲器的話,那就是電路出故障了。

如此看來,存儲器要想寫入或者讀出數(shù)據(jù)還真是不簡單,不過好在這些都是由計算機自動完成的,不需要我們?nèi)ゲ傩?。從上面的介紹中我們已經(jīng)看到,用來傳遞數(shù)據(jù)的8根線(51\o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機是8根)并不是專用的,而是很多器件大家共用的,所以我們把它們稱之為數(shù)據(jù)總線(總線英文名為BUS),即公交道,誰都可以走;而16根地址線(51單片機共有16根地址線,這些以后會講解,這里不必死記硬背)也是連在一起的,我們把它們稱之為地址總線,

5.半導體存儲器的分類

第一課中我們提到過,89C51是一種帶Flash

ROM的\o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機,什么是Flash

ROM?它到底是一種什么東西呢?ROM我們已經(jīng)知道,是只讀存儲器,所謂只讀,從字面上理解那就是只可以從里面讀出數(shù)據(jù),而不能寫進去,它類似于我們的書本,發(fā)到我們手里之后,我們只能讀里面的內(nèi)容,不可以隨意更改書本上的內(nèi)容。ROM就是單片機中用來存放程序的地方,前面我們下載到單片機的指令就放在這個地方。講到這里大家也許會感到困惑,既然ROM是只讀存儲器,那么指令又是如何進入其中的呢?其實所謂的只讀只是針對正常工作情況下而言,也就是在使用這塊存儲器的時候,而不是指制造這塊芯片的時候,只要讓存儲器滿足一定的條件就能把數(shù)據(jù)預先寫進去,這個道理也很好理解,書本拿到我們手里是不能改了,但當它還是原材料--白紙的時候,我們完全可以由印刷廠把內(nèi)容印上去嘛。前面的編程就是這么回事!Flash

ROM是一種快速存儲式只讀存儲器,這種程序存儲器的特點就是既可以電擦寫,而且掉電后程序還能保存,編程壽命可以達到幾千至幾萬次,所以我們的實驗系統(tǒng)是可以反復燒寫的,您盡管使用。目前新型的單片機都采用這種程序存儲器;當然,除了這種程序存儲器外,還有兩種早期的程序存儲器產(chǎn)品,簡單介紹一下:PROM

EPROM和EEPROM,PROM稱之為可編程只讀存儲器,就象我們的練習本,買來的時候是空白的,可以寫東西上去,可一旦寫上去,就擦不掉了,所以它只能寫一次,要是寫錯了,就報廢了,習慣上我們把帶這種程序存儲器的單片機稱為OTP型單片機,如果您的產(chǎn)品批量生產(chǎn),又要求價格比較低的話,帶這種程序存儲器的單片機是非常合適的;EPROM,稱之為紫外線擦除的可編程只讀存儲器,它里面的內(nèi)容寫上去之后,如果覺得不滿意,可以用一種特殊的方法去掉后重寫,就是用紫外線照射,紫外線就象“消字靈”,可以把字去掉,然后再重寫,當然消的次數(shù)多了,也就不靈光了,所以這種芯片可以擦除的次數(shù)也是有限的——幾百次吧,電腦上的BIOS芯片采用的就是這種結(jié)構(gòu)的存儲器;EEPROM,前一種存儲器的擦寫要用紫外線,而這種存儲器可以直接用電擦寫,比較方便數(shù)據(jù)的改寫,它有點類似于FLASH存儲器,但比FLASH存儲器速度要慢,現(xiàn)在新型的外部擴展存儲器都是都是這種結(jié)構(gòu)。

了解了ROM,讓我們再來簡單講講另一種存儲器,叫隨機存取存儲器,也叫內(nèi)存,英文縮寫為RAM(Random

Access

Memory),它是一種既可以隨時改寫,也可以隨時讀出里面數(shù)據(jù)的存儲器,類似于我

們上課用的黑板,可以隨時寫東西上去,也可以用黑板擦隨時擦掉重寫,它也是\o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機中重要的組成部分,單片機中有很多的功能寄存器都與它有關(guān)。

二.本課總結(jié)

本課主要講述了\o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機的兩種半導體存儲器—只讀存儲器ROM和隨機存儲器RAM的工作原理,它們是單片機的重要組成部分,了解它的內(nèi)部結(jié)構(gòu)對我們學習單片機是很有幫助的。不過如果您一時對本課的內(nèi)容還無法搞得很明白,也沒有關(guān)系,隨著學習的深入,我們還會慢慢地講解相應的基礎知識,可千萬不要放棄喲?我在沒有學會單片機之前也是如此囫圇吞棗的。LED燈閃爍的實驗程序

我們要讓LED1不斷的閃爍,就象大海中用的航標燈。怎樣才能讓LED1不斷的閃爍呢?實際上就是讓它亮幾秒,再滅幾秒,也就是讓P1.0交替地輸出高電平或低電平,按照前面所學的知識,我們寫出下面的程序:CLR

P1.0;

SETB

P1.0;編譯后下載到\o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機?

這里有兩個問題:首先計算機執(zhí)行指令的速度很快,執(zhí)行完第1條指令后LED1是滅了,但在極短的時間內(nèi)又去執(zhí)行第2條指令,LED1又亮了,我們根本無法看到燈曾經(jīng)滅過;第二個問題是當執(zhí)行完第2條指令后,不會再去執(zhí)行第1條指令了,因為\o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機執(zhí)行指令的過程是一條一條地順序執(zhí)行的。

如何解決這兩個問題呢?我們可以作如下的設想:第一,執(zhí)行完第1條指令后讓\o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機延時一段時間(幾秒或零點幾秒),然后再去執(zhí)行第2條指令,這樣就可以看到LED1曾經(jīng)滅過了;第二,讓單片機執(zhí)行完全部指令后再返回去執(zhí)行第1條指令,如此不斷的循環(huán)就可以達到我們的要求了。

實驗程序如下:

主程序

MAIN:SETB

P1.0

;

(1)

LCALL

DELAY

;

(2)

CLR

P1.0

;

(3)

LCALL

DELAY

;

(4)

LJMP

MAIN

;

(5)

子程序

DELAY:MOV

R7,#250

;

(6)

D1:MOV

R6,#250

;

(7)

D2:DJNZ

R6,D2

;

(8)

DJNZ

R7,D1

;

(9)

RET

;

(10)

END

.

(11)

還記得軟件的使用方法嗎?調(diào)試,寫入源代碼,編譯,下載到\o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機,看看是不是我們想要的結(jié)果??

在分析這段程序之前,先來說明幾個標點符號的意義:

1.分號在這里起一個分隔符的作用,表示這條指令到此為止;

2.括號內(nèi)的數(shù)字在這里是為了解釋程序用的,實際的編譯過程中是沒有意義的,也就是說沒有也是一樣的,只是為了程序的可讀性更強,我們一般會在分號的后面加上程序的注釋文字(后面我們會用到);

3.特別?:程序中的標點符號只能在英文狀態(tài)下輸入,當使用中文輸入時,必須切換到半角狀態(tài),不然編譯軟件會出錯。接下來我們分析一下這段程序:按照我們的要求,第1條,讓燈滅,第2條應該是延時,第3條是讓燈亮,第4條和第2條一樣也應該是延時,第5條應當返回去執(zhí)行第1條指令??匆幌律厦娴某绦颍?條我們已經(jīng)懂了,是讓LED1滅,第2條和第4條我們等一下討論,第5條是LJMP

MAIN,LJMP是一條指令,意思是轉(zhuǎn)移,轉(zhuǎn)移到什么地方去呢?看一下LJMP后面跟著什,是MAIN,什么地方有MAIN,在第1條指令的開頭就是MAIN,所以第5條指令的意思就是跳轉(zhuǎn)到MAIN(即第1條指令處繼續(xù)執(zhí)行),如此一來,就不斷地重復執(zhí)行這些指令。那么MAIN又是什么意思呢?它實際上是我們?yōu)檫@段程序起的

一個名稱,專業(yè)術(shù)語叫標號,既然是一個名稱那可不可以用mcu,CHINA等等的其他名字呢?當然可以,這完全取決于您的需要(?:不過也有一些是不能采用的,我們以后再講)。再來分析第2條和第4條指令,看看它們是如何實現(xiàn)延時的?

LCALL

DELAY,LCALL也是一條指令,這條指令叫做調(diào)用子程序指令,看看LCALL后面跟著的是什么--DELAY,哪里有DELAY,在第6條指令的開頭,很顯然這也是一個標號,這條指令的作用就是當執(zhí)行到這條指令時就轉(zhuǎn)去執(zhí)行LCALL后面標號所在處的程序,如果在執(zhí)行程序時遇到RET指令(RET叫返回指令),就返回到LCALL指令的下面一條(即第3條指令)處繼續(xù)執(zhí)行,在第9條指令后確實有RET指令,那么在執(zhí)完第2條指令后就應該去執(zhí)行第條指令,之后遇到第10條指令:RET,執(zhí)行完這條指令后就回去執(zhí)行第3條指令,將P1.0清零,也就是讓LED1亮,然后再去執(zhí)行第4條指令,執(zhí)行完后又回到.10

條指令,最后執(zhí)行第5條指令:LJMP

MAIN,也就是我們剛才說的跳轉(zhuǎn)到第1條,將P1.0置位,就是LED1

滅掉。如此周而復始,LED1就不斷的閃爍。好好理解這段文字,務必把它搞清楚?。?!

從標號DELAY處(即第6條)開始到RET的這一段指令我們稱之為子程序,它是一段延時程序,至于延時多長時間,我們會在以后的課程中學習。程序的最后一條是END,它不是指令,它只是告訴編譯軟件整個程序到此結(jié)束了,它叫“偽指令”。在大家以后的編程中,寫完程序都要加上這一條。

在上面的程序中我們知道了從標號DELAY開始的子程序是一段延時程序,那么它又是如何工作的呢?在了解它的工作過程之前我們必須先知道其中的一些符號,就從R7開始吧,它是\o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機內(nèi)部的一個重要組成部分,叫工作寄存器,什么是工作寄存器?下面我們就來講解這個問題:

二.工作寄存器

上一課我們已經(jīng)講過,在\o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機中有許多的功能寄存器和半導體存儲器RAM有關(guān),那么工作寄存器又屬于哪一部分呢?它是用來干什么的呢?要搞清楚這個問題,讓我們先從日常生活中的一個例子說起,如我們要做一道數(shù)學題123+456,您會馬上得出答案:579,接下來再看一道題:

123+456+789,要你馬上得出答案就不那么容易了,通常我們會怎么做呢?一般總是先把123+456的結(jié)果

579寫在一張紙上,然后再算579+789=1368,這1368就是我們想要的最終結(jié)果,而579只是為了得到最終結(jié)果而暫時記下來的中間結(jié)果,\o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機中做運算和我們生活中做運算一樣,也需要把中間結(jié)果放在某個地方,那么計算機把它放在哪兒呢?前面我們提到的ROM(只讀存儲器)中,不行!因為ROM是用來存放程序的,它只能寫進去,能讀出來(再次提醒一下,這只是相對而已),所以只能放在單片機的另一個區(qū)域—RAM中(即隨機存取存儲器)中。R7就是RAM區(qū)域中劃出的一部分。知道了R7,接下來讓我們來分析一下這段子程序(延時程序)。

三.LED燈閃爍程序子程序的分析

首先看第6條,MOV

R7,#250,這也是一條指令,意思是傳遞數(shù)據(jù)。我們知道在日常生活中,要傳遞一件東西就必須要有一個傳遞者,一個接受者和被傳遞的東西,那么在\o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機中是怎么區(qū)分它們的呢?在這條指令中,R7是接受者,250就是要傳遞的東西(單片機中要傳遞的東西當然是數(shù)字了),這

里傳遞者被省略了(順便提一下,并不是每條指令都能省略的,事實上大部分的指令都要有傳遞者)

,這樣一來,這條指令的意思也很清楚了:就是把250這個數(shù)傳遞給R7這個工作寄存器(也就是把250個數(shù)送入R7中),這樣執(zhí)行完這條指令后R7中的值就應該是250,我們可以用DUBG8051這個軟件來驗證一下,看是不是符合。講到這里,不知大家注意沒有,在250這個數(shù)的前面有個#,它是什么意思呢?這個#就說明250是一個被傳遞的數(shù)的本身,而不是傳遞者??炊薓OV

R7,#250,那么MOV

R6,#250也應該很清楚了。

接著看第8條DJNZ

R6,D2,這又是另一條指令,我們來看一下DJNZ后面跟著什么,一個是R6,一個是D2,R6我們已經(jīng)知道了,再找一下D2,D2在本行的開頭,我們已經(jīng)學過,它是標號。那么這條指令是怎么執(zhí)行的呢?它的執(zhí)行過程是這樣的:它將后面的值(即工作寄存器R6中的值)減1,然后查一下這個值是否等于“0”,如果等于“0”就往下執(zhí)行,如果不等于“0”就轉(zhuǎn)移,轉(zhuǎn)移到什么地方去呢?大家應該明白了,實際上這條指令的執(zhí)行結(jié)果就是在原地轉(zhuǎn)250次;當R6中的值等于“0”之后,程序就去執(zhí)行第9條指令,也就是DJNZ

R7,D1,大家自行分析一下這條指令的結(jié)果(是不是轉(zhuǎn)去執(zhí)行MOV

R6,#250,同時R7中的值減1),這段子程序的最終執(zhí)行結(jié)果就是DJNZ

R6,#250這條指令被

16

執(zhí)行了250*250=62500次,執(zhí)行這么多次干嗎?就是為了延時。

單片機經(jīng)典教程5單片機內(nèi)部結(jié)構(gòu)(三)1.時序的由來已經(jīng)知道\o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機執(zhí)行指令的過程就是順序地從ROM(程序存儲器)中取出指令一條一條的順序執(zhí)行,然后進行一系列的微操作控制,來完成各種指定的動作。它在協(xié)調(diào)內(nèi)部的各種動作時必須要有一定的順序,換句話說,就是這一系列微操作控制信號在時間上要有一個嚴格的先后次序,這種次序就是單片機的時序。就好比學校上課時用的電鈴,為了保證課堂秩序,學校就必須在鈴聲的統(tǒng)一協(xié)調(diào)下安排各個課程和活動。那么單片機的時序是如何規(guī)定的呢?接著往下看:

2.時序的周期

計算機每訪問一次存儲器的時間,我們把它稱為一個機器周期,它是一個時間基準,就象我們?nèi)粘I钪惺褂玫拿胍粯?,計算機中一個機器周期包括12個振蕩周期,什么是振蕩周期?一個振蕩周期是多少時間?振蕩周期就是振蕩源的周期,也就是我們使用的晶振的時間周期,一個12M的晶振,它的時間周期是多少,如果電子技術(shù)學得好的朋友應該不難算出(T=1/f),也就是1/12(微秒),那么使用12M晶振的\o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機,它的一個機器周期就應該等于12*1/12(微秒),也就是1μS。在MCS-51系列\(zhòng)o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機中,有些指令只要一個機器周期,而有些指令則需要兩個或三個機器周期,另外還有兩條指令需要4個機器周期,這也不難理解,你在家擦地板的話總比擦桌子的時間要長,不過我可是大男子主義,從來不做家務的。開句玩笑?。?!如何衡量指令執(zhí)行時間的長短?我們就要用到一個新的概念:指令周期—即執(zhí)行一條指令所需的機器周期,INTEL公司規(guī)定了每一條指令執(zhí)行的機器周期,當然這不需要我們非把它記住,不過在這里DJNZ指令我們是要記住的,它是雙周期指令,執(zhí)行一次需要兩個機器周期,即2μS。(12M晶振的話),回到我們上一課的實驗,延時的時間就應該算出來了吧,是62500*2μS=125000μS,也就是125mS。這么大的數(shù)字也就0.125S,怪不得LED1閃爍的這么快。二.單片機的時鐘電路,單片機是在一定的時序控制下工作的,那么時序和時鐘又有什么關(guān)系呢?時鐘是時序的基礎,單片機本身就如同一個復雜的同步時序電路,為了保證同步工作方式的實現(xiàn),電路就要在唯一的時鐘信號控制下按時序進行工作。那么單片機內(nèi)的時鐘是如何產(chǎn)生的呢?1.內(nèi)部時鐘電路在MCS-51\o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機的內(nèi)部有一個高增益的反相放大器,其輸入端為引腳XTL1(19),輸出端為XTL2我們只要在外部接上兩個電容和一個晶振,就能構(gòu)成一個穩(wěn)定的自激振蕩器,它的內(nèi)部電路的工作原理就不介紹了,這里主要講一下電容和晶振的選擇,看上面的圖,晶振的大小與\o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機的振蕩頻率有關(guān),我們到串行接口時再詳細講解,電容的大小影響著振蕩器振蕩的穩(wěn)定性和起振的快速性,通常選擇10-30P的瓷片電容或校正電容;另外在設計電路時,晶振和電容應盡可能的靠近芯片,以減少PCB板的分布電容保證振蕩器振蕩工作的穩(wěn)定性,提高系統(tǒng)的抗干擾能力2.外部時鐘電路除了內(nèi)部時鐘方式外,\o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機還可以采用外部引入時鐘的振蕩方式,什么時候需要采用外部時鐘方式呢?當我們的系統(tǒng)由多片單片機組成時,為了保證各單片機之間時鐘信號的同步,就應當引入唯一的公用的外部脈沖信號作為各單片機的振蕩脈沖,此時應將XTAL2懸空不用,外部脈沖信號由XTAL1引入,如上右圖所示,外部信號的高低電平持續(xù)時間應大于20mS,單片機經(jīng)典教程6單片機內(nèi)部結(jié)構(gòu)(四)\o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機I/O

口的輸出實驗

1.實驗程序

程序如下:

LOOP:MOV

P1,#0FFH

;

LCALL

DELAY

;

MOV

P1,#00H

;

LCALL

DELAY

;

LJMP

LOOP

;

調(diào)試,寫入源代碼,編譯,下載,看到了什么?8

只LED

燈都在閃爍(注意:前面的實驗是讓一個LED

燈閃爍),分析一下程序:

2.程序分析

這段程序和前面的程序比較,有兩處不同,第1

條,原來是SETB

P1.0,現(xiàn)在改為MOV

P1,#0FFH,第3

條,原來是CLR

P1

,現(xiàn)在改為MOV

P1,#00H

。為什么這樣改了之后就變成了8

只LED

燈同時閃爍了?原來P1

代表了P1.7-P1.0

的全部,我們把它當作一個存儲器單元(即一個字節(jié)),不過對一個存儲器單元送數(shù)就應該用MOV

指令了;在這里P1(P1.7-P1.0

)接的是LED

燈(也就是負載),它起到了一個輸出端的作用。那如果把P1

改為P2

或P3

或P4

行不行呢?答案是肯定的,為什么?我們稍后再談,接著看第2

個實驗。二.\o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機I/O

口的輸入實驗

1.實驗程序

程序如下:

MAIN:MOV

P3,#0FFH

;

把程序下載到\o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機,按下第1

個按鈕,第1

個LED

燈亮了,按下第2

個按鈕,第2

個LED

燈亮了,松開按鈕,相應的燈就滅了,是不是有點象工業(yè)控制中的點動控制原理。分析一下這個程序:

2.程序分析

看附圖的硬件接線圖,有4

個按鈕分別接到了P3.2,P3.3,P3.4,P3.5

,引腳上。再來分析一下程序,第1

條,使P3

口(包括P3.7-P3.0

)全部為高電平(為什么MOV

P3,#0FFH

能使P3

口全部為高電平,我們在下一課中討論);第2

條MOV

A,P3;MOV

我們已經(jīng)知道,是送數(shù)的意思,這條指令的意思就是把P3

口的數(shù)送到A

中去,A

是什么呢?我們也可以把它看成一個中間單元,就象R7

寄存器一樣,第3

條指令就是把A

中的數(shù)送到P1

口去;第4

條是循環(huán),這些我們都已經(jīng)見過,當我們按下P3.2

所連接的按鈕時,#0FFH

這個數(shù)就被送到了A

中,通過程序又送到了P1,使P1.2

輸出低電平,LED3

就亮了,按下P3.3-P3.5

連接的按鈕,對應的LED4-LED6

也亮了,松開按鈕,相應的LED

燈就滅了。如果把按鈕接到P2.0-P2.7

或P4.0-P4.7

可不可以呢?當然可以。所以在這里P3

口又起到了一個輸入端的作用。

由上面兩個實驗我們得出結(jié)論,凡是以P

開頭的管腳都可以用作輸入輸出口,在89C51

中這32

個管腳我們就稱之為并行口。它們實際上就是特殊功能存儲器SFR

(什么是特殊功能寄存器,我們后面再講)中的四個,記作P0,P1,P2,P3,它們都是雙向通道,即既可以作為輸出口,也可以作為輸入口,作輸出時數(shù)據(jù)可以鎖存,作輸入時數(shù)據(jù)可以緩沖,那么它們是怎么實現(xiàn)輸入輸出功能的呢?繼續(xù)往下看。

三.\o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機并行口的結(jié)構(gòu)分析先來看看輸入結(jié)構(gòu):

1.輸入結(jié)構(gòu)

I/O

口作為輸入口時有兩種工作方式,即所謂的讀端口與讀引腳。讀端口時實際上并不從外部讀入數(shù)據(jù),而是把端口鎖存器的內(nèi)容讀入到內(nèi)部總線,經(jīng)過某種運算或變換后再寫回到端口鎖存器。比如取反,置位,清零等等指令;而讀端口時才真正地把外部的數(shù)據(jù)讀入到內(nèi)部總線,圖中的兩個三角形表示的就是輸入緩沖器,CPU

將根據(jù)不同的指令,分別發(fā)出“讀端口”或“讀引腳”信號,以完成不同的操作,這是硬件自動完成的,不需要我們操心。

讀引腳時,也就是把端口作為外部輸入線時,首先要通過外部指令把端口鎖存器置“1”,然后再實行讀引腳操作,否則就可能讀入出錯。為什么?看上面的圖,如果不對端口置“1”,端口鎖存器原來的狀態(tài)有可能為“0”(Q

端為0,Q^為1)加到場效應管柵極的信號為“1”,該場效應管就導通,對地呈現(xiàn)低阻抗,此時即使引腳上輸入的信號為“1”,也會因端口的低阻抗而使信號變低,使得外加的“1”信號讀入后不一定是“1”,若先執(zhí)行置“1”操作,則可以使場效應管截止,引腳信號直接加到三態(tài)緩沖器中,實現(xiàn)正確的讀入。由于在輸入操作時還必須附加一個準備動作,所以這類I/O

口被稱為“準雙向”口,MCS-51

的P0,P1,P2,P3

口作為輸入/輸出口時都是“準雙向”口。接下來讓我們再看另一個問題,從圖中可以看出,這四個端口還有一個差別,除了P1

口外,P0,P2,P3

口都還有第二功能,這些第二功能又是作什么用的呢?

2.端口的工作原理(1)。P0

先來看P0

口,從圖中可以看到,P0

口的內(nèi)部有一個2

選1

的選擇器,受內(nèi)部信號的控制,如果在圖中的位置則處在I/O

口工作方式,此時相當于一個“準雙向口”,輸入時須先將口置“1”,每根口線可以獨立定義為輸入或輸出,但是須在口線上加上拉電阻。如果將開關(guān)往另一個方向,則就是另一個功能—作為地址/數(shù)據(jù)復用總線用,此時不能逐位定義為輸入/輸出,它有兩種用法:當作數(shù)據(jù)總線用時,輸入8

位數(shù)據(jù);而當作地址總線用時,則輸出8

位地址。再強調(diào)一點,當P0

口作為地址/數(shù)據(jù)總線用之后,就再也不能作I/O

口使用了。講到這里,也許大家會感到困惑,什么叫作地址/數(shù)據(jù)復用?這其實是當\o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機的并行口不夠用時,需要擴展輸入輸出口時的一種用法,知道了P0

口,再來看P1

口。

(2)。P1

同P0

不同,P1

口只能作為I/O

口使用,但它的內(nèi)部有一個上拉電阻,所以連接外圍負載時不需要外接上拉電阻,這一點P1,P2,P3

都一樣,務必請大家注意。

(3)。P2

P2

口作為I/O

口線用時,與P0

口一樣,當內(nèi)部開關(guān)向另一個方向時,即作地址輸出時,可以輸出程序存儲器或外部數(shù)據(jù)存儲器的高8

位地址,并與P0

口輸出的低地址一起構(gòu)成16

位的地址線,從而可以分別尋址64K

的程序存儲器或外部數(shù)據(jù)存儲器,同樣地址線是8

位一起自動輸出的,不能象I/O

口線那樣逐位定義。

(4)。P3

P3

口作為I/O

口線用時,同P1

口相同,也是“準雙向口”;不同的是,P3

口的每一位都有另一種功能,也叫第二功能,各位的功能如下,它們的具體作用我們用到時再詳細解釋。

既然\o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機的引腳有第二功能,那么CPU

是如何來區(qū)分的呢?這是一個令許多初學者困惑的問題,其實單片機的第二功能是不需要人工干預的,也就是說只要CPU

執(zhí)行到相應的指令,就自動轉(zhuǎn)成了第二功能。了解了各個I/O

口的功能和作用,再來給大家講解一下單片機I/O

與外圍電路的連接方法。

四.\o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機I/O

口的連接方法

當\o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機的I/O

口作輸出時可以直接與外部設備連接,不過由于在實際的應用中,由于其驅(qū)動電流是有限的(P0

口10mA,P1,P2,P3

口20mA),所以我們常常需要通過接口電路來擴展它的驅(qū)動能力,在單片機的后向通道控制系統(tǒng)中,常用的功率控制器件有機械繼電器、晶閘管、固態(tài)繼電器等等,下面我們將以機械繼電器和固態(tài)繼電器的應用為例介紹其具體的使用方法。

1.

\o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機與機械繼電器的接口

\o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機的一個I/O

口只能灌入20mA

的電流,所以往往不足以驅(qū)動一些功率開關(guān)(比如稍大一點的機械繼電器等),此時,就應該采用必要的擴展電路,如何來實現(xiàn)單片機與機械繼電器的接口呢?其實很簡單,我們通常采用下面的接法(如圖),為了防止前向通道信號的干擾,常采用一些光電隔離器件,比如光電耦合器4N25,PC814

等,當單片機的P1.0

腳輸出為低電平時,光藕受電導通,Q1

飽和開通,繼電器吸合,負載電路接通。這里請注意?:P0-P3

口作輸出控制端時,應盡量采用低電平控制方法,這是因為在低電平時,I/O

口允許灌入的電流比高電平時要大,一般情況下,低電平的灌入電流為高電平的4

倍。

另外為了防止電壓間的互相干擾,繼電器的工作電壓VDD

與\o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機的工作電壓VCC

不要使用同一個電源,接地端也不要連在一起,即所謂的模擬地與數(shù)字地分開,驅(qū)動管的電流要大于繼電器的工作電流,其他的元件就不講了,大家自行分析一下。講了單片機與繼電器的接口,再來介紹與固態(tài)繼電器的接口方法,接著往下看:

2.

\o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機與固態(tài)繼電器的接口

普通繼電器由于開關(guān)速度慢、易跳火、易機械磨損,通常用于要求不高的場合,在某些特殊應用場合,比如防火、防爆等系統(tǒng)中,則應采用固態(tài)繼電器。固態(tài)繼電器是一種無觸點的電子繼電器,它的輸入端只要很小的控制電流,可以與\o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機的I/O

口直接連接;輸出則采用雙向晶閘管控制,其輸入輸出間均通過內(nèi)部光電耦合器隔離,可以防止信號間的干擾,是單片機接口的理想器件,隨著其技術(shù)的成熟,應用的廣泛,價格也已經(jīng)非常的便宜,1A/250V

的目前在10

元左右,它與單片機的連接方法如圖所示,當“-”端所接的P1.0

為低電平時,SSR

導通,負載工作。除了以上兩種連接方法外,單片機與TTL,CMOS

管等都可以連接。.

單片機經(jīng)典教程7單片機內(nèi)部結(jié)構(gòu)(五)講到了指令MOV

P3,#0FFH

能使P3

口全部為高電平,而在第四課中LED

燈閃爍程序中給R7

送數(shù)用的指令是MOV

R7,#250

,那么這#250

和#0FFH

到底有什么不同?它們又代表什么意思呢?

復習一下數(shù)字電路中學過的數(shù)制概念:

一.數(shù)制

1.十進制數(shù)(Decimal

Number)

在日常生活中,我們表示數(shù)的多少用的是十進制數(shù),即0,1,2,3,4,5,6,7,8,9。它遵循“逢十進一,借一當十”的原則,通常我們把計數(shù)符號的個數(shù)叫做基數(shù),十進制的基數(shù)就是十。

比如一個十進制數(shù)5847=5*1000+8*100+4*10+7*1

,它的每一個數(shù)碼都有一個系數(shù)1000,100,10,1;這個系數(shù)叫做權(quán)或位權(quán)。十進制數(shù)雖然非常符合我們的使用習慣,但計算機中卻無法采用,因為計算機只能有兩種狀態(tài):“0”和“1”,所以我們還得應用二進制數(shù)。

2.二進制數(shù)(Binary

Number)

二進制的基數(shù)為二,0

和1,它遵循的是“逢二進一,借一當二”的進借位原則。也就是當某位計數(shù)到兩個數(shù)時就向高位進“1”,同時本位變?yōu)椤埃啊薄?/p>

比如二進制數(shù)1100=1*23+1*22+0*21+0*20,二進制數(shù)只有0

和1

兩個數(shù),正好代表了計算機中電路的兩種狀態(tài),所以它在計算機中被廣泛應用。下面是二進制的加法和乘法運算規(guī)則:

加法:0+0=0;1+0=0+1=1;1+1=10

乘法:0*0=0;1*0=0*1=0;1*1=1

二進制數(shù)雖然在計算機中處理很方便,但當位數(shù)較多時,就不容易記憶和書寫了,所以計算機中又有了十六進制數(shù)。

3.十六進制數(shù)(Hexadecimal

Number)

十六進制也遵循兩個規(guī)則,一是有十六個基數(shù),即0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F(xiàn);另一個規(guī)則是“逢十六進一,借一當十六”。

比如我們前面提到的#0FFH

就是一個十六進制數(shù),#--我們已經(jīng)明白了,它表示的是傳遞數(shù)的本身,“H”叫數(shù)制簡碼,它表示這個數(shù)是十六進制數(shù),為什么前面我在標題后面都加了英文注釋,相信大家也應該明白了吧(這里隨便提一下,二進制簡碼B

和十進制簡碼D

通常是可以省略的,我們以后的課程中用到的數(shù)都是這樣寫的),那么0FFH

這個十六進制數(shù)的表示方法是怎么樣的呢?用十進制表示0FFH=F*161+F*160,即等于255

。(大家也許會疑問?這里的“0”到哪里去了呢?原來,在\o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機中,當我們用十六進制格式表示一個數(shù)時,如果高位的數(shù)字為“A-F

”時,高位前面就得加上個“0”,不然,編譯軟件會出錯,就象#0FFH。二.進制之間的轉(zhuǎn)換

十進制有使用比較習慣的特點,二進制有易于表示和運算方便的特點,十六進制又有表示位數(shù)較多的特點,但有時我們常常要把十進制數(shù)轉(zhuǎn)換成二進制數(shù)或十六進制數(shù)來處理;把二進制數(shù)逆轉(zhuǎn)換成十六進制數(shù),如何進行這種轉(zhuǎn)換呢?下面就舉幾個例子:

1.

十進制數(shù)與非十進制數(shù)之間的轉(zhuǎn)換

(1)非十進制數(shù)轉(zhuǎn)換為十進制數(shù)

具體做法是:將一個非十進制數(shù)按權(quán)展開成一個多項式,每項是該位數(shù)碼與相應權(quán)值之積,把多項式按十進制的規(guī)則進行計算求和,所得的結(jié)果就是該數(shù)的十進制形式。

比如:二進制數(shù)1011B

轉(zhuǎn)換成十進制為1*23+0*22+1*21+1*20=8+2+1=11D

,再比如:十六進制數(shù)FFH

轉(zhuǎn)換成十進制為255D。

(2)十進制數(shù)轉(zhuǎn)換為非十進制數(shù)

十進制數(shù)轉(zhuǎn)換為非十進制數(shù)時,可將其分為整數(shù)部分和小數(shù)部分分別進行轉(zhuǎn)換,最后將結(jié)果合并為目的數(shù)。為了簡單,我這里只講整數(shù)部分的轉(zhuǎn)換。這種轉(zhuǎn)換叫做除基取余法,具體做法是用欲轉(zhuǎn)換數(shù)制的基數(shù)去除十進制數(shù)的整數(shù)部分,第一次除所得余數(shù)為目的數(shù)的最低位,把得到的商再除以該基數(shù),所得余數(shù)為目的數(shù)的次低位,依次類推,繼續(xù)上面的過程,直至商位為0,此時所得余數(shù)為目的數(shù)的最高位。

比如:將十進制數(shù)53D

轉(zhuǎn)換成二進制數(shù)為53D=110101B。

2└53

2└26??1

2└13??0

2└6??1

2└3??0

2└1??1

0

??1

2.

二進制數(shù)與十六進制數(shù)之間的轉(zhuǎn)換

四位二進制共有16

種組合,而這16

種組合正好與十六進制數(shù)的16

個基數(shù)一致,所以每4

位二進制數(shù)對應一位十六進制數(shù),我們只要把二進制數(shù)的整數(shù)部分自右向左每4

位一組,最后不足4

位的用0

補足;小數(shù)部分自左向右每4

位一組,最后不足4

位的在右面補0,再將每4

位二進制數(shù)對應的十六進制數(shù)寫出即可。相反,如果將十六進制數(shù)轉(zhuǎn)換為二進制數(shù)只需將每位十六進制數(shù)寫成對應的4

位二進制數(shù)即可。

比如:將1101011B

轉(zhuǎn)換成十六進制數(shù)為D6H,再比如:將F0FH

轉(zhuǎn)換成二進制數(shù)為111100001111B

。

上面的表格就是二進制數(shù)、十進制數(shù)和十六進制數(shù)之間的對應關(guān)系。

三.立即數(shù)的寫法

通過前面一小節(jié)的講解,我們已經(jīng)懂了,MOV

R7,#250

和MOV

R7,#OFFH

中#250

和#0FFH

原來是十進制數(shù)250D

和十六進制數(shù)FFH

的區(qū)別,在\o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機中,通常我們把這個數(shù)稱之為立即數(shù),那么如果我在編寫指令時把立即數(shù)#0FFH

寫成二進制數(shù)(即11111111

)或用十進制寫法(255

)是不是可以呢?當然可以,立即數(shù)既可以是二進制數(shù),也可以是十進制數(shù)或十六進制數(shù)。不過有一點再重復一遍:那就是當用十六進制格式表示一個立即數(shù)時,如果高位的數(shù)字為“A-F”時,高位前面要加上個“0”,請大家務必記住了。

這里再講一下,關(guān)于數(shù)制以及二進制、十進制和十六進制數(shù)的關(guān)系,大家可以在以后的實踐中慢慢去理解和掌握,如果您一時記不住,千萬不要刻意地去死記硬背!下面讓我們來討論另一個問題:

四.存儲器的地址

什么是存儲器的地址,地址和數(shù)據(jù)又有什么關(guān)系呢?這個問題往往讓初學者非常的難以理解,既然\o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機存儲器內(nèi)存放的是數(shù)據(jù),為什么還要有地址的概念?讓我們從生活中的一個例子談起:大家都知道寄信是怎么回事吧!我們要寄一封信就必須寫好信的內(nèi)容,然后在信的封面寫上詳細地址,郵局才能按地址把它寄出去;我們給單片機送數(shù)也一樣,除了要給出立即數(shù)(猶如信的內(nèi)容),還必須知道這個數(shù)送達的地址(猶如信的地址或郵政編碼),所以就必須給每個寄存器(即半導體存儲器)都規(guī)定不同的地址,只不過在單片機中地址的編碼也是用數(shù)字來表示的,那么單片機中有多少個寄存器呢?它們的地址又是如何規(guī)定的呢?

前面我們學過,\o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機有兩種存儲器,即只讀存儲器ROM

和隨機存儲器RAM,它們都被規(guī)定了各自的地址,我們把它稱做尋址空間。既然是空間,就必然有一個范圍的概念,接下來就讓我們看看MCS-51

單片機中程序存儲器ROM

的尋址范圍:

1.內(nèi)部R0M

的尋址范圍

89C51

的內(nèi)部有4K

的FLASH

ROM

空間,其尋址范圍為000H-0FFH(16*16*16),這4K

的ROM

空間就是用來存放我們?yōu)閈o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機編寫的程序的,單片機執(zhí)行指令時就是一條一條地順序地從ROM

中尋找指令進行執(zhí)行。了解了ROM

的尋址范圍,讓我們接著來看另一種存儲器:內(nèi)部RAM

的尋址范圍

\o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機的內(nèi)部RAM

共有256

個字節(jié),尋址范圍為00H-FFH(即16*16),它被分為兩個部分:第一部分從00H-7FH

共128

個字節(jié)是真正的RAM

區(qū),可以用來讀寫各種數(shù)據(jù),在這128

個字節(jié)中,又分成三個區(qū)域:第一個區(qū)域00H-1FH

安排了4

組工作寄存器,每組用8

個字節(jié),共32

個字節(jié),分別為R0-R7,當然在同一時刻,只能用其中的一組工作寄存器,怎么來控制它,就要用程序狀態(tài)字PWS

中的RS0、RS1

兩位,(這我們后面再講);第二個區(qū)域20H-2FH

共16

個字節(jié)除了可以作為一般的RAM

單元讀寫外,還可以對每個字節(jié)的每一位(即每一個抽屜中的每一個小盒子)進行操作,并且對這些位都規(guī)定了固定的位地址:從20H

單元的第0

位開始到2FH

單元的第7

位結(jié)束共128

位;第三個區(qū)域就是一般的RAM

單元,地址為30H-7FH,共80

個字節(jié);第二部分從80H-FFH

是專門用于特殊功能寄存器(SFR)的,89C51

共用21

個特殊功能寄存器(這些我們都將在下一課中講解),它們每個也都有8

位,這部分的128

個字節(jié)并沒有全部用完。單片機經(jīng)典教程8單片機內(nèi)部結(jié)構(gòu)(六)我們已經(jīng)講過,R7,R6

是工作寄存器,P0,P1,P2,P3

是并行口,那么\o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機中還有些什么東西?它們的結(jié)構(gòu)又是怎么樣的呢?這就是本課要討論的問題。一.單片機的特殊功能寄存器,在單片機中,除了前面介紹的RAM,ROM,P0-P3

和CPU

外,方框內(nèi)的還有許多其他的東西它們被稱為特殊功能寄存器,英文簡寫SFR

,下表例出的就是MCS-51

單片機中幾個常用的特殊功能寄存器。這一課我們先來介紹幾個:

二.幾個常用的特殊功能寄存器

1.累加器ACC

通常用A

表示,它是一個什么東西呢?我們知道\o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機在做運算時它的中間結(jié)果需要放在某個地方,這個地方就是累加器,它的名字很特殊,功能也很特殊,幾乎所有的運算類指令都離不開它。

2.寄存器B

B

寄存器在做乘法時用來存放一個乘數(shù),在做除法時用來存放一個除數(shù),不做乘除法時隨你怎么用。

3.程序狀態(tài)字PSW

它是一個很重要的東西,里面放了CPU

工作時的很多狀態(tài),知道它就可以了解CPU

當前的工作狀態(tài),它有點象平時看書用的目錄,我們?yōu)g覽它就可以了解一本書的內(nèi)容。它是一個8

位的寄存器,用到了其中的7

位。其格式如下:

下面來逐位介紹它的功能:

(1)CY:進位標志位

MCS-51

是一種8

位的\o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機,它的運算結(jié)果只能表示到28(即0-255),但我們有時候的運算結(jié)果要超過255

,怎么辦呢?就要用CY

位。例如:79H+87H(01111001+01010111)=1

00000000

,這里的“1”就進到了CY

中去了。

(2)AC:半進位標志位

當D3

位向D4

位進位/借位時,AC=1,通常用于十進制調(diào)整運算中。

(3)F0:用戶自定義標志位

由編程人員自行決定,什么時候用,什么時候不用。

(4)

RS1、RS0:工作寄存器組選擇位。

前面講到\o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機共有四個工作寄存器組(0

組-3

組),它們就是由RS1,RS0

來控制,這兩位就在這里,它共有四種組合狀態(tài),看上面的表格:每個工作寄存器組有8

個字節(jié),分別記為R0-R7

,當然在某一時刻,CPU

只使用其中的一組。

假設PSW

為“10”(即00010001),那么RS1=1,RS0=0,則用到了第2

組寄存器組(地址10H-17H),RO-R7

即為10H-17H

,用DUBG8051

軟件輸入數(shù)值,看看內(nèi)部RAM

中地址為10H-17H

中的值是不是為輸入值。

(5)

0V:溢出標志位

什么時候溢出,我們講到定時器時再研究。

(6)

P:奇偶檢驗位

每次運算結(jié)束后若A

中二進制數(shù)“1”的個數(shù)為奇數(shù),則P=1

,否則P=0

。例:某運算結(jié)果是58H

(01011000),顯然“1”的個數(shù)為奇數(shù),所以P=1。

4.DPTR(DPH,DPL):數(shù)據(jù)指針

數(shù)據(jù)指針是一個16

位的寄存器,我們可以用它來訪問外部RAM

,也可以訪問外部ROM

中的表格,具體應用以后再講。

5.SP:堆棧指針:

讓我們先來理解一下堆棧是什么意思?你在家洗碗嗎?我們洗好碗之后,是怎么放的呢?一般總是先洗的放在下面,晚洗的放在上面,然后用的時候呢,總是晚放上去的先用,先放上去的后用;如果你不洗碗不要緊,知道碼頭上倉庫里堆的貨物嗎?一般也是先進去的后出來,而后進去的先出來,這種符合“先進后出,后進先出”存放規(guī)則的現(xiàn)象我們就把它叫做“堆?!薄#ㄆ鋵崡T谥形闹械囊馑季褪谴a頭)。

在\o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機中,我們可以在內(nèi)部RAM

中構(gòu)造出(注意?:是可以構(gòu)造)這樣一個區(qū)域,這個區(qū)域存放數(shù)據(jù)的規(guī)則就符合堆棧中“先進后出,后進先出”的原則。為什么要有這樣一個區(qū)域呢?存儲器本身不也同樣可以存放數(shù)據(jù)嗎?是的,知道了存儲器地址確實可以讀出它里面的內(nèi)容,但如果我們要讀出的是一批數(shù)據(jù),每一個數(shù)據(jù)都要給出一個地址就會很麻煩,為了簡化操作就可以利用堆棧的存放方法來讀取數(shù)據(jù),具體的應用我們將在十五課中結(jié)合具體實驗來講,這里只是讓大家先了解一下。那么堆棧在單片機的什么地方?也就是說把RAM

空間的哪一塊區(qū)域作為堆棧呢?這就不好定了,因為51

系列單片機是一種通用的單片機,每個人的實際需要各不相同,有人需要多一些堆棧,而有人則不需要那么多堆棧,所以INTEL

公司就干脆不分了,把分的權(quán)利讓給用戶(編程者),也就是說我們可以根據(jù)自已的需要來決定,所以單片機中堆棧的位置是可以變化的,而這種變化就體現(xiàn)在SP

中值的變化,看下面的圖,SP

中的值等于27H

不就相當于是一個指針指向27H

單元嗎?這就是堆棧指針的由來。

當然在MCS-51

\o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機中,指針開始所指的位置并非就是數(shù)據(jù)存放的位置,而是數(shù)據(jù)存放的前一個位置。例如一開始堆棧指針是指向27H

單元的,那么第一個數(shù)據(jù)的存放位置就在28H

單元中,而不是27H

單元中,這一點請大家注意。

6.電源控制寄存器PCON

\o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機在以電池供電的系統(tǒng)中,有時為了節(jié)電,我們需要讓它盡量降低電源的消耗,所以單片機就有多種的工作方式,其中一種就是低功耗方式,PCON

寄存器就是用來控制單片機進入低功耗方式的。單片機經(jīng)典教程9單片機的工作方式\o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機共有復位、程序執(zhí)行、低功耗和編程與加密四種工作方式,下面分別加以介紹。

1.復位方式

(1)為什么要復位

大家知道,\o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機執(zhí)行程序時總是從地址0000H

開始的,所以在進入系統(tǒng)時必須對CPU

進行復位,也叫初始化;另外由于程序運行中的錯誤或操作失誤使系統(tǒng)處于死鎖狀態(tài)時,為了擺脫這種狀態(tài),也需要進行復位,就象電腦死機了要重新啟動一樣。

(2)復位的原理

\o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機復位的方法其實很簡單,只要在RST

引腳(9

腳)上加一個持續(xù)時間為24

個振蕩周期(即兩個機器周期)的高電平就可以了。如果晶振為12M,計算一下這個持續(xù)脈沖需要多長時間?

(3)如何進行復位

復位操作有上電自動復位、按鍵復位和外部脈沖復位3

種方法,上電自動復位是通過外部復位電路的電容充電來實現(xiàn)的,當電源剛接通時電容C

對下拉電阻開始充電,由于電容兩邊的電壓不能突變,所以RTS

端維持高電平,只要這個充電時間不超過1ms,就可以實現(xiàn)對\o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機的自動上電復位,即接通電源就完成了系統(tǒng)的初始化,在實際的工程應用中,如果沒有特殊要求,一般都采用這種復位方式;按鍵復位的電路如圖2

所示,它其實就是在上電復位的基礎上加了R2

和SA,這種電路一般用在需要經(jīng)常復位的系統(tǒng)中;外部脈沖復位的電路如圖3

所示,外部復位通常用于要求比較高的系統(tǒng),比如希望系統(tǒng)死鎖后能自動復位。外部復位是由專門的集成電路來實現(xiàn)的,也就是我們通常俗稱的“看門狗”電路,這種電路有很多,它們不但能完成對單片機的自動復位功能,而且還有管理電源、用作外部存儲器等功能,比如X25045,MAX813L

等等就是比較常用的此類芯片,

現(xiàn)在讓我們先來看看\o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機復位后,它的內(nèi)部會有些什么變化呢?看下面的表:

(4)復位后的狀態(tài)

這就是\o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機復位后內(nèi)部系統(tǒng)的狀。

2.程序執(zhí)行方式

程序執(zhí)行是\o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機的基本工作方式,由于復位后PC=0000

,所以程序就從地址0000H

開始執(zhí)行,此時單片機就根據(jù)指令的要求完成一系列的操作控制,比如前面講的讓LED

燈閃爍起來,不過在實際使用中,程序并不會從0000H

開始執(zhí)行,而總是安排一條跳轉(zhuǎn)指令,比如LJMP

START

,為什么要這樣安排,我們講到中斷時再來解釋。

3.

低功耗操作方式

在以電池供電的系統(tǒng)中,有時為了降低電池的功耗,在程序不運行時就要采用低功耗方式,低功耗方式有兩種—待機方式和掉電方式。

低功耗方式是由電源控制寄存器PCON

(上一課我們提到過的)來控制的。電源控制寄存器是一個逐位定義的8

位寄存器,其格式如下,

其中:SMOD

為波特率倍增位,在串行通訊時用;GF1

為通用標志位1;GF0

為通用標志位0;PD

為掉電方式位,PD=1,進入掉電方式;IDL

為待機方式位,IDL=1

,進入待機方式。也就是說只要執(zhí)行一條指令讓PD

位或IDL

位為1

就可以了。那么\o"提供單片機學習開發(fā)板,單片機實驗板,編程器,仿真器,無線發(fā)射接收控制模塊,單片機教程."單片機是如何進入或退出掉電工作方式和待機工作方式的。

1

.待機方式

2

.進入待機方式

當使用指令使PCON

寄存器的IDL=1

,則進入待機工作方式。此時CPU

停止工作,但時鐘信號仍提供給RAM,定時器,中斷系統(tǒng)和串行口;同時堆棧指針SP,程序計數(shù)器PC,程序狀態(tài)字PSW,累加器ACC

以及全部的通用寄存器都被凍結(jié)起

溫馨提示

  • 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論