第二章 EM78系列單片機硬件結(jié)構(gòu)EM78系列單片機是采用低功耗、高速CMOS工藝制造的8位單片機,本章將以EM78X56(包括EM78156、EM78256、EM78456)為例來講述EM78系列單片機的內(nèi)部結(jié)構(gòu)、存貯器、中斷、I/O、看門狗、振蕩器和電壓檢測器等特點。 ·采用8位數(shù)據(jù)總線和13位指令總線獨立分離的Harvard結(jié)構(gòu)設(shè)計。 ·采用RISC指令集,共有57條單字節(jié)指令,其中99%為單周期指令(對程序計數(shù)器PC指針 進行寫操作除外)。 ·1K~4KX13的程序存貯器(有OTP和掩膜二個版本)。 ·48個通用數(shù)據(jù)寄存器可直接尋址使用。 ·14個特殊功能寄存器。 ·具有一個結(jié)構(gòu)選擇寄存器用于設(shè)置振蕩器的工作方式等。 ·具有五級堆棧令程序嵌套更自由。 ·兩個雙向三態(tài)I/O口,12個I/O線,可分別設(shè)置為上拉、下拉或集電極開路等。 ·具有三個硬件中斷和一個軟件中斷。 ·兩種工作模式:正常工作模式 2mA/5V 休眠模式 1μA/5V(可由I/O喚醒) ·具有R-OPTION功能,即用電阻的上拉、下拉來選擇內(nèi)部程序的執(zhí)行。 ·一個帶8位預(yù)置器的8位定時/計數(shù)器,一個看門狗定時器(WDT)。 ·采用先進的加密方法保證用戶代碼不被讀出。 ·工作電壓:2.5~5.5V 工作頻率DC~36MHZ、工作溫度0℃~70℃。 型 號 | ROM(Bit) | RAM(Byte) | I/O | 最短指令周期 | EM78156 | 1KX13 | 56 | 12 | 111ns | EM78256 | 2KX13 | 56 | 12 | 111ns | EM78456 | 4KX13 | 56 | 12 | 111ns |
EM 78 P 156 A P
封裝形式P-DIP M-SOIC S-SSOP 內(nèi)置電壓檢測功能 A-有 B-無 類型名 P:OTP; 沒有“P”為MASK版本 單片機系列號 EMC公司字頭 | 
圖2.1 EM78156管腳圖(EM78256和EM78456管腳同上) 管腳名稱 | I/O | 功 能 | PIC16C54/56 對應(yīng)管腳名 | P50~P53 | I/0 | P50~P53為雙向I/O口,P50、P51同時為R-Option功能腳,P50~52能通過軟件設(shè)置為下拉 | RAO~RA3 | P60~P67 | I/O | P60~P67為雙向I/O口,可通過軟件設(shè)置為上拉或開路輸出;另外,P60~63可設(shè)為下拉 | RBO~RB7 | INT0
| I/O | 外部中斷輸入腳,下降沿觸發(fā)中斷(P60) | 無 | OSCI | I | XTAL型:晶體振蕩器或外部時鐘輸入腳 R C型 :RC振蕩器輸入腳 | OSC1 | OSCO | I/O | XTAL型:晶體振蕩器輸出腳或外部時鐘輸入腳。 RC型:輸出一個指令周期的時鐘信號 | OSC2 | RESET | I | 施密特觸發(fā)輸入腳,當該腳保持低電平時,單片機復(fù)位 | MCLR | TCC | I | 實時時鐘/計數(shù)器輸入腳,施密特觸發(fā),當該腳不用時,必須接地或VCC | RTCC | VDD | —— | 電源 | VDD | VSS | —— | 地 | VSS |
表2.2 EM78X56管腳功能描述 2.3. EM78內(nèi)部結(jié)構(gòu)框圖 EM78X56在片內(nèi)集成了一個8位算術(shù)運算單元ALU和工作寄存器ACC、1K~4KROM、56個RAM、12個I/O口,8位預(yù)置器(Prescaler)及8位計數(shù)器(TCC)、振蕩器、看門狗、五級堆棧、中斷控制器、指令寄存器、譯碼器和其它一些寄存器等。內(nèi)部框圖如圖2.2所示: EM78系列單片機采用8位數(shù)據(jù)/控制總線和13位指令總線獨立分離的Harvard結(jié)構(gòu),流水線指令,即當一條指令在執(zhí)行中,下一條指令已被從ROM取出放在指令寄存器等待執(zhí)行,如此EM78系列幾乎全部為單周期指令,執(zhí)行速度更快。 EM78系列數(shù)據(jù)存貯器均可視為寄存器來尋址編程,分工作寄存器和特殊功能寄存器二大類,2.5節(jié)將詳細講述寄存器的使用方法。  圖2.2 EM78X56內(nèi)部功能框圖 EM78X56內(nèi)部程序存儲器和堆棧示意圖如下: 
圖2.3 程序存儲器結(jié)構(gòu)框圖 PC指針(寄存器R2)和堆棧的位數(shù)依照型號EM78156、EM78256、EM78456分別是10位、11位、12位,即尋地空間分別為1K、2K和4K,一個程序頁面為1K。頁面選擇通過設(shè)定狀態(tài)寄存器R3的Bit6(PS1). Bit5 (PS0)來完成,內(nèi)容下表(表2.3)所示: PS1(R3.6) | PSO(R3.5) | 程序頁面地址 | 0 | 0 | 0頁[000-3FF]EM78X56沒有PS1、PS0 | 0 | 1 | 1頁[400-7FF]EM78256/456 | 1 | 1 | 2頁[800-BFF]EM78256/456 | 1 | 1 | 3頁[C00-FFF]EM78456 |
·對EM78156μPS1、PS0位為通用讀/寫位 ·對EM78256μPS1為通用讀/寫位 EM78X56可在同一頁面內(nèi)直接跳轉(zhuǎn)(JMP)和調(diào)用子程序(CALL),即JMP時裝入目標地址至PC的低10位,CALL時裝入目標地址至PC的低10位,且PC+1壓棧,調(diào)用同1K頁面內(nèi)的任何程序。 在EM78256/EM78456中,當需要跳轉(zhuǎn)或調(diào)用不同頁面的子程序時,則須在調(diào)用前將修改R3的PS0/PS1、PS0,執(zhí)行JMP或CALL后將狀態(tài)寄存器R3的PS0/PS1、PS0載入PC的A10/A11、A10。 有一情況需特別注意:對PC(R2)進行直接操作指令如“ MOV R2、A”、“ADD R2、A”、“BC R2,0”都將導(dǎo)致PC之第9及第10位(A9、A8)被清零,因此此類情況產(chǎn)生的任何跳轉(zhuǎn)都限定在同一頁面的前256個地址(查表指令的使用均在此限制內(nèi)) EM78X56有五級堆棧,遵循后入先出的原則實現(xiàn)程序多至五級嵌套調(diào)用.通常堆棧使用如下: 當CALL和中斷響應(yīng)時PC+1壓棧; 當子程序或中斷返回,執(zhí)行RET、RETL(帶參數(shù)返回)、RETI(中斷返回),將棧頂值(棧1)彈回程序計數(shù)器PC、同時將堆棧2的值拷貝到堆棧1,堆棧3的值拷貝到堆棧2,以此類推。 要注意的是RET、RETL、RETI指令并沒有改變R3中的PS0~PS1位便返回到原來調(diào)用程序的頁面,所以當從一次跨頁的子程序調(diào)用返回時,一定要用指令恢復(fù)R3中原先的PS0、PS1值。 EM78X56的數(shù)據(jù)存儲器分工作寄存器、特殊功能寄存器和一般通用寄存器三大類,如圖2.4所示: 1.R0間接尋址寄存器 RO并非一個實際工作的寄存器,只作為間接尋址用。任何對RO進行操作的指令,實際上是存取由RAM選擇寄存器R4所指定的RAM內(nèi)容。 2.R1(TCC) 此寄存器為8位定時/計數(shù)器,可由程序進行讀/寫操作。它用于對外加在TCC腳上的脈沖進行計數(shù),或?qū)?nèi)部時鐘計數(shù)。 3.R2(程序計數(shù)器PC)和堆棧 ·在復(fù)位情況下,R2被清零,地址指向OOOH ·對R2進行寫操作的指令一定需要二個指令周期,其它有關(guān)R2和堆棧的內(nèi)容§2.4中所述. 
圖2.4 RAM結(jié)構(gòu)圖 4.R3狀態(tài)寄存器(STATUS) 如下表所示,R3包括ALU運算標志、頁面標志、復(fù)位狀態(tài)等 Bit0(C) :進位標志 Bit1(DC):輔助進位標志 Bit2(Z) :零標志,當一算術(shù)或邏輯運算結(jié)果為“0”時,則置該位為“1” Bit3(P) :掉電模式位。當系統(tǒng)上電時或執(zhí)行“WDTC”指令后,置該位為“1”;當執(zhí)行“SLEP”指令后,該位被置“0”。 Bit4(T) :超時位,當系統(tǒng)上電或執(zhí)行“SLEP”和“WDTC”指令時,置位為“1”;當WDT溢出時置位為“0” Bit5(PSO)頁面選擇低位 Bit6(PS1)頁面選擇高位 通過P、T位來判斷復(fù)位產(chǎn)生的原因如表2.4所示: T P | 復(fù)位產(chǎn)生原因 | O O | WDT溢出喚醒SLEEP | O *P | 工作模式時WDT溢出 | 1 0 | 腳位變化喚醒SLEEP | 1 1 | 系統(tǒng)上電 | *P *P | 工作模式復(fù)位 |
影響T/P的事件如下表2.5所示: 文件 | T | P | WDTC指令 | 1 | 1 | WDTC溢出 | 0 | *P | SLEP指令 | 1 | 0 | 腳位變化喚醒 | 1 | 1 |
*P:指復(fù)位前的值 GP:一般用途的讀/寫位 5.R4 RAM選擇寄存器(RSR) 在間接尋址模式里,Bit0-5用來選擇寄存器(地址:00-06、OF-3F) 例如 MOV A,@0x10 MOV R4,A MOV A, @0x11 MOV R0, A ; R10=11H 其結(jié)果是將16進制的“11”值送入由R4指的“10”單元中。 ·Bit6~7未使用 ·未作間接尋址時,R4可作6位寬度的可讀/寫通用寄存器. 6. R5~R6(口5~口6):分別為口5、口6的輸入/輸出寄存器,EM78將I/O映射為寄存器來操作,R6為8位,R5僅有低4位有效。 7.RF中斷狀態(tài)寄存器 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | — | — | — | — | — | EXIF | ICIF | TCIF |
·“1”表明有中斷請求,“0”表明沒有中斷請求 Bit0 (TCIF):TCC 計數(shù)器1溢出中斷標志位;當TCC計數(shù)器1溢出時置“1”,可由軟件清零。 Bit1 (ICIF):口6輸入變化中斷標志位,當口6輸入變化時置“1”,可由軟件清零。 Bit2 (EXIF):外部中斷標志位。當INT腳有下降沿觸發(fā)時置“1”,可用軟件清零。 Bit3~7:未使用 ·RF可用軟件清零,但不能被置“1” ·IOCF為中斷屏蔽寄存器,通過指令讀取RF值,此時結(jié)果值為RF和IOCF相與的結(jié)果 8.R10~R3F ·R10~R3F為48X8位一般通用寄存器。 EM78X56的特殊功能寄存器主要包括累加器.控制寄存器和WDT預(yù)分頻器。 1.累加器A 內(nèi)部數(shù)據(jù)傳輸或指令運算單元,屬不可尋址單元。 2.控制寄存器 控制寄存器是用來控制I/O的工作狀態(tài)、中斷控制、看門狗控制等,它們的寄存器地址如圖2.4,其讀寫只能采用指令I(lǐng)0R R或IOW R來完成。 (1)CONT(控制寄存器) 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | — | INT | TS | TE | PAB | PSR2 | PSR1 | PRR0 |
Bit0(PSR0)~Bit2(PSR2) TCC/WDT預(yù)分頻系數(shù)位 PSR2 | PSR1 | PSR0 | TCC分頻系數(shù) | WDT分頻系數(shù) | 0 | 0 | 0 | 1∶2 | 1∶1 | 0 | 0 | 1 | 1∶4 | 1∶2 | 0 | 1 | 0 | 1∶8 | 1∶4 | 0 | 1 | 1 | 1∶16 | 1∶8 | 1 | 0 | 0 | 1∶32 | 1∶16 | 1 | 0 | 1 | 1∶64 | 1∶32 | 1 | 1 | 0 | 1∶128 | 1∶64 | 1 | 1 | 1 | 1∶256 | 1∶128 |
Bit3(PAB)預(yù)分頻器分配位 0:分配給TCC 1:分配給WDT Bit4(TE)TCC信號觸發(fā)源位 0:TCC腳信號低到高觸發(fā) 1:TCC腳信號高到低觸發(fā) Bit5(TS) TCC信號源 0:內(nèi)部指令周期時鐘 1:TCC腳輸入的外部信號 Bit6(INT) 中斷使能標志位 0:由DISI或硬件中斷產(chǎn)生時屏蔽中斷 1:ENI或RETI指令開中斷 Bit7沒有使用 ·CONT寄存器是可讀/寫的 (2)IOC5~IOC6(I/6口控制寄存器) IOC5、IOC6分別為口5、口6控制寄存器,按位將IOC5、IOC6設(shè)為“1”時表示該腳沒 為輸入(高阻抗)、設(shè)為“0”時表示該腳為輸出。 IOC5只有低四位可用。IOC5、ICO6為可讀寫的。 (3)IOCB(下拉控制寄存器) 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | /PD7 | /PD6 | /PD5 | /PD4 | ―― | /PD2 | /PD1 | /PD0 |
Bit0(/PD0):使能P50引腳的下拉電阻控制位 0:使能內(nèi)部下拉電阻功能 1:關(guān)閉內(nèi)部下拉電阻功能 Bit1(/PD1):使能P51引腳的下拉電阻控制位 Bit2(/PD2):使能P52引腳的下拉電阻控制位 Bit3:未使用 Bit4(/PD4):使能P60引腳的下拉電阻控制位 Bit5(/PD5):使能P61引腳的下拉電阻控制位 Bit6(/PD6):使能P62引腳的下拉電阻控制位 Bit7(/PD7):使能P63引腳的下拉電阻控制位 (4)IOCC(集電極開路控制寄存器) 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 0D7 | 0D6 | 0D5 | 0D4 | 0D3 | 0D2 | 0D1 | 0D0 |
Bit0(0D0) 使能P60腳集電極開路控制位 0:關(guān)閉集電極開路功能 1:使能集電極開路功能 Bit1~ Bit7 (0D1~0D7):分別使能P61~P67腳集電極開路功能。 IOCC為可讀寫寄存器 (5)IOCD上拉控制寄存器 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | /PH7 | /PH6 | /PH5 | /PH4 | /PH3 | /PH2 | /PH1 | /PH0 |
Bito(PH0)使能P60腳內(nèi)部上拉電阻控制位 0:允許內(nèi)部上拉 1:禁止內(nèi)部上拉 Bit1~Bit7(/PH1~/PH7)分別使能P61~P67腳內(nèi)部上拉電阻控制器 * IOCD為可讀寫寄存器 (6)IOCE WTD控制寄存器 Bit7(WDTE)使能看門狗定時器控制位 0:關(guān)閉WDT 1:使能WDT WDTE為可讀寫位 Bit6(EIS) P60腳功能選擇位 0:P60為一般雙向I/0口 1:P60為外部中斷輸入腳.此時P60必須設(shè)為輸入(IOC6.0=1) Bit4(ROC)使能 R-option功能位(P50~P51) 0:關(guān)閉R-option功能 1:使能R-option功能 當使用R-option的功能時,可在P50或P51腳對地接430K電阻,若有接電阻,則P50或P51被讀成“0”,若不接電阻,則P50或P51讀成“1”。ROC為讀寫位 Bit0~3,5未使用。 (7)IOCF(中斷屏蔽寄存器) 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | — | — | — | — | — | EXIE | ICIE | TCIE |
Bit0(TCIE) TCIF中斷屏蔽位(TCC溢出中斷) 0:屏蔽TCIF中斷 1:允許TCIF中斷 Bit1(ICIE) ICIF中斷屏蔽位(P6口輸入變化中斷) 0:屏蔽ICIF中斷 1:允許ICIF中斷 Bit2(EXIE) EXIF中斷屏蔽位(外部中斷P60/INT) 0:屏蔽EXIF中斷 1:允許EXIF中斷 Bit3~7 未使用 當將IOCF相應(yīng)的控制位置“1”、則相應(yīng)的中斷允許,使用“ENI”指令時所有中斷被開放,而使用“DISI”指令,則所有中斷被關(guān)閉。IOCF為可讀寫寄存器。 |