❶ msc-51系列單片機的應用程序一般存放在什麼中
嘿嘿 俺來幫你解答
1 msc-51系列單片機的應用程序一般存放在片內的EEPROM的程序存儲器中,
即從0000H~0EFFH 共有4K
2 程序如果太長 可以存儲到片外程序存儲器中。
滿意就選滿意回答
❷ 新編mcs-51單片機應用設計第3版 張毅剛怎樣
張老師的書都不錯,最經典的是《單片機原理與應用》這本書,對於初學者來說非常適合。國內的書都差不多, 隨便找一本看就行, 重要的是多動手。
❸ MSC-51單片機程序存儲器和數據存儲器各有什麼功用其內部RAM區功能結構如何分配
程序存儲器用來存放編制好的始終保留的固定程序和表格常數;數據存儲器用以存放數據或中間運行結果。
8051單片機內部設置有256位元組的RAM,其中有128位元組的內部RAM數據存儲器和128位元組的專用(特殊功能)寄存器。128位元組的內部RAM數據存儲器可分為三個部分:通用工作寄存器區、位定址區、用戶數據緩沖區。128位元組專用寄存器定址空間離散地分布著19個特殊功能寄存器。
❹ 51單片機是什麼如何學習它的編程都用在哪些方面
51單片機是對所有兼容Intel 8031指令系統的單片機的統稱。
由於intel生產的8031的升級版8051工藝成熟,成為當時市場應用量最大的單片機,所以對此類兼容晶元統稱51單片機。
該系列單片機的始祖是Intel的8031單片機,後來隨著Flash rom技術的發展,8031單片機取得了長足的進展,成為應用最廣泛的8位單片機之一,其代表型號是ATMEL公司的AT89系列,它廣泛應用於工業測控系統之中。很多公司都有51系列的兼容機型推出,今後很長的一段時間內將佔有大量市場。51單片機是基礎入門的一個單片機,還是應用最廣泛的一種。
現在每年仍舊會使用幾十億片51系列的兼容晶元,在你想得到的電器、玩具上,比如:遙控燈具、洗衣機、冰箱、電子鍾表、顯示器、汽車(每輛汽車可能會用到十幾到幾十片)。。。。。
學習它很簡單,到當地書店、圖書館、隨手可以找到幾十種單片機入門書,8成以上是講51系列單片機的。
----------------
學習編輯
作為一個初學者,如何單片機入門?
知識上,其實不需要多少東西,會簡單的C語言,知道51單片機的基本結構就可以了。一般的大學畢業生都可以了,自學過這2門課程的高中生也夠條件。設備上,一般是建議購買一個模擬器,例如,的「雙功能下載線」就具有良好的穩定性和較快的下載速度,上位機可擴展,可以下載更多的單片機及嵌入式晶元。通過實驗,這樣才可以進行實際的,全面的學習。日後在工作上,模擬器也大有用處。還有,一般光有模擬器是不行,還得有一個實際的電路,即學習板,如圖,即為,單片機最小系統。
學習板以強大的介面為主,單片機的學習分兩方面,一方面是單片機的原理及內部結構,另一方面是單片機的介面技術。這些都是需要平時多積累,多動手,多思考,這樣才能學好單片機技術。
註:「雙功能下載線」在網路文庫里有詳細的使用說明,並且上位機會定期更新以支持更多的單片機。
單片機學習的4個階段
一、整體了解
要知道 單片機是什麼?單片機有何用?如何系統學習單片機?單片機系統設計的流程是怎樣的,需要掌握哪些輔助軟體?
了解這些之後,我們的學習就有了目標和方向。
二、揭秘單片機很難學,是因為其內部結構、編程語言抽象,且實際應用中與其他電子技術和元器件知識相互關聯,需結合起來一起設計開發產品。所以,第二階段要了解單片機的內部結構是怎樣的?單片機開發經常會用到哪些電子技術和元器件知識?如何將一條條編程指令組合成一段段有效的程序?
三、解密之所以單片機能成為控制核心,設計出包羅萬象的應用系統來,是因為開發者利用了單片機提供的種種功能及各種外設。所以,第三階段我們要掌握單片機的各種功能,再加上諸如感測器、模數轉換、掃描顯示、串列、中斷的應用思維,結合更多的元器件、電子電路知識,逐個學習、體會實際的單片機系統的秘密。
四、遠航通過以上三個階段,讀者基本就可掌握單片機的應用了。但要設計出豐富的單片機系統,解決復雜的實際問題,還需要了解更多的外設知識及其與單片機的聯系(如電動機、各類
存儲器、繼電器、紅外管等)。這些需要不斷的學習和積累。有時候,接到一些開發任務,就需要你針對這個任務自覺地去搜集、學習相關知識,在實踐中不斷載學習和提高。
參考網路:http://ke..com/link?url=
❺ 51單片機2個外中斷的應用,這個怎麼設計
中斷的允許和禁止就是中斷的開放和關閉,中斷允許就是開放中斷,中斷的禁止就是關閉中斷。從以上說明我們可看出,MCS-51的中斷允許是通過兩級控制的,以EA位作為總中斷控制位,以各中斷控制位為分控制位。當總中斷位為禁止狀態時,不管分控制位是允許或禁止整個中斷都是禁止的。只有當EA=1(允許)時,才能由各分控制位設置各自的中斷允許與禁止。MCS-51單片機復位後,IE=00H,因此中斷處於禁止狀態。
值得一提的是:單片機中斷響應後不會自動關閉中斷,因此在轉入中斷服務程序後,應由軟體指令禁止中斷。
中斷優先順序控制寄存器 (IP)
MCS-51的中斷優先順序控制比較簡單,只設置了高、低兩個級別的有限級,各中斷源的優先順序別由優先寄存器(IP)進行控制。
·PX0——外中斷0(INT0)優先順序控制位。
·PT0——定時中斷0(T0)優先順序控制位。
·PX1——外中斷1(INT1)優先順序控制位。
·PT1——定時中斷1(T1)優先順序控制位。
·PS ——串列中斷(ES)優先順序控制位。
控制位=0,優先順序為低。控制位=1,優先順序為高。
中斷優先順序是為了中斷嵌套服務的,控制原則為:
(1) 低優先順序中斷不能打斷高優先順序的中斷服務,而高優先順序的中斷服務可以打斷低優先順序的中斷服務。
(2) 同級的中斷已經響應,其他中斷將被禁止。
(3) 如果同級的多個中斷源同時出現,CPU將按查詢次序確定哪個中斷被響應,次序為:外中斷0→定時中斷0→外中斷1→定時中斷1→串列中斷。
中斷控制寄存器的狀態設置
在應用中,我們可以通過相應的控制寄存器來使用中斷系統,因此從使用的角度上看,這些控制寄存器是面向用戶的。這些控制寄存器既可以進行位元組定址,也可以進行位定址,也就是對位狀態的定址既可以使用位元組操作指令也可以使用位操作指令,例如:
MOV IE,#81H
如使用位操作指令,也可寫為:
SETB EA
SETB EX0
對於一般的外中斷程序,我們可以這樣安排:
ORG 0000H ;主程序入口
START: AJMP MAIN
ORG 0003H ;外中斷程序入口
AJMP INT00
MAIN: MOV IE,#81H ;允許總中斷和外中斷
…… ;主程序
……
……
INT00: …… ;外中斷服務程序
……
RETI ;中斷返回
❻ 《單片機》課程學習總結
《單片機》課程學習總結
篇一:《單片機》課程學習總結
《單片機》這門課程我已經學了一個學期了,在這一個學期的學習過程中,我一開始不怎麼懂得編程,但慢慢的我現在已經不僅會讀程序還會寫程序了。真為自己一個學期來努力學到的單片機知識只是而感到高興。
怎麼學單片機?也常看到有人說學了好幾個月可就是沒有什麼進展。當然,受限於每個人受到的教育水平不同和個人理解能力的差異,學習起來會有快慢之分,但我感覺最重的就是學習方法。一個好的學習方法,能讓你事半功倍,這里說說我學習單片機的經歷和方法。
我覺得學習單片機首先要懂得C語言,因為單片機大多說都是靠程序來實現的,如果看不懂程序或則不懂的編程是很難學會單片機的。學習單片機首先要明白一個程序是怎麼走的,要完全懂得程序每一個步驟的意思。其次要懂得每一條指令的意思,不能盲目地去靠背指令,這是記得不牢靠的,最主要的還是靠了解。學習單片機最主要的對89C51晶元內部結構有全方面的,只要了解了89C51才能知道單片機實現什麼樣的功能和作用,才能對單片機有更深一步的了解。 通過一個學期《單片機》這門課程的學習,我也從中有了不少心
得和體會想和大家分享一下。
萬事開頭難、要勇敢邁出第一步。開始的時候,不要老是給自己找借口,不要說單片機的程序全是英文,自己看不懂。遇到困難要一件件攻克,不懂指令就要勤奮看書,不懂程序就先學它,這方面網上教程很多,隨便找找看一下,做幾次就懂了。然後可以參考別的人程序,抄過來也無所謂,寫一個最簡單的,讓它運行起來,先培養一下自己的感覺,知道寫程序是怎麼一回事,無論寫大程序還是小程序,要做的工序不會差多少。然後建個程序,加入項目中,再寫代碼、編譯、運行。必須熟悉這一套工序。個人認為,一塊學習板還是必要的,寫好程序在上面運行一下看結果,學習效果會好很多,模擬器就看個人需要了。單片機是注重理論和實踐的,光看書不動手,是學不會的。
知識點用到才學,不用的暫時丟一邊。厚厚的一本書,看著人頭都暈了,學了後面的,前面的估計也快忘光了,所以,最好結合實際程序,用到的時候才去看,不必說非要把書從第一頁看起,看完它才來寫程序。比如你寫流水燈,完全就沒必要看中斷的知識,專心把流水燈學好就是了,這是把整本書化整為零,一小點一小點的啃。 程序不要光看不寫,一定要自己寫一次。最開始的時候,什麼都不懂,可以抄人家的程序過來,看看每一句是干什麼用的,達到什麼目的,運行後有什麼後果。看明白了之後,就要自己寫一次,你會發現,原來看明白別人的程序很容易,但到自己寫的時候卻一句也寫不出來,這就是差距。當你自己能寫出來的時候,說明你就真的懂了。
必須學會掌握調試程序的方法。不少人寫程序,把代碼寫好了,
然後一運行,不是自己想要的結果,就暈了,然後跑到論壇上發個帖子,把程序一貼,問:為什麼我的程序不能正常運行?然後就等別人來給自己分析。這是一種很不好的行為,應該自己學會發現問題和學會如何解決問題。這就需要學習調試程序的方法,比如KEIL里,可以下斷點啦,查看寄存器內容等等,這些都是調試程序的手段,當你發現你寫的程序運行結果和你想像中不一樣的時候,你可以單步,也可以下斷點,然後跟蹤,查看各相關寄存器內容,看看程序運行過中是不是有什麼偏差,找出影響結果的地方,改正過來。這一個過程非常重要,通過程序的排錯,你可以學到的知識是書上得不到的。
找到解決問題思路比找到代碼更重要。我們用單片機來控制周邊器件,達到我們想到的目的,這是一個題目,而如何寫出一個程序,來控制器件按你想要的結果去運作,這個就是解題的思路。要寫程序,就得先找到解決問題的思路,你學會找出這個解題思路,比你找到代碼更為重要。不少人很喜歡找人家的代碼,有的人甚至有了代碼就直接復制到自己的程序中,可以說,這不是一種學習的態度,無助於你編程水平的提高。
我幾乎不怎麼看人家的代碼,多數時候是看別人的思路,有方框圖最好,沒有的話文字說明也可以。要從代碼中看出別人處理問題的思路,是相當困難的,特別是大型的程序,看起來是非常的累人。所以現在我也明白了,以前讀書時說的程序流程圖很重要,現在算是知道了。當你知道一個問題怎麼去解決了,那麼剩下的只是你安排代碼去完成,這就已經不是什麼問題了。
開動腦筋,運用多種方法,不斷優化自己的程序。想想用各種不同方法來實現同一功能。這是一個練習和提高的過程,一個問題,你解決了,那麼你再想想,能不能換種寫法,也可以實現同一功能,或者說,你寫出來的代碼,能不能再精簡一點,讓程序執行效率更高,這個過程,就是一個進步的過程。很多知識和經驗的獲得,並不是直接寫在書讓你看就可以得到的,需要自己去實踐,開動腦筋,經驗才能得到積累,編程水平才能有所提高。
看別人的程序,學習人家的思路。這個在學習初期是很有用,通過看別人的程序,特別是老師寫出的具有一定水平的程序,可以使自己編程水平得到迅速的提高。同時,也可以結合別人的編程手法,與自己的想法融合在一起,寫出更高水平的程序,從中得到進步。但要注意,切忌將學習變成抄襲,更不是抄襲完了就認為自己學會了,這樣做只會使你退步。
嘗試編寫一下綜合應用的程序。從流水燈學起,到動態掃描,再到中斷,那麼,你可以試試寫一下時鍾這種綜合性應用的程序,不要小看時鍾,要寫好它不是一件容易的事情,它包括了單片機大部分的知識,比如有按鍵(IO讀取)、動態掃描(IO輸出)、中斷等,如何協調好各功能模塊正常工作,才是編程者需要學習的地方,當你單獨寫一個功能的時候,比如按鍵讀取,你可能感覺很容易,因為你的程序什麼也不做,只是讀按鍵。但把它和其它功能混合在一起,如何在整個程序運行中使每一部分都正常工作,這就不是寫一個按鍵讀取這么容易的事情,功能模塊之間有可能會互相影響,比如你需要讓數碼管既能顯示,又要去處理按鍵讀取,怎麼使這兩部分都正常工作,這就是一個協調過程。當你有了這個處理協調能力,你就算是入門了。
著重於培養解決問題的能力,而不是具體看自己編寫了多少程序或者做過什麼。「學單片機重點在於學習解決問題的思路,而不是局限於具體的晶元類型和語言」這一直是我的座右銘,是我學單片機學習單片機之後感悟出來的。真正的能力不是你曾經編寫過多少個可以實現的程序,而應該是:「遇到沒有解決過的問題,能利用自己已學的知識,迅速找到解決問題的方法。」這個才是能力。
面對一個新程序時,多自己開動腦筋,不要急於找別人的程序。
有不少人面對一個新程序時,第一步想到的就是網上找別人寫過的程序,然後抄一段,自己再寫幾句,湊在一起就完成任務,這雖然可能是省時間,但絕對不利你的學習。當你接到一個程序時,應該先自己構思一下整個程序的架構,想想如何來完成。有可能的話,畫一個流程圖,簡單的可以畫在腦子里,對程序中用到的數據、變數有一個初步的安排,然後自己動手去寫,遇到實在沒辦法解決的地方,再去請教老師或同學,或看別人是怎麼處理的,這樣首先起碼你自己動過腦想過,自己有自己的思路。如果你一開始就看別人的程序,你的思維就會受限在別人的思維里,自己想再創新就更難了,這樣你自己永遠也沒辦法提高,因為你是走在別人的影子里。
學會提問題。一般來說,學習過程中,你遇上的問題,多數人也有遇上的,所以如果有什麼不懂,你可以去問老師。我覺得學習單片機最主要的要多提問,對於一個自己不是太懂的程序,自己一定要多提問幾遍,這樣不但有利於加深自己的印象還能從中學到不少別人的方法。
經過一個學期我對《單片機》這門課程的學習,不僅讓我懂得了很多程序的編寫,還讓我學到了很多對自己有用的學習方法。總結這個學期來的我自己的學習情況,我覺得自己對編程進步了不少,懂得運用正確的學習方法學習單片機程序,不再去死記硬背指令了。所以我覺得學習要不斷總結學習方法,才能讓自己學習不斷進步。
交通信號燈設計報告
實驗目的: P1口的使用方法,延時程序的編寫
實驗要求:在一個十字路口分為東西南北走向,信號等按以下的狀態順序工作:
(1) 初始狀態0,東西、南北紅燈全亮。延時一定時間;
(2) 狀態1,南北綠燈亮通車,東西紅燈,延時一定時間;
(3) 狀態2,南北綠燈閃爍幾次轉黃燈,東西仍然紅燈,延時一定
時間;
(4) 狀態3,南北紅燈,東西綠燈通車,延時一定時間;
(5) 狀態4,南北仍然紅燈,東西綠燈閃爍幾次轉黃燈,延時一定
時間;
(6) 循環至狀態1,繼續
實驗電路和流程框架圖:
(1) 硬體電路
交通燈實訓設備用最小系統板和信號燈組合而成。
2、軟體編程
若各路口燈亮滅的時間間隔為2s鍾,燈光閃爍時間間隔為0.5s。用軟體延時的方法,晶振頻率12MHz時,一個機器周期為1us。
編寫交通信號燈程序:
編寫主程序,由R7做主程序的計數器,確定調用延時時間為0.5s,從而獲得交通燈的亮滅時間。
篇二:《單片機》課程學習總結
時光飛逝,一轉眼,一個學期又進尾聲了,本學期的單片機課程也結束,但通過這次單片機的學習,我不僅加深了對單片機理論的理解,將理論很好地應用到實際當中去,而且我還學會了如何去培養我們的創新精神,從而不斷地戰勝自己,超越自己。創新可以是在原有的基礎上進行改進,使之功能不斷完善,成為真己的東西。
當今社會隨著電子技術的發展,特別是隨著大規模集成電路的產生,給人們的生活帶來了根本性的變化,如果說微型計算機的出現使現代的科學研究得到了質的飛躍,那麼可編程式控制制器的出現則是給現代工業控制測控領域帶來了一次新的革命。在現代社會中,溫度控制不僅應用在工廠生產方面,其作用也體現到了各個方面。本學期我們就學習了單片機這門課程,感覺是有點難呢。也不知道整個學習過程是怎麼過來得,可是時間不等人。
剛開始學習的時候,對單片機沒有什麼認識,不知道什麼是單片機,更不知道它有什麼作用。通過學習才大體知道了單片機的一些知識。單片機是一塊在集成電路晶元上集成了一台有一定規模的微型計算機。簡稱為:單片微型計算機或單片機。單片機的應用到處可見,應用領域廣泛,主要應用在智能儀表、實時控制、通信、家電等方面。由中央處理器CPU、隨機存儲器RAM、只讀存儲器ROM、I/O介面、定時器/計數器以及串列通信介面等集成在一塊晶元上,構成了一個單片微型計算機,簡稱為單片機。它的應用范圍很廣,在工業自動化中應用有數據採集、測控技術。
在智能儀器儀表中應用有數字示波器、數字信號源、自動取款機等。在消費類電子產品中應用有空調機、電視機、微波爐、手機、IC卡、汽車電子設備等。在通訊方面應用有手機、小靈通等。在武器裝備方面應用有飛機、坦克、導彈、太空梭、智能武器等。剛開始學習時只能抄寫別人做成功的程序,一遍一遍的寫,從簡單的入手,逐步的積累,一步步的能夠將小的程序結合到一起,拼接成較為復雜一些的程序。但是程序不要只是看別人得,一定要自己寫過才是自己的。只有當你自己能寫出來的時候說明你真懂了。剛接觸KEIL時確實很讓人頭疼,使用 KEIL不會建項目、不會使用實驗板。然後可以參考已經成功的程序,抄過來,寫一個最簡單的,讓它運行起來,先培養一下自己的感覺,先建個項目,再配置一下項目,然後建個程序,加入項目中,再寫代碼、編譯、生成HEX,刷進單片機中、運行。其實當遇到問題一定要自己嘗試著解決,不能遇到問題就去問別人,自己一定要掌握解決問的方法和思路。對一個新項目時,自己一定要多想想,不要急著去看別人是怎麼寫的。應該先想一下程序的構架,想想如何來完成。然後自己動手去寫,理清自己的思路這樣更容易提高自己。
熟悉單片機的人都知道,要學好單片機可不是一件容易的事,倒不是因為單片機很難學,而是很難找到一本專為單片機入門者而編寫的教材。翻一下身邊的單片機教材,都好像是為已經懂單片機的人而寫的,一般先介紹單片機的硬體結構和指令系統,再是系統擴展和外圍器件,順便講一些應用設計(隨便說一下,很多書中的電路設計已經過時,並且有些程序還是錯誤的`)。如果按照此種學習方法,想進行產品開發,就必須先把所有的知識全部掌握了才可以進行實際應用。學習使用單片機只能靠循序漸進的積累,雖然單片機的課程只上了幾節就去上班了,但在學習的過程中有了一定的了解。下面就本人學習單片機的過程和經驗做簡要介紹。
首先,學習單片機要有一定的基礎:電子技術方面要有數字電路和模擬電路等方面的理論基礎,特別是數字電路;編程語言要求匯編語言或C語言。要想成為單片機高手,建議初學者首先學習匯編語言,學的差不多的時候,轉入C語言學習。盡管匯編語言屬於低級語言,編程效率低,但是較C語言具有目標代碼簡短,佔用內存少,執行速度快等優點,更重要的是能使初學者盡快熟悉單片機的內部結構,並能對其進行精確的控制。匯編語言在單片機教材裡面都會涉及,不需要單獨購買教材和學習。C語言是一門學問,有很多專業書籍來講解,並且對我們今後的編程生涯有絕對的好處,因此要深入學習,千萬不要自以為看了某某的視頻教程就以為掌握了C語言,那隻是C語言的一部分。在這里給大家推薦一本單片機C語言程序設計參考書,馬忠梅等著,北京航空航天大學出版社出版的《單片機的C語言應用程序設計》,要求C語言基礎。如果沒學過C語言,建議學習清華大學譚浩強編寫的C語言程序設計,這本書寫的不錯,通俗易懂。
其次,是單片機教材選擇。單片機是一門非常重視實踐的技術,不能總是看書,但要學習它首先應看書,對單片機引腳、內部結構、寄存器和原理有一定地了解和感官認識,它的是怎樣工作的,能幹些什麼?剛開始時,也許你看不明白,但這並不要緊,因為你還缺乏實踐經驗。現在單片機應用廣泛,因此各個廠家分別推出了自己的單片機,我們沒必要每樣都學!因為他們的編程方法和調試過程以及內部指令結構有一定的相似,只要學精通一款就OK了!尤其是用C語言編程,就幾乎不用分什麼派系,但是我們要選擇一款有代表性的知識范圍廣,並且入門容易,書籍多。一般來說,MCS-51系列單片機已經得到廣泛的普及和應用,市場上它的資料也比較多,用的人也很多。給大家推薦一些參考書,學習時只需要一本就足夠拉。書名:《新編MCS-51單片機應用設計》,哈爾濱工業大學出版,作者:張毅剛;書名:《單片機原理及應用》,高等教育出版社,作者:張毅剛等;書名:《單片機高級教程:應用與設計》,北京航空航天大學出版社,作者:何立民。相關教材還有很多,在這不一一列舉。
然後,是開發工具和開發環境的選擇。選擇一塊合適的學習板,對於初學者來說一般無力接受,如果經濟條件允許、本人又對單片機很感興趣、有從事相關工作意向的話,鼓勵大家購買。隨便說一句,學習板功能要求太全,具有流水燈、數碼管、獨立鍵盤、矩陣鍵盤、AD或DA、液晶、蜂鳴器等就差不多啦,畢竟,功能齊全的價格比較高。模擬器對單片機初學者來說既是那麼耳熟,同時又有些陌生,這主要是因為市場上傳統的模擬器價格都在千元以上,對經濟不是非常寬裕的人來說是不小的開支。同時模擬器是用來提高調試程序效率的,也不是非需不可的,如果你沒有模擬器,遇到程序出錯的時候,只好苦思冥想,反復燒寫調試。
隨便推薦一下,學林電子的51tracer模擬器,有興趣的朋友可關注一下。有了單片機教程板以後,先看下指導說明書,熟悉一下學習板,開卷有益。以後就得靠自己多練習了,將學習板與電腦連接好,先學會開發軟體的使用,然後從最簡單的流水燈實驗做起,按照你自己的意願控制流水燈,當你完成時,你會發現這是多麼愜意的事情。太好玩了,你會覺得這不是在學習,而是在玩,當你發現,單片機能夠按照你編寫的程序工作時,你會覺得非常興奮,比做什麼事情都開心,這樣你會慢慢迷上單片機,真的。不少網站上說搞定某個實驗,就恭維的告訴你一聲」恭喜你,學會了」自己學會了單片機,這有點可笑,這只能說明你算過關了,對單片機有了一定了解和會使用它了。但是單片機能完成的功能太多了,尤其是對外圍器件的控制,綜合起來能設計出許多意想不到的產品.因此除了入門外,精通可千萬別輕易說出口。
最後,在熟練掌握和應用後,那可以說對於單片機方面的硬體你已經入門了,剩下的就是自己練習設計開發各種課題,不斷的積累經驗。最終,自己完全設計具有個人風格的課題,產品,這樣你就是單片機高手拉。只要過了第一關,後面的路就好走多了,萬事開頭難,這大家可能都聽過。
有時候單片機的學習很單調,有些知識學起來很抽象,不容易理解,只能慢慢適應,一邊學習理論知識,一邊編寫程序,將程序刷入單片機進行調試,通過這種方式才能更快速的學習單片機。要堅定自己的學習信心,在付出持之以恆的努力,我相信自己能進一步加深對單片機的了解,在單片機的學習道路上走得更遠!
;❼ 基於MCS-51單片機的數字時鍾系統設計
51單片機的PDF 89S52典型的51結構
主要性能
l 與MCS-51單片機產品兼容
l 8K位元組在系統可編程Flash存儲器
l 1000次擦寫周期
l 全靜態操作:0Hz~33Hz
l 三級加密程序存儲器
l 32個可編程I/O口線
l 三個16位定時器/計數器
l 八個中斷源
l 全雙工UART串列通道
l 低功耗空閑和掉電模式
l 掉電後中斷可喚醒
l 看門狗定時器
l 雙數據指針
l 掉電標識符
功能特性描述
AT89S52是一種低功耗、高性能CMOS8位微控制器,具有
8K 在系統可編程Flash 存儲器。使用Atmel 公司高密度非
易失性存儲器技術製造,與工業80C51 產品指令和引腳完
全兼容。片上Flash允許程序存儲器在系統可編程,亦適於
常規編程器。在單晶元上,擁有靈巧的8 位CPU 和在系統
可編程Flash,使得AT89S52為眾多嵌入式控制應用系統提
供高靈活、超有效的解決方案。
AT89S52具有以下標准功能: 8k位元組Flash,256位元組RAM,
32 位I/O 口線,看門狗定時器,2 個數據指針,三個16 位
定時器/計數器,一個6向量2級中斷結構,全雙工串列口,
片內晶振及時鍾電路。另外,AT89S52 可降至0Hz 靜態邏
輯操作,支持2種軟體可選擇節電模式。空閑模式下,CPU
停止工作,允許RAM、定時器/計數器、串口、中斷繼續工
作。掉電保護方式下,RAM內容被保存,振盪器被凍結,
單片機一切工作停止,直到下一個中斷或硬體復位為止。
R
8 位微控制器
8K 位元組在系統可編程
Flash
AT89S52
Rev. 1919-07/01
AT89S52
2
引腳結構
AT89S52
3
方框圖
引腳功能描述
AT89S52
4
VCC : 電源
GND: 地
P0 口:P0口是一個8位漏極開路的雙向I/O口。作為輸出口,每位能驅動8個TTL邏
輯電平。對P0埠寫「1」時,引腳用作高阻抗輸入。
當訪問外部程序和數據存儲器時,P0口也被作為低8位地址/數據復用。在這種模式下,
P0具有內部上拉電阻。
在flash編程時,P0口也用來接收指令位元組;在程序校驗時,輸出指令位元組。程序校驗
時,需要外部上拉電阻。
P1 口:P1 口是一個具有內部上拉電阻的8 位雙向I/O 口,p1 輸出緩沖器能驅動4 個
TTL 邏輯電平。對P1 埠寫「1」時,內部上拉電阻把埠拉高,此時可以作為輸入
口使用。作為輸入使用時,被外部拉低的引腳由於內部電阻的原因,將輸出電流(IIL)。
此外,P1.0和P1.2分別作定時器/計數器2的外部計數輸入(P1.0/T2)和時器/計數器2
的觸發輸入(P1.1/T2EX),具體如下表所示。
在flash編程和校驗時,P1口接收低8位地址位元組。
引腳號第二功能
P1.0 T2(定時器/計數器T2的外部計數輸入),時鍾輸出
P1.1 T2EX(定時器/計數器T2的捕捉/重載觸發信號和方向控制)
P1.5 MOSI(在系統編程用)
P1.6 MISO(在系統編程用)
P1.7 SCK(在系統編程用)
P2 口:P2 口是一個具有內部上拉電阻的8 位雙向I/O 口,P2 輸出緩沖器能驅動4 個
TTL 邏輯電平。對P2 埠寫「1」時,內部上拉電阻把埠拉高,此時可以作為輸入
口使用。作為輸入使用時,被外部拉低的引腳由於內部電阻的原因,將輸出電流(IIL)。
在訪問外部程序存儲器或用16位地址讀取外部數據存儲器(例如執行MOVX @DPTR)
時,P2 口送出高八位地址。在這種應用中,P2 口使用很強的內部上拉發送1。在使用
8位地址(如MOVX @RI)訪問外部數據存儲器時,P2口輸出P2鎖存器的內容。
在flash編程和校驗時,P2口也接收高8位地址位元組和一些控制信號。
P3 口:P3 口是一個具有內部上拉電阻的8 位雙向I/O 口,p2 輸出緩沖器能驅動4 個
TTL 邏輯電平。對P3 埠寫「1」時,內部上拉電阻把埠拉高,此時可以作為輸入
口使用。作為輸入使用時,被外部拉低的引腳由於內部電阻的原因,將輸出電流(IIL)。
P3口亦作為AT89S52特殊功能(第二功能)使用,如下表所示。
在flash編程和校驗時,P3口也接收一些控制信號。
AT89S52
5
引腳號第二功能
P3.0 RXD(串列輸入)
P3.1 TXD(串列輸出)
P3.2 INT0(外部中斷0)
P3.3 INT0(外部中斷0)
P3.4 T0(定時器0外部輸入)
P3.5 T1(定時器1外部輸入)
P3.6 WR(外部數據存儲器寫選通)
P3.7 RD(外部數據存儲器寫選通)
RST: 復位輸入。晶振工作時,RST腳持續2 個機器周期高電平將使單片機復位。看門
狗計時完成後,RST 腳輸出96 個晶振周期的高電平。特殊寄存器AUXR(地址8EH)上
的DISRTO位可以使此功能無效。DISRTO默認狀態下,復位高電平有效。
ALE/PROG:地址鎖存控制信號(ALE)是訪問外部程序存儲器時,鎖存低8 位地址
的輸出脈沖。在flash編程時,此引腳(PROG)也用作編程輸入脈沖。
在一般情況下,ALE 以晶振六分之一的固定頻率輸出脈沖,可用來作為外部定時器或
時鍾使用。然而,特別強調,在每次訪問外部數據存儲器時,ALE脈沖將會跳過。
如果需要,通過將地址為8EH的SFR的第0位置「1」,ALE操作將無效。這一位置「1」,
ALE 僅在執行MOVX 或MOVC指令時有效。否則,ALE 將被微弱拉高。這個ALE 使
能標志位(地址為8EH的SFR的第0位)的設置對微控制器處於外部執行模式下無效。
PSEN:外部程序存儲器選通信號(PSEN)是外部程序存儲器選通信號。
當AT89S52從外部程序存儲器執行外部代碼時,PSEN在每個機器周期被激活兩次,而
在訪問外部數據存儲器時,PSEN將不被激活。
EA/VPP:訪問外部程序存儲器控制信號。為使能從0000H 到FFFFH的外部程序存儲器
讀取指令,EA必須接GND。
為了執行內部程序指令,EA應該接VCC。
在flash編程期間,EA也接收12伏VPP電壓。
XTAL1:振盪器反相放大器和內部時鍾發生電路的輸入端。
XTAL2:振盪器反相放大器的輸出端。
AT89S52
6
表1 AT89S52 特殊寄存器映象及復位值
特殊功能寄存器
特殊功能寄存器(SFR)的地址空間映象如表1所示。
並不是所有的地址都被定義了。片上沒有定義的地址是不能用的。讀這些地址,一般將
得到一個隨機數據;寫入的數據將會無效。
用戶不應該給這些未定義的地址寫入數據「1」。由於這些寄存器在將來可能被賦予新的
功能,復位後,這些位都為「0」。
定時器2 寄存器:寄存器T2CON 和T2MOD 包含定時器2 的控制位和狀態位(如表2
和表3所示),寄存器對RCAP2H和RCAP2L是定時器2的捕捉/自動重載寄存器。
中斷寄存器:各中斷允許位在IE寄存器中,六個中斷源的兩個優先順序也可在IE中設置。
AT89S52
7
表2 T2CON:定時器/計數器2控制寄存器
T2CON 地址為0C8H 復位值:0000 0000B
位可定址
TF2 EXF2 RLCLK TCLK EXEN2 TR2
7 6 5 4 3 2 1 0
符號功能
TF2 定時器2 溢出標志位。必須軟體清「0」。RCLK=1 或TCLK=1 時,TF2
不用置位。
EXF2
定時器2 外部標志位。EXEN2=1 時,T2EX 上的負跳變而出現捕捉或重
載時,EXF2 會被硬體置位。定時器2 打開,EXF2=1 時,將引導CPU
執行定時器2 中斷程序。EXF2 必須如見清「0」。在向下/向上技術模式
(DCEN=1)下EXF2不能引起中斷。
RCLK
串列口接收數據時鍾標志位。若RCLK=1,串列口將使用定時器2 溢出
脈沖作為串列口工作模式1 和3 的串口接收時鍾;RCLK=0,將使用定
時器1計數溢出作為串口接收時鍾。
TCLK
串列口發送數據時鍾標志位。若TCLK=1,串列口將使用定時器2 溢出
脈沖作為串列口工作模式1 和3 的串口發送時鍾;TCLK=0,將使用定
時器1計數溢出作為串口發送時鍾。
EXEN2
定時器2外部允許標志位。當EXEN2=1時,如果定時器2沒有用作串列
時鍾,T2EX(P1.1)的負跳變見引起定時器2 捕捉和重載。若EXEN2
=0,定時器2將視T2EX端的信號無效
TR2 開始/停止控制定時器2。TR2=1,定時器2開始工作
定時器2 定時/計數選擇標志位。=0,定時; =1,外部事
件計數(下降沿觸發)
捕捉/重載選擇標志位。當EXEN2=1時, =1,T2EX出現負脈沖,
會引起捕捉操作;當定時器2溢出或EXEN2=1時T2EX出現負跳變,都
會出現自動重載操作。=0 將引起T2EX 的負脈沖。當RCKL=1
或TCKL=1時,此標志位無效,定時器2溢出時,強製做自動重載操作。
雙數據指針寄存器:為了更有利於訪問內部和外部數據存儲器,系統提供了兩路16位
數據指針寄存器:位於SFR中82H~83H的DP0和位於84H~85。特殊寄存器AUXR1
中DPS=0 選擇DP0;DPS=1 選擇DP1。用戶應該在訪問數據指針寄存器前先初始化
AT89S52
8
DPS至合理的值。
表3a AUXR:輔助寄存器
AUXR 地址:8EH 復位值:XXX00XX0B
不可位定址
- - - WDIDLE DISRTO - - DISALE
7 6 5 4 3 2 1 0
- 預留擴展用
DISALE ALE使能標志位
DISALE 操作方式
0 ALE 以1/6晶振頻率輸出信號
1 ALE 只有在執行MOVX 或MOVC指令時激活
DISRTO 復位輸出標志位
DISRTO
0 看門狗(WDT)定時結束,Reset 輸出高電平
1 Reset 只有輸入
WDIDLE 空閑模式下WDT使能標志位
WDIDLE
0 空閑模式下,WDT繼續計數
1 空閑模式下,WDT停止計數
掉電標志位:掉電標志位(POF)位於特殊寄存器PCON的第四位(PCON.4)。上電期
間POF置「1」。POF可以軟體控制使用與否,但不受復位影響。
表3b AUXR1:輔助寄存器1
AUXR1 地址:A2H 復位值:XXXXXXX0B
不可位定址
- - - - - - - DPS
7 6 5 4 3 2 1 0
- 預留擴展用
DPS 數據指針選擇位
DPS
0 選擇DPTR寄存器DP0L和DP0H
1 選擇DPTR寄存器DP1L和DP1H
AT89S52
9
存儲器結構
MCS-51器件有單獨的程序存儲器和數據存儲器。外部程序存儲器和數據存儲器都可以
64K定址。
程序存儲器:如果EA引腳接地,程序讀取只從外部存儲器開始。
對於89S52,如果EA 接VCC,程序讀寫先從內部存儲器(地址為0000H~1FFFH)開
始,接著從外部定址,定址地址為:2000H~FFFFH。
數據存儲器:AT89S52 有256 位元組片內數據存儲器。高128 位元組與特殊功能寄存器重
疊。也就是說高128位元組與特殊功能寄存器有相同的地址,而物理上是分開的。
當一條指令訪問高於7FH 的地址時,定址方式決定CPU 訪問高128 位元組RAM 還是特
殊功能寄存器空間。直接定址方式訪問特殊功能寄存器(SFR)。
例如,下面的直接定址指令訪問0A0H(P2口)存儲單元
MOV 0A0H , #data
使用間接定址方式訪問高128 位元組RAM。例如,下面的間接定址方式中,R0 內容為
0A0H,訪問的是地址0A0H的寄存器,而不是P2口(它的地址也是0A0H)。
MOV @R0 , #data
堆棧操作也是簡介定址方式。因此,高128位元組數據RAM也可用於堆棧空間。
看門狗定時器
WDT是一種需要軟體控制的復位方式。WDT 由13位計數器和特殊功能寄存器中的看
門狗定時器復位存儲器(WDTRST)構成。WDT 在默認情況下無法工作;為了激活
WDT,戶用必須往WDTRST 寄存器(地址:0A6H)中依次寫入01EH 和0E1H。當
WDT激活後,晶振工作,WDT在每個機器周期都會增加。WDT計時周期依賴於外部
時鍾頻率。除了復位(硬體復位或WDT溢出復位),沒有辦法停止WDT工作。當WDT
溢出,它將驅動RSR引腳一個高個電平輸出。
WDT的使用
為了激活WDT,用戶必須向WDTRST寄存器(地址為0A6H的SFR)依次寫入0E1H
和0E1H。當WDT激活後,用戶必須向WDTRST寫入01EH和0E1H喂狗來避免WDT
溢出。當計數達到8191(1FFFH)時,13 位計數器將會溢出,這將會復位器件。晶振正
常工作、WDT激活後,每一個機器周期WDT 都會增加。為了復位WDT,用戶必須向
WDTRST 寫入01EH 和0E1H(WDTRST 是只讀寄存器)。WDT 計數器不能讀或寫。
當WDT 計數器溢出時,將給RST 引腳產生一個復位脈沖輸出,這個復位脈沖持續96
個晶振周期(TOSC),其中TOSC=1/FOSC。為了很好地使用WDT,應該在一定時間
內周期性寫入那部分代碼,以避免WDT復位。
掉電和空閑方式下的WDT
在掉電模式下,晶振停止工作,這意味這WDT也停止了工作。在這種方式下,用戶不
必喂狗。有兩種方式可以離開掉電模式:硬體復位或通過一個激活的外部中斷。通過硬
件復位退出掉電模式後,用戶就應該給WDT 喂狗,就如同通常AT89S52 復位一樣。
通過中斷退出掉電模式的情形有很大的不同。中斷應持續拉低很長一段時間,使得晶振
AT89S52
10
穩定。當中斷拉高後,執行中斷服務程序。為了防止WDT在中斷保持低電平的時候復
位器件,WDT 直到中斷拉低後才開始工作。這就意味著WDT 應該在中斷服務程序中
復位。
為了確保在離開掉電模式最初的幾個狀態WDT不被溢出,最好在進入掉電模式前就復
位WDT。
在進入待機模式前,特殊寄存器AUXR的WDIDLE位用來決定WDT是否繼續計數。
默認狀態下,在待機模式下,WDIDLE=0,WDT繼續計數。為了防止WDT在待機模
式下復位AT89S52,用戶應該建立一個定時器,定時離開待機模式,喂狗,再重新進
入待機模式。
UART
在AT89S52 中,UART 的操作與AT89C51 和AT89C52 一樣。為了獲得更深入的關於
UART 的信息,可參考ATMEL 網站(http://www.atmel.com)。從這個主頁,選擇
「Procts」,然後選擇「8051-Architech Flash Microcontroller」,再選擇「Proct
Overview」即可。
定時器0 和定時器1
在AT89S52 中,定時器0 和定時器1 的操作與AT89C51 和AT89C52 一樣。為了獲得
更深入的關於UART 的信息,可參考ATMEL 網站(http://www.atmel.com)。從這個主
頁,選擇「Procts」,然後選擇「8051-Architech Flash Microcontroller」,再選擇「Proct
Overview」即可。
定時器2
定時器2是一個16位定時/計數器,它既可以做定時器,又可以做事件計數器。其工作
方式由特殊寄存器T2CON中的C/T2位選擇(如表2所示)。定時器2有三種工作模式:
捕捉方式、自動重載(向下或向上計數)和波特率發生器。如表3 所示,工作模式由
T2CON中的相關位選擇。定時器2 有2 個8位寄存器:TH2和TL2。在定時工作方式
中,每個機器周期,TL2 寄存器都會加1。由於一個機器周期由12 個晶振周期構成,
因此,計數頻率就是晶振頻率的1/12。
表3 定時器2工作模式
RCLK+TCLK CP/RL2 TR2 MODE
0 0 1 16位自動重載
0 1 1 16位捕捉
1 × 1 波特率發生器
× × 0 (不用)
在計數工作方式下,寄存器在相關外部輸入角T2 發生1 至0 的下降沿時增加1。在這
AT89S52
11
種方式下,每個機器周期的S5P2期間采樣外部輸入。一個機器周期采樣到高電平,而
下一個周期采樣到低電平,計數器將加1。在檢測到跳變的這個周期的S3P1 期間,新
的計數值出現在寄存器中。因為識別1-0的跳變需要2個機器周期(24個晶振周期),
所以,最大的計數頻率不高於晶振頻率的1/24。為了確保給定的電平在改變前采樣到
一次,電平應該至少在一個完整的機器周期內保持不變。
捕捉方式
在捕捉模式下,通過T2CON中的EXEN2來選擇兩種方式。如果EXEN2=0,定時器2
時一個16位定時/計數器,溢出時,對T2CON 的TF2標志置位,TF2引起中斷。如果
EXEN2=1,定時器2做相同的操作。除上述功能外,外部輸入T2EX引腳(P1.1)1至
0的下跳變也會使得TH2和TL2中的值分別捕捉到RCAP2H和RCAP2L中。除此之外,
T2EX 的跳變會引起T2CON 中的EXF2 置位。像TF2 一樣,T2EX 也會引起中斷。捕
捉模式如圖5所示。
圖5 定時器的捕捉模式
自動重載
當定時器2 工作於16 位自動重載模式,可對其編程實現向上計數或向下計數。這一功
能可以通過特殊寄存器T2MOD(見表4)中的DCEN(向下計數允許位)來實現。通
過復位,DCEN 被置為0,因此,定時器2 默認為向上計數。DCEN 設置後,定時器2
就可以取決於T2EX向上、向下計數。
如圖6 所示,DCEN=0 時,定時器2 自動計數。通過T2CON 中的EXEN2 位可以選擇
兩種方式。如果EXEN2=0,定時器2計數,計到0FFFFH後置位TF2溢出標志。計數
溢出也使得定時器寄存器重新從RCAP2H 和RCAP2L 中載入16 位值。定時器工作於
捕捉模式,RCAP2H和RCAP2L的值可以由軟體預設。如果EXEN2=1,計數溢出或在
外部T2EX(P1.1)引腳上的1到0的下跳變都會觸發16位重載。這個跳變也置位EXF2
中斷標志位。
如圖6所示,置位DCEN,允許定時器2向上或向下計數。在這種模式下,T2EX引腳
控制著計數的方向。T2EX上的一個邏輯1使得定時器2向上計數。定時器計到0FFFFH
AT89S52
12
溢出,並置位TF2。定時器的溢出也使得RCAP2H和RCAP2L中的16位值分別載入到
定時器存儲器TH2和TL2中。
T2EX 上的一個邏輯0 使得定時器2 向下計數。當TH2 和TL2 分別等於RCAP2H 和
RCAP2L中的值的時候,計數器下溢。計數器下溢,置位TF2,並將0FFFFH載入到定
時器存儲器中。
定時器2上溢或下溢,外部中斷標志位EXF2 被鎖死。在這種工作模式下,EXF2不能
觸發中斷。
圖6 定時器2重載模式(DCEN=0)
表4 T2MOD-定時器2控制寄存器
T2MOD 地址:0C9H 復位值:XXXXXX00B
不可位定址
- - - - - - T2OE DCEN
7 6 5 4 3 2 1 0
符號功能
- 無定義,預留擴展
T2OE 定時器2輸出允許位
DCEN 置1後,定時器2可配置成向上/向下計數
AT89S52
13
圖7 定時器2自動重載(DCEN=1)
圖8 定時器2 波特率發生器模式
AT89S52
14
波特率發生器
通過設置T2CON(見表2)中的TCLK或RCLK可選擇定時器2 作為波特率發生器。
如果定時器2作為發送或接收波特率發生器,定時器1可用作它用,發送和接收的波特
率可以不同。如圖8 所示,設置RCLK 和(或)TCLK 可以使定時器2 工作於波特率
產生模式。
波特率產生工作模式與自動重載模式相似,因此,TH2 的翻轉使得定時器2 寄存器重
載被軟體預置16位值的RCAP2H和RCAP2L中的值。
模式1和模式3的波特率由定時器2溢出速率決定,具體如下公式:
模式1和模式3波特率=
16
2溢出率定時器
定時器可設置成定時器,也可為計數器。在多數應用情況下,一般配置成定時方式
(CP/T2=0)。定時器2 用於定時器操作與波特率發生器有所不同,它在每一機器周期
(1/12晶振周期)都會增加;然而,作為波特率發生器,它在每一機器狀態(1/2晶振
周期)都會增加。波特率計算公式如下:
模式1和模式3的波特率=
)] 2 , 2 ( 65536 [ 32 L RCAP H RCAP - ′
晶振頻率*原文少半個括弧「(」
其中,(RCAP2H,RCAP2L)是RCAP2H和RCAP2L組成的16位無符號整數。
定時器2 作為波特率發生器,如圖8 所示。圖中僅僅在T2CON 中RCLK 或TCLK=1
才有效。特別強調,TH2的翻轉並不置位TF2,也不產生中斷; EXEN2置位後,T2EX
引腳上1~0的下跳變不會使(RCAP2H,RCAP2L)重載到(TH2,TL2)中。因此,
定時器2作為波特率發生器,T2EX也還可以作為一個額外的外部中斷。
定時器2處於波特率產生模式,TR2=1,定時器2正常工作。TH2或TL2不應該讀寫。
在這種模式下,定時器在每一狀態都會增加,讀或寫就不會准確。寄存器RCAP2可以
讀,但不能寫,因為寫可能和重載交迭,造成寫和重載錯誤。在讀寫定時器2 或RCAP2
寄存器時,應該關閉定時器(TR2清0)。
可編程時鍾輸出
如圖9 所示,可以通過編程在P1.0 引腳輸出一個占空比為50%的時鍾信號。這個引腳
除了常規的I/O 角外,還有兩種可選擇功能。它可以通過編程作為定時器/計數器2 的
外部時鍾輸入或占空比為50%的時鍾輸出。當工作頻率為16MHZ時,時鍾輸出頻率范
圍為61HZ到4HZ。
為了把定時器2配置成時鍾發生器,位C/T2(T2CON.1)必須清0,位T2OE(T2MOD.1)
必須置1。位TR2(T2CON.2)啟動、停止定時器。時鍾輸出頻率取決於晶振頻率和定
時器2捕捉寄存器(RCAP2H,RCAP2L)的重載值,如公式所示:
時鍾輸出頻率=
] 2 , 2 65536 [ 4 ) -(
晶振頻率
L RCAP H RCAP ′
在時鍾輸出模式下,定時器2不會產生中斷,這和定時器2用作波特率發生器一樣。定
AT89S52
15
時器2也可以同時用作波特率發生器和時鍾產生。不過,波特率和輸出時鍾頻率相互並
不獨立,它們都依賴於RCAP2H和RCAP2L。
圖9 定時器2時鍾輸出模式
中斷
AT89S52 有6個中斷源:兩個外部中斷(INT0 和INT1),三個定時中斷(定時器0、1、
2)和一個串列中斷。這些中斷如圖10所示
每個中斷源都可以通過置位或清除特殊寄存器IE 中的相關中斷允許控制位分別使得中
斷源有效或無效。IE還包括一個中斷允許總控制位EA,它能一次禁止所有中斷。
如表5所示,IE.6位是不可用的。對於AT89S52,IE.5位也是不能用的。用戶軟體不應
給這些位寫1。它們為AT89系列新產品預留。
定時器2可以被寄存器T2CON中的TF2和EXF2的或邏輯觸發。程序進入中斷服務後,
這些標志位都可以由硬體清0。實際上,中斷服務程序必須判定是否是TF2 或EXF2激
活中斷,標志位也必須由軟體清0。
定時器0和定時器1標志位TF0 和TF1在計數溢出的那個周期的S5P2被置位。它們的
值一直到下一個周期被電路捕捉下來。然而,定時器2 的標志位TF2 在計數溢出的那
個周期的S2P2被置位,在同一個周期被電路捕捉下來。
AT89S52
16
表4 中斷允許控制寄存器(IE)
(MSB) (LSB)
EA - ET2 ES ET1 EX1 ET0 EX0
中斷允許控制位=1,允許中斷
中斷允許控制位=0,禁止中斷
符號位地址功能
EA IE.7 中斷總允許控制位。EA=0,中斷總禁止;EA=1,各中斷由各
自的控制位設定
- IE.6 預留
ET2 IE.5 定時器2中斷允許控制位
ES IE.4 串列口中斷允許控制位
ET1 IE.3 定時器1中斷允許控制位
EX1 IE.2 外部中斷1允許控制位
ET0 IE.1 定時器0中斷允許控制位
EX0 IE.0 外部中斷1允許控制位
圖10 中斷源
AT89S52
17
晶振特性
如圖10 所示,AT89S52 單片機有一個用於構成內部振盪器的反相放大器,XTAL1 和
XTAL2 分別是放大器的輸入、輸出端。石英晶體和陶瓷諧振器都可以用來一起構成自
激振盪器。從外部時鍾源驅動器件的話,XTAL2 可以不接,而從XTAL1 接入,如圖
12 所示。由於外部時鍾信號經過二分頻觸發後作為外部時鍾電路輸入的,所以對外部
時鍾信號的占空比沒有其它要求,最長低電平持續時間和最少高電平持續時間等還是要
符合要求的。
圖11 內部振盪電路連接圖圖12 外部振盪電路連接圖
石英晶振C1,C2=30PF±10PF
陶瓷諧振器C1,C2=40PF±10PF
空閑模式
在空閑工作模式下,CPU 處於睡眠狀態,而所有片上外部設備保持激活狀態。這種狀
態可以通過軟體產生。在這種狀態下,片上RAM和特殊功能寄存器的內容保持不變。
空閑模式可以被任一個中斷或硬體復位終止。
由硬體復位終止空閑模式只需兩個機器周期有效復位信號,在這種情況下,片上硬體禁
止訪問內部RAM,而可以訪問埠引腳。空閑模式被硬體復位終止後,為了防止預想
不到的寫埠,激活空閑模式的那一條指令的下一條指令不應該是寫埠或外部存儲
器。
掉電模式
在掉電模式下,晶振停止工作,激活掉電模式的指令是最後一條執行指令。片上RAM
AT89S52
18
和特殊功能寄存器保持原值,直到掉電模式終止。掉電模式可以通過硬體復位和外部中
斷退出。復位重新定義了SFR 的值,但不改變片上RAM 的值。在VCC未恢復到正常
工作電壓時,硬體復位不能無效,並且應保持足夠長的時間以使晶振重新工作和初始化。
表6 空閑模式和掉電模式下的外部引腳狀態
模式程序存儲器ALE PSEN PORT0 PORT1 PORT2 PORT3
空閑內部1 1 數據數據數據數據
空閑外部1 1 浮空數據地址數據
掉電內部0 0 數據數據數據數據
掉電外部0 0 浮空數據數據數據
程序存儲器的加密位
AT89S52有三個加密位不可編程(U)和可編程獲得下表所示的功能。
表7 加密位保護模式
加密位1(LB1)編程後,EA 引腳的邏輯值被采樣,並在復位期間鎖存。如果器件復
位,而沒有復位,將鎖存一個隨機值,直到復位為止。為了器件功能正常,鎖存到的
EA值必須和這個引腳的當前邏輯電平一致。
Flash編程―並行模式
AT89S52 帶有用作編程的片上Flash 存儲器陣列。編程介面需要一個高電壓(12V)編
程使能信號,並且兼容常規的第三方*(原文:third-party,不知道對不對)Flash或EPROM
編程器。
AT89S52程序存儲陣列採用位元組式編程。
編程方法
對AT89S52編程之前,需根據Flash編程模式表和圖13、圖14對地址、數據和控制信
號設置。可採用下列步驟對AT89S52編程:
AT89S52
19
1.在地址線上輸入編程單元地址信號
2.在數據線上輸入正確的數據
3.激活相應的控制信號
4.把EA/Vpp升至12V
5.每給Flash寫入一個位元組或程序加密位時,都要給ALE/PROG一次脈沖。位元組寫周
期時自身定製的,典型值僅僅50us。改變地址、數據重復第1步到第5步,知道全
部文件結束。
Data Polling
AT89S52用Data Polling作為一個位元組寫周期結束的標志特徵。
❽ 單片機學到什麼樣子才算是高手了
1,精通C和匯編,缺一不可
2,精通常用演算法,如PID調節、CRC、各種數學函數在單片機中靈活實現以及應用
3,精通兩個以上不同系列MCU的軟硬體
4,精通各種串列數據介面的軟硬規范
5,精通各種大功率驅動任務的實現
6,精通各種單片機開發會涉及到的軟體
7,熟悉上述涉及到的以及可能涉及到的器件、模塊
8,熟悉所有在開發任務中可能設計到的機械、化學、材料等基礎知識
9,擁有110以上的智商
10,永遠覺得還有很多東西需要去學習
11,嚴謹的設計理念,善於統籌協調成本與性能的關系
12,較強的知識產權意識,尊重自己以及他人
都以為單片機簡單是吧?就那麼一個小小的電子晶元,但它涉及的東西太多太多。。。。。。
哥玩的不是單片機,是寂寞~~~
❾ 設計一MCS-51系列單片機應用介面 一路0—5V模擬輸入,一路+-5V模擬輸出,一路24v開關量輸入,一路5v開關量
用繼電器 和 比較器 哈哈
❿ 如何設計8051單片機應用系統的復位電路
第十六課:51單片機的復位
51單片機高電平復位。以當前使用較多的AT89系列單片機來說,,在復位腳加高電平2個機器周期(即24個振盪周期)可使單片機復位。復位後,主要特徵是各IO口呈現高電平,程序計數器從零開始執行程序。
復位方式有兩種。
1.
手動復位:按鈕按下,復位腳得到VCC的高電平,單片機復位,按鈕松開後,單片機開始工作。
2.
上電復位:上電後,電容電壓不能突變,VCC通過復位電容(10μF電解)給單片機復位腳施加高電平5V,同時,通過10KΩ電阻向電容器反向充電,使復位腳電壓逐漸降低。經一定時間後(約10毫秒)復位腳變為0V,單片機開始工作。
參考資料:http://hi..com/dzkfw/blog/item/f446f73f9fed61e6838b13f0.html