本節書摘來自異步社群《例說51單片機(c語言版)(第3版)》一書中的第1章,第1-2節,作者 張義和,王敏男,許宏昌,餘春長,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。
“89s51”源自intel公司的mcs-51系列,而目前所采用的8x51并不僅限于intel公司所生産的,反倒是以其他廠商所發行的相容晶片為主,如atmel公司的89c51/89s51系列,其價格便宜,品質穩定,開發工具齊全,早就被學校或教育訓練機構所接受。
在此先介紹8x51的基本知識,包括基本結構、引腳、基本電路及51系列等,其中很多資料最好要熟記,本書也會提供許多快速背記的技巧,讓讀者能在極短的時間裡記住40個引腳、基本電路等。
8x51單片機發展至今,雖然有許多廠商各自開發了不同的相容晶片,但其基本結構并沒有多大的變動,如下所示為标準的8x51結構(如圖1-3所示)。
程式存儲器rom:内部4kb,外部最多可擴充至64kb。
資料存儲器ram:内部128b,外部最多可擴充至64kb。
4組可位尋址的8位輸入/輸出端口,即p0、p1、p2及p3。

8x51為8位微控制器。8位指的是微控制器内部資料總線或寄存器一次處理資料的寬度。相對于目前個人計算機(pc)所用的cpu,早期的cpu從8088/8086到80286都是16位的cpu;而從80386到pentium 3都屬于32位的cpu。盡管如此,目前所采用的單片機微控制器仍是以8位為主,隻有在特殊場合才會采用16位的單片機,如8096等。
通常存儲器的操作是以位元組(b)為機關的,“可位尋址”是存取存儲器、寄存器或輸入/輸出端口時,可指定其中的一位,例如,要指定p0輸入/輸出端口中的bit 1,則指定為p0.1即可,如圖1-4所示。
89c51的元件封裝方式有3種,除了這3種外,89s51的元件封裝方式還多出了一種pdip42元件封裝,說明如下。
qfp封裝
89c51/89s51的pqfp或tqfp(thin plastic gull wing quad flatpack)封裝為扁平的44個引腳表貼式封裝,這種封裝的體積很小,成本較低,适合于機器粘貼,為目前商用的主流;但在學校或教育訓練機構這是不太适用的。如圖1-5所示,在俯視圖裡,左上方有記号者為第1腳,然後逆時針排列,分别為2~44腳,其中包括3個空腳,而相鄰兩個腳的間距為0.8mm,元件厚度(高度)為1.2mm。
plcc封裝
plcc(plastic j-leaded chip carrier)封裝也是89c51/89s51常用的封裝方式,這也是一個44個表貼式引腳(smt)的封裝,其中包括4個空腳,而其引腳編号與qfp封裝非常相似(相容),如圖1-6所示,在俯視圖裡,上面中間有個記号者為第1腳,然後逆時針排列分别為2~44腳,相鄰兩個腳的間距為0.05英寸(即1.270mm),元件高度(含引腳)為4.572mm。
一般地,這種表貼式的元件可直接粘着于電路闆上,而不必鑽孔(其引腳如圖1-7所示)。在研發、實驗或教學時,也可利用晶片管座,這樣可縮短開發與生産的時間。
直插式封裝pdip42
89s51的直插式封裝有兩種,第一種是42個引腳雙列直插式的封裝(plastic dual inline package),簡稱pdip42;第二種是40個引腳雙列直插式封裝,與89c51、mcs-51相容,稍後說明。如圖1-8所示,在雙列直插式封裝裡,俯視圖左上方有記号者為第1腳,然後逆時針排列分别為2~42腳。相鄰兩個腳的間距為1.588mm,元件長度為36.96mm,兩排引腳的間距為13.97mm,元件厚度為4.826mm(不含引腳),與一般的面包闆或ic晶片管座不符。
直插式封裝pdip40
89c51/89s51的第二種直插式封裝為40個引腳雙列直插式的pdip40,這種封裝與 mcs-51完全相容。pdip40與pdip42除引腳數量不同外,尺寸差異也很大,pdip40剛好可插在面包闆或40引腳的晶片管座上,圖1-9所示俯視圖左上方有個記号者為第1腳,然後逆時針排列分别為2~40腳。相鄰兩個腳的間距為0.1英寸(即2.540mm),元件長度為52.578mm,兩排引腳之間距為0.6英寸(即15.875mm),元件厚度為4.826mm(不含引腳),特别适用于學校、教育訓練機構使用。不過,由于直插式封裝體積較大,電路闆制作成本較高,很少用在商品裡。
除了采用pdip42封裝,89s51與89c51完全相容,本書将以采用pdip40封裝的 89s51為探讨的對象,當然,要學習8x51,筆者強烈建議先将其引腳“背”下來,在此提供了獨門的技巧,讓大家輕松記住這40個引腳。
電源引腳
幾乎所有ic都需要接用電源,而89s51的電源引腳與大部分數字ic的電源引腳類似,右上角接vcc,左下角接gnd。是以89s51的40腳為vcc引腳,連接配接(5v±10%)的電源;20腳為gnd引腳,必須接地。
輸入/輸出端口
有了電源之後,再來看看89s51的“主角”——輸入/輸出端口。vcc引腳下面是第39腳,為p0的開始引腳,即39腳到32腳這8個引腳為p0;與p0的相對的是p1,也就是第1腳到第8腳。p1從第1腳開始,是以p2從其斜對角第21腳開始,也就是在右下方,21腳到28腳是p2。第10腳到第17腳就是p3。39、1、21、10就是這4個port的開始引腳,我們可通過圖1-10來輔助記憶這4個輸入/輸出端口。
複位引腳
幾乎所有微處理器都需要複位(reset)的動作,對于89s51而言,隻要複位引腳接高電平超過2個機器周期(約2μs),即可産生複位的動作。而89s51的複位引腳在p1與p3之間,即第9腳,輔助記憶的方法是“系統久久不動,就要按一下reset鍵,以複位系統”,這“久久”就是第9腳的諧音。
頻率引腳
微控制器都需要時鐘脈沖引腳,而在接地引腳的上方兩個引腳,即19、18腳,就是時鐘脈沖引腳,分别是xtal1、xtal2。
存儲器引腳
外部存儲器控制引腳
相對于前面的38個引腳,29、30腳比較難以說明,但是隻要不用到外部存儲器,就可當它們不存在,留待後面關于外部存儲器的章節再行說明。
根據上述要訣,很容易記住這些引腳。或許有人會質疑:“有這麼簡單嗎?”當然沒這麼容易!89s51的40個引腳裡有很多是複用引腳,簡單講就是多用途的引腳,以39腳到32腳為例,平時為p0;若是連接配接外部存儲器時,則當成ad0~ad7引腳,而ad0~ad7就是位址引腳與資料引腳混合的複用引腳,好像有點複雜,但如果不接外部存儲器時就當它不存在。
所謂“基本電路”是指89s51電路工作所不可或缺的基本連接配接線路。在此我們也有熟記基本電路的方法,基本電路包括以下四部分。
先接電源
電路都需要電源,這裡首先将40腳接vcc,也就是+5v、20腳接地。
再接時鐘脈沖
89s51内部已具備振蕩電路,隻要在gnd引腳上方的兩個引腳(即19、18腳)連接配接簡單的石英振蕩晶體(crystal)即可。至于89s51的時鐘脈沖頻率,目前mcs-51晶片的工作頻率已大為提升,例如atmel公司的89c51的工作頻率為0~24mhz,而華邦電子(winbond)更提供了40mhz的版本,未來必然還會有更高頻率的版本。盡管如此,目前還是采用12mhz時鐘脈沖。如果不再設計一個振蕩電路,則可按圖1-11所示連接配接即可。如果要自行設計一個振蕩電路,則可按圖1-12所示連接配接。
複位電路
89s51的複位引腳(reset)是第9腳,當此引腳連接配接高電平超過2個機器周期(1個機器周期包含12個時鐘脈沖,請參考後面章節),即可産生複位的動作。以12mhz的時鐘脈沖為例,每個時鐘脈沖為1/12μs,2個機器周期為2μs。是以,我們可在第9腳上連接配接一個可讓該引腳上産生一個2μs以上的高電平脈沖,即可産生複位的動作,如圖1-13所示。
電源接上瞬間,電容器c上沒有電荷,相當于短路,是以第9腳直接連接配接到vcc,即89s51執行複位動作。随着時間的增加,電容器上的電壓逐漸增加,而第9腳上的電壓逐漸下降,當第9腳上的電壓降至低電平時,89s51恢複正常狀态,稱為“power on reset”(自動複位)。在此使用10kΩ電阻器、10μf電容器,其時間常數遠大于2μs,是以第9腳上的電壓可保持2μs以上的高電平,足以使系統複位。當然,隻要時間常數大于2μs即可,而不一定要使用10kΩ電阻器、10μf電容器,本書所提供的89s51線上刻錄實驗闆就使用0.1μf電容器(體積較小,電流也較小)及約100kΩ電阻器。
通常,我們還會在電容器兩端并接一個按鈕開關,如圖1-14所示,此按鈕開關就是一個手動的reset開關(強制reset)。
存儲器設定電路
其中的元件如表1-1所示。
一般地,mcs-51系列(micro controller system,mcs)可分為51與52兩大系列,52系列可說是51系列的增強型,其最大的特色就是内部存儲器加倍,定時器/計數器增加了一個,價格卻相差不大。
若根據晶片内的rom來區分,mcs-51可分為無rom型(8031/8032)、mask rom型(8051/8052)、eprom型(8751/8752)及eeprom型(89c51/89c52、89s51/89s52),如表1-2所示。
下面簡述這幾種8x51。
無rom型
8031/8032為無rom型單片機,如圖1-16所示,使用這種單片機必須外接程式存儲器。由于其封裝成本與含rom型的單片機很接近,且必須外接程式存儲器,反而使電路成本大增;目前除非程式很大,無法完全放入單片機外,已經很少有人會采用這種單片機。
mask rom型
8051/8052為mask rom型單片機,如圖1-16所示。這種單片機直接将程式放入晶片中的程式存儲器,是以不必刻錄程式(也不能刻錄),單價低廉。但由于這種晶片需要制作其獨有的光罩(mask),需要量大的場合才能生産。鍵盤裡所用的單片機(8048,是8051的上一代)就是mask rom型單片機。
eprom型
8751/8752為eprom型單片機,如圖1-17所示。這種單片機可将程式燒入晶片中的程式存儲器,也可以紫外線擦除程式存儲器裡的資料,是以可重複使用不同的程式。ic上面有一個視窗,可看到内部的晶片與連接配接線,通常在刻錄完畢後,在視窗上貼黑色膠布,以防止資料消失。如要擦除rom裡的資料,則使用紫外線照射視窗,15到30min即可。由于這種封裝成本較高,再加上其擦除動作麻煩且費時,目前幾乎不再生産這種元件了。
eeprom型
89c51/89c52、89s51/89s52為使用flash技術的eeprom型單片機,如圖1-17所示。這種單片機可将程式下載下傳到晶片的程式存儲器裡,所不同的是,89c51/89c52是以5v及12v電壓刻錄與擦除程式存儲器資料,而89s51/89s52隻要5v電壓即可刻錄與擦除器,早已成為主流。廠商的技術資料宣稱,這種晶片可重複寫入與擦除器,可達1000次以上。而根據經驗,如果不是操作上的失誤或折斷引腳,就算是經常對它燒寫也很難把它燒壞。
atmel半導體公司所提供的89c51系列已成為mcs-51相容單片機中的主流。在89c51系列中,當然是以停産的89c51最具代表性,取而代之的是更強勁的89s51,這兩種單片機微控制器的結構比較如表1-3所示。
由表1-3可知,隻要89c51/52有的,89s51/52都有。而其中比較特殊的是89s51/52新增了一個14位看門狗計數器(watchdog timer,wdt)。雖然,89s51/52的工作頻率提升為0~33mhz,但實質性幫助并不大。就像0~24mhz的89c51/52一樣,還是會應用12mhz的工作頻率,如此才能直接沿用原有的程式設計;另外,設計程式時也比較容易計算,且耗用的資源也比較少。
雖然89c51停産了,但其核心仍存在于89s51及許多89c51的增強版本中,例如:
at89c51rc單片機微控制器具有32kb程式存儲器、512b資料存儲器、wot等,除存儲器比較多外,都與89s51相同。
at89c51cc001、at89c51cc002、at89c51cc003等單片機微處理器以89c51為核心,并擴充外圍裝置,除配置更多的存儲器外,更增加了10位的adc、can控制器等,而其重複資料刻錄/擦除器的次數更可達到10萬次。