本節書摘來自異步社群《51單片機應用開發從入門到精通》一書中的第1章,第1.1節,作者 張華傑,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。
單片機的應用十分廣泛,從工業控制到家用電器,許多地方都有單片機的身影。掌握了單片機開發技術,不僅能夠根據自己的需要進行電子設計,實作自己的一些想法,而且也為進一步學習嵌入式技術打下一定的基礎。
本章将對單片機應用系統的軟、硬體設計以及開發和調試等各個方面加以介紹,以便讀者能通過對本章的學習較快地完成單片機應用系統的研制工作。
單片機的開發主要分為硬體開發和軟體開發,在系統設計上又有最小系統和擴充系統兩種。下面将通過系統硬體設計、軟體設計進行開發流程的介紹,并以最小系統及一些典型的擴充系統為例進行簡單的說明。
單片機應用系統是指以單片機為核心,配以一定的外圍電路和軟體,能實作某種或幾種功能的應用系統。它由硬體部分和軟體部分組成。一般來說,應用系統所要完成的任務不同,相應的硬體配置和軟體配置也就不同。是以,單片機應用系統的設計應包括硬體設計和軟體設計兩大部分。為保證系統能可靠工作,在軟、硬體的設計中,還要考慮其抗幹擾能力。
在應用系統的設計中,軟體、硬體和抗幹擾設計是緊密相關、不可分離的。在有些情況下硬體的任務可由軟體來完成(如某些濾波、校準功能等);而在另一些要求系統實時性強、響應速度快的場合,則往往用硬體代替軟體來完成某些功能。設計者應根據實際情況,合理地安排軟、硬體的比例,選取最佳的設計方案,使系統具有最佳的性能價格比。
設計一個單片機測控系統,一般可分為4個步驟。
需求分析、方案論證和總體設計階段
需求分析、方案論證是單片機測控系統設計工作的開始,也是工作的基礎。隻有經過深入細緻的需求分析和周密而科學的方案論證才能使系統設計工作順利完成。
需求分析的内容主要包括:被測控參數的形式(電量、非電量、模拟量、數字量等)、被測控參數的範圍、性能名額、系統功能、工作環境、顯示、報警、列印要求等。
方案論證是根據使用者要求設計出符合現場條件的軟硬體方案,在選擇測量結果輸出方式上,既要滿足使用者要求,又要使系統簡單、經濟、可靠,這是進行方案論證與總體設計一貫堅持的原則。
器件選擇、電路設計制作、資料處理、軟體編寫階段
器件選擇和電路設計主要根據方案中所确定的名額進行,同時需要考慮器件的電氣特性。
資料處理、軟體編寫是單片機系統實作功能最重要的步驟。首先,設計資料處理的算法,如果是簡單的控制可以跳過這一步。然後,設計程式的結構,得到流程圖。最後進行程式的編寫工作。
整個系統的設計與性能測定階段
編制好的程式或焊接好的線路,不能按預計的那樣正确工作是常有的事,這就需要查錯和調試。查錯和調試有時是很費時間的。
調試時,應将硬體和軟體分成幾部分,逐個部分調試,各部分都調試通過後再進行聯調。調試完成後,應在實驗室模拟現場條件,對所設計的硬體、軟體進行性能測定。
檔案編制階段
檔案不僅是設計工作的結果,而且是以後使用、維修以及進一步再設計的依據。是以,一定要精心編寫,描述清楚,使資料及資料齊全。
檔案應包括:任務描述;設計的指導思想及設計方案論證;性能測定及現場試用報告與說明;使用指南;軟體資料(流程圖、子程式使用說明、位址配置設定、程式清單);硬體資料(電原理圖、元件布置圖及接線圖、接插件引腳圖、線路闆圖、注意事項)。
一個項目定下來後,經過詳細調研、方案論證後,就進入正式研制階段。從總體上來看,設計任務可以分為硬體設計和軟體設計,這兩者互相結合,不可分離。從時間上來看,硬體設計的絕大部分工作量是在最初階段,到後期往往還要作一些修改。軟體設計任務貫徹始終,到中後期基本上都是軟體設計任務。
單片機應用系統的硬體設計包括3大部分内容:單片機系統的擴充部分設計、各功能子產品的設計和工藝設計。
1.單片機系統的擴充部分設計
系統擴充設計包括存儲器擴充和接口擴充。存儲器的擴充指eprom、eeprom和ram的擴充,接口擴充是指8255、8155、8279以及其他功能器件的擴充。它們都屬于單片機系統擴充的内容。
2.各功能子產品的設計
如信号測量功能子產品、信号控制功能子產品、人機對話功能子產品、通信功能子產品等,根據系統功能要求配置相應的a/d、d/a、鍵盤、顯示器、列印機等外圍裝置。
為使硬體設計盡可能合理,應重點考慮以下幾點:
(1)盡可能采用功能強的晶片,以簡化電路。
(2)留有餘地。在設計硬體電路時,要考慮到将來修改、擴充友善。
(3)rom空間。目前eprom容量越來越大,一般選用2764以上的eprom,它們都是28腳,要更新很友善。
(4)ram空間。8031内部ram不多,當要增強軟體資料處理功能時,往往覺得不足。這就要求系統配置外部ram,如6264、62256等。
(5)i/o端口。在樣機研制出來後進行現場試用時,往往會發現一些被忽視的問題,而這些問題是不能單靠軟體措施來解決的。如有些新的信号需要采集,就必須增加輸入檢測端;有些實體量需要控制,就必須增加輸出端。如果硬體設計之初就多設計出一些i/o端口,這問題就會迎刃而解。
(6)a/d和d/a通道。和i/o端口同樣的原因,留出一些a/d和d/a通道将來可能會解決大問題。
3.工藝設計
工藝設計包括機箱、面闆、配線、接插件等。設計時必須考慮到安裝、調試、維修的友善。另外,硬體抗幹擾措施也必須在硬體設計時一并考慮進去。
在進行應用系統的總體設計時,軟體設計和硬體設計應綜合考慮,同時進行。當系統的電路設計定型後,軟體的任務也就明确了。
系統中的應用軟體是根據系統功能要求設計的。一般地講,軟體的功能可分為兩大類:一類是執行軟體,它能完成各種實質性的功能,如測量、計算、顯示、列印、輸出控制等;另一類是監控軟體,它專門用來協調各執行子產品和操作者的關系,在系統軟體中充當組織排程角色。
設計人員在進行程式設計時應從以下幾個方面加以考慮:
(1)根據軟體功能要求,将系統軟體分成若幹個相對獨立的部分。設計出合理的軟體總體結構,使其清晰、簡捷,流程合理。
(2)各功能程式實行子產品化、子程式化。既便于調試、連結,又便于移植、修改。
(3)在編寫應用軟體之前,應繪制出程式流程圖。這不僅是程式設計的一個重要組成部分,而且是決定成敗的關鍵部分。從某種意義上講,多花些時間來設計程式流程圖,就可以節約幾倍源程式編輯調試時間。
(4)要合理配置設定系統資源,包括rom、ram、定時器/計數器、中斷源等。其中最關鍵的是片内ram配置設定。對8031來講,片内ram指00h~7fh單元,這128個位元組的功能不完全相同,配置設定時應充分發揮其特長,做到物盡其用。例如在工作寄存器的8個單元中,r0和r1具有指針功能,是程式設計的重要角色,避免作為他用;20h~2fh這16個位元組具有位尋址功能,用來存放各種标志位、邏輯變量、狀态變量等;設定堆棧區時應事先估算出子程式和中斷嵌套的級數及程式中棧操作指令使用情況,其大小應留有餘量。若系統中擴充了ram存儲器,應把使用頻率最高的資料緩沖器安排在片内ram中,以提高處理速度。當ram資源規劃好後,應列出一張ram資源詳細配置設定表,以備程式設計查用友善。
(5)注意在程式的有關位置處寫上功能注釋,提高程式的可讀性。
單片機的最小應用系統是單片機最簡單的應用,這樣的系統雖然不能完成實際的任務,但是已經能夠讓單片機正常地工作起來。隻需要進一步加入外設就能完成一定的任務。下面将以89c51和8031兩種單片機為例進行最小系統的介紹。
1.89c51最小應用系統
89c51内部有4kb閃存,晶片本身就是一個最小系統。在能滿足系統的性能要求的情況下,可優先考慮采用此種方案。用這種晶片構成的最小系統簡單、可靠。用89c5l單片機構成最小應用系統時,隻要将單片機接時鐘電路和複位電路即可,如圖1-1所示。由于內建度的限制,最小應用系統隻能用作一些小型的測控單元。
2.8031最小應用系統
8031無片内程式存儲器,是以,其最小應用系統必須在片外擴充eprom。圖1-2所示為外接程式存儲器的最小應用系統。
片外eprom或ram的位址線由p0口(低8位位址線)和p2口(高8位位址線)組成。位址鎖存器的鎖存信号為ale。
程式存儲器的取指令控制信号為psen。當程式存儲器隻有一片時,可将其片選端直接接地。資料存儲器的讀/寫控制信号為rd、wr,其片選線與譯碼器輸出端相連。
8031晶片必須ea直接接地,其他與89c51最小應用系統一樣,也必須有複位及時鐘電路。

