单片机原理与应用以及C51编程技术——硬件体系结构梳理
文章目錄
- 一、單片機的結構原理
- 1.1 主要性能和特點
- 1.2 內部框圖
- 1.3 CPU
- 1.3.1 運算器
- 1.3.2 控制器
 
- 1.4 幾個主要的特殊功能寄存器SFR說明
- 1.4.1 程序指針PC
- 1.4.2 累加器A
- 1.4.3 寄存器B
- 1.4.4 數據指針DPTR
- 1.4.5 程序狀態字PSW
- 介紹
- 例子
 
- 1.4.6 堆棧指針SP
- 堆棧的介紹
- 堆棧的作用
- 堆棧操作的兩種方式
 
 
 
- 二、單片機的存儲器結構
- 2.1 程序存儲器ROM(片內、片外)
- 2.1.1 程序存儲器六個特殊的單元
- 2.1.2 外部程序存儲器
 
- 2.2 數據存儲器RAM
- 2.2.1 AT89 片內、片外數據存儲器示意圖
- 2.2.2 片內RAM低128B 字節功能分配圖
- 工作寄存區區結構圖(0區)
- 片內RAM中具有雙重功能的存儲結構圖
- RAM的20H~2FH的存儲特點(位尋址區)
 
- 2.2.3 特殊功能寄存器SFR
 
- 2.3 外部數據存儲器
- 2.4 小結
 
- 三、單片機的引腳功能
- 3.1 51單片機的外形和邏輯符號
- 3.2 51單片機的引腳定義
- 3.2.1 主電源引腳
- 3.2.2 外接晶體引腳
- 3.2.3 控制與電源復用引腳
- RST / V pd(9腳)
- ALE/PROG(30腳)
- /PSEN(29腳)
- /EA / Vdd (31腳)
 
 
 
- 四、單片機的I/O口
- 4.1 P0
- 4.2 P1
- 4.3 P2
- 4.4 P3
- 4.4.1 小結
 
- 4.5 片外總線結構
- 4.5.1 地址總線(AB)
- 4.5.2 數據總線(DB)
- 4.5.3 控制總線(CB)
 
- 4.6 小結
 
- 五、單片機內部看門狗定時器
- 看門狗定時器(WDT)簡介
 
- 六、單片機復位工作方式
- 6.1 介紹
- 6.2 兩種上電復位電路
- 6.2.1 上電復位電路
- 6.2.2 上電復位及按鈕復位
 
- 6.3 復位的初始狀態
 
- 七、單片機低功耗方式
- 7.1 介紹
- 7.2 空閑工作方式
- 7.3 掉電工作方式
 
- 八、單片機的時序
- 8.1 介紹
- 8.2 基本時序
- 8.2.1 時鐘周期
- 8.2.2 狀態周期
- 8.2.3 機器周期
- 8.2.4 指令周期
 
 
一、單片機的結構原理
1.1 主要性能和特點
1.2 內部框圖
1.3 CPU
CPU由運算器和控制器兩部分組成,主要完成取指令、指令譯瑪、發出各種操作所需的控制信號,使單片機各個部分協調工作。
1.3.1 運算器
運算器是以算術邏輯單元ALU為核心,加上累加器A、寄存器B、程序狀態字PSW及專門用于位操作的布爾處理機等組成的,它可以實現數據的算術運算、邏輯運算、位變量處理和數據傳送等操作。
1.3.2 控制器
控制器是單片機的控制中心,它包括定時和控制電路、指令寄存器、指令譯碼器、程序計數器PC、堆棧指針SP、數據指針DPTR以及信息傳送控制部件等。
它先以振蕩信號為基準產生CPU的時序,從ROM中取出指令到指令寄存器,然后在指令譯碼器中對指令進行譯碼,產生指令執行所需的各種控制信號,送到單片機內部的各功能部件,指揮各功能部件產生相應的操作,完成指令對應的功能。
1.4 幾個主要的特殊功能寄存器SFR說明
1.4.1 程序指針PC
1.4.2 累加器A
最常用的寄存器。所有的算術運算指令所要使用的寄存器且運算結果都存放在A中。
1.4.3 寄存器B
乘、除法指令專用的寄存器,當然也可作為一般的工作寄存器使用。
1.4.4 數據指針DPTR
1.4.5 程序狀態字PSW
 8位寄存器,表征程序執行的狀態信息。
