【文章內(nèi)容簡介】
形式出現(xiàn),其內(nèi)部將不包括累加器A、寄存器B、以及程序狀態(tài)字寄存器PSW。它只是根據(jù)所接收的指令,將來自累加器、程序或者數(shù)據(jù)存儲(chǔ)器的數(shù)據(jù)進(jìn)行相應(yīng)的算術(shù)或者邏輯運(yùn)算,然后將運(yùn)算結(jié)果以及程序狀態(tài)字寄存器PSW的相關(guān)位以結(jié)果的形式輸出??刂撇考菃纹瑱C(jī)的中樞神經(jīng),以主振頻率為基準(zhǔn),控制器控制CPU的時(shí)序,對(duì)指令進(jìn)行譯碼,然后發(fā)出各種控制信號(hào),將各個(gè)硬件環(huán)節(jié)組織在起。每個(gè)機(jī)器周期由6個(gè)狀態(tài)周期組成,即S1,S2,S3,S4,S5,S6,而每個(gè)狀態(tài)周期又由兩個(gè)時(shí)相Pl,P2(即2個(gè)主振振蕩周期)。所以一個(gè)機(jī)器周期依次可以表示為S1P1,SlP2,S2P1,S2P2……S6P1,S6P2。一般情況下,算術(shù)邏輯操作發(fā)生在時(shí)相P1期間,而內(nèi)部寄存器之間的傳送發(fā)生在時(shí)相P2期間,這些內(nèi)部時(shí)鐘信號(hào)無法從外部觀測,故用XTAL2振蕩信號(hào)作參考,而ALE可以用作外部工作狀態(tài)指示信號(hào)用。在一個(gè)機(jī)器周期中通常出現(xiàn)兩次ALE信號(hào)(注意:當(dāng)訪問外部數(shù)據(jù)存儲(chǔ)器時(shí),一個(gè)機(jī)器周期中將跳過一個(gè)ALE脈沖),即從ROM中取兩次操作碼,讀入指令寄存器,指令周期的執(zhí)行開始于S1P2時(shí)刻,而總是結(jié)束于S6P2時(shí)刻。MCS51系列單片機(jī)的指令周期一般只有l(wèi)2個(gè)機(jī)器周期,只有乘、除兩條指令占4個(gè)機(jī)器周期,當(dāng)用12MHz晶體作主頻率時(shí),執(zhí)行一條指令的時(shí)間,也就是一個(gè)指令周期為l181。s(這樣的指令約占全部指令的一半),2181。s以及4181。s。主振頻率越高,指令執(zhí)行速度越快。由此可見,MCS51系列單片機(jī)的時(shí)序似乎比較簡單。其實(shí)不然,要分析各條指令的取指、執(zhí)行時(shí)序仍然是相當(dāng)復(fù)雜的。本設(shè)計(jì)為簡便起見,并不打算采用MCS51系列單片機(jī)原有的CPU時(shí)序中機(jī)器周期的概念,而是將各條指令均設(shè)計(jì)在1到4個(gè)時(shí)鐘周期內(nèi)完成,因此所形成的IP核內(nèi),一個(gè)時(shí)鐘周期內(nèi)所要完成的任務(wù)基本上和原有MCS51系列單片機(jī)中一個(gè)機(jī)器周期所要完成的任務(wù)基本一致(少部分指令有差別),詳細(xì)的指令指令周期請(qǐng)參閱本文的附錄部分。所以在此僅簡要介紹一下MCS51系列單片機(jī)的時(shí)序。MCS51系列單片機(jī)存儲(chǔ)器可劃分為四類:①程序存儲(chǔ)器。一個(gè)微機(jī)系統(tǒng)之所以能夠按照定的次序進(jìn)行工作,主要在于內(nèi)部存在著程序,程序?qū)嶋H上是由用戶程序形成的一串二進(jìn)制碼,該二進(jìn)制碼存放在程序存儲(chǔ)器之中,8031無內(nèi)部ROM,所以只能外擴(kuò)EPROM來存放程序MCS51最多可以外擴(kuò)64K字節(jié)程序存儲(chǔ)器,64K程序存儲(chǔ)器有5個(gè)單元具有特殊的用途。5個(gè)特殊單元分別對(duì)應(yīng)于5種中斷源的中斷服務(wù)程序的入口地址。其分別是:“外部中斷0”對(duì)應(yīng)入口地址是“0003H”“定時(shí)器0中斷”對(duì)應(yīng)入口地址是“000BH”,”外部中斷1”對(duì)應(yīng)入口地址是“0013H”;“定時(shí)器1中斷”對(duì)應(yīng)入口地址是“001BH”;“串行口中斷”對(duì)應(yīng)入口地址是“0023H”。②內(nèi)部數(shù)據(jù)存儲(chǔ)器。MCS51系列單片機(jī)內(nèi)部有128個(gè)字節(jié)的隨機(jī)存儲(chǔ)器(RAM),字節(jié)地址為00H80H。MCS51對(duì)其內(nèi)部的RAM有很豐富的操作指令,從而使得用戶設(shè)計(jì)程序時(shí)非常方便。作為用戶的數(shù)據(jù)存儲(chǔ)器,它能滿足大多數(shù)控制型應(yīng)用場合的需要,用作處理問題的數(shù)據(jù)緩沖器。地址為00H1FH的32個(gè)單元是4個(gè)通用工作寄存器區(qū),每個(gè)區(qū)含有8個(gè)8位寄存器,編號(hào)為R0R7??梢酝ㄟ^指令改變PSW中的RS1,RS0這兩位來切換寄存器區(qū),這種功能給用戶程序保護(hù)寄存器內(nèi)容提供了極大的方便。地址為2OH2FH的16個(gè)單元可以進(jìn)行共128位的位尋址,這些單元構(gòu)成了1位處理器的存儲(chǔ)器空間。單元中的每一位都有自己的位地址,同時(shí)這16個(gè)單元也可以進(jìn)行字節(jié)(8位)尋址。③特殊功能寄存器(SFRSpecialFunctionRegister)。特殊功能寄存器SFR是用來對(duì)片內(nèi)各功能單元進(jìn)行管理、控制、監(jiān)視的控制寄存器和狀態(tài)寄存器。MCS51中的特殊功能寄存器SFR是非常重要的,對(duì)于單片機(jī)的應(yīng)用者來說掌握了SFR,也就掌握了MCS51。SFR存在于單片機(jī)中,實(shí)質(zhì)上一些具有特殊功能的RAM單元,其地址范圍為80HFFH。特殊功能寄存器的總數(shù)為21個(gè),離散的分布在該區(qū)域中,其中有些SFR還可以進(jìn)行位尋址。寄存器符號(hào)前帶“*”為可進(jìn)行位尋址的SFR。要注意的是,128個(gè)字節(jié)的SFR塊中僅有21個(gè)字節(jié)是有定義的。對(duì)于尚未定義的字節(jié)地址單元,用戶不能做寄存器使用,若訪問沒有定義的單元,則得到一個(gè)不確定的隨機(jī)數(shù)。④外部數(shù)據(jù)存儲(chǔ)器。MCS51應(yīng)用系統(tǒng)往往是一個(gè)應(yīng)用系統(tǒng)。當(dāng)片內(nèi)RAM不夠用時(shí),可以在片外擴(kuò)充數(shù)據(jù)存儲(chǔ)器。MCS51給用戶提供了最多可以尋址64K字節(jié)的外部擴(kuò)充RAM能力。以上介紹了MCS51的存儲(chǔ)器結(jié)構(gòu)。使用各類存儲(chǔ)器,要注意以下幾點(diǎn):(1)地址的重疊性。數(shù)據(jù)存儲(chǔ)器與程序存儲(chǔ)器全部64K地址重疊;程序存儲(chǔ)器中片內(nèi)外低4K字節(jié)地址重疊;數(shù)據(jù)存儲(chǔ)器中片內(nèi)外最低128字節(jié)地址重疊。這是因?yàn)椴捎昧瞬煌牟僮髦噶罴癊A控制選擇。(2)程序存儲(chǔ)器(ROM)與數(shù)據(jù)存儲(chǔ)器(RAM)在使用上是嚴(yán)格區(qū)分的,不同的操作指令不得混用。程序存儲(chǔ)器只能放置程序指令以及常數(shù)表格。除程序的運(yùn)行控制外,其操作指令不分內(nèi)外,只有兩條MOVC指令;而數(shù)據(jù)存儲(chǔ)器則存放數(shù)據(jù),片內(nèi)外操作指令不同,片外數(shù)據(jù)存儲(chǔ)器只有一條傳送指令,即MOVX。(3)位地址空間有兩個(gè)區(qū)域,即片內(nèi)RAM中的20H2陽的128位,以及SFR中的位地址(有些位沒有意義)。這些位尋址單元與位指令集構(gòu)成了位處理系統(tǒng)。(4)片外數(shù)據(jù)存儲(chǔ)器中,數(shù)據(jù)區(qū)與用戶外部擴(kuò)展的I/O口統(tǒng)一編址。與外圍接口進(jìn)行數(shù)據(jù)傳送時(shí),使用的是與訪問外部數(shù)據(jù)存儲(chǔ)器相同的傳送指令。MCS51系列單片機(jī)有兩個(gè)可編程定時(shí)器/計(jì)數(shù)器,即定時(shí)器/計(jì)數(shù)器0和1。它們各具有兩種工作模式(定時(shí)器模式和計(jì)數(shù)器模式)和4種工作方式(方式O,方式方式方式3)。4種工作方式中,前三種方式對(duì)兩個(gè)定時(shí)器/計(jì)數(shù)器都是一樣的,方式3對(duì)兩者時(shí)不同的,這一點(diǎn)在設(shè)計(jì)時(shí)要注意。特殊功能寄存器TMOD(定時(shí)器/計(jì)數(shù)器方式控制寄存器)用于控制定時(shí)器/計(jì)數(shù)器的工作模式和過方式。另個(gè)特殊功能寄存器TCON(定時(shí)器/計(jì)數(shù)器控制寄存器)用于T0和T1的啟動(dòng)和停止計(jì)數(shù),同事還包含了T0和T1的狀態(tài)。有關(guān)定時(shí)器/計(jì)數(shù)器的各個(gè)工作方式將在具體設(shè)計(jì)中詳細(xì)敘述。MCS51系列單片機(jī)內(nèi)部有個(gè)功能很強(qiáng)的全雙工的串行口,該串行口有四種工作方式,波特率可以由軟件設(shè)置,由片內(nèi)的定時(shí)器/計(jì)數(shù)器產(chǎn)生。串行口有兩個(gè)物理上獨(dú)立地接收、發(fā)送緩沖器SBUF,可以同時(shí)發(fā)送、接收數(shù)據(jù),發(fā)送緩沖器只能寫入不能讀出,接收緩沖器只能讀出不能寫入,兩個(gè)緩沖器公用一個(gè)字節(jié)地址(99H)。串行口的接收、發(fā)送數(shù)據(jù)均可觸發(fā)中斷系統(tǒng)。同時(shí),還有兩個(gè)控制寄存器來控制MCS51單片機(jī)地串行口,它們是特殊功能寄存器SCON和PCON。 MCS51單片機(jī)的指令系統(tǒng)的實(shí)現(xiàn)原理MCS51系列單片機(jī)的指令系統(tǒng)采用匯編語言,它的指令系統(tǒng)是種簡明高效的指令系統(tǒng),由42種助記符和7種尋址方式組合而成。其基本指令共有111條,其中單字節(jié)指令49條,雙字節(jié)指令45條,三字節(jié)指令17條。如果按功能可以講這些指令分為五類:數(shù)據(jù)傳送類(29條)、算術(shù)操作類(24條)、邏輯操作類(24條)、控制轉(zhuǎn)移類(17條)以及位變量操作類(17條)。對(duì)于反向設(shè)計(jì)而言,我們關(guān)心的不是它的各種具體指令的多少而是指令的尋址方式。所謂的尋址方式就是尋找確定參與操作的數(shù)的真正地址。MCS51系列單片機(jī)的111條指令一共只采用了7種尋址方式。它們分別為:1. 立即尋址2. 直接尋找3. 寄存器尋址4. 寄存器間接尋址5. 變址尋址6. 相對(duì)尋址7. 位尋址第四章MCS51單片機(jī)的定時(shí)模塊設(shè)計(jì) MCS51系列單片機(jī)有2個(gè)定時(shí)器/計(jì)數(shù)器,即定時(shí)器/計(jì)數(shù)器0和1,在專用寄存器TMOD(定時(shí)器方式)中,各有一個(gè)控制位(C/T),分別用于控制定時(shí)器/計(jì)數(shù)器0和1是工作在定時(shí)器方式還是計(jì)數(shù)方式。選擇定時(shí)器工作方式時(shí),計(jì)數(shù)輸入信號(hào)是內(nèi)部時(shí)鐘脈沖,每個(gè)機(jī)器周期使寄存器的值增1。每個(gè)機(jī)器周期等于12個(gè)振蕩器周期,故計(jì)數(shù)速率為振蕩器頻率的1/12。選擇計(jì)數(shù)器工作方式時(shí),技術(shù)脈沖來自相應(yīng)的外部輸入引腳T0或T1。當(dāng)輸入信號(hào)產(chǎn)生由1到0的負(fù)跳變時(shí),計(jì)數(shù)寄存器(TH0,TL0或TH1,TH1)的值增1。每個(gè)機(jī)器周期的S5P2期間,對(duì)外部輸入進(jìn)行取樣。如果在第一個(gè)周期中采得的值為1,在下一個(gè)周期采得的值為0,則在緊跟著的再下一個(gè)周期的S3P1期間,計(jì)數(shù)值就增1。由于確認(rèn)下一次跳變要2個(gè)機(jī)器周期,即24個(gè)振蕩器周期因此外部輸入的計(jì)數(shù)脈沖的最高頻率為振蕩器頻率的1/24。對(duì)外部輸入信號(hào)的占空比并沒有什么限制,但為了確保某一給定的電平變化之前至少被采樣一次,則這一電平至少要保持一個(gè)機(jī)器周期。雖然本設(shè)計(jì)不采用機(jī)器周期的概念,但是這里仍將采用1/12倍時(shí)鐘頻率來對(duì)外部輸入進(jìn)行采樣,以便能夠和原芯片的功能兼容。由以上對(duì)定時(shí)器/計(jì)數(shù)器功能和原理的一個(gè)整體性描述可知,本單元將必須以時(shí)序邏輯電路的方式來實(shí)現(xiàn)。圖41中的(a)圖就是本模塊設(shè)計(jì)完成后形成的符號(hào)文件。圖中的輸入除時(shí)鐘CLK、復(fù)位RESET,外部中斷0 INT_0和外部中斷1 INT_1直接來自芯片的外部輸入之外,其余的輸入信號(hào)全部來自控制器。其中的RELOAD_I{7 to 0},WT_EN以及WT_I{7 TO 0}用于重寫定時(shí)器/計(jì)數(shù)器內(nèi)部寄存器。所有的輸出信號(hào)全部送往控制器,用于及時(shí)更新特殊功能寄存器的內(nèi)容。定時(shí)器/計(jì)數(shù)器的兩種工作方式?jīng)Q定了要設(shè)計(jì)好定時(shí)器/計(jì)數(shù)器首先必須設(shè)計(jì)一個(gè)分頻器和連個(gè)負(fù)跳變的檢測器。因此本設(shè)計(jì)實(shí)體的結(jié)構(gòu)體將有3個(gè)進(jìn)程來實(shí)現(xiàn)。除了分頻器和來兩個(gè)副跳變的檢測器各占用一個(gè)進(jìn)程外,第三個(gè)進(jìn)程用于實(shí)現(xiàn)定時(shí)器,計(jì)數(shù)器的四種工作模式。各進(jìn)程之間相互關(guān)聯(lián),內(nèi)部信號(hào)將作為傳輸信息的紐帶。圖41(a)MC8051_TMRCTR圖41(b)MC8051_SIU12分頻器的進(jìn)程代碼如下s_count_enable=’1’ when s_pre_count=conv_unsign(11,4)else”0”p_divide_clk:process(clk,reset) begin if reset=’1’then s_pre_count=conv_unsigned(0,4)。 else if clk’event and clk=?!?’thenif s_pre_ count=conv_unsign(11,4)thens_pre_count=conv_unsigned(0,4)。elses_pre_count=s_pre_ount=conv_unsigned(1,1)。end if。end if。end if。end process p_divide_clk。負(fù)跳變的檢測器,本文將以一個(gè)雙穩(wěn)態(tài)的觸發(fā)器來實(shí)現(xiàn),實(shí)現(xiàn)觸發(fā)器的進(jìn)程如下s_ext_edge0=’1’when(s_t0ff1=’0’ands_t0ff2=’1’)else’0’。p_sample_t0:process(clk,reset)begin if reset=’1’then s_t0ff1=’0’。s_t0ff2=’0’。elseif clk’event and clk=?!?’thenif s_pre_count=conv_unsigned(6,4) then if s_c_t0=’1’thens_t0ff1=t0_i。s_t0ff2=s_toff1。end if。end if。end if。end process p_sample_to。 模式0圖42表示了定時(shí)器/計(jì)數(shù)器0在模式0下的邏輯圖,振蕩器12分頻fosc TF0TL0 TH0低5位 高8位 控制(高電平有效) ≥1T0()amp。GATE/INT0() TR0圖42 T0工作方式0結(jié)構(gòu) 振蕩器12分頻fosc TL0 TH0低8位 高8位TF0 控制(高電平有效) ≥1T0()amp。GATE/INT0() TR0圖43 T0工作方式1結(jié)構(gòu)對(duì)定時(shí)器1也適用,只要把圖中的相應(yīng)的標(biāo)示符后綴0改為1就可以了。在這種模式下,16位寄存器只用了13位,TL1高3位未用。圖中c/t是專用寄存器TMOD中的控制位。當(dāng)C/T=0時(shí),選擇定時(shí)器方式,C/T=1時(shí)選擇計(jì)數(shù)器方式,引腳T1接外部輸入信號(hào)。TR1時(shí)專用寄存器TCON中的個(gè)控制位,GATE是TMOD中的另一個(gè)控制位,引腳INT 1時(shí)外部中斷1的輸入端,再次另有么他用。TF1時(shí)定時(shí)器的溢出標(biāo)志。當(dāng)滿足條件(TR1=1)AND(GATE=0 OR INT=1)為真時(shí),接通計(jì)數(shù)輸入。當(dāng)計(jì)數(shù)值由全1再增1