在實際應用中,單片機需要在最小應用系統的基礎上增加一定的外部裝置。外部裝置的管理主要通過外部位址進行,這裡将介紹位址空間的配置設定以及總線的驅動。
1.位址空間配置設定
對于ram和i/o容量較大的應用系統,主要考慮如何把64kb程式存儲器和64kb資料存儲器的空間配置設定給各個晶片,主要有兩種方法:線選法和譯碼器法。
線選法的優點是硬體電路結構簡單,但由于所用片選線都是高位位址線,它們的權值較大,位址空間沒有充分利用,晶片之間的位址不連續。當晶片所需的片選信号多于可利用的位址線時,常采取全位址譯碼法。它将低位位址線作為晶片的片内位址(取外部電路中最大的位址線位數),用譯碼器對高位位址線進行譯碼,譯出的信号作為片選線。一般采用74ls138作位址譯碼器。圖1-3所示是一個全位址譯碼的系統執行個體。圖中各器件晶片所對應的位址如表1-1所示。
因為6264是8k位元組ram,是以需要13根低位位址線(a12~a0)進行片内尋址,其他三根高位位址線a15~a13經3-8譯碼後作為外圍晶片的片選線。圖中尚剩餘三根位址選擇線~,可供擴充三片8k位元組ram晶片或三個外圍接口電路晶片。
2.總線的驅動
在應用系統中,所有系統擴充的外圍晶片都通過總線驅動,外圍晶片工作時有一個輸入電流,不工作時也有漏電流存在,是以總線隻能帶動一定數量的電路。mcs-51系列單片機作為資料總線和低8位位址總線的p0口可驅動8個lstfl電路,而其他口隻能驅動4個13tfl電路。當應用系統規模過大時,可能造成負載過重,緻使驅動能力不夠,系統不能可靠地工作。
(1)總線的驅動擴充
多晶片應用系統,首先要估計總線的負載情況,以确定是否需要對總線的驅動能力進行擴充。圖1-4為mcs-51單片機總線驅動擴充原理圖。
位址總線和控制總線的驅動器為單向驅動器,并具有三态輸出功能。驅動器有一個控制端,以控制驅動器開通或處于高阻狀态。通常,在單片應用系統中沒有dma功能時,位址總線及控制總線可一直處于開通狀态,這時控制端接地即可。
常用的單向總線驅動器為74ls244。圖1-5為74ls244引腳和邏輯圖。8個三态線驅動器分成兩組,分别由和來控制。
資料總線的驅動器應為雙向驅動、三态輸出,并由兩個控制端來控制資料傳送方向。如圖1-4所示,資料輸出允許控制端dbeo有效時,資料總線輸入高阻狀态,輸出為開通狀态;資料輸入允許控制端dbei有效時則狀态與以上相反。
mcs-51單片機應用系統總線驅動擴充電路中,p0口的雙向驅動采用雙向驅動器741s245;p2口的單向驅動器采用74ls244。
上面介紹了如何在總線上擴充驅動器,下面簡單介紹一下如何來估算驅動器的驅動能力。
總線驅動器驅動能力是以驅動同類門個數度量的。驅動器驅動能力和驅動器負載性質有關。由于驅動器負載有交流和直流之分,是以總線驅動器驅動能力估算時應同時考慮交流和直流負載兩方面的影響。
(1)直流負載下驅動能力的估算
(2)交流負載下驅動能力的估算
綜上所述,驅動器驅動負載門的能力應從交流和直流負載兩方面加以考慮。通常,對于ttl負載,主要應考慮直流負載特性,因為ttl電流大,分布電容小;對于mos型負載,主要考慮交流特性,因為mos型負載的輸入電流很小,分布電容是不容忽視的。
例如,74ls245驅動器常可驅動100多個74ls系列門電路,若把驅動負載的種種因素也考慮在内,起碼也能可靠驅動50個同類門。但為了保險起見,74ls245輸出線上一般也能挂接30個左右同類門。是以,驅動器不僅可以減輕主機負擔,增強單片機驅動負載的能力,為負載電阻和分布電容提供較大的驅動電流,而且也能夠消除驅動器後面負載電路對主機晶片的幹擾和影響,較好地保證總線上信号波形的完整性。
(3)總線的負載平衡和上拉電阻的配置
在進行單片機應用系統設計時,都是将i/o晶片挂在相關總線上。進行設計時往往注意負載的數量,不使總線過載,但往往忽視總線負載的平衡問題。
所謂總線負載的平衡,主要發生在資料總線db上。一般來說,i/o部件的資料都以d0為起點往db上挂,但由于各種接口部件的資料寬度不一緻,就極易造成db的負載失衡。圖1-9所示為有2個8位資料的部件、2個4位資料的部件及1個l位資料的接口。按照圖1-9的接線,db各位的負載顯然是不平衡的,d4_~___d7隻挂了2個負載,而d0連接配接的負載數達5個之多。
當總的負載較輕時,這種失衡不會引起太大的問題。但若負載接近總線的驅動能力,就有可能影響總線信号的邏輯電平。以圖1-9為例,負載不同的各位資料線上,高低電平的數值有明顯差異。如高電平有的達4.3v,而有的隻有3.7v。圖1-9中i/o5的信号位傳送很不可靠,常常發生錯誤,與負載失衡有密切關系。若将i/o4接資料位d7~d4,将i/o5接資料位d7,這樣就能改善總線的不平衡程度,提高系統的可靠性。
除了配置總線驅動器,注意總線負載平衡配置之外,在總線上适當安裝上拉電阻也可以提高總線信号傳輸的可靠性,加上拉電阻給總線帶來的好處有以下幾點。
① 提高信号電平
② 提高總線的抗電磁幹擾能力
當總線處于高阻狀态時是處于懸高狀态,比較容易接受外界的電磁幹擾。
例如,當程式存儲器的位址空間小于64k位元組時,由于受到外界幹擾而引起程式亂飛,當亂飛空間超出系統程式存儲器的位址空間時,程式存儲器全部關斷,緻使資料總線處于高阻狀态。外界的電磁幹擾信号就很容易通過資料總線進入cpu,引入虛假的程式指令,對程式運作造成更加嚴重的破壞。若資料總線上配有上拉電阻,總線具有穩定的高電平,這時的指令僅是“ffh”,相當于“mov r7,a”指令,這比總線上出現的随機指令所造成的後果要好得多。
③ 抑制靜電幹擾
當總線的負載是cmos晶片時,由于cmos晶片的輸入阻抗很高,容易積累靜電電荷而形成靜電放電幹擾,嚴重時會損壞晶片。若在總線上配置上拉電阻,則降低了晶片的輸入阻抗,為靜電感應電荷提供洩荷通路,提高了晶片使用的可靠性。
④ 有助于削弱反射波幹擾
由于總線負載的輸入阻抗往往很高,對于變化速度很快的傳輸資訊,當傳輸線較長時容易引起反射波幹擾。若在總線的終端配置上拉電阻,降低了負載的輸入阻抗,可有效抑制反射波幹擾。
資料總線配置上拉電阻如圖1-10所示。上拉電阻一般取2~10kΩ,典型值為10kΩ。實際應用中負載電阻可選用電阻排,其引腳間距與內建晶片标準間距一緻,應用起來十分友善。
在任何單片機測控制系統中,都是從盡量快速、準确、完整地獲得數字形式的資料開始的,是以,資料采集系統作為溝通模拟域與數字域的必不可少的橋梁起着非常重要的 作用。
資料采集系統一般由信号調理電路、多路切換電路、采樣保持電路、a/d、cpu、ram、eprom組成。其原理框圖如圖1-11所示。
1.信号調理電路
信号調理電路是傳感器與a/d之間的橋梁,也是測控系統中重要組成部分。信号調理的主要功能是:
(1)目前标準化:正業儀表通常采用0~10ma和4~20ma的信号,為了和a/d的輸入形式相适應,經i/v變換成電壓信号。
(2)某些測量信号可能是非電壓量,如熱電阻等,這些非電壓量信号必須變為電壓信号,還有些信号是弱電壓信号,如熱電偶信号,必須放大濾波,這些處理包括信号形式的變換、量程調整、環境補償、線性化等。
(3)某些惡劣條件下,共模電壓幹擾很強,如共模電壓高達220v,不采用隔離的辦法無法完成資料采集任務,是以,必須根據現場環境,考慮共模幹擾的抑制,甚至采用隔離措施,包括地線隔離、路間隔離等。
綜上所述,非電量的轉換、信号形式的變換、放大、濾波、共模抑制及隔離等,都是信号調理的主要功能。
信号調理電路包括電橋、放大、濾波、隔離等電路。根據不同的調理對象,采用不同的電路。電橋電路的典型應用之一就是熱阻測溫。用熱電阻測溫時,工業裝置距離計算機較遠,引線将很長,這就容易引進幹擾,并在熱電阻的電橋中産生長引線誤差。解決辦法有:采用熱電阻溫度變換器;智能傳感器加通訊方式連接配接;采用三線制連接配接方法。
信号放大電路通常由運放承擔,運放的選擇主要考慮精度要求(失調及失調溫漂)、速度要求(帶寬和上升率)、幅度要求(工作電壓範圍及增益)及共模抑制要求。常用于前置放大器的有、lf347(低精度),op-07、op-27(中等精度)及icl7650(高精度)等。
濾波和限幅電路通常采用二極管、穩壓管、電容等器件。用二極管和穩壓管的限幅方法會産生一定的非線性且靈敏度下降,這可以通過後級增益調整和非線性校正補償。此外,由于限幅值比最大輸入值高,當使用多路開關時,某一路超限可能影響其他路,需選用優質的多路模拟開關,如ad7501。
共模電壓的存在對模拟信号的處理有影響,高的共模電壓會擊穿器件,即使沒有損壞器件,也會影響測量精度。隔離是克服共模幹擾影響的有效措施。常用的隔離方法有光電隔離或采用隔離放大器等。
2.多路切換電路
通常被檢測的實體量有多個,如果每一通道都設有放大、采樣保持(s/h)和adc幾個環節就很不經濟,而且電路也複雜。采用模拟多路開關就可以使多個通道共用一個放大器、s/h和adc,采用時間分割法使幾個模拟通道輪流接通,這樣既經濟,又使電路簡單。模拟多路開關的選擇主要考慮導通電阻的要求、截止電阻的要求和速度要求,常用的模拟多路開關有cd4501、cd4066、ad7501、ad7507等。為了降低截止通道的負載影響,提高開關速度,降低通道串擾,采用多級模拟多路開關來完成通道切換。
3.采樣保持電路(s/h)
采樣保持電路是為了保證模拟信号高精度轉換為數字信号的電路。在模拟數字變換電路中,如果變換期間輸入電壓是變化的,那麼就可能産生錯誤的數字信号輸出。采樣保持電路就是将快速變化的模拟信号進行“采樣”與“保持”,使模拟信号在adc轉換過程中保持不變。采樣保持器的選擇要綜合考慮捕獲時間、孔隙時間、保持時間、下降率等參數。常用的采樣保持器有ad582、ad583、13398等。
4.模—數轉換(adc)
adc是計算機同外界交換資訊所必需的接口器件,因為它能将描述自然現象和生産過程的模拟量轉換成便于計算機存儲和處理的數字量。是以,從某種意義上說,沒有adc的廣泛應用,就沒有計算機應用技術的發展。選擇adc需主要考慮的名額有分辨率、轉換時間、精度、電源、輸入電壓範圍、工作環境、數字輸出特性、價格等。
5.基本的單片機系統
基本的單片機系統除了采用前面介紹的外,電可采用片内帶有多路轉換開關、采樣保持電路、adc的高內建度的單片機。例如可采用philips公司的8xc552型,也可采用intel公司的mcs-96單片機(16位)。由于資料采集系統許多單元電路都內建在單片機内,這給硬體設計工作帶來了極大的友善。