介紹
在加減法運算中,累加器A的最高位D7有進位,則CY=1,否則CY=0。同理,在減法運算中,如果A7有借位,則CY=1.因此CY往往作為無符號數運算是否有溢出的標志。
用來判斷加減法運算時,低四位是否向高四位進位或借位(既A3的進位或借位)。往往用來處理壓縮的BCD碼的運算處理。
完全由用戶來定義和使用。
補充:寄存器區:4個寄存器區,每個區有R0-R7八個工作寄存器;
確定工作寄存器R0-R7在4個區中的位置(單片機在復位后RS1、RS0=00 — 選擇0區)。可以通過修改RS1,RS0的值來改變工作寄存器區的選擇。
判斷有符號數運算時是否有溢出。
OV的結果可以用一個算法來表示: OV=CP異或CS
其中:CP為A7的進位,CS為A6的進位OV=1表明有溢出。
百度解釋:溢出標志位:對于單字節的有符號數,若用最高位(b7)表示正、負號,則只有7位有效數位(b6~b0),能表示-128~+127之間的數。運算結果超出了這個數值范圍,就會發生溢出,此時OV=1,否則OV=0。
用來標志累加器A中運算后“1”的個數。
當P=1時,表明A中1的個數為奇數個,反之為偶數個。
例子
1.4.6 堆棧指針SP
SP 堆棧指針:8位寄存器,用來指示堆棧的位置,可由軟件修改。
堆棧的介紹
堆棧是一種按“先進后出”規律操作的存儲結構。不同類型的處理器其堆棧的設計各不相同:
SP寄存器作為堆棧指針。這種結構的特點是充分的利用RAM的空間,使堆棧的空間得以擴大。但它也有一種“致命”的弱點:數據很容易與堆棧發生沖突,特別是初學編程者。
 為了避免上述問題的出現,編程者往往在程序的開始加上一條指令: MOV SP,60H 試分析為什么?
百度解釋:
 單片機復位后SP的值一般要用一條指令賦值為60H,這只是個別人寫程序的愛好與習慣罷了,沒有任何規定必須是賦值60H,更沒有任何原因必須選60H。
 就單片機復位后,SP=07H,不用重新賦值也是可以的,否則,為什么當初設計者會這么設計呢。由于51單片機的堆棧是向上增長的,所以,為了避免堆棧區與用戶數據區互相影響,才將SP設置在60H以后,比較合理的是賦值為6FH,這樣堆棧區可用70H~7FH,預留有16個單元足夠,也不浪費。
堆棧的作用
①保護程序的斷點地址(既返回地址);
 ②保護數據(也稱保護現場)。
堆棧操作的兩種方式
①斷點地址的保護是靠執行子程序調用指令或發生中斷調用時,由硬件自動實現斷點地址的進棧保護;在子程序或中斷服務程序返回時有RET或RETI指令實現恢復斷點;
 ②而對于其它需要保護的數據都要由專用的指令PUSH或POP來實現進棧保護或恢復。
二、單片機的存儲器結構
① 內部集成了4K的程序存儲器ROM;
② 內部具有256B的數據存儲器RAM;
③ 可以外接64K的程序存儲器ROM和數據存儲器RAM。
從物理結構的角度講,51單片機的存儲系統可以分為四個存儲空間:既片內ROM,RAM和片外ROM、RAM。
 從邏輯上講(既編程的角度),51單片機的存儲系統實際上分為三個存儲空間。
 1. 片內數據存儲器RAM;
 2. 片外數據存儲器RAM;
 3. 片內或外的程序存儲器ROM(由EA電平決定)。
 結構圖:
 
2.1 程序存儲器ROM(片內、片外)
程序存儲器ROM用于存放程序、常數或表格。
在51單片機中,由引腳 /EA 上的電平選擇內、外ROM;
 EA=1時,CPU執行片內的4KROM中的程序;
 EA=0時,CPU選擇片外ROM中的程序。
