單片微型計算機(Single Chip Microcomputer)簡稱單片機,是把組成微型計算機的主要功能部件(CPU、RAM、ROM、I/O口、定時/計數器、串行口等)集成在一塊芯片中,構成一個完整的微型計算機。
單片機主要面對測控對象,突出的是控制功能,所以它的芯片內集成了很多面向測控對象的接口電路,如ADC(Analog to Digital Converter,模數轉換器)、DAC(Digital to Analog Converter,數模轉換器)、高速I/O口、PWM(Pulse Width Modulator,脈沖寬度調制器)、WDT(Watch Dog Timer,監視定時器,俗稱“看門狗”)等。這些接口電路已經突破了傳統的微型計算機體系結構,所以單片機也稱MCU(Micro-Controller Unit,微控制器)。
單片機的種類十分廣泛,現在市場上主流的有PIC系列、STM32系列、AVR等等。51系列單片機是對所有兼容Intel 8031指令系統的單片機的統稱,它們都是Intel公司1981年制造8位MCU Intel 8051衍生兼容品,其指令集稱為MCS-51。這里以此為例介紹單片機工作原理。
51單片機的通常采用的是40引腳的雙列直插式封裝(Dual In-line Package,DIP),引腳功能的定義如上圖所示。
除去基本的電源引腳,其中:
* VSS:電源引腳,需要接地(GND)。
* XTAL1、XTAL2(External Crystal):時間引腳,在片內XTAL1是振蕩器反相放大器和時鐘發生器的輸入端,XTAL2是振蕩器反相放大器的輸出。分別外接由兩個電容與晶振的并聯諧振時鐘電路時,XTAL1接外部晶振和微調電容的一端,XTAL2接外部晶振和微調電容的另一端;使用外部時鐘時,XTAL1接地或懸空,XTAL2引腳接外部時鐘的輸入。
* RST(Reset):復位引腳,出現持續兩個機器周期的高電平將導致單片機復位。
* ALE/PROG(Address Latch Enable/):作ALE,為地址鎖存允許控制,用于在訪問外部存儲器時鎖存P0口輸出的低8位地址,脈沖的頻率大約為振蕩器頻率的1/6。作PROG,當內部程序存儲器(EPROM)編程時,由此輸入編程脈沖信號。
* PSEN(Programme Store Enable):外部程序存儲器選通信號。
* EA/Vpp(External Enable):作EA功能,為外部程序存儲器使能信號,低電平時,只能訪問外部程序存儲器。作Vpp,對EPROM編程時,用以施加編程電壓。
* P0、P1、P2、P3:四個并行I/O口,每并行口8個引腳。
51單片機的32個I/O引腳,組成P0~P3四個8位的并行雙向I/O口,內部的**特殊功能寄存器(Special Function Register,SFR)**P0~P3分別是它們的端口鎖存器,此外每個口還分別包含一個輸出驅動器和輸入緩沖器。四個并行口可以按字節操作,也可以按位操作。
P0可作一般I/O口使用,應用系統采用外部總線結構時,也可以分時復用作為雙向數據總線(Data Bus)和低8位地址總線(Address Bus)。
上圖為P0口某一位的結構原理圖。
當P0作I/O口時,CPU發出控制信號C=0,封鎖與門,使場效應管V2截至,同時將下面的數據選擇器(Multiplexer,MUX)撥到下方,將鎖存器的Qˉˉˉ端與場效應管(Field Effect Transistor)V1的柵極接通。
輸出數據時,內部總線數據經鎖存器、MUX、V1輸出到引腳;輸入數據后,上下兩個三態輸入緩沖器用以內部的讀操作,分別實現讀引腳和讀鎖存器。
要注意的是,P0口作為I/O口輸出時,由于輸出級為漏極開路電路,需要外接上拉電阻,才能輸出高電平;輸入后讀取數據時,V1導通將輸入的高電平拉為低電平造成誤讀,所以在進行輸入操作前,要先向端口輸出鎖存器寫“1”。
當P0口作地址/數據總線時,CPU發出控制信號C=1。由P0輸出地址/數據信息時,與門打開,MUX將CPU內部地址/數據總線反向后與V1的柵極接通,V1和V2兩個FET管構成推拉式輸出電路,負載能力大大加強;輸入數據時,是由下面的三態輸入緩沖器進入內部數據的。
P1四個I/O口中功能最簡單,可做一般I/O口使用。其某一位的結構原理圖如下。
其內部已有上拉電阻,可直接輸出高電平,驅動拉電流負載。和P0一樣,端口輸入后讀取數據時,要先向端口輸出鎖存器寫“1”。
P2可作一般I/O口使用,在應用系統采用外部總線結構時,僅用作高8位地址總線。其某一位的結構原理如下圖:
MUX打向左邊時,作一般I/O口使用,此時于前面介紹的I/O口工作原理基本一致。Q輸出為0時V1導通,外部引腳輸出低電平;輸出1時V1截止,由于存在內部上拉電阻,外部引腳輸出高電平。輸入后也可分為讀引腳狀態和讀鎖存器狀態。而且端口輸入后讀取數據時,要先向端口輸出鎖存器寫“1”。
P3可作一般I/O口使用外,每個引腳都具有第二功能。其某一位的結構原理如下圖:
作一般I/O口用,原理同P2。使用引腳的第二功能時,對應的鎖存器里必須為“1”,否則圖中的與非門輸出始終為1,V1導通,引腳始終在低電平,不能正常工作。
每個引腳的第二功能如下表:
引腳 第二功能 說明P3.0 RXD(Receive External Data) 串行輸入端
P3.1 TXD(Transmit External Data) 串行輸出端
P3.2 INT0(Interrupt) 外部中斷0
P3.3 INT1 外部中斷1
P3.4 T0(Timer) 計數器0外部輸入
P3.5 T1 計數器1外部輸入
P3.6 WR(Write Enable) 外部數據存儲器寫選通
P3.7 RD(Read Enable) 外部數據存儲器讀選通
四個I/O口中,P1、P2、P3口可驅動4個LS TTL(Low-power Schottky TTL,低功耗肖特基TTL)負載,即輸出電流不小于400uA; P0口的輸出緩沖器可驅動8個LS TTL負載,作一般I/O使用時為開漏輸出,需要外加上拉電阻,做數據/地址總線使用時不需要外加上拉電阻。
內部微體系結構51系列單片機內部包含:
運算器(包括邏輯運算器ALU(Arithmetic and Logic Unit)、累加器ACC(Accumulator)、寄存器B、程序狀態字寄存器PSW(Program Status Word))、程序計數器PC(Program Counter)、指令寄存器IR(Instruction Register)、指令譯碼器ID(Instruction Decoder)、數據指針DPTR(Data Pointer)等組成的8位CPU。
4KB ROM 程序存儲器、128B RAM 數據存儲器
可尋址64KB外部數據存儲、控制電路
21個特殊功能寄存器SFR
32條可編程I/O端口線
2個16位定時/計數器
1個可編程全雙工串行口
5個中斷源、兩個優先級嵌套中斷結構
1個片內振蕩器及時鐘電路
CPUCPU用以產生各種控制信號,是單片機的核心。
ALU完成數據的算數運算、邏輯運算,并將運算結果的狀態送往PSW。
PC是一個16位具有自動加一功能的寄存器,用來存放即將取出的指令地址,可對64KB程序存儲器直接尋址。
IR是用來暫存待執行指令的8位寄存器。ID對其中的指令進行譯碼,將指令轉變為執行此指令所需要的電信號。
DPTR是一個16位專用地址指針寄存器,用來存放16位地址,作間址寄存器使用。
存儲器51單片機的存儲器按功能可分為數據存儲器(RAM)和程序存儲器(ROM),按位置分又可以分為片外存儲器和片內存儲器 。
ROM51單片機通常包含只4KB的程序存儲器,而以PC作為地址指針,通過16位地址總線,最大可尋址216B即64KB的地址空間,所以一般進行外部存儲器進行拓展。
引腳EA}決定了程序存儲器的0000~0FFFH 4KB地址范圍在單片機內部還是外部。當EA=1時,程序存儲器的地址分為片內的0000~0FFFH 4KB地址范圍和片外程序存儲器的1000~FFFFH 60KB地址范圍;否則,當EA=0時,只能尋址外部程序存儲器,0000~FFFFH全部64KB地址空間都在片外。
系統復位后PC的內容為0000H,也就是說單片機上電后都是從程序存儲器的0000H單元開始取指令執行程序,一般在此地址單元設置轉移指令,使之轉向用戶主程序處。此外,0003~0023H單元被保留用作5個中斷服務程序的入口地址:
入口地址 所屬中斷0003H 外部中斷0入口地址
000BH 定時器0中斷入口地址
0013H 外部中斷1入口地址
001BH 定時器1中斷入口地址
0023H 串口中斷入口地址
故中斷服務程序個主程序一般都被放置在0030H單元以后。
RAM128B的內部數據存儲器是用得最多的地址空間,所有的操作指令的操作數據只能在此地址空間或SFR中。
RAM區結構如上圖。其中,00H~1FH共32個單元為工作寄存器區,分為4組,每組8個單元組成通用寄存器,都用R0~R7表示。可以通過改變PSW的RS1和RS0、RS1兩位的狀態來選擇CPU當前使用的工作寄存器組,如下表所示。這樣可以提高CPU的操作效率和響應中斷的速度,利于現場的保護及恢復。
20H~2FH共16個字節128位組成位尋址區,可用位尋址方式訪問,位地址為00H~7FH。位尋址區的位地址如下表:
最頂層的30H~7FH共80個單元為用戶RAM區,作為堆棧或者數據緩存器。
普通51子系列單片機中,地址為00H~7FH的低128B區域為RAM區,而地址為80H~FFH的高128B區域即為SFR。增強型52子系列中,有地址為00H~FFH的256B的RAM,而SFR的地址和RAM的高128字節地址80H~FFH是重合的,需要通過不同的尋址方式來區分它們。
SFRSFR是專門用于控制、選擇、管理、存放單片機內部各部分的工作方式、條件、狀態、結果的寄存器,不同的SFR用于管理不同的硬件模塊。
51單片機內的21個SFR中,有5個是16位寄存器 ,11個可以進行位尋址。它們的地址分布及功能如下表:
其中PSW用于存放程序運行是的各種狀態信息,其各位定義如下:
位地址 D7H D6H D5H D4H D3H D2H D1H D0H定義 CY AC F0 RS1 RS0 OV F1 P
CY(Carry):進位標志位,運算過程最高為產生進位或借位,則CY=1。
AC(Assistant Carry):輔助進位標志位,運算過程中低四位向高位有進位或借位,則AC=1。
F0/F1:軟件標志位,可作為用戶自定義的標志位,由用戶置位或復位。
RS0和RS1(Register Select):RAM中的4組工作寄存器選擇位。
OV(Overflow):溢出標志位,運算過程中產生溢出,OV=1。
P(Parity):奇偶標志位,執行指令是會根據ACC中1的個數的奇偶自動令P置位或清零,奇為1,偶為0;串行通信時,可以由此位驗證傳輸的可靠性。
時鐘和復位單片機內部的時鐘信號用來提供單片機內部各種操作的時間基準,復位操作使單片機內的電路初始化。
時鐘電路、單位51單片機的時鐘信號通常由內部振蕩或外部振蕩方式來獲得。接法如圖所示:
在XTAL1和XTAL2引腳外接晶體振蕩器或者陶瓷諧振器,即構成內部振蕩方式。晶振通常選用6、12或24MHz,單片機內部有一個高增益反向放大器,外接晶振將構成自激振蕩,產生振蕩時鐘脈沖,電容C1、C2可以穩定振蕩頻率,電容值一般為5~30pF。
外部振蕩就是把已有的時鐘信號引入單片機內。
單片機以晶振的振蕩周期(或外部輸入的時鐘周期)為最小的時序單位,片內的各種微操作都以此周期為時序基準;振蕩頻率經單片機內的二分頻器分頻后形成狀態周期,所以,1個狀態周期包含2個振蕩周期;而6個狀態周期組成1個機器周期,所以,1個機器周期包含12個振蕩周期;執行一條指令需要1~4個機器周期,這個時間便稱為指令周期。
例如,單片機外接12MHz的晶振時:
振蕩周期=1fosc=112Mhz=0.0833us
狀態周期=2fosc=212Mhz=0.167us
機器周期=12fosc=1212Mhz=1us
指令周期=1?4個機器周期=1?4us
時序圖51單片機的指令執行及存儲器讀取時序圖如下:
取指時序:
外部ROM讀時序:
外部RAM讀取時序:
復位電路當51單片機的復位引腳RST出現兩個機器周期以上高電平時,單片機即完成復位操作。復位操作通常有上電復位和開關復位兩種形式,接法如圖所示:
單片機復位后,PC=0000H,P0~P3=FFH,SP=07H,其他寄存器都回到初始的0狀態。
更新歷史:
* 2017.11.22 完成初稿
原文鏈接
評論