前面已經介紹了模塊化設計的特點和巨大優勢。在我們的實驗板中,單片機是其中最核心的一個模塊;而對于單片機來說,又是由更多的子模塊組合而成。本文主要對單片機/計算機系統中最核心的幾個模塊進行簡要介紹。
  為了便于進行說明,后面會將單片機/計算機簡單的統稱為微機系統。
  信息與數據
  何為信息?可以理解成我們周圍各種所能感知到的東西、還有人們所思所想等等,信息的概念不好解釋,但是大家都能理解,也不是我要討論的重點。
  在微機系統中,能處理很多信息,例如我正在寫的內容,就是文字和圖像信息。處理信息的前提,就是對信息進行表示,例如文字就是一種形式。
  何為數據?在微機系統中,其結構決定了各種能處理的信息都需要表示成二進制數字,這就被稱為數據。例如英文字符可以通過ASCII碼表示成一個個字節的數據等。
  CPU
  人的大腦每時每刻所做的最重要的事,就是對大量的信息進行處理。對內部已有信息和外界信息進行處理,產生新的信息保存在大腦中,或對外界作出反應。
  CPU即中央處理器(CPU=Central Processing Unit),是一個微機系統最核心的部件,可以認為相當于人的大腦中的思維部分,負責數據的處理。
  存儲器:RAM/ROM/外存儲器
  存儲器用來保存數據,例如在硬盤上可以存放電影音樂,可以認為相當于大腦中的記憶部分。
  RAM
  即隨機存儲器(RAM=Random Access Memory),最重要的特點是可讀可寫。寫是指修改或者刪除數據。另外,RAM的速度相對比較快;斷電后數據會丟失;另外由于造價較高通常容量不大,但是夠用了。通常在電腦中相當于內存。
  在學習C語言的時候,定義一個變量,例如int a,程序在執行的時候,這個變量就會保存在RAM中。
  RAM根據結構和工作原理,又分為SRAM(=Static RAM,靜態RAM)和DRAM(=Dynamic RAM,動態RAM)兩種,有興趣可以自己查閱相關資料。
  ROM
  即只讀存儲器(ROM=Read Only Memory),主要特點是通常情況下存儲內容不能被修改;斷電后數據不會丟失。
  最早的ROM是一次性寫入的,寫入完成后通過高電壓燒斷ROM內部的熔絲,之后就不能再修改,而這也是單片機“燒寫程序”一詞的由來。后來為了適應硬件發展,可用紫外線擦寫的ROM被發明出來,但是操作起來比較麻煩。再到后來電擦寫的ROM誕生了,也就是后面會用到的EEPROM(EEPROM=Electrically Erasable Programmable Read-Only Memory,帶電可擦可編程只讀存儲器)。
  給單片機燒寫程序時,就是將代碼燒寫到了單片機的ROM中;運行程序的時候,指令就會從ROM中取出并被執行。
  備注1:ROM常被誤認為是對應于計算機上的硬盤,實際上硬盤屬于外部存儲,而ROM對應于計算機主板上的BIOS存儲器等。
  備注2:在計算機中,常用到的應用程序平時是保存在硬盤中的,執行的時候,會由操作系統裝載到內存的代碼區域而不是ROM,這和單片機中的程序的執行過程不一樣(與單片機程序執行過程一致的是BIOS程序等,而不是操作系統之上的應用程序)。
  備注3:一些單片機具備IAP功能(IAP=In Application Programming,在應用編程),利用一段小程序更新單片機ROM中的程序,可以實現在不斷電的情況下自動更新單片機程序。
  外存儲器
  一般計算機系統中存儲器包括主存儲器和輔助存儲器,主存儲器又叫內存儲器(內存),輔助存儲器又叫外儲存器(外存)。常見的外存儲器有硬盤、軟盤、光盤、U盤等,斷電后仍然能保存數據。
  中斷系統
  中斷系統是計算機中非常重要的一個概念,但是這個詞看起來很難理解。何為中斷系統呢?我先講一個故事。
  有一天班長收到通知要讓五位同學每人填一份表格,填完后盡快收集起來上交給老師。班長把表格分別發給了這五位同學,但是每個同學什么時候能填好表格是不確定的。這時他有幾種選擇。
  方法一,每隔一段時間輪流去問這五位同學有沒有填完,如果填完了,確認無誤,就收集起來。
  方法二,班長發表格時告訴這幾位同學,填完表后馬上交給他,然后自己就能繼續好好看書了。每當有同學交表格的時候,班長就會把書簽放到正在看的那一頁書中,然后檢查這個同學的表格填寫是否正確。確認了以后,班長又會從剛剛看的那一頁繼續看書。
  顯然,方法一效率實在太低,浪費了很多時間;方法二效果不錯,效率提高了很多。
  故事講完了,這里就要介紹中斷系統了。在基本的微機系統中,CPU負責主要數據的處理工作(不考慮計算機顯卡這類設備),通常任務繁重(相當于故事中的班長)。
  有時外圍器件需要執行工作,執行結果要讓CPU及時處理,但又不能確定具體完成時間(故事中的同學填表格)。
  原因有可能是因為外圍模塊速度遠不及CPU,例如從硬盤讀數據;也可能是執行不需CPU干預的費時操作(也可以理解成外圍模塊執行這個操作的速度慢);或者是接收來自外界的操作,例如按下鍵盤電腦需要很快進行響應,要不然就表現為很卡甚至死機了。
  這時為了及時知道外圍器件處理的結果并進行處理,就有幾種工作流程了。
  一是輪詢法(故事中的方法一)。以一定的間隔不斷查詢外圍器件工作狀態。好處是設計起來比較簡單;缺點是效率太低,特別是當外圍設備太多、速度差異很大時,CPU幾乎沒空干別的事。
  二是中斷法(故事中的方法二)。外圍模塊處理好任務以后,主動給CPU發送中斷請求(填好表格交給班長)。然后CPU中斷當前任務,轉而處理中斷請求,對該模塊的執行結果進行處理(檢查表格填寫正確,并收集表格)。處理中斷請求之前,需要保護現場(放書簽),處理完中斷請求,再恢復現場,繼續之前任務(繼續看書)。
  DMA
  前面的故事其實還有方法三。班長由于最近事情太多,決定請副班長幫忙收集表格,讓同學們自己把表格交給副班長。副班長把表格都收集完了,再由他交給老師。這種方法需要征得副班長的同意,不過效果很好。
  同樣對于微機系統來說,也有第三種方法,這種方法就叫做DMA(DMA=Direct Memory Access,直接內存訪問)。在CPU之外設置一個DMA控制器(副班長),根據CPU發送的指令,外圍設備處理完數據,通過DMA直接將數據保存到內存中的指定位置,然后才用中斷通知CPU處理。
  在比較復雜的系統中,DMA能大大提高執行效率。51等單片機本身沒有DMA功能,可以在外部添加DMA控制器芯片實現(例如Intel 8237)。不過性能相對較低的單片機不能實現復雜系統,所以使用DMA的意義不大。
  定時器/計數器
  這里的定時器和我們生活中的定時器相似,主要區別是這個定時器往往定時時間很短;定時器定時時間到,不會響鈴,而是通過中斷的形式通知CPU。計數器則是計數高低電平脈沖數量的,而定時器通常正是由計數器實現的。這兩個模塊放在一起講解,正是因為他們通常就是設計在一塊的,后面再做詳細介紹。
  計算機/單板機/單片機
  核心模塊基本介紹完了。對于一個微機系統,CPU、存儲器(主要指RAM和ROM)是必不可少的,實際上還會有很多其他設備。對于計算機而言,這些模塊一般都是獨立的,通過主板連接在一起。早期人們把CPU、RAM、ROM等器件集成到一塊電路板上,被稱為單板機。后來集成電路技術不斷發展,CPU、RAM、ROM、中斷等模塊集成到一個芯片中,就成了單片機。
  =======================================================
  《單片機小白學步》系列教程(原名《單片機入門指南》)介紹
  本系列教程從最基本的入門知識開始,逐步深入介紹單片機系統設計,內容包括:
 1、入門篇:單片機等基本概念、各種電子設計基本知識
 2、思想篇:單片機/計算機系統設計的工程思想
 3、學習篇:單片機學習過程、方法和技巧,以51單片機為例介紹,并推廣到其他單片機
 4、應用篇:遵循規范的工程方法,設計單片機系統實例(計劃設計的系統有:計算器、電子表、密碼鎖、簡易手機,具體看有沒有時間再確定)
 5、原理篇:從模擬電路、數字電路開始,逐步深入介紹單片機/計算機系統原理,并自行設計簡易的CPU(由于個人水平有限,這部分沒有把握寫好,具體內容視情況而定)
  教程特點
  1、技術知識點全面,從入門到精通
  包含了各種基本知識,尤其是對單片機基本概念的介紹、為什么要用單片機等,在很多同類書籍教程中都被忽略了。同時也包含了一些深入的知識,包括原理篇考慮對單片機的基本原理進行介紹,有助于深入理解單片機。
  本系列教程以51單片機為例進行介紹。通過51介紹完單片機的基本知識,我會再把430進行簡要介紹,尤其是對比兩者之間的優缺點,讓大家很快感受到430的巨大優勢,而學習51正好為快速了解430打下了堅實的基礎。
  2、除了單片機知識,還有思想、方法、技巧的介紹
  本系列教程中,介紹單片機各種模塊編程知識的主要是學習篇,而學習篇只是整個教程的一部分。在學習篇中我會貫穿各種方法技巧,如何理解一些模塊功能,怎么看時序圖,嚴格遵守工程思想進行編程,程序發生了錯誤怎么調試等等。而在思想篇中會總體介紹很多重要的思想,為后面的學習做好準備工作。
  3、知識先后順序的設計
  單片機學習過程中,涉及大量的知識,而且很多知識之間相互依賴,關聯很強。
  本系列教程對知識的先后順序進行比較明確的規劃,盡最大可能符合人的認知過程。但是實際規劃時發現,無論怎么調整知識的順序,總有一些知識之間相互依賴,關系復雜。例如開始講IO口的時候肯定會提到寄存器,而寄存器這個詞的理解,需要深厚的背景知識。但是這些背景知識在沒有進行實踐的時候也很難理解。
  初學者常常就會在這樣的地方感覺疑惑不解,不知所措。而每次遇到類似這樣的知識,我會向初學者指出,應該如何對待。這個知識是應該自己去學習補充,還是等到學完原理篇再做理解,而現在又應該怎么去看待這個名詞。
  另外,在整個教程的學習前,需要掌握一定的C語言等基礎知識,具體可參考教程第〇篇《序》中的相關說明
 http://www.hainter.com/mcu-primer-0
  4、語言通俗易懂
  本系列教程力求語言通俗易懂,而不會用一堆新手不懂的詞語去解釋另一個不懂的詞語。但是受限于個人語言表達能力,可能有些地方表述的比較繁瑣,或者不清楚,希望大家能夠幫忙指出。
  其他問題
  如果覺得我寫的對你有幫助,歡迎多多反饋,包括寫的不正確、不合理、不太明白都可以指出來,這樣方便我對其進行完善。
  更多可參見:《如何以學習單片機為契機,逐步成為優秀的工程師》
 http://www.hainter.com/mcu-engineer
  本系列教程首發于我的個人主頁,歡迎訪問(由于是國外服務器,速度稍微有點慢):
 http://www.hainter.com/category/hacker/mcu-primer
  同時會將其轉發到CSDN、電子發燒友等站點,歡迎關注。
 CSDN專欄網址?http://blog.csdn.net/column/details/mcu-introduction.html
 電子發燒友論壇?http://bbs.elecfans.com/zhuti_mcu_1.html
    
 
 
 本文首發自我的個人主頁,轉載請注明來源:http://www.hainter.com/mcu-primer-17
                            總結
                            
                                以上是生活随笔為你收集整理的单片机小白学步系列(十七) 单片机/计算机系统概述:核心模块的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                            
                                如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。