無論是使用片內還是使用片外ROM,程序的起始地址都是從ROM的0000H單元開始。
盡管系統可以同時具備片內ROM和外部ROM,但是在一般正常使用情況下,通過/EA的設定來選擇其一(或者使用內部ROM,或者使用外部ROM)。
如果EA=1(執行片內程序存儲器中程序時):
 如果程序計數器的指針PC值超過0FFFH(4K)時,單片機就要自動的轉向片外的ROM存儲器且從1000H單元開始執行程序(無法使用片外ROM的低4K空間)。
 
 
2.1.1 程序存儲器六個特殊的單元
0000H單元:復位時程序計數器PC所指向的單元,因此用來 存放程序中的第一條指令;
 0003H單元:外部中斷/INT0的矢量入口地址;
 000BH單元:定時器T0溢出中斷的矢量入口地址;
 0013H單元:外部中斷/INT1的矢量入口地址;
 001BH單元:定時器T1的溢出中斷矢量入口地址;
 0023H單元:串行口接收、傳送的中斷矢量入口地址。
 矢量入口單元:在編寫中斷程序時,寫入對應的“跳板指令”。
 
因為在復位時,程序指針PC指向0000H
2.1.2 外部程序存儲器
當單片機使用外ROM存儲器時(擴展系統),必須設定/EA=0,此時單片機的端口功能就要發生相應的改變:
 ① P0、P2作為外部ROM的地址和數據總線;
 ② 使用引腳/psen信號來選通外部ROM的數據三態輸出。
 
2.2 數據存儲器RAM
無論在物理上還是邏輯上,系統中RAM 都可分為兩個獨立空間:內部和外部RAM。由不同的指令來訪問。
內部RAM從功能上將256B空間分為二個不同的塊:
在低128B的RAM存儲單元中又可劃分為:
高128B的專用寄存器區SFR中僅僅使用了21寄存器(51系列),其它107個單元不能使用。
2.2.1 AT89 片內、片外數據存儲器示意圖
2.2.2 片內RAM低128B 字節功能分配圖
工作寄存區區結構圖(0區)
片內RAM中具有雙重功能的存儲結構圖
RAM的20H~2FH的存儲特點(位尋址區)
20H~2FH本身是字節地址,因此這些單元可以按照常規存儲16個字節的數據。如:
MOV 20H,A ;將累加器A中的數據送RAM的 20H單元(字節傳送操作)
將20H~2FH中的16*8既128個bit分別定義其位地址00H~7FH(如圖),這樣CPU可以按位來訪問這些bit:
MOV 20H,C ;將Cy中的布爾變量送20H位地 址中(位傳送)
2.2.3 特殊功能寄存器SFR
特殊功能寄存器 SFR (Special Function Register) 離散分布在256B字節中的高128B中。
具有位地址和位名稱的SFR才可以位尋址。
位地址有以下4種表示形式:
- 直接使用位地址表示
 例如:0D7H —— PSW最高位的位地址
- 使用位名稱表示、
 例如:CY —— PSW最高位的位名稱
- 使用SFR字節地址.位形式表示
 例如:0D7H.7 —— PSW字節地址.最高位
- 使用SFR名稱. 位形式表示
 例如:PSW.7 —— PSW名稱.最高位
位尋址:20H-2FH和能被8整除的SFR
2.3 外部數據存儲器
當單片機需要外加RAM存儲器時(擴展系統),必須使用專用的MOVX指令,此時單片機的端口功能就要發生相應的改變:
 ① P0、P2作為外部RAM的地址和數據總線;
 ② 使用MOVX指令進行讀寫操作。
 ③ MOVX指令在執行時,會自動地產生/RD或/WR信號對 外部RAM實現控制。
指令通過P0、P2輸出DPTR中的16位地址信號。這里使用了16位的寄存器DPTR,其尋址范圍為64KB。
 此時: P0口做低8位地址總線和數據的“復用”總線;
 P2口做高8位地址總線。
2.4 小結
MCS-51單片機的存儲器的配置
 片內4K的程序存儲器ROM;
 片內256B的數據存儲器RAM;
 片外可以擴展64K的ROM和RAM.
