官术网_书友最值得收藏!

任務1-3 解剖單片機

1.單片機的結構

通過前面的學習,我們已知單片機的內部有ROM、RAM以及并行I/O口,那么,除了這些東西之外,單片機內部究竟還有些什么?這些零碎的東西怎么連在一起的?讓我們來對單片機內部作一個完整的分析吧!請看圖1-3-1。

圖1-3-1 單片機結構框圖

從圖中我們可以看出,在51 單片機內部主要有以下幾個功能單元:CPU、并行接口(也稱I/O口)、存儲器(ROM和RAM)、時鐘電路、定時計數器、中斷系統、串行接口、總線。怎樣來理解這些功能單元呢?其實我們可以把單片機來和人作一個類比,大家就明白了。

我們人最重要的器官是什么呢?當然是我們的大腦,我們需要它來進行思考、計算,而單片機也有一個自己的大腦,它就是CPU了。它可以完成計算、控制等操作,就像人的大腦一樣。那么人的大腦是怎樣與外界進行交流的呢?外界的信息怎樣送到大腦里?大腦里想的怎樣讓別人知道?這些功能是通過我們的眼耳口鼻等感覺器官來實現的,單片機也有自己的眼耳口鼻,就是四個并行I/O口,分別是P0, P1, P2, P3,通過它們,單片機可以將數據傳給外部電路,也可以將外部數據送到CPU中。我們人在進行計算時,還要有草稿紙,還需要有筆記本作記錄,單片機也有自己的草稿紙和筆記本,那就是存儲器(ROM與RAM)。ROM用來存放程序,RAM用來存放中間結果。單片機的總線又是什么呢?它相當于我們人的神經網絡,眼耳口鼻與大腦之間的信息交流就靠它了,單片機CPU與I/O口之間的數據信息交流就是由總線來完成的。一個人要正常地做事情,時間觀念是很重要的,我們是通過手表來確定時間的,單片機同樣需要一塊手表,它就是時鐘電路,通過時鐘電路產生一定周期的矩形波,單片機就是靠這個矩形波來確定時間的。定時計數器就像我們人的鬧鐘,用來確定時間。串行口就像人的電話,可以實現一個單片機與另一個單片機的相互通信,而中斷就相當于報警裝置,可以對一些緊急情況進行監控。這些結構我們會在后面的任務中再詳細地介紹,這里大家只要基本了解一下就行了。

2.專用寄存器SFR

在單片機中有一些獨立的存儲單元具有特殊的功能,通過對這些存儲器的某些位設置1或0,就可以完成單片機內部一些硬件設備的啟動、關閉或對其工作方式的設置,有些還能反映單片機的工作狀態。我們稱之為特殊功能寄存器(SFR),也叫專用寄存器。我們這本教材實際上很重要的一個內容就是學習這些專用寄存器的功能與應用。事實上,我們已接觸過P1這個專用寄存器了,還提到過PSW這個專用寄存器,那么還有哪些SFR呢?請看表1-3-1。

表1-3-1 專用寄存器(SFR)表

當然我們現在不會要求大家全部都記下來,先介紹一下幾個常用的SFR,其他的SFR我們在后面的任務中再慢慢地學習。

(1)ACC:累加器,通常用A表示。這是個什么東西?可不能從名字上理解,它是一個寄存器,而不是一個做加法的東西。為什么給它這么一個名字呢?或許是因為在運算器進行運算時其中一個數一定是在ACC中的緣故吧。它的名字特殊,身份也特殊,下一章我們將學到指令,可以發現,所有的運算類指令都離不開它。

(2)B:一個寄存器。在運算乘、除法時放乘數或除數,其他時間隨你怎么用。

(3)PSW:程序狀態字寄存器。這是一個很重要的寄存器,里面的數據反映了CPU工作時的很多狀態,它的各位功能請看表1-3-2。

表1-3-2 PSW存儲器結構表

下面我們逐一介紹各位的用途:

① C(有些書上也稱為CY):最高位進位標志。8051 中的運算器是一種8 位的運算器,也就是說單片機可以實現兩個8 位二進制數的加減運算,在進行加減時,如果最高位向前有進位和借位時,C就會被置為1。

例1-1:78H+97H(01111000B+10010111B)運算后,最高位進位標志C就會被置為1。

② AC:半進位標志。兩個8位二進制數的加減運算,在進行加減時,如果第4位向前有進位和借位時,AC就會被置為1。

例1-2:57H+3AH(01010111B+00111010B)運算后,最高位進位標志AC就會被置為1。

③ F0:用戶標志位,由我們(編程人員)決定什么時候用,什么時候不用。

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

⑤ OV:溢出標志位。什么是溢出我們下章再談吧。

⑥ P:奇偶校驗位:它用來表示累加器ACC中二進制數位“1”的個數的奇偶性。若ACC中1的個數為奇數,則P為1,否則為0。

例1-3:某運算使得ACC中的結果是78H(01111000B),顯然1 的個數為偶數,所以P=0。

(4)DPTR(DPH、DPL):數據指針,可以用它來訪問外部數據存儲器中的任意單元,如果不用,也可以作為通用寄存器來用,由我們自己決定如何使用。

