第二章 EM78系列单片机硬件结构
EM78系列单片机是采用低功耗、高速CMOS工艺制造的8位单片机,本章将以EM78X56(包括EM78156、EM78256、EM78456)为例来讲述EM78系列单片机的内部结构、存贮器、中断、I/O、看门狗、振荡器和电压检测器等特点。
2.1. 主要功能特点
·采用8位数据总线和13位指令总线独立分离的Harvard结构设计。
·采用RISC指令集,共有57条单字节指令,其中99%为单周期指令(对程序计数器PC指针 进行写操作除外)。
·1K~4KX13的程序存贮器(有OTP和掩膜二个版本)。
·48个通用数据寄存器可直接寻址使用。
·14个特殊功能寄存器。
·具有一个结构选择寄存器用于设置振荡器的工作方式等。
·具有五级堆栈令程序嵌套更自由。
·两个双向三态I/O口,12个I/O线,可分别设置为上拉、下拉或集电极开路等。
·具有三个硬件中断和一个软件中断。
·两种工作模式:正常工作模式 2mA/5V
休眠模式 1μA/5V(可由I/O唤醒)
·具有R-OPTION功能,即用电阻的上拉、下拉来选择内部程序的执行。
·一个带8位预置器的8位定时/计数器,一个看门狗定时器(WDT)。
·采用先进的加密方法保证用户代码不被读出。
·工作电压:2.5~5.5V 工作频率DC~36MHZ、工作温度0℃~70℃。
2.2. EM78X56型号分类、命名方法及管脚功能说明
2.2.1. 型号分类(表2.1):
|
型 号 |
ROM(Bit) |
RAM(Byte) |
I/O |
最短指令周期 |
|
EM78156 |
1KX13 |
56 |
12 |
111ns |
|
EM78256 |
2KX13 |
56 |
12 |
111ns |
|
EM78456 |
4KX13 |
56 |
12 |
111ns |
2.2.2. 命名方法:
EM 78 P 156 A P
|
封装形式P-DIP M-SOIC S-SSOP
内置电压检测功能 A-有 B-无
类型名
P:OTP; 没有“P”为MASK版本
单片机系列号
EMC公司字头 |
2.2.3. EM78X56管脚功能描述

图2.1 EM78156管脚图(EM78256和EM78456管脚同上)
|
管脚名称 |
I/O |
功 能 |
PIC16C54/56
对应管脚名 |
|
P50~P53 |
I/0 |
P50~P53为双向I/O口,P50、P51同时为R-Option功能脚,P50~52能通过软件设置为下拉 |
RAO~RA3 |
|
P60~P67 |
I/O |
P60~P67为双向I/O口,可通过软件设置为上拉或开路输出;另外,P60~63可设为下拉 |
RBO~RB7 |
|
INT0 |
I/O |
外部中断输入脚,下降沿触发中断(P60) |
无 |
|
OSCI |
I |
XTAL型:晶体振荡器或外部时钟输入脚 R C型 :RC振荡器输入脚 |
OSC1 |
|
OSCO |
I/O |
XTAL型:晶体振荡器输出脚或外部时钟输入脚。
RC型:输出一个指令周期的时钟信号 |
OSC2 |
|
RESET |
I |
施密特触发输入脚,当该脚保持低电平时,单片机复位 |
MCLR |
|
TCC |
I |
实时时钟/计数器输入脚,施密特触发,当该脚不用时,必须接地或VCC |
RTCC |
|
VDD |
—— |
电源 |
VDD |
|
VSS |
—— |
地 |
VSS |
表2.2 EM78X56管脚功能描述
2.3. EM78内部结构框图
EM78X56在片内集成了一个8位算术运算单元ALU和工作寄存器ACC、1K~4KROM、56个RAM、12个I/O口,8位预置器(Prescaler)及8位计数器(TCC)、振荡器、看门狗、五级堆栈、中断控制器、指令寄存器、译码器和其它一些寄存器等。内部框图如图2.2所示:
EM78系列单片机采用8位数据/控制总线和13位指令总线独立分离的Harvard结构,流水线指令,即当一条指令在执行中,下一条指令已被从ROM取出放在指令寄存器等待执行,如此EM78系列几乎全部为单周期指令,执行速度更快。
EM78系列数据存贮器均可视为寄存器来寻址编程,分工作寄存器和特殊功能寄存器二大类,2.5节将详细讲述寄存器的使用方法。