程序存儲器
 當引腳EA=1時, CPU從片內ROM的0000H單元運行程序;
 若引腳EA=0時, CPU從片外ROM的0000H單元運行程序。
 當引腳EA=1,且PC值大于0FFFH時, CPU會自動從內部ROM轉到片外ROM的1000H單元運行程序。
無論是片內還是片外, ROM有六個單元是有特定意義的:
內部數據存儲器RAM
 低128B: 1,工作寄存器區;2,位尋址區;3,便箋區;
 高128B: 做特殊功能寄存器SFR用。
 注意:
外部數據存儲器
三、單片機的引腳功能
3.1 51單片機的外形和邏輯符號
3.2 51單片機的引腳定義
3.2.1 主電源引腳
主電源引腳:Vcc(+5V— 40腳)和 Vss (GND 20腳);
 
3.2.2 外接晶體引腳
外接晶體引腳:XTAL1(19腳)、XTAL2(18腳)
 兩腳之間接入一個晶體震蕩器,單片機就以此晶體的頻率開始工作(其頻率范圍為:0~24MHz)。
 頻率越高,單片機的工作速度就越快,但單片機的功耗就要增加,其產生的高次諧波也會對系統內部的模擬電路(如ADC)產生嚴重的干擾。
 
3.2.3 控制與電源復用引腳
RST / V pd(9腳)
RST / V pd(9腳):復位信號輸入,高電平有效。
- 復位操作可以確保CPU從程序的開始端運行程序;
- 微處理器在“上電”時必須對其施行“復位”操作,以避免電源從0V至5V時電源的過度性造成系統“混亂”。而MCS-51單片機不具備“上電復位”功能。因此,必須通過外部對此引腳施加一個(大于兩個時鐘周期的)高電平使單片機復位。
 
 
 在復位狀態下:
【思考題】PC=0000H 意味著什么?
 意味著程序從頭開始執行
 Vpd 功能:當單片機掉電時,此引腳可以接入備用電源向單片機內部的RAM供電,防止RAM中的數據丟失。
ALE/PROG(30腳)
以系統時鐘 fosc 的1/6的頻率,周期性輸出方波脈沖。
/PSEN(29腳)
/PSEN(29腳):外部程序程序存儲器的選通輸出信號。
- 當單片機使用外部程序存儲器時,此腳在一個機器周期內產生兩次負脈沖,作為外部程序存儲器ROM的選通信號;
- 訪問外部數據存儲器 RAM 時,此信號無效。
 
/EA / Vdd (31腳)
/EA / Vdd (31腳):程序存儲器的選擇控制端
 CPU 執行片內ROM還是外部ROM中的程序,由硬件設計者通過對EA引腳的設置來決定:
 /EA=“1” 時:單片機使用內部的程序存儲器ROM;
 /EA=“0” 時:單片機使用外部的程序存儲器ROM。
 【注意】:如果EA=1既使用單片機內部的程序存儲器時,如果程序計數器PC的值超過0FFFH時,單片機將自動轉向外部程序存儲器1000H開始的單元。
 對于EPROM型的單片機,此腳還是用于寫程序時,加入21伏的編程電壓。
 
四、單片機的I/O口
4.1 P0
P0.0 - P0.7: P0端口線(39-32腳)
 輸出能力最強的端口,可帶動8個TTL負載;
- 具有兩種工作方式:
 ①普通的I/O方式;
 ②系統擴展時的總線方式。
- 當處于I/O方式時:端口內部輸出電路呈“開路結構”,所以當驅動MOS負載時,應接一個10K左右的上拉電阻,否則無法輸出高電平。
- 當處于擴展方式時:P0口成為外部存儲器提供低八位地址和數據的“復用總線” (此時不能作為通用的I/O端口)。
 
 
4.2 P1
P1.0 - P1.7: P1端口線(1 – 8腳):
- 負載能力4個TTL負載。
- MCS-51單片機中唯一“功能單一”的I/O端口。在系統設計中只能設計為“通用的I/O端口”;
 
4.3 P2
P2.0 – P2.7: P2端口線(21 – 28腳):
- 同P0端口類似:具有兩種工作方式:
 ①普通的I/O方式;
 ②系統擴展時的總線方式(高八位地址總線)。
 