(5)P0, P1, P2, P3:這個我們已經知道,是四個并行輸入/輸出口的寄存器。它里面的內容對應著管腳的輸出。

(6)SP:堆棧指針。

堆棧介紹:日常生活中,我們都注意到過這樣的現象:家里洗的碗,一只一只摞起來,最晚放上去的放在最上面,而最早放上去的則放在最下面,在取的時候正好相反,先從最上面取,這種現象我們用一句話來概括:“先進后出,后進先出”。請大家想想,還有什么地方有這種現象?其實比比皆是,建筑工地上堆放的磚頭、材料,倉庫里放的貨物,都是“先進后出,后進先出”,這實際是一種存取物品的規則,在單片機中我們存取的“物品”實際上就是一些數據,這種存取數據的規則我們稱之為“堆棧”。

在單片機中,我們也可以在RAM中構造這樣一個區域來存放數據,這個區域存放數據的規則就是“先進后出,后進先出”,我們稱之為“棧”。為什么需要這樣來存放數據呢?存儲器本身不是可以按地址來存放數據嗎?對,知道了地址的確就可以知道里面的內容,但如果我們需要存放的是一批數據,每一個數據都需要知道地址,那不是麻煩嗎?如果我們讓數據一個接一個地放置,那么我們只要知道第一個數據所在地址單元就可以了(見圖1-3-2)。如果第一個數據在27H,那么第二、三個就在28H, 29H了。所以利用棧這種結構來存取數據可以簡化操作。

圖1-3-2 SP的作用

那么51 單片機中的棧在什么地方呢?單片機在RAM中開辟一塊空間,用于堆棧,但是用RAM的哪一塊呢?還是不好定,因為51 單片機是一種通用的單片機,各人的實際需求各不相同,有人需要多一些棧,而有人則不需要那么多,所以怎么分配都不合適,怎樣來解決這個問題?分不好干脆就不分了,把分的權利給用戶(編程者),根據自己的需要去定吧,所以51單片機中棧的位置是可以變化的。

這種變化就體現在SP中值的變化,SP中的值為多少,單片機就從相應編號(地址)的RAM處開始存儲數據,進行堆棧操作,SP就有點像一個指針,它里面專門裝存儲器的地址(編號),它裝的地址為多少,就指向這個地址編號的存儲器。例如SP中的值等于27H,不就相當于是一個指針指向27H單元嗎?看圖1-3-2,單片機執行堆棧時就從這個存儲單元開始進行,當然在真正的51 單片機中,開始指針所指的位置并非就是數據存放的位置,而是數據存放的前一個位置,比如一開始指針是指向27H單元的,那么第一個數據的位置是28H單元,而不是27H單元,當然,這些細節性的東西同學們了解一下就可以了。

其他的SFR,我們在用到時再介紹。

3.單片機程序指令的執行

單片機為什么可以一條一條地執行程序指令?我們在前面的任務中給出的一條條指令經過翻譯過后,變成二進制數的機器語言,通過編程器放入到單片機的程序存儲器中,那么單片機為什么可以自動地、一條條地執行這些指令呢?原來在單片機內部還有一個特殊的指針PC。

“指針”這個詞應該還有點印象吧?對了,我們剛才說的SP專用寄存器就是一個指針,其實所謂指針就是一種特殊的存儲器,它所存的內容是其他存儲單元的地址(也就是我們前面說的編號),它里面放的編號為多少,它就指向對應的存儲單元,選中那個存儲單元。我們剛才講的SP指針是指向數據存儲器的,在下一章,我們還會接觸到幾個可以指向數據存儲器的指針,它們都可以裝入單片機數據存儲器(RAM)的地址編號,選中某個數據存儲單元,我們會在后面詳細介紹。

我們這里講的PC指針也是一個特殊的存儲器,它里面裝的也是存儲單元的地址編號,但與我們剛才所講的指針不同的是,它存的是程序存儲器(ROM)的地址編號,指向的是某個裝指令的程序存儲器,當它指向某個ROM存儲單元時,單片機就將這個存儲單元中存儲的指令取出來執行,而且,單片機每執行完一條指令,會自動地增加PC,使PC指針自動地指向下一條要執行的指令,注意這個過程是自動的,不用我們去操心,這樣單片機就可以自動地從程序的開頭一條一條地執行指令。

小貼士

單片機復位后,PC里的值為00H,也就是指向第一個程序存儲單元,從這個存儲單元開始執行程序指令。

主站蜘蛛池模板: 舞阳县| 颍上县| 白水县| 隆回县| 仁布县| 永德县| 武威市| 镇坪县| 垫江县| 贵溪市| 元谋县| 枣阳市| 兴化市| 六盘水市| 苍梧县| 乌兰浩特市| 颍上县| 双流县| 哈密市| 弋阳县| 米泉市| 烟台市| 广河县| 同江市| 马龙县| 山丹县| 藁城市| 博爱县| 贡觉县| 台南市| 鄂尔多斯市| 小金县| 临潭县| 会东县| 嘉义市| 弥渡县| 衡阳县| 泸州市| 济源市| 永州市| 博湖县|