图2.2 EM78X56内部功能框图
2.4. 程序存储器和堆栈
2.4.1. 程序存储器
EM78X56内部程序存储器和堆栈示意图如下:

图2.3 程序存储器结构框图
PC指针(寄存器R2)和堆栈的位数依照型号EM78156、EM78256、EM78456分别是10位、11位、12位,即寻地空间分别为1K、2K和4K,一个程序页面为1K。页面选择通过设定状态寄存器R3的Bit6(PS1). Bit5 (PS0)来完成,内容下表(表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可在同一页面内直接跳转(JMP)和调用子程序(CALL),即JMP时装入目标地址至PC的低10位,CALL时装入目标地址至PC的低10位,且PC+1压栈,调用同1K页面内的任何程序。
在EM78256/EM78456中,当需要跳转或调用不同页面的子程序时,则须在调用前将修改R3的PS0/PS1、PS0,执行JMP或CALL后将状态寄存器R3的PS0/PS1、PS0载入PC的A10/A11、A10。
有一情况需特别注意:对PC(R2)进行直接操作指令如“MOV R2、A”、“ADD R2、A”、“BC R2,0”都将导致PC之第9及第10位(A9、A8)被清零,因此此类情况产生的任何跳转都限定在同一页面的前256个地址(查表指令的使用均在此限制内)
2.4.2. 堆栈
EM78X56有五级堆栈,遵循后入先出的原则实现程序多至五级嵌套调用.通常堆栈使用如下:
当CALL和中断响应时PC+1压栈;
当子程序或中断返回,执行RET、RETL(带参数返回)、RETI(中断返回),将栈顶值(栈1)弹回程序计数器PC、同时将堆栈2的值拷贝到堆栈1,堆栈3的值拷贝到堆栈2,以此类推。
要注意的是RET、RETL、RETI指令并没有改变R3中的PS0~PS1位便返回到原来调用程序的页面,所以当从一次跨页的子程序调用返回时,一定要用指令恢复R3中原先的PS0、PS1值。
2.5. 数据存储器RAM结构
EM78X56的数据存储器分工作寄存器、特殊功能寄存器和一般通用寄存器三大类,如图2.4所示:
2.5.1. 工作寄存器
1.R0间接寻址寄存器
RO并非一个实际工作的寄存器,只作为间接寻址用。任何对RO进行操作的指令,实际上是存取由RAM选择寄存器R4所指定的RAM内容。
2.R1(TCC)
此寄存器为8位定时/计数器,可由程序进行读/写操作。它用于对外加在TCC脚上的脉冲进行计数,或对内部时钟计数。
3.R2(程序计数器PC)和堆栈
·在复位情况下,R2被清零,地址指向OOOH
·对R2进行写操作的指令一定需要二个指令周期,其它有关R2和堆栈的内容§2.4中所述.

图2.4 RAM结构图
4.R3状态寄存器(STATUS)
如下表所示,R3包括ALU运算标志、页面标志、复位状态等
|
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
GP |
PS1 |
PS0 |
T |
P |
Z |
DC |
C |
Bit0(C) :进位标志
Bit1(DC):辅助进位标志
Bit2(Z) :零标志,当一算术或逻辑运算结果为“0”时,则置该位为“1”
Bit3(P) :掉电模式位。当系统上电时或执行“WDTC”指令后,置该位为“1”;当执行“SLEP”指令后,该位被置“0”。
Bit4(T) :超时位,当系统上电或执行“SLEP”和“WDTC”指令时,置位为“1”;当WDT溢出时置位为“0”
Bit5(PSO)页面选择低位
Bit6(PS1)页面选择高位
通过P、T位来判断复位产生的原因如表2.4所示:
|
T P |
复位产生原因 |
|
O O |
WDT溢出唤醒SLEEP |
|
O *P |
工作模式时WDT溢出 |
|
1 0 |
脚位变化唤醒SLEEP |
|
1 1 |
系统上电 |
|
*P *P |
工作模式复位 |
影响T/P的事件如下表2.5所示:
|
文件 |
T |
P |
|
WDTC指令 |
1 |
1 |
|
WDTC溢出 |
0 |
*P |
|
SLEP指令 |
1 |
0 |
|
脚位变化唤醒 |
1 |
1 |
*P:指复位前的值
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
其结果是将16进制的“11”值送入由R4指的“10”单元中。
·Bit6~7未使用
·未作间接寻址时,R4可作6位宽度的可读/写通用寄存器.
6. R5~R6(口5~口6):分别为口5、口6的输入/输出寄存器,EM78将I/O映射为寄存器来操作,R6为8位,R5仅有低4位有效。
7.RF中断状态寄存器
|
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
— |
— |
— |
— |
— |
EXIF |
ICIF |
TCIF |
·“1”表明有中断请求,“0”表明没有中断请求
Bit0 (TCIF):TCC 计数器1溢出中断标志位;当TCC计数器1溢出时置“1”,可由软件清零。
Bit1 (ICIF):口6输入变化中断标志位,当口6输入变化时置“1”,可由软件清零。
Bit2 (EXIF):外部中断标志位。当INT脚有下降沿触发时置“1”,可用软件清零。
Bit3~7:未使用
·RF可用软件清零,但不能被置“1”
·IOCF为中断屏蔽寄存器,通过指令读取RF值,此时结果值为RF和IOCF相与的结果
8.R10~R3F
·R10~R3F为48X8位一般通用寄存器。
2.5.2. 特殊功能寄存器
EM78X56的特殊功能寄存器主要包括累加器.控制寄存器和WDT预分频器。
1.累加器A
内部数据传输或指令运算单元,属不可寻址单元。
2.控制寄存器
控制寄存器是用来控制I/O的工作状态、中断控制、看门狗控制等,它们的寄存器地址如图2.4,其读写只能采用指令I0R 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预分频系数位
|
PSR2 |
PSR1 |
PSR0 |
TCC分频系数 |
WDT分频系数 |
|
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)预分频器分配位
0:分配给TCC
1:分配给WDT
Bit4(TE)TCC信号触发源位
0:TCC脚信号低到高触发
1:TCC脚信号高到低触发
Bit5(TS) TCC信号源
0:内部指令周期时钟
1:TCC脚输入的外部信号
Bit6(INT) 中断使能标志位
0:由DISI或硬件中断产生时屏蔽中断
1:ENI或RETI指令开中断
Bit7没有使用
·CONT寄存器是可读/写的
(2)IOC5~IOC6(I/6口控制寄存器)
IOC5、IOC6分别为口5、口6控制寄存器,按位将IOC5、IOC6设为“1”时表示该脚没
为输入(高阻抗)、设为“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:使能内部下拉电阻功能
1:关闭内部下拉电阻功能
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:关闭集电极开路功能
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脚内部上拉电阻控制位
0:允许内部上拉
1:禁止内部上拉
Bit1~Bit7(/PH1~/PH7)分别使能P61~P67脚内部上拉电阻控制器
* IOCD为可读写寄存器
(6)IOCE WTD控制寄存器
|
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
|
WDTE |
EIS |
— |
ROC |
— |
— |
— |
— |
Bit7(WDTE)使能看门狗定时器控制位
0:关闭WDT
1:使能WDT
WDTE为可读写位
Bit6(EIS) P60脚功能选择位
0:P60为一般双向I/0口
1:P60为外部中断输入脚.此时P60必须设为输入(IOC6.0=1)
Bit4(ROC)使能 R-option功能位(P50~P51)
0:关闭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相应的控制位置“1”、则相应的中断允许,使用“ENI”指令时所有中断被开放,而使用“DISI”指令,则所有中断被关闭。IOCF为可读写寄存器。