4.4 P3
P3.0 – P3.7 P3端口線 (10 – 17腳):
- P3口的引腳具有兩種用途:
 ①做通用的I/O端口,負載能力為4個TTL ;
 ②引腳具有第二功能。
 
4.4.1 小結
【注意】: 在系統設計中,P3端口原則上不作I/O端口,而是盡量保留其第二功能;
如:串行通信中所使用的發送TXD、接收RXD以及外部中斷的兩個輸入信號INT0、INT1等。
**這種方法利于系統設計中最大限度的調用MCS-51單片機的內部硬件資源,以簡化外部電路的設計。**4.5 片外總線結構
4.5.1 地址總線(AB)
地址總線的寬度是16位,因此可以尋址的范圍是64?KB。采用分時復用技術,可以對外部64?KB的數據存儲器或程序存儲器直接尋址。它由P0口提供16位地址總線的低8位(A0~A7),由P2口提供地址總線的高8位(A8~A15)。
4.5.2 數據總線(DB)
數據總線的寬度是8位,它由P0口提供。
4.5.3 控制總線(CB)
控制總線由P3口的第二功能(RXD、TXD、INT0、INT1、T0、T1、RD、WR)和4根獨立的控制線(RST、EA、ALE、PSEN)組成。
4.6 小結
五、單片機內部看門狗定時器
看門狗定時器(WDT)簡介
WDT是為了解決CPU運行時可能進入混亂或死循環而設置的,AT89S51的WDT由一個14bit計數器和看門狗復位SFR(WDTRST)構成。**外部復位時,WDT默認為關閉狀態,要打開WDT,用戶必須順序將01EH和0E1H寫到WDTRST寄存器(SFR地址為0A6H)中。**當啟動WDT后,它會隨晶體振蕩器在每個機器周期計數,除硬件復位或WDT溢出復位外沒有其它方法關閉WDT。WDT溢出將使RST引腳輸出**高電平的復位脈沖**,復位脈沖持續時間**98個時鐘周期**六、單片機復位工作方式
6.1 介紹
復位:將單片機系統置成特定初始狀態的操作,復位后程序從頭(0000H單元)開始執行程序。
 系統剛接通電源或重新啟動時均進入復位狀態。
 當系統處于正常工作狀態時,如果RST引腳上有一個高電平并維持2個機器周期(24個振蕩周期)以上,則CPU就可以實現可靠復位,如圖2-17所示,其中TCY為機器周期,等于12個時鐘周期。各寄存器和程序計數器PC的狀態見表2-11所示。
 
6.2 兩種上電復位電路
6.2.1 上電復位電路
 上電復位電路:當接通電源的瞬間,RST端與VCC同電位,隨著電容上的電壓逐漸上升,RST端的電壓逐漸下降,于是在RST端便形成了一個正脈沖,只要該正脈沖的寬度持續兩個機器周期的高電平,就可實現系統自動復位。
6.2.2 上電復位及按鈕復位
 上電復位和按鈕復位:(也稱為手動復位)的組合,當人工按下P按鈕后就可實現系統復位。單片機復位后,各寄存器和程序計數器PC的狀態見表2-11所示。
6.3 復位的初始狀態
七、單片機低功耗方式
7.1 介紹
AT89系列單片機提供了兩種省電工作方式:空閑方式和掉電方式。其目的是盡可能地降低系統的功耗。
 在空閑工作方式中(IDL=1),振蕩器繼續工作,時鐘脈沖輸出到中斷系統、串行口以及定時器模塊,但卻不提供給CPU。在掉電方式中(PD=1),振蕩器停止工作。
 兩種工作方式都是由SFR中的電源控制寄存器PCON的控制位來定義的,PCON寄存器的控制格式如圖2-19所示。
 
 SMOD:串行口波特率倍率控制位。
 GF0,GF1:通用標志位。
 PD:掉電方式控制位。PD=1,進入掉電工作方式。
 IDL:空閑方式控制位。IDL=1,進入空閑工作方式。
 PCON寄存器的復位值為0XXX000,PCON.4~PCON.6為保留位,用戶不要對它們進行寫操作。
7.2 空閑工作方式
當CPU執行完置IDL=1( ORL PCON,#01H,PCON.0=1)的指令后,系統進入了空閑工作方式。
 這時,內部時鐘不提供給CPU,而只供給中斷、串行口、定時器部分。CPU的內部狀態維持不變,即包括堆棧指針SP、程序計數器PC、程序狀態字PSW、累加器ACC等其他所有的內容保持不變,端口狀態也保持不變。ALE保持邏輯高電平。
有兩種方法可以使系統退出空閑工作方式:
 1、**任何的中斷請求都可以由硬件將PCON.0(IDL)清0而中止空閑工作方式。**當執行完中斷服務程序返回時,從置空閑工作方式指令的下一條指令開始繼續執行程序。
 2、**硬件復位。**RST端的復位信號直接將PCON.0(IDL)清0,從而退出空閑狀態,CPU則從進入空閑方式的下一條指令開始重新執行程序。
7.3 掉電工作方式
當CPU執行一條置PCON.1位(PD)為1的指令后,系統進入掉電工作方式。
 在這種工作方式下,內部振蕩器停止工作。由于沒有振蕩時鐘,因此所有的功能部件都停止工作,但內部RAM區和特殊功能寄存器的內容被保留,而端口的輸出狀態值都保存在對應的SFR中,ALE和都為低電平。
 **退出掉電方式的惟一方法是硬件復位。**復位后將所有的特殊功能寄存器的內容初始化,但不改變內部RAM區的數據。
 而在準備退出掉電方式之前,**Vcc必須恢復到正常的工作電壓值,并維持一段時間(約10?ms),**使振蕩器重新啟動并穩定后,方可退出掉電方式。
八、單片機的時序
8.1 介紹
單片機取出指令后要對指令進行譯碼產生各種操作信號,所謂時序,就是指各種操作信號的時間序列,它表明了指令執行中各種信號之間的相互關系。為達到同步協調工作的目的,各操作信號在時間上有嚴格的先后次序,這些次序就是CPU的時序。
 CPU執行指令的一系列動作都是在時序電路控制下一拍一拍進行的,為了便于對CPU時序進行分析,人們按指令的執行過程規定了幾種周期,即時鐘周期、狀態周期、機器周期和指令周期,也稱為時序定時單位。
8.2 基本時序
8.2.1 時鐘周期
也稱為振蕩周期,定義為時鐘脈沖頻率(fosc)的倒數,是計算機中最基本的、最小的時間單位。
 在一個時鐘周期內,中央處理器CPU僅完成一個最基本的動作。一個振蕩周期也稱為一個節拍,用P表示,通常稱為P節拍,如圖2.20所示。
 
8.2.2 狀態周期
時鐘周期經2分頻后成為內部的時鐘信號,用作單片機內部各功能部件按序協調工作的控制信號,稱為狀態周期,用S表示。
 **一個狀態周期包含兩個時鐘周期,前半狀態周期相應的時鐘周期定義為P1,后半周期對應的時鐘周期定義為P2。**一般情況下,CPU中的算術邏輯運算在P1有效期間完成,在P2有效期間進行內部寄存器間的信息傳送。
8.2.3 機器周期
機器周期:完成一個基本操作所需要的時間稱為機器周期。
 51單片機有固定的機器周期,規定一個機器周期有6個狀態,分別表示為S1~S6,而一個狀態包含兩個時鐘周期,那么一個機器周期就有12個時鐘周期,可以表示為S1P1, S1P2, …, S6P1, S6P2,一個機器周期共包含12個振蕩脈沖,即機器周期就是振蕩脈沖的12分頻。
8.2.4 指令周期
指令周期:指CPU執行一條指令所需要的時間,一般由若干個機器周期組成,指令不同,所需要的機器周期數也不同。51系統中,一個指令周期通常含1~4個機器周期。大多數指令是單字節單周期指令,還有一些指令是單字節雙周期指令和雙字節雙周期指令,而乘法指令MUL和除法指令DIV都是單字節四周期指令(參見附錄B)。
總結
以上是生活随笔為你收集整理的单片机原理与应用以及C51编程技术——硬件体系结构梳理的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 矩张量计算 matlab,用来计算广义相
- 下一篇: 测试用例设计方法————正交表法
