SH79F081A
带10位ADC的增强型8051微控制器
1. 特性
基于8051指令流水线结构的8位单片机
Flash ROM:8K字节
RAM:内部256字节
类EEPROM:2K字节
工作电压:
- fOSC = 400kHz - 16MHz,VDD = 3.6V - 5.5V
振荡器(代码选项):
- 晶体谐振器:400kHz - 16MHz
- 陶瓷谐振器:400kHz - 16MHz
- 内部RC振荡器:12.3MHz
26个CMOS双向I/O管脚
4个可选择的开漏极I/O口
I/O内建上拉电阻
3个16位定时器/计数器T0,T1和T2
一个12位PWM定时器
两个8位PWM定时器
中断源:
- Timer0,Timer1,Timer2
- 外部中断0 - 1
- 外部中断4:6输入
- ADC,EUART,SPI,PWM
增强型UART
SPI接口(主/从模式)
8通道10位模数转换器(ADC),内建比较功能
内建蜂鸣器
内建低电压复位功能(代码选项)
- LVR电压1:4.1V
- LVR电压2:3.7V
CPU机器周期:
一个振荡周期
看门狗定时器(WDT)
预热计数器
低功耗工作模式:
- 空闲模式
- 掉电模式
Flash型
封装:
- 28引脚SOP封装
2. 概述
SH79F081A是一种高速高效率8051兼容单片机。在同样振荡频率下,较之传统的8051芯片它具有运行更快速,性能更优越
的特性。
SH79F081A保留了标准8051芯片的大部分特性,包括内置256字节RAM和2个16位定时器/计数器,1个EUART等。此外,
SH79F081A还包括2048字节类EEPROM,集成了可兼容8052芯片的16位定时器/计数器(Timer2)和用于存储程序和数据的8K
字节Flash。
SH79F081A不仅集成了如EUART,SPI等标准通讯模块,还集成了具有比较功能的ADC,带6路输出的PWM等模块。此外,
SH79F081A集成了看门狗定时器,具有低电压复位功能,提供了2种低功耗省电模式。
1
V2.0
SH79F081A
3. 方框图
VDD
Reset circuit
Power
RST
Pipelined 8051 architecture
Watch Dog
8K Bytes
Flash ROM
Port 0
Configuration I/O
P0.2 - P0.7
Internal 256 Bytes
Data RAM
Port 1
Configuration I/O
Timer0 (16bit)
Timer1 (16bit)
Timer2 (16bit)
Port 2
Configuration I/O
Port 3
Configuration I/O
External Interrupt
SPI
12-bit PWM
EUART
8-bit PWM
8-bit PWM
10-bit ADC
Internal
Oscillator
JTAG ports
(for debug)
XTAL1
Oscillator
XTAL2
buzzer
2
P1.2 - P1.7
P2.0 - P2.7
P3.0 - P3.5
SH79F081A
4. 引脚配置
28脚SOP封装
1
28
P0.2/AN0
TMS/INT42/AN5/P1.3
2
27
P0.3/AN1
TDI/INT41/AN6/P1.4
3
26
P0.4/AN2
TCK/INT40/AN7/P1.5
4
25
P0.5/AN3
T0/P1.6
5
24
P0.6/T1
RST/P1.7
6
23
P0.7/INT1/PWM21
XTAL2/P3.3
7
22
P2.5/PWM1
XTAL1/P3.4
8
21
P2.6/INT45/PWM01
SH79F081AM
TDO/INT43/AN4/P1.2
VDD
9
20
P2.7/INT46/PWM11
VSS
10
19
P2.4/PWM0
T2EX/P3.2
11
18
P2.3/PWM2
T2/INT0/P3.1
12
17
P2.2/MOSI/RXD
FLT/SS/P3.0
13
16
P2.1/MISO/TXD
P3.5
14
15
P2.0/SCK/BZ
3
SH79F081A
Table 4.1 引脚功能
引脚编号
引脚命名
默认功能
1
TDO/INT43/AN4/P1.2
P1.2
2
TMS/INT42/AN5/P1.3
P1.3
3
TDI/INT41/AN6/P1.4
P1.4
4
TCK/INT40/AN7/P1.5
P1.5
5
T0/P1.6
P1.6
————
RST/P1.7
复位引脚或是 P1.7 口,代码选项控制
9
VDD
-----
10
VSS
-----
8
XTAL1/P3.4
P3.4 口或是振荡器输入引脚,代码选项控制
7
XTAL2/P3.3
P3.3 口或是振荡器输出引脚,代码选项控制
11
T2EX/P3.2
P3.2
12
T2/INT0/P3.1
P3.1
6
———
13
FLT/SS /P3.0
P3.0
14
P3.5
P3.5
15
BZ/SCK/P2.0
P2.0
16
TXD/MISO/P2.1
P2.1
17
RXD/MOSI/P2.2
P2.2
18
PWM2/P2.3
P2.3
19
PWM0/P2.4
P2.4
22
PWM1/P2.5
P2.5
21
PWM01/INT45/P2.6
P2.6
20
PWM11/INT46/P2.7
P2.7
23
PWM21/INT1/P0.7
P0.7
24
T1/P0.6
P0.6
*25
AN3/P0.5
P0.5
*26
AN2/P0.4
P0.4
*27
AN1/P0.3
P0.3
*28
AN0/P0.2
P0.2
注意:
(1) 带*引脚可以配置为N沟道的开漏輸出,但是引脚电压不得高于VDD + 0.3V。
(2) 引脚命名中,写在最外侧的功能具有最高优先级,最内侧的功能具有最低优先级(参见引脚配置图,例如T2/INT0/P3.1,
P3.1优先级最低,INT0次之,T2最高)。当一个引脚被高优先级的功能占用时,即使低优先级功能被允许,也不能作为低优先
级功能的引脚。只有当软件禁止引脚的高优先级功能,相应引脚才能被释放作为低优先级端口使用。
4
SH79F081A
5. 引脚描述
引脚命名
类型
说明
P0.2 - P0.7
I/O
6位双向I/O端口
P1.2 - P1.7
I/O
6位双向I/O端口
P2.0 - P2.7
I/O
8位双向I/O端口
P3.0 - P3.5
I/O
6位双向I/O端口
T0
I/O
Timer0外部输入或比较输出
T1
I/O
Timer1外部输入或比较输出
T2
I/O
Timer2外部输入/波特率时钟输出
I/O端口
定时器
T2EX
I
Timer2重载/捕捉/方向控制
PWM0
O
12位PWM定时器输出引脚
PWM1
O
8位PWM定时器输出引脚
PWM2
O
8位PWM定时器输出引脚
PWM01
O
与PWM0有固定相位关系的12位PWM定时器输出引脚
PWM11
O
与PWM1有固定相位关系的8位PWM定时器输出引脚
PWM21
O
与PWM2有固定相位关系的8位PWM定时器输出引脚
FLT
I
PWM故障输入引脚
RXD
I/O
EUART数据输入
TXD
O
EUART数据输出
MOSI
I/O
SPI主输出从输入引脚
EUART
SPI
MISO
I/O
SPI主输入从输出引脚
SCK
I/O
SPI串行时钟引脚
———
SS
I
SPI从设备选择引脚
AN0 - AN7
I
ADC输入通道
INT0 - INT1
I
外部中断0 - 1
INT40 - INT43
INT45 - INT46
I
外部中断40 - 43,45 - 46
RST
I
该引脚上保持10µs以上的低电平,CPU将复位。由于有内建100kΩ上拉电阻
连接到VDD,所以仅接一个外部电容即可实现上电复位。
XTAL1
I
谐振器输入
XTAL2
O
谐振器输出
VSS
P
接地
VDD
P
电源 (3.6 - 5.5V)
ADC
中断&复位&时钟&电源
————
5
SH79F081A
续上表
引脚命名
类型
说明
BUZCON
O
蜂鸣器
TDO (P1.2)
O
调试接口:测试数据输出
TMS (P1.3)
I
调试接口:测试模式选择
蜂鸣器
编程器
TDI (P1.4)
I
调试接口:测试数据输入
TCK (P1.5)
I
调试接口:测试时钟输入
注意:
当P1.2-1.5作为调试接口时,P1.2-1.5的原有功能被禁止。
6
SH79F081A
6. SFR映像
SH79F081A内置256字节的直接寻址寄存器,包括通用数据存储器和特殊功能寄存器(SFR),SH79F081A的SFR有以下几
种:
CPU内核寄存器:
ACC,B,PSW,SP,DPL,DPH
CPU内核增强寄存器:AUXC,DPL1,DPH1,INSCON,XPAGE
电源时钟控制寄存器:PCON,SUSLO
Flash寄存器:
IB_OFFSET,IB_DATA,IB_CON1,IB_CON2,IB_CON3,IB_CON4,IB_CON5
数据存储页寄存器:
XPAGE
看门狗定时器寄存器:RSTSTAT
系统时钟控制寄存器:CLKCON
中断寄存器:
IEN0,IEN1,IENC,IPH0,IPL0,IPH1,IPL1,EXF0,EXF1
I/O口寄存器:
EUART寄存器:
P0 , P1 , P2 , P3 , P0CR , P1CR , P2CR , P3CR , P0PCR , P1PCR , P2PCR , P3PCR ,
P0OS
TCON,TMOD,TH0,TH1,TL0,TL1,T2CON,T2MOD,TH2,TL2,RCAP2L,RCAP2H,
TCON1
SCON,SBUF,SADEN,SADDR,PCON
SPI寄存器:
SPCON,SPSTA,SPDAT
ADC寄存器:
ADCON,ADT,ADCH,ADDL,ADDH
BUZZER寄存器:
BUZCON
PWM寄存器:
PWMEN , PWMLO , PWM0C , PWM0PL , PWM0PH , PWM0DL , PWM0DH , PWM1C ,
PWM1P,PWM1D,PWM2C,PWM2P,PWM2D,PWM0DT,PWM1DT,PWM2DT
Timer寄存器:
7
SH79F081A
Table 6.1 C51核SFRs
符号
地址
ACC
E0H
B
F0H
POR/WDT/LVR
/PIN复位值
第7位
第6位
第5位
第4位
第3位
第2位
第1位
第0位
累加器
00000000
ACC.7
ACC.6
ACC.5
ACC.4
ACC.3
ACC.2
ACC.1
ACC.0
B寄存器
00000000
B.7
B.6
B.5
B.4
B.3
B.2
B.1
B.0
名称
AUXC
F1H
C寄存器
00000000
C.7
C.6
C.5
C.4
C.3
C.2
C.1
C.0
PSW
D0H
程序状态字
00000000
CY
AC
F0
RS1
RS0
OV
F1
P
SP
81H
堆栈指针
00000111
SP.7
SP.6
SP.5
SP.4
SP.3
SP.2
SP.1
SP.0
DPL
82H
数据指针低位字节
00000000
DPL0.7
DPL0.6
DPL0.5
DPL0.4
DPL0.3
DPL0.2
DPL0.1
DPL0.0
DPH
83H
数据指针高位字节
00000000
DPH0.7
DPH0.6
DPH0.5
DPH0.4
DPH0.3
DPH0.2
DPH0.1
DPH0.0
DPL1
84H
数据指针1低位字节
00000000
DPL1.7
DPL1.6
DPL1.5
DPL1.4
DPL1.3
DPL1.2
DPL1.1
DPL1.0
DPH1
85H
数据指针1高位字节
00000000
DPH1.7
DPH1.6
DPH1.5
DPH1.4
DPH1.3
DPH1.2
DPH1.1
DPH1.0
INSCON
86H
数据指针选择
----00-0
-
-
-
-
DIV
MUL
-
DPS
Table 6.2 电源时钟控制SFRs
符号
地址
名称
POR/WDT/LVR
/PIN复位值
第7位
第6位
第5位
第4位
第3位
第2位
第1位
第0位
PCON
87H
电源控制
00--0000
SMOD
SSTAT
-
-
GF1
GF0
PD
IDL
SUSLO
8EH
电源控制保护字
00000000
SUSLO.7
SUSLO.6
SUSLO.5
SUSLO.4
SUSLO.3
SUSLO.2
SUSLO.1
SUSLO.0
Table 6.3 Flash控制SFRs
符号
地址
名称
POR/WDT/LVR
/PIN复位值
第7位
第6位
第5位
第4位
第3位
第2位
第1位
第0位
IB_OFF
SET
FBH
可编程flash低位字节偏移
00000000
IB_OFF
SET.7
IB_OFF
SET.6
IB_OFF
SET.5
IB_OFF
SET.4
IB_OFF
SET.3
IB_OFF
SET.2
IB_OFF
SET.1
IB_OFF
SET.0
IB_DATA.6
IB_DATA.5
IB_DATA.4
IB_DATA.3
IB_DATA.2
IB_DATA.1
IB_DATA.0
IB_DATA
FCH
可编程flash数据寄存器
00000000
IB_DATA.7
IB_CON1
F2H
flash控制寄存器1
00000000
IB_CON1.7 IB_CON1.6 IB_CON1.5 IB_CON1.4 IB_CON1.3 IB_CON1.2 IB_CON1.1 IB_CON1.0
IB_CON2
F3H
flash控制寄存器2
----0000
-
-
-
-
IB_CON2.3 IB_CON2.2 IB_CON2.1 IB_CON2.0
IB_CON3
F4H
flash控制寄存器3
----0000
-
-
-
-
IB_CON3.3 IB_CON3.2 IB_CON3.1 IB_CON3.0
IB_CON4
F5H
flash控制寄存器4
----0000
-
-
-
-
IB_CON4.3 IB_CON4.2 IB_CON4.1 IB_CON4.0
IB_CON5
F6H
flash控制寄存器5
----0000
-
-
-
-
IB_CON5.3 IB_CON5.2 IB_CON5.1 IB_CON5.0
XPAGE
F7H
flash页寄存器
00000000
XPAGE.7
XPAGE.6
XPAGE.5
XPAGE.4
XPAGE.3
XPAGE.2
XPAGE.1
XPAGE.0
指令访问控制寄存器
-------0
-
-
-
-
-
-
-
FAC
FLASHCON A7H
8
SH79F081A
Table 6.4 WDT SFRs
符号
名称
POR/WDT/LVR
/PIN复位值
第7位
第6位
第5位
第4位
第3位
第2位
第1位
第0位
看门狗定时器控制寄存器
*-***000
WDOF
-
PORF
LVRF
CLRF
WDT.2
WDT.1
WDT.0
地址
RSTSTAT B1H
注意:*表示不同情况的复位决定RSTSTAT寄存器中的复位值,详见WDT章节
Table 6.5 时钟控制SFRs
符号
地址
名称
POR/WDT/LVR
/PIN复位值
第7位
第6位
第5位
第4位
第3位
第2位
第1位
第0位
CLKCON
B2H
系统时钟选择
-00-----
-
CLKS1
CLKS0
-
-
-
-
-
Table 6.6 中断SFRs
符号
地址
名称
POR/WDT/LVR
/PIN复位值
第7位
第6位
第5位
第4位
第3位
第2位
第1位
第0位
IEN0
A8H
中断允许控制0
00000000
EA
EADC
ET2
ES
ET1
EX1
ET0
EX0
IEN1
A9H
中断允许控制1
--0-0--0
-
-
EPWM
-
EX4
-
-
ESPI
IENC
BAH
外部中断4通道允许控制
-00-0000
-
EXS46
EXS45
-
EXS43
EXS42
EXS41
EXS40
IPH0
B4H
中断优先权控制低位0
-0000000
-
PADCH
PT2H
PSH
PT1H
PX1H
PT0H
PX0H
IPL0
B8H
中断优先权控制高位0
-0000000
-
PADCL
PT2L
PSL
PT1L
PX1L
PT0L
PX0L
IPH1
B5H
中断优先权控制低位1
--0-0--0
-
-
PPWMH
-
PX4H
-
-
PSPIH
IPL1
B9H
中断优先权控制高位1
--0-0--0
-
-
PPWML
-
PX4L
-
-
PSPIL
EXF0
E8H
外部中断寄存器0
00------
IT4.1
IT4.0
-
-
-
-
-
-
EXF1
D8H
外部中断寄存器1
-00-0000
-
IF46
IF45
-
IF43
IF42
IF41
IF40
9
SH79F081A
Table 6.7 端口 SFRs
符号
地址
名称
POR/WDT/LVR
/PIN复位值
第7位
第6位
第5位
第4位
第3位
第2位
第1位
第0位
P0
80H
6位端口0
000000--
P0.7
P0.6
P0.5
P0.4
P0.3
P0.2
-
-
P1
90H
6位端口1
000000--
P1.7
P1.6
P1.5
P1.4
P1.3
P1.2
-
-
P2
A0H
8位端口2
00000000
P2.7
P2.6
P2.5
P2.4
P2.3
P2.2
P2.1
P2.0
P3
B0H
6位端口3
--000000
-
-
P3.5
P3.4
P3.3
P3.2
P3.1
P3.0
P0CR
E1H
端口0输入/输出方向控制
000000--
P0CR.7
P0CR.6
P0CR.5
P0CR.4
P0CR.3
P0CR.2
-
-
P1CR
E2H
端口1输入/输出方向控制
000000--
P1CR.7
P1CR.6
P1CR.5
P1CR.4
P1CR.3
P1CR.2
-
-
P2CR
E3H
端口2输入/输出方向控制
00000000
P2CR.7
P2CR.6
P2CR.5
P2CR.4
P2CR.3
P2CR.2
P2CR.1
P2CR.0
P3CR
E4H
端口3输入/输出方向控制
--000000
-
-
P3CR.5
P3CR.4
P3CR.3
P3CR.2
P3CR.1
P3CR.0
P0PCR
E9H
端口0内部上拉允许
000000--
P0PCR.7
P0PCR.6
P0PCR.5
P0PCR.4
P0PCR.3
P0PCR.2
-
-
P1PCR
EAH
端口1内部上拉允许
000000--
P1PCR.7
P1PCR.6
P1PCR.5
P1PCR.4
P1PCR.3
P1PCR.2
-
-
P2PCR
EBH
端口2内部上拉允许
00000000
P2PCR.7
P2PCR.6
P2PCR.5
P2PCR.4
P2PCR.3
P2PCR.2
P2PCR.1
P2PCR.0
P3PCR
ECH
端口3内部上拉允许
--000000
-
-
P3PCR.5
P3PCR.4
P3PCR.3
P3PCR.2
P3PCR.1
P3PCR.0
P0OS
EFH
输出模式选择
--0000--
-
-
P05OS
P04OS
P03OS
P02OS
-
-
10
SH79F081A
Table 6.8 定时器SFRs
符号
地址
名称
POR/WDT/LVR
/PIN复位值
第7位
第6位
TR1
第5位
第4位
第3位
第2位
IT1
第1位
第0位
TCON
88H
定时器/计数器0和1控制寄存器
00000000
TF1
TMOD
89H
定时器/计数器0和1模式寄存器
00000000
GATE1
TL0
8AH
定时器/计数器0低位字节
00000000
TL0.7
TH0
8CH
定时器/计数器0高位字节
00000000
TL1
8BH
定时器/计数器1低位字节
TH1
8DH
T2CON
C8H
T2MOD
C9H
定时器/计数器2模式寄存器
0-----00
TCLKP2
-
-
-
-
-
T2OE
DCEN
RCAP2L
CAH 定时器/计数器2重载/截获低位字节
00000000
RCAP2L.7
RCAP2L.6
RCAP2L.5
RCAP2L.4
RCAP2L.3
RCAP2L.2
RCAP2L.1
RCAP2L.0
CBH 定时器/计数器2重载/截获高位字节
RCAP2H
TF0
TR0
IE1
C/T1
M11
M10
GATE0
C/T0
TL0.6
TL0.5
TL0.4
TL0.3
TL0.2
TL0.1
TL0.0
TH0.7
TH0.6
TH0.5
TH0.4
TH0.3
TH0.2
TH0.1
TH0.0
00000000
TL1.7
TL1.6
TL1.5
TL1.4
TL1.3
TL1.2
TL1.1
TL1.1
定时器/计数器1高位字节
00000000
TH1.7
TH1.6
TH1.5
TH1.4
TH1.3
TH1.2
TH1.1
定时器/计数器2控制寄存器
00000000
TF2
EXF2
RCLK
TCLK
EXEN2
TR2
C/ T2
———
———
IE0
IT0
M01
M00
———
TH1.1
CP/RL2
00000000
RCAP2H.7
RCAP2H.6
RCAP2H.5
RCAP2H.4
RCAP2H.3
RCAP2H.2
RCAP2H.1
RCAP2H.0
TL2
CCH
定时器/计数器2低位字节
00000000
TL2.7
TL2.6
TL2.5
TL2.4
TL2.3
TL2.2
TL2.1
TL2.0
TH2
CDH
定时器/计数器2高位字节
00000000
TH2.7
TH2.6
TH2.5
TH2.4
TH2.3
TH2.2
TH2.1
TH2.0
TCON1
CEH
定时器0/1比较功能允许
----0000
-
-
-
-
TCLKP1
TCLKP0
TC1
TC0
POR/WDT/LVR
/PIN复位值
第7位
第6位
第5位
第4位
第3位
第2位
第1位
第0位
Table 6.9 EUART SFRs
符号
地址
名称
SCON
98H
串行控制
00000000
SM0/FE
SBUF
99H
串行数据缓冲器
00000000
SBUF.7
SM1/RXOV SM2/TXCOL
SBUF.6
SBUF.5
REN
TB8
RB8
TI
RI
SBUF.4
SBUF.3
SBUF.2
SBUF.1
SBUF.0
SADEN
9BH
从属地址掩码
00000000
SADEN.7
SADEN.6
SADEN.5
SADEN.4
SADEN.3
SADEN.2
SADEN.1
SADEN.0
SADDR
9AH
从属地址
00000000
SADDR.7
SADDR.6
SADDR.5
SADDR.4
SADDR.3
SADDR.2
SADDR.1
SADDR.0
PCON
87H
电源和串行控制
00--0000
SMOD
SSTAT
-
-
GF1
GF0
PD
IDL
11
SH79F081A
Table 6.10 SPI SFRs
名称
POR/WDT/LVR
/PIN复位值
A2H
SPI控制寄存器
F8H
SPI状态寄存器
A3H
符号
地址
SPCON
SPSTA
SPDAT
第7位
第6位
00000000
DIR
MSTR
00000---
SPEN
SPIF
SPI数据寄存器
00000000
SPD.7
SPD.6
第5位
第4位
第3位
第2位
第1位
第0位
CPHA
CPOL
SSDIS
SPR2
SPR1
SPR0
MODF
WCOL
RXOV
-
-
-
SPD.5
SPD.4
SPD.3
SPD.2
SPD.1
SPD.0
第0位
Table 6.11 ADC SFRs
符号
地址
名称
POR/WDT/LVR
/PIN复位值
第7位
第6位
第5位
第4位
第3位
第2位
第1位
ADCON
93H
ADC控制
000-0000
ADON
ADCIF
EC
-
SCH2
SCH1
SCH0
ADT
94H
ADC时间配置
000-0000
TADC2
TADC1
TADC0
-
TS3
TS2
TS1
TS0
GO/
DONE
ADCH
95H
ADC通道配置
00000000
CH7
CH6
CH5
CH4
CH3
CH2
CH1
CH0
ADDL
96H
ADC数据低位字节
------00
-
-
-
-
-
-
A1
A0
ADDH
97H
ADC数据高位字节
00000000
A9
A8
A7
A6
A5
A4
A3
A2
Table 6.12 Buzzer SFRs
符号
地址
名称
POR/WDT/LVR
/PIN复位值
第7位
第6位
第5位
第4位
第3位
第2位
第1位
第0位
BUZCON
BDH
蜂鸣器输出控制
---00000
-
-
-
BCA3
BCA2
BCA1
BCA0
BZEN
12
SH79F081A
Table 6.13 PWM SFRs
POR/WDT/LVR
/PIN复位值
符号
地址
名称
PWMEN
0CFH
PWM定时器允许
-0000000
-
EFLT
EPWM21
EPWM11
EPWM01
EPWM2
EPWM1
EPWM0
PWMLO
0E7H
PWM锁定
00000000
PWMLO.7
PWMLO.6
PWMLO.5
PWMLO.4
PWMLO.3
PWMLO.2
PWMLO.1
PWMLO.0
PWM0C
0D2H
12位PWM控制
00-00000
PWM0IE
PWM0IF
-
FLTS
FLTC
PWM0S
TnCLK01
TnCLK00
12位PWM周期控制低位
00000000
PP0.7
PP0.6
PP0.5
PP.4
PP0.3
PP0.2
PP0.1
PP0.0
PWM0PL 0D3H
第7位
第6位
第5位
第4位
第3位
第2位
第1位
第0位
PWM0PH 0D4H
12位PWM周期控制高位
----0000
-
-
-
-
PP0.11
PP0.10
PP0.9
PP0.8
PWM0DL 0D5H
12位PWM占空比控制低位
00000000
PD0.7
PD0.6
PD0.5
PD0.4
PD0.3
PD0.2
PD0.1
PD0.0
PWM0DH 0D6H
12位PWM占空比控制高位
----0000
-
-
-
-
PD0.11
PD0.10
PD0.9
PD0.8
PWM1C
0D9H
8位PWM1控制寄存器
00---000
PWM1IE
PWM1IF
-
-
-
PWM1S
TnCLK11
TnCLK10
PWM1P
0DAH
8位PWM1周期控制
00000000
PP1.7
PP1.6
PP1.5
PP1.4
PP1.3
PP1.2
PP1.1
PP1.0
PD1.7
PD1.6
PD1.5
PD1.4
PD1.3
PD1.2
PD1.1
PD1.0
PWM2IE
PWM2IF
-
-
-
PWM2S
TnCLK21
TnCLK20
PWM1D
0DBH
8位PWM1占空比控制
00000000
PWM2C
0DDH
8位PWM2控制寄存器
00---000
PWM2P
0DEH
8位PWM2周期控制
00000000
PP2.7
PP2.6
PP2.5
PP2.4
PP2.3
PP2.2
PP2.1
PP2.0
PWM2D
0DFH
8位PWM2占空比控制
00000000
PD2.7
PD2.6
PD2.5
PD2.4
PD2.3
PD2.2
PD2.1
PD2.0
PWM0DT 0D1H
PWM01死区时间控制
00000000
DT0.7
DT0.6
DT0.5
DT0.4
DT0.3
DT0.2
DT0.1
DT0.0
PWM1DT 0D7H
PWM11死区时间控制
00000000
DT1.7
DT1.6
DT1.5
DT1.4
DT1.3
DT1.2
DT1.1
DT1.0
PWM2DT 0DCH
PWM21死区时间控制
00000000
DT2.7
DT2.6
DT2.5
DT2.4
DT2.3
DT2.2
DT2.1
DT2.0
注意:- :保留位。
13
SH79F081A
SFR映像图
可位寻址
0/8
不可位寻址
1/9
2/A
3/B
4/C
IB_OFFSET
IB_DATA
F8H
SPSTA
F0H
B
AUXC
IB_CON1
IB_CON2
IB_CON3
E8H
EXF0
P0PCR
P1PCR
P2PCR
E0H
ACC
P0CR
P1CR
D8H
EXF1
PWM1C
D0H
PSW
C8H
T2CON
5/D
6/E
7/F
FFH
IB_CON4
IB_CON5
XPAGE
F7H
P3PCR
P0OS
EFH
P2CR
P3CR
PWMLO
E7H
PWM1P
PWM1D
PWM2DT
PWM2C
PWM2P
PWM2D
DFH
PWM0DT
PWM0C
PWM0PL
PWM0PH
PWM0DL
PWM0DH
PWM1DT
D7H
T2MOD
RCAP2L
RCAP2H
TL2
TH2
TCON1
PWMEN
CFH
C0H
C7H
B8H
IPL0
IPL1
IENC
B0H
P3
RSTSTAT
CLKCON
A8H
IEN0
IEN1
A0H
P2
98H
SCON
90H
P1
88H
TCON
TMOD
80H
P0
0/8
SBUF
IPH0
BUZCON
BFH
IPH1
B7H
AFH
SPCON
SPDAT
SADDR
SADEN
FLASHCON
A7H
9FH
ADCON
ADT
ADCH
ADDL
TL0
TL1
TH0
TH1
SUSLO
SP
DPL
DPH
DPL1
DPH1
INSCON
PCON
1/9
2/A
3/B
4/C
5/D
6/E
7/F
注意:未使用的SFR地址禁止读写。
14
ADDH
97H
8FH
87H
SH79F081A
7. 标准功能
7.1 CPU
7.1.1 CPU内核特殊功能寄存器
特性
CPU内核寄存器:ACC,B,PSW,SP,DPL,DPH
累加器
累加器ACC是一个常用的专用寄存器,指令系统中采用A作为累加器的助记符。
B寄存器
在乘除法指令中,会用到B寄存器。在其它指令中,B寄存器可作为暂存器来使用。
栈指针(SP)
栈指针SP是一个8位专用寄存器,在执行PUSH、各种子程序调用、中断响应等指令时,SP先加1,再将数据压栈;执行POP、
RET、RETI等指令时,数据退出堆栈后SP再减1。堆栈栈顶可以是片上内部RAM(00H-FFH)的任意地址,系统复位后,SP
初始化为07H,使得堆栈事实上由08H地址开始。
程序状态字(PSW)寄存器
程序状态字(PSW)寄存器包含了程序状态信息。
Table 7.1 PSW寄存器
第7位
D0H
第6位
第5位
第4位
第3位
第2位
第1位
第0位
PSW
C
AC
F0
RS1
RS0
OV
F1
P
读/写
复位值
(POR/WDT/LVR/PIN)
读/写
读/写
读/写
读/写
读/写
读/写
读/写
读
0
0
0
0
0
0
0
0
位编号
位符号
说明
进位标志位
0:算术或逻辑运算中,没有进位或借位发生
1:算术或逻辑运算中,有进位或借位发生
7
C
6
AC
辅助进位标志位
0:算数逻辑运算中,没有辅助进位或借位发生
1:算数逻辑运算中,有辅助进位或借位发生
5
F0
F0标志位
用户自定义标志位
R0-R7寄存器页选择位
00:页0 (映射到00H-07H)
01:页1 (映射到08H-0FH)
10:页2 (映射到10H-17H)
11:页3 (映射到18H-1FH)
4-3
RS[1:0]
2
OV
溢出标志位
0:没有溢出发生
1:有溢出发生
1
F1
F1标志位
用户自定义标志位
0
P
奇偶校验位
0:累加器A中值为1的位数为偶数
1:累加器A中值为1的位数为奇数
数据指针(DPTR)
数据指针DPTR是一个16位专用寄存器,其高位字节寄存器用DPH表示,低位字节寄存器用DPL表示。它们既可以作为一个
16位寄存器DPTR来处理,也可以作为2个独立的8位寄存器DPH和DPL来处理。
15
SH79F081A
7.1.2 CPU增强内核特殊功能寄存器
扩展的'MUL'和'DIV'指令:16位*8位,16位/8位
双数据指针
CPU增强内核寄存器:AUXC,DPL1,DPH1,INSCON
SH79F081A扩展了'MUL'和'DIV'的指令,使用一个新寄存器-AUXC寄存器保存运算数据的高8位,以实现16位运算。在16
位乘除法指令中,会用到AUXC寄存器。在其它指令中,AUXC寄存器可作为暂存器来使用。
CPU在复位后进入标准模式,'MUL'和'DIV'的指令操作和标准8051指令操作一致。当INSCON寄存器的相应位置1后,'MUL'
和'DIV'指令的16位操作功能被打开。
INSCON.2 = 0;8位模式
(A)*(B)
A
低位字节
结果
B
高位字节
INSCON.2 = 1;16位模式
(AUXC A)*(B)
低位字节
中位字节
高位字节
INSCON.3 = 0;8位模式
(A)/(B)
商低位字节
余数
---
INSCON.3 = 1;16位模式
(AUXC A)/(B)
商低位字节
余数
商高位字节
操作
MUL
DIV
AUXC
---
双数据指针
使用双数据指针能加速数据存储移动。标准数据指针被命名为DPTR而新型数据指针命名为DPTR1。
数据指针DPTR1与DPTR类似,是一个16位专用寄存器,其高位字节寄存器用DPH1表示,低位字节寄存器用DPL1表示。
它们既可以作为一个16位寄存器DPTR1来处理,也可以作为2个独立的8位寄存器DPH1和DPL1来处理。
通过对INSCON寄存器中的DPS位置1或清0选择两个数据指针中的一个。所有读取或操作DPTR的相关指令将会选择最近一
次选择的数据指针。
寄存器
Table 7.2 数据指针选择寄存器
86H
第7位
第6位
第5位
第4位
第3位
第2位
第1位
第0位
INSCON
-
-
-
-
DIV
MUL
-
DPS
读/写
-
-
-
-
读/写
读/写
-
读/写
复位值
(POR/WDT/LVR/PIN)
-
-
-
-
0
0
-
0
位编号
位符号
说明
3
DIV
16位/8位除法选择位
0:8位除法
1:16位除法
2
MUL
16位/8位乘法选择位
0:8位乘法
1:16位乘法
0
DPS
数据指针选择位
0:数据指针
1:数据指针1
16
SH79F081A
7.2 RAM
为了提高系统数据变量的处理能力,支持高级语言,SH79F081A提供了额外的RAM空间。
SH79F081A内部分为以下3个独立的空间:
低位128字节的RAM(地址从00H到7FH)可直接或间接寻址。
高位128字节的RAM(地址从80H到FFH)只能间接寻址。
特殊功能寄存器(SFR,地址从80H到FFH)只能直接寻址。
高位128字节的RAM占用的地址空间和SFR相同,但在物理上与SFR的空间是分离的。当一个指令访问高于地址7FH的内部
位置时,CPU可以根据访问的指令类型来区分是访问高位128字节数据RAM还是访问SFR。
注意:未使用的SFR地址禁止读写。
内部RAM配置如下:
0FFH
0FFH
Upper
128 bytes
Internal
Ram
indirect
accesses
Special
Function
Register
direct accesses
80H
7FH
00
80H
Lower
128 bytes
Internal
Ram
direct or indirect
accesses
RAM地址
17
SH79F081A
7.3 Flash程序存储器
7.3.1 特性
Flash 存储器包括 8 X 1KB 区块,总共 8KB
2K 类 EEPROM
在工作电压范围内都能进行编程和擦除操作
在线编程(ICP)操作支持写入、读取和擦除操作
扇区自编程(SSP)操作支持扇区擦除和编程
程序存储区编程/擦除次数:至少 10,000 次
类 EEPROM 块区编程/擦除次数:至少 100,000 次
数据保存年限:至少 10 年
低功耗
FFFFH
Reserved
(no use)
2000H
(8K)
Program Memory Block
0800H
EEPROM Like Data Block
0000H
0000H
Information Block
Program Memory Block
SH79F081A为存储程序代码内置8K 可编程Flash程序存储区(Program Memory Block),支持在线编程(ICP)和扇区自
编程(SSP)对Flash存储器操作。
SH79F081A还内置2048字节的类EEPROM存储区用于存放用户数据。
Flash操作定义:
在线编程(ICP)操作:通过Flash编程器对Flash存储器进行擦、读、写操作。
扇区自编程(SSP)操作:用户程序代码运行在Program Memory中,对Flash存储器进行擦、读、写操作。
18
SH79F081A
Flash存储器支持以下操作:
(1) 代码保护控制模式编程
SH79F081A的代码保护功能为用户代码提供了高性能的安全措施。每个分区有两种模式可用。
代码保护模式0:允许/禁止任何编程器的写入/读取操作(不包括整体擦除)。
代码保护模式1:允许/禁止在其他扇区中通过MOVC指令进行读取操作,或通过SSP模式进行擦除/写入操作。
用户必须使用下列方式才能完成代码保护控制模式的设定:
Flash编程器在ICP模式设置相应的保护位,以进入所需的保护模式。
SSP模式不支持代码保护控制模式编程。
(2) 整体擦除
无论代码保护控制模式的状态如何,整体擦除操作都将会擦除所有程序,代码选项和代码保护位,但是不会擦除类EEPROM
存储区。
用户必须使用下列方式才能完成整体擦除:
Flash编程器在ICP模式发出整体擦除指令,进行整体擦除。
SSP模式不支持整体擦除。
(3) 扇区擦除
扇区擦除操作将会擦除所选扇区中内容。用户程式(SSP)和Flash编程器都能执行该操作。
若需用户程式执行该操作,必须禁止所选扇区的代码保护控制模式1。
若需Flash编程器执行该操作,必须禁止所选扇区的代码保护控制模式0。
用户必须使用下列2种方式之一才能完成扇区擦除:
1. Flash编程器在ICP模式发出扇区擦除指令,进行扇区擦除。
2. 通过SSP功能发出扇区擦除指令,进行扇区擦除(详见扇区自编程章节)。
(4) 类EEPROM存储区擦除
类EEPROM存储区擦除操作将会擦除类EEPROM存储区中的内容。用户程式(SSP)和Flash编程器都能执行该操作。
用户必须使用下列2种方式之一才能完成类EEPROM存储区擦除:
1. Flash编程器在ICP模式发出类EEPROM存储区擦除指令,进行类EEPROM存储区擦除。
2. 通过SSP功能发出类EEPROM存储区擦除指令,进行类EEPROM存储区擦除(详见扇区自编程章节)。
(5) 写/读代码
读/写代码操作可以将代码从Flash存储器中读出或写入。用户程式(SSP)和Flash编程器都能执行该操作。
若需用户程式执行该操作,必须禁止所选扇区的代码保护控制模式1。不管安全位设置与否,用户程序都能读/写程式自身所
在扇区。
若需编程器执行该操作,必须禁止所选扇区的代码保护控制模式0。
用户必须使用下列2种方式之一才能完成写/读代码:
1. Flash编程器在ICP模式发出写/读代码指令,进行写/读代码。
2. 通过SSP功能发出写/读代码指令,进行写/读代码。
(6) 写/读类EEPROM存储区
读/写类EEPROM存储区操作可以将数据从类EEPROM存储区中读出或写入。用户程式(SSP)和Flash编程器都能执行该
操作。
用户必须使用下列2种方式之一才能完成写/读类EEPROM存储区:
1. Flash编程器在ICP模式发出写/读类EEPROM存储区指令,进行写/读类EEPROM存储区。
2. 通过SSP功能发出写/读类EEPROM存储区指令,进行写/读类EEPROM存储区。
Flash存储器操作汇总
操作
SSP
ICP
代码保护
不支持
支持
扇区擦除
支持(无安全位)
支持(无安全位)
整体擦除
不支持
支持
类EEPROM存储区擦除
支持
支持
写/读代码
支持(无安全位)
支持(无安全位)
写/读类EEPROM存储区
支持
支持
19
SH79F081A
7.3.2 ICP模式下的Flash操作
ICP模式通过Flash编程器对MCU进行编程,可以在MCU焊在用户板上以后编程。ICP模式下,用户系统必须关机后Flash
编程器才能通过ICP编程接口刷新Flash存储器。ICP编程接口包括6个引脚(VDD,GND,TCK,TDI,TMS,TDO)。
编程器使用4个JTAG引脚(TDO,TDI,TCK,TMS)进入编程模式。只有将特定波形输入4个引脚后,CPU才能进入编程
模式。如需详细说明请参考Flash编程器用户指南。
在ICP模式中,通过6线接口编程器能完成所有Flash操作。因为编程信号非常敏感,所以使用编程器编程时用户需要先用6
个跳线将芯片的编程引脚(VDD,GND,TCK,TDI,TMS,TDO)从应用电路中分离出来,如下图所示。
Flash
Programmer
MCU
VDD
TMS
TCK
TDI
TDO
GND
To Application
Circuit
Jumper
当采用ICP模式进行操作时,建议按照如下步骤进行操作:
(1) 在开始编程前断开跳线(jumper),从应用电路中分离编程引脚;
(2) 将芯片编程引脚连接至 Flash 编程器编程接口,开始编程;
(3) 编程结束后断开 Flash 编程器接口,连接跳线恢复应用电路。
20
SH79F081A
7.4 扇区自编程(SSP)功能
SH79F081A支持SSP操作。如果所选扇区未被加密,利用SSP操作,用户代码可以对程序存储区进行擦除、编程操作。一
旦某扇区或类EEPROM块区被编程,则在该扇区或块区被擦除之前不能被再次编程。
SH79F081A内建一个复杂控制流程以避免误入SSP操作导致代码被修改。为执行SSP操作,IB_CON2-5设置必须满足特定
条件。
7.4.1 寄存器
Table 7.3 编程用地址选择寄存器
F7H
第7位
第6位
第5位
第4位
第3位
第2位
第1位
第0位
XPAGE
XPAGE.7
XPAGE.6
XPAGE.5
XPAGE.4
XPAGE.3
XPAGE.2
XPAGE.1
XPAGE.0
读/写
读/写
读/写
读/写
读/写
读/写
读/写
读/写
读/写
复位值
(POR/WDT/LVR/PIN)
0
0
0
0
0
0
0
0
Flash程序存储区,一个扇区为1024字节,该寄存器定义如下:
位编号
位符号
说明
7-2
XPAGE[7:2]
被编程的存储单元扇区号,000000代表扇区0,以此类推
1-0
XPAGE[1:0]
被编程的存储单元高2位地址
对类EEPROM存储区,一个扇区为256字节,该寄存器定义如下:
位编号
位符号
说明
7-3
XPAGE[7:3]
保留位
2-0
XPAGE[2:0]
被编程的存储单元扇区号;000代表扇区0,以此类推
注意:
对于程序存储区,一个扇区为1024字节;
对于类EEPROM存储区,一个扇区为256字节。
Table 7.4 编程地址偏移寄存器
FBH
第7位
第6位
第5位
第4位
第3位
第2位
第1位
第0位
IB_OFFSET
IB_OFF
SET.7
IB_OFF
SET.6
IB_OFF
SET.5
IB_OFF
SET.4
IB_OFF
SET.3
IB_OFF
SET.2
IB_OFF
SET.1
IB_OFF
SET.0
读/写
读/写
读/写
读/写
读/写
读/写
读/写
读/写
读/写
复位值
(POR/WDT/LVR/PIN)
0
0
0
0
0
0
0
0
对Flash程序存储区,一个扇区为1024字节,该寄存器定义如下:
位编号
7-0
位符号
说明
IB_OFFSET[7:0] 被编程的存储单元低8位地址
对类EEPROM存储区,一个扇区为256字节,该寄存器定义如下:
位编号
7-0
位符号
说明
IB_OFFSET[7:0] 被编程的存储单元地址
21
SH79F081A
Table 7.5 编程用数据寄存器
第7位
FCH
第6位
第5位
第4位
第3位
第2位
第1位
第0位
IB_DATA.7 IB_DATA.6 IB_DATA.5 IB_DATA.4 IB_DATA.3 IB_DATA.2 IB_DATA.1 IB_DATA.0
IB_DATA
读/写
读/写
读/写
读/写
读/写
读/写
读/写
读/写
读/写
复位值
(POR/WDT/LVR/PIN)
0
0
0
0
0
0
0
0
第2位
第1位
第0位
位编号
位符号
7-0
IB_DATA[7:0]
说明
待编程数据
Table 7.6 SSP操作类型选择寄存器
第7位
F2H
第6位
第5位
第4位
第3位
IB_CON1.7 IB_CON1.6 IB_CON1.5 IB_CON1.4 IB_CON1.3 IB_CON1.2 IB_CON1.1 IB_CON1.0
IB_CON1
读/写
读/写
读/写
读/写
读/写
读/写
读/写
读/写
读/写
复位值
(POR/WDT/LVR/PIN)
0
0
0
0
0
0
0
0
第2位
第1位
第0位
位编号
位符号
7-0
IB_CON1[7:0]
说明
SSP操作类型选择
E6H:扇区擦除(擦除时间 < 3ms)
6EH:编程存储单元(编程时间 < 30us)
Table 7.7 SSP流程控制寄存器1
F3H
第7位
第6位
第5位
第4位
IB_CON2
-
-
-
-
读/写
-
-
-
-
读/写
读/写
读/写
读/写
复位值
(POR/WDT/LVR/PIN)
-
-
-
-
0
0
0
0
第2位
第1位
第0位
位编号
位符号
3-0
IB_CON2[3:0]
第3位
IB_CON2.3 IB_CON2.2 IB_CON2.1 IB_CON2.0
说明
必须为05H,否则Flash编程将会终止
Table 7.8 SSP流程控制寄存器2
F4H
第7位
第6位
第5位
第4位
IB_CON3
-
-
-
-
读/写
-
-
-
-
读/写
读/写
读/写
读/写
复位值
(POR/WDT/LVR/PIN)
-
-
-
-
0
0
0
0
位编号
位符号
3-0
IB_CON3[3:0]
第3位
IB_CON3.3 IB_CON3.2 IB_CON3.1 IB_CON3.0
说明
必须为0AH,否则Flash编程将会终止
22
SH79F081A
Table 7.9 SSP流程控制寄存器3
第7位
F5H
第6位
第5位
第4位
第3位
第2位
第1位
第0位
IB_CON4
-
-
-
-
读/写
-
-
-
-
读/写
读/写
读/写
读/写
复位值
(POR/WDT/LVR/PIN)
-
-
-
-
0
0
0
0
第2位
第1位
第0位
位编号
位符号
3-0
IB_CON4[3:0]
IB_CON4.3 IB_CON4.2 IB_CON4.1 IB_CON4.0
说明
必须为09H,否则Flash编程将会终止
Table 7.10 SSP流程控制寄存器4
F6H
第7位
第6位
第5位
第4位
IB_CON5
-
-
-
-
读/写
-
-
-
-
读/写
读/写
读/写
读/写
复位值
(POR/WDT/LVR/PIN)
-
-
-
-
0
0
0
0
第2位
第1位
第0位
位编号
位符号
3-0
IB_CON5[3:0]
第3位
IB_CON5.3 IB_CON5.2 IB_CON5.1 IB_CON5.0
说明
必须为06H,否则Flash编程将会终止
Table 7.11 指令访问控制寄存器
A7H
第7位
第6位
第5位
第4位
第3位
FLASHCON
-
-
-
-
-
-
-
FAC
读/写
-
-
-
-
-
-
-
读/写
复位值
(POR/WDT/LVR/PIN)
-
-
-
-
-
-
-
0
位编号
位符号
0
FAC
说明
执行区域选择位
0:MOVC指令或SSP操作执行区在程序存储区
1:MOVC指令或SSP操作执行区在类EEPROM块区
23
SH79F081A
7.4.2 Flash控制流程图
Set IB_OFFSET
Set XPAGE
Set IB_DATA
Set IB_CON1
S0
IB_CON2[3:0]≠5H
Set IB_CON2[3:0]=5H
IB_CON2≠5H
S1
IB_CON3≠AH
IB_CON2≠5H
Set IB_CON3=AH
ELSE
S2
IB_CON3≠AH
Set IB_CON4=9H
Reset
IB_CON5-1
IB_CON4≠9H
S3
Set IB_CON5=6H
S4
Sector Erase
IB_CON1=E6H
&IB_CON2[3:0]=5H
&IB_CON3=AH
&IB_CON4=9H
&IB_CON5=6H
IB_CON1=6EH
&IB_CON2[3:0]=5H
&IB_CON3=AH
&IB_CON4=9H
&IB_CON5=6H
Programming
24
SH79F081A
7.4.3 SSP编程注意事项
为确保顺利完成SSP编程,用户软件应该遵循以下步骤设置:
(1) 用于代码/数据编程:
1. 关闭中断;
2. 如果待编程地址在类EEPROM块区,将FAC位(FLASHCON.0)置1;如果待编程地址在程序存储区,将FAC位清0;
3. 按相应的待编程扇区号或块区号设置XPAGE、IB_OFFSET;
4. 按编程需要,设置IB_DATA;
5. 按照顺序设置IB_CON1 - 5;
6. 添加4个NOP指令;
7. 开始编程,CPU将进入IDLE模式;编程完成后自动退出IDLE模式;
8. 如需需要继续写入数据,跳转至第3步;
9. XPAGE寄存器和FAC位(FLASHCON.0)清0;恢复中断设置。
(2) 用于扇区擦除:
1. 关闭中断;
2. 如果待编程地址在类EEPROM块区,将FAC位(FLASHCON.0)置1;如果待编程地址在程序存储区,将FAC位清0;
3. 按相应的扇区或块区设置XPAGE;
4. 按照顺序设置IB_CON1 - 5;
5. 添加4个NOP指令;
6. 开始擦除,CPU将进入IDLE模式;擦除完成后自动退出IDLE模式;
7. 如果需要继续擦除扇区或块区,跳转至第3步;
8. XPAGE寄存器和FAC位(FLASHCON.0)清0;恢复中断设置。
(3) 读取:
使用“MOVC A,@A+DPTR” or “MOVC A,@A+PC”指令。
注意,如果需要读取程序存储区,则将FAC位(FLASHCON.0)清0;如果需要读取类EEPROM块区,则需要将FAC位
(FLASHCON.0)置1。
7.4.4 可读识别码
SH79F081A每颗芯片在出厂后,都固化一个8位的可读识别码,它的值为0-255的随机值,它是无法擦除的。它可以由程序
或编程工具读出。
读识别码时,首先,设FAC位为1,然后给DPTR赋值“0A7FH”,将A清0,再使用“MOVC A,@A+DPTR”来读取。
注意:读完识别码后必须将FAC清0,否则会影响用户程式读程式ROM的指令执行。
25
SH79F081A
7.5 系统时钟和振荡器
7.5.1 特性
支持3种振荡器类型:晶体谐振器、陶瓷谐振器和内部RC振荡器
内建12.3MHz RC振荡器
内建系统时钟分频器
7.5.2 时钟定义
SH79F081A几个内部时钟定义如下:
OSCCLK:从3个可选振荡器类型中(从XTAL1输入的陶瓷谐振器,晶体谐振器和内部12.3MHz RC振荡器)选中的那个振
荡器的时钟。fOSC定义为OSCCLK的频率。tOSC定义为OSCCLK的周期。
WDTCLK:内部的32kHz看门狗RC振荡器时钟。fWDT定义为WDTCLK的频率。tWDT定义为WDTCLK的周期。
SYSCLK:系统时钟,系统频率分频器的输出时钟。这个时钟为CPU指令周期的时钟。fSYS定义为SYSCLK的频率。tSYS定
义为SYSCLK的周期。
SH79F081A 支持三种振荡器类型:晶体谐振器,陶瓷谐振器和内建 RC 振荡器,通过代码选项选择何种振荡器为系统提供
时钟。振荡器产生的基本时钟脉冲作为系统时钟提供给 CPU 和片上外围模块。
Table 7.12 系统时钟控制寄存器
B2H
第7位
第6位
第5位
第4位
第3位
第2位
第1位
第0位
CLKCON
-
CLKS1
CLKS0
-
-
-
-
-
读/写
-
读/写
读/写
-
-
-
-
-
复位值
(POR/WDT/LVR/PIN)
-
0
0
-
-
-
-
-
位编号
6-5
位符号
CLKS[1:0]
说明
系统时钟频率分频器
00:fSYS = fOSC
01:fSYS = fOSC/2
10:fSYS = fOSC/4
11:fSYS = fOSC/12
26
SH79F081A
7.5.3 振荡器类型
(1) 晶体谐振器:400kHz - 16MHz
C1
XTAL1
Crystal
XTAL2
C2
(2) 陶瓷谐振器:400kHz - 16MHz
C1
XTAL1
Ceramic
XTAL2
C2
(3) 内建RC振荡器:12.3MHz
XTAL1
XTAL2
7.5.4 谐振器负载电容选择
陶瓷谐振器
晶体谐振器
频率
C1
C2
频率
C1
C2
4MHz
15pF
15pF
4MHz
8-15pF
8-15pF
8MHz
-
-
8MHz
8-15pF
8-15pF
16MHz
-
-
16MHz
8-15pF
8-15pF
- 已经内建有负载电容。
注意:
(1) 表中负载电容为设计参考数据!
(2) 以上电容值已通过谐振器基本的起振和运行测试,但并非最优值。
(3) 请注意印制板上的杂散电容,用户应在超过应用电压和温度的条件下测试谐振器的性能。
在应用陶瓷谐振器和晶体谐振器之前,用户需向谐振器生产厂索求相关应用参数以获得最佳性能。
请登陆http://www.sinowealth.com以取得推荐的谐振器生产厂。
27
SH79F081A
7.6 I/O端口
7.6.1 特性
26个双向I/O端口
I/O端口可与其他功能共用
SH79F081A提供26位位可编程双向I/O端口。端口数据在寄存器Px中。端口控制寄存器(PxCRy)控制端口是作为输入或
者输出。当端口作为输入时,每个I/O端口带有由PxPCRy控制的内部上拉电阻(x = 0-3, y = 0-7)。
SH79F081A的有些I/O引脚能与选择功能共用。当所有功能都允许时,在CPU中存在优先权以避免功能冲突。(详见端口共
用章节)。
7.6.2 寄存器
Table 7.13 端口控制寄存器
E1H - E4H
第7位
第6位
第5位
第4位
第3位
第2位
第1位
第0位
P0CR (E1H)
P0CR.7
P0CR.6
P0CR.5
P0CR.4
P0CR.3
P0CR.2
-
-
P1CR (E2H)
P1CR.7
P1CR.6
P1CR.5
P1CR.4
P1CR.3
P1CR.2
-
-
P2CR (E3H)
P2CR.7
P2CR.6
P2CR.5
P2CR.4
P2CR.3
P2CR.2
P2CR.1
P2CR.0
P3CR (E4H)
-
-
P3CR.5
P3CR.4
P3CR.3
P3CR.2
P3CR.1
P3CR.0
读/写
读/写
读/写
读/写
读/写
读/写
读/写
读/写
读/写
复位值
(POR/WDT/LVR/PIN)
0
0
0
0
0
0
0
0
位编号
位符号
7-0
PxCRy
x = 0-3, y = 0-7
说明
端口输入/输出控制寄存器
0:输入模式
1:输出模式
Table 7.14 端口上拉电阻控制寄存器
E9H - ECH
第7位
第6位
第5位
第4位
第3位
第2位
第1位
第0位
P0PCR (E9H)
P0PCR.7
P0PCR.6
P0PCR.5
P0PCR.4
P0PCR.3
P0PCR.2
-
-
P1PCR (EAH)
P1PCR.7
P1PCR.6
P1PCR.5
P1PCR.4
P1PCR.3
P1PCR.2
-
-
P2PCR (EBH)
P2PCR.7
P2PCR.6
P2PCR.5
P2PCR.4
P2PCR.3
P2PCR.2
P2PCR.1
P2PCR.0
P3PCR (ECH)
-
-
P3PCR.5
P3PCR.4
P3PCR.3
P3PCR.2
P3PCR.1
P3PCR.0
读/写
读/写
读/写
读/写
读/写
读/写
读/写
读/写
读/写
复位值
(POR/WDT/LVR/PIN)
0
0
0
0
0
0
0
0
位编号
位符号
7-0
PxPCRy
x = 0-3, y = 0-7
说明
输入端口内部上拉电阻控制
0:内部上拉电阻关闭
1:内部上拉电阻开启
28
SH79F081A
Table 7.15 端口数据寄存器
80H, 90H, A0H, B0H
第7位
第6位
第5位
第4位
第3位
第2位
第1位
第0位
P0 (80H)
P0.7
P0.6
*P0.5
*P0.4
*P0.3
*P0.2
-
-
P1 (90H)
P1.7
P1.6
P1.5
P1.4
P1.3
P1.2
-
-
P2 (A0H)
P2.7
P2.6
P2.5
P2.4
P2.3
P2.2
P2.1
P2.0
P3 (B0H)
-
-
P3.5
P3.4
P3.3
P3.2
P3.1
P3.0
读/写
读/写
读/写
读/写
读/写
读/写
读/写
读/写
读/写
复位值
(POR/WDT/LVR/PIN)
0
0
0
0
0
0
0
0
位编号
位符号
7-0
Px.y
x = 0-3, y = 0-7
说明
端口数据寄存器
注意:带*端口可以配置为N-通道的开漏I/O,但是此时端口电压不得超过VDD + 0.3V。
Table 7.16 端口模式选择寄存器
EFH
第7位
第6位
第5位
第4位
第3位
第2位
第1位
第0位
P0OS
-
-
P05OS
P04OS
P03OS
P02OS
-
-
读/写
-
-
读/写
读/写
读/写
读/写
-
-
复位值
(POR/WDT/LVR/PIN)
-
-
0
0
0
0
-
-
位编号
位符号
5-2
P0xOS
x = 2-5
说明
端口0输出模式选择
0:引脚输出模式为N沟道开漏输出(默认)
1:引脚输出模式为CMOS挽推输出
SFEN
PxPCRy
Output Mode
VDD
Input Mode
VDD
PxCRy
0 = ON
1 = OFF
(Pull-up)
I/O Pad
Write
Data Bus
Data
Register
Read Port Data Register
Read
Read Data Register/Pad Selection
0: From Pad
1: From data register
0 = OFF
1 = ON
Second
Function
Read Port Pad
端口模块图
注意:
(1) 输入端口读操作直接读引脚电平。
(2) 输出端口读操作的输入源有两种,一种是从端口数据寄存器读取,另一种是直接读引脚电平。用读取指令来区分: 读-改写指令是读寄存器,而其它指令读引脚电平。
(3) 输入/输出端口写操作都是针对端口数据寄存器。
29
SH79F081A
7.6.3 端口共用
26个双向I/O端口也能共用作为第二或第三种特殊功能。共用优先级按照外部最高内部最低的规则:
在引脚配置图中引脚最外边标注功能享有最高优先级,最里边标注功能享有最低优先级。这意味着一个引脚已经使用较高
优先级功能(如果被允许的话),就不能用作较低优先级功能,即使较低优先级功能被允许。只有较高优先级功能由硬件或软
件关闭后,相应的引脚才能用作较低优先级功能。上拉电阻也由相同规则控制。
当允许端口复用为其它功能时,用户可以修改PxCR﹑PxPCR(x = 0-3),但在复用的其它功能被禁止前,这些操作不会
影响端口状态。
当允许端口复用为其它功能时,任何对端口的读写操作只会影响到数据寄存器的值,端口引脚值保持不变,直到复用的其
它功能关闭。
P0口:
- AN3-AN0(P0.5-P0.2):ADC模拟输入通道3-通道0
- T1(P0.6):Timer1外部输入引脚
- INT1(P0.7):外部中断1输入引脚
- PWM21(P0.7):PWM21输出引脚
Table 7.17 Port0共用列表
引脚编号
28
27
26
25
24
23
优先级
功能
1
AN0
ADCH寄存器的CH0位和ADCON寄存器的ADON位都置1, 并且SCH[2:0] = 000
允许位
2
P0.2
ADCH寄存器的CH0位清0
1
AN1
ADCH寄存器的CH1位和ADCON寄存器的ADON位都置1, 并且SCH[2:0] = 001
2
P0.3
ADCH寄存器的CH1位清0
1
AN2
ADCH寄存器的CH2位和ADCON寄存器的ADON位都置1, 并且SCH[2:0] = 010
2
P0.4
ADCH寄存器的CH2位清0
1
AN3
ADCH寄存器的CH3位和ADCON寄存器的ADON位都置1, 并且SCH[2:0] = 011
2
P0.5
ADCH寄存器的CH3位清0
1
T1
————
TCON寄存器的TR1位和TMOD寄存器中的C/T1 位都置1(自动上拉)
无上述情况
2
P0.6
1
PWM21
2
INT1
IEN0寄存器的EX1位置1, 并且Port0.7置为输入模式(上拉由软件设置)
3
P0.7
PWMEN寄存器的EPWM21位清0
PWMEN寄存器的EPWM21位置1
注意:当P0xOS = 0时,引脚27-30配置为开漏极端口。
30
SH79F081A
P1口:
- AN7-4(P1.5-P1.2):ADC模拟输入通道7-通道4
————
- RST(P1.7):系统复位引脚
- INT40-INT43(P1.5-P1.2):外部中断输入
- T0(P1.6):Timer0外部输入
Table 7.18 Port1共用列表
引脚编号
1
2
3
4
5
6
优先级
功能
允许位
1
INT43
IEN1寄存器的EX4位和IENC寄存器的EXS43位都置1, 并且Port1.2置为输入模式(上拉
由软件设置)
2
AN4
ADCH寄存器的CH4位和ADCON寄存器的ADON位都置1, 并且SCH[2:0] = 100
3
P1.2
ADCH寄存器的CH4位清0
1
INT42
IEN1寄存器的EX4位和IENC寄存器的EXS42位都置1, 并且Port1.3置为输入模式(上拉
由软件设置)
2
AN5
ADCH寄存器的CH5位和ADCON寄存器的ADON位都置1, 并且SCH[2:0] = 101
3
P1.3
ADCH寄存器的CH5位清0
1
INT41
2
AN6
ADCH寄存器的CH6位和ADCON寄存器的ADON位都置1, 并且SCH[2:0] = 110
3
P1.4
ADCH寄存器的CH6位清0
1
INT40
2
AN7
ADCH寄存器的CH7位和ADCON寄存器的ADON位都置1, 并且SCH[2:0] = 111
3
P1.5
ADCH寄存器的CH7位清0
1
T0
2
P1.6
无上述情况
————
RST
代码选项控制
P1.7
代码选项控制
-
IEN1寄存器的EX4位和IENC寄存器的EXS41位都置1, 并且Port1.4置为输入模式(上拉
由软件设置)
IEN1寄存器的EX4位和IENC寄存器的EXS40位都置1, 并且Port1.5置为输入模式(上拉
由软件设置)
————
TCON寄存器的TR0位和TMOD寄存器的C/T0 位都置1(自动上拉)
31
SH79F081A
P2口:
- INT46/45(P2.7/P2.6):外部中断输入引脚
- PWM11/01(P2.7/P2.6):PWM11/01输出引脚
- PWM1/2(P2.5/P2.3):8位PWM时钟输出引脚
- PWM0(P2.4):12位PWM输出引脚
- TXD/MISO(P2.1):EUART数据输出引脚或SPI的MISO引脚
- RXD/MOSI(P2.2):EUART数据输入引脚或SPI的MOSI引脚
- BZ(P2.0):蜂鸣器输出引脚
- SCK(P2.0):SPI时钟端口
Table 7.19 Port2共用列表
引脚编号
20
21
22
19
18
17
16
15
优先级
功能
1
PWM11
允许位
2
INT46
3
P2.7
PWMEN寄存器的EPWM11位清0
1
PWM01
PWMEN寄存器的EPWM01位置1
2
INT45
3
P2.6
PWMEN寄存器的EPWM11位置1
IEN1寄存器的EX4位和IENC寄存器的EXS46位都置1, 并且Port2.7置为输入模式(上拉
由软件设置)
IEN1寄存器的EX4位和IENC寄存器的EXS45位都置1, 并且Port2.6置为输入模式(上拉
由软件设置)
PWMEN寄存器的EPWM01位清0
1
PWM1
PWMEN寄存器的EPWM1位置1
2
P2.5
PWMEN寄存器的EPWM1位清0
1
PWM0
PWMEN寄存器的EPWM0位置1
2
P2.4
PWMEN寄存器的EPWM0位清0
1
PWM2
PWMEN寄存器的EPWM2位置1
2
P2.3
PWMEN寄存器的EPWM2位清0
1
RXD
SCON寄存器的REN位置1(自动上拉)
2
MOSI
在从属模式下将SPSTA寄存器的SPEN位置1
(当SPEN, CPHA, SSDIS位在从属模式下都置为1时, 自动上拉)
3
P2.2
SPSTA寄存器的SPEN位和SCON寄存器的REN位都清0
1
TXD
对SBUF寄存器写操作
2
MISO
将SPSTA寄存器的SPEN位置1
(在主模式下将SPSTA寄存器的SPEN位置1时, 自动上拉)
3
P2.1
无上述情况
1
BZ
2
SCK
SPSTA寄存器的SPEN位置1
(当SPEN, CPHA, SSDIS位在从属模式下都置1时, 自动上拉)
3
P2.0
SPSTA寄存器的SPEN位和BUZCON寄存器的BZEN位都清0
BUZCON寄存器的BZEN位置1
32
SH79F081A
P3 口:
- XTAL2(P3.3):外部振荡器引脚
- XTAL1(P3.4):外部振荡器引脚
- T2EX(P3.2):定时器捕获外部时钟
- T2(P3.1):定时器2外部输入
- INT0(P3.1):外部中断0输入引脚
———
- FLT/SS(P3.0):故障输入引脚或SPI从设备选择引脚
Table 7.20 Port3共用列表
引脚编号
8-7
11
12
13
14
优先级
功能
允许位
-
XTAL1/2 代码选项控制
-
P3.4-P3.3 代码选项控制
1
T2EX
方式0, 1(DCEN = 0), 2和3下T2CON寄存器的EXEN2位置1, 或者方式1下TR2位和
DCEN位都置1
2
P3.2
无上述情况
1
T2
2
INT0
IEN0寄存器的EX0位置1, 并且Port3.1置为输入模式(上拉由软件设置)
3
P3.1
无上述情况
1
FLT
PWMEN寄存器的EFLT位置1
———
———
———
T2CON寄存器的TR2位和C/T2 位都置1, 或者C/T2 位清0同时TR2位和T2OE位置1
当SPEN = 1时,
在SPI主模式下将SPCON寄存器的SSDIS位清0,
或者在SPI从模式下当CPHA = 1时将SPCON寄存器的SSDIS位清0,
或者在SPI从模式下将SPCON寄存器的CPHA位清0
(当SPEN = 1 & Master = 1 & SSDIS = 0时, 或当SPEN = 1 & Master = 0时, 自动上拉)
2
SS
3
P3.0
无上述情况
-
P3.5
始终作为I/O
33
SH79F081A
7.7 定时器
7.7.1 特性
SH79F081A有3个定时器(定时器0,1,2)
定时器0兼容标准的8051
定时器1兼容标准的8051
定时器2兼容标准的8052,且有递增递减计数和可编程输出功能
定时器0/1增加了比较输出功能
定时器0/1/2增加了时钟源分频功能
7.7.2 定时器0 & 1
每个定时器的两个数据寄存器(THx & TLx(x = 0,1))可作为一个16位寄存器来访问。它们由寄存器TCON和TMOD控制。
IEN0寄存器的ET0和ET1位置1能允许定时器0和定时器1中断。(详见中断章节)
定时器x的方式(x = 0,1)
通过计数器/定时器方式寄存器(TMOD)的方式选择位Mx1-Mx0,选择定时器工作方式。
方式0:13位计数器/定时器
在方式0中,定时器x为13位计数器/定时器。THx寄存器存放13位计数器/定时器的高8位,TLx存放低5位(TLx.4-TLx.0)。
TLx的高三位(TLx.7-TLx.5)是不确定的,在读取时应该被忽略。当13位定时器寄存器递增,溢出时,系统置起定时器溢出标
———
志TFx。如果定时器x中断被允许,将会产生一个中断。C/Tx位选择计数器/定时器的时钟源。
———
———
如果C/Tx = 1,定时器x输入引脚(Tx)的电平从高到低跳变,使定时器x数据寄存器加1。如果C/Tx = 0,选择系统时钟为
定时器x的时钟源。
————
————
当GATEx = 0或GATEx = 1且输入信号INTx有效时,TRx置1打开定时器。GATEx置1允许定时器由外部输入信号INTx控制,
————
便于测量INTx的正脉冲宽度。TRx位置1不强行复位定时器,这意味着如果TRx置1,定时器寄存器将从上次TRx清0时的值开始
计数。所以在允许定时器之前,应该设定定时器寄存器的初始值。
可配置寄存器TCON1中的TCLKPx(x = 0, 1)位选择系统时钟或系统时钟的1/12作为定时器x(x = 0, 1)的时钟源。
当作为定时器应用时,可配置寄存器TCON1中的TC0/1位使定时器0/1溢出时T0/T1脚自动翻转。如果TC0/1被置1,T0/T1
引脚自动设置为输出。
System Clock
1/12
Overflow
=0
TCLKPx
TLx
(5bits)
C/Tx
=1
Tx
0:Switch Off
1:Switch On
GATEx
+
INTx
THx
(8bits)
TFx
Overflow
Flag
Tx
C/Tx=0 and TCx=1
&
TRx
The Block Diagram of mode0 of Timerx ( x=0,1 )
34
Interrupt
Request
SH79F081A
方式1:16位计数器/定时器
除了使用16位定时器/计数器之外,方式1的运行与方式0一致。打开和配置计数器/定时器也如同方式0。
System Clock
1/12
Overflow
=0
TCLKPx
TLx
(8bits)
C/Tx
=1
THx
(8bits)
Tx
GATEx
Interrupt
Request
Overflow
Flag
0:Switch Off
1:Switch On
Tx
+
INTx
TFx
C/Tx=0 and TCx=1
&
TRx
The Block Diagram of mode1 of Timerx ( x=0,1 )
方式2:8位自动重载计数器/定时器
方式2中,定时器x是8位自动重载计数器/定时器。TLx存放计数值,THx存放重载值。当在TLx中的计数器溢出至0x00时,
置起定时器溢出标志TFx,寄存器THx的值被重载入寄存器TLx中。如果定时器中断使能,当TFx置1时将产生一个中断。而在THx
中的重载值不会改变。在允许定时器正确计数开始之前,TLx必须初始化为所需的值。
除了自动重载功能外,方式2中的计数器/定时器的使能和配置与方式1和0是一致的。
可配置寄存器TCON1中的TCLKPx(x = 0, 1)位选择系统时钟或系统时钟的1/12作为定时器x(x = 0, 1)的时钟源。
当作为定时器应用时,可配置寄存器TCON1中的TC0/1位使定时器0/1溢出时T0/T1脚自动翻转。如果TC0/1被置1,T0/T1
引脚自动设置为输出。
TH0
(8bits)
System Clock
1/12
Reload
TCLKPx
=0
TL0
(8bits)
C/Tx
=1
Tx
0:Switch Off
1:Switch On
GATEx
+
INTx
overflow
TFx
Overflow
Flag
Tx
C/Tx=0 and TCx=1
&
TRx
The Block Diagram of mode2 of Timerx (x=0,1)
35
Interrupt
Request
SH79F081A
方式3:两个8位计数器/定时器(只限于定时器0)
在方式3中,定时器0用作两个独立的8位计数器/定时器,分别由TL0和TH0控制。TL0使用定时器0的控制(在TCON中)和
———
状态(在TMOD中)位:TR0,C/T0 ,GATE0和TF0。TL0能用系统时钟或外部输入信号作为时钟源
TH0只能用作定时器功能,时钟源来自系统时钟。TH0由定时器1的控制位TR1控制使能,溢出时定时器1溢出标志TF1置1,
控制定时器1中断。
定时器0工作在方式3时,定时器1可以工作在方式0、1或2,但是不能置1 TF1标志和产生中断,可以用来产生串口的波特
率。TH1和TL1只能用作定时器功能,时钟源来自系统时钟,GATE1位无效。T1输入脚的上拉电阻也无效。定时器1由方式控制
使能与否,因为TR1被定时器0占用。定时器1在方式0、1或2时使能,在方式3时被关闭。
可配置寄存器TCON1中的TCLKP0位选择系统时钟或系统时钟的1/12作为定时器0的时钟源。
当作为定时器应用时,可配置寄存器TCON1中的TC0位使定时器0溢出时T0脚自动翻转。如果TC0被置1,T0引脚自动设置
为输出。
System Clock
1/12
=0
TCLKP0
Overflow
TL0
(8bits)
C/T0
=1
T0
Overflow
Flag
0:Switch Off
1:Switch On
GATE0
Interrupt
Request
TF0
+
INT0
T0
C/T0=0 and TC0=1
&
TR0
System Clock
TH0
(8bits)
1/12
Overflow
Overflow
Flag
0:Switch Off
1:Switch On
TCLKP0
TR1
Interrupt
Request
TF1
The Block Diagram of mode3 of Timer0
注意:当定时器 0/1 用于计数器模式时,所有输入信号需与系统时钟同步,因此T0/T1 输入频率必须低于系统时钟频率的
—---——
1/2,INTx必须低于系统时钟频率的 1/4。当定时器 1 作为波特率发生器时,读取或写入TH1/TL1 会影响波特率的准确性,因此
也会引起通信出错。
寄存器
Table 7.21 定时器/计数器x控制寄存器 (x = 0, 1)
88H
第7位
第6位
第5位
第4位
第3位
第2位
第1位
第0位
TCON
TF1
TR1
TF0
TR0
IE1
IT1
IE0
IT0
读/写
读/写
读/写
读/写
读/写
读/写
读/写
读/写
读/写
复位值
(POR/WDT/LVR/PIN)
0
0
0
0
0
0
0
0
位编号
位符号
7, 5
TFx
x = 0, 1
定时器x溢出标志位
0:定时器x无溢出,可由软件清0
1:定时器x溢出,由硬件置1;若由软件置1将会引起定时器中断
6, 4
TRx
x = 0, 1
定时器x启动,停止控制位
0:停止定时器x
1:启动定时器x
3, 1
2, 0
IEx
x = 0, 1
ITx
x = 0, 1
说明
外部中断x请求标志位
外部中断x触发方式选择位
36
SH79F081A
Table 7.22 定时器/计数器x模式寄存器 (x = 0, 1)
89H
第7位
TMOD
GATE1
读/写
复位值
(POR/WDT/LVR/PIN)
位编号
7, 3
第5位
第4位
第3位
M10
GATE0
读/写
C/T1
读/写
M11
读/写
读/写
0
0
0
0
5-4
1-0
———
位符号
GATEx
x = 0, 1
第2位
第1位
第0位
M00
读/写
C/T0
读/写
M01
读/写
读/写
0
0
0
0
———
说明
定时器x门控位
0:TRx置1,定时器x即被允许
————
1:只有INTx在高电平期间TRx置1,定时器x才被允许
C/Tx
x = 0, 1
定时器/计数器方式选择位
0:定时器模式,T0和T1引脚用作普通I/O
1:计数器模式
Mx[1:0]
x = 0, 1
定时器x定时器方式选择位
00:方式0,13位向上计数计数器/定时器,忽略TLx的第7-5位
01:方式1,16位向上计数计数器/定时器
10:方式2,8位自动重载向上计数计数器/定时器
11:方式3(只用于定时器0),两个8位向上计数定时器
———
6, 2
第6位
Table 7.23 定时器/计数器x数据寄存器 (x = 0, 1)
8AH-8DH
第7位
第6位
第5位
第4位
第3位
第2位
第1位
第0位
TL0 (8AH)
TL0.7
TL0.6
TL0.5
TL0.4
TL0.3
TL0.2
TL0.1
TL0.0
TH0 (8CH)
TH0.7
TH0.6
TH0.5
TH0.4
TH0.3
TH0.2
TH0.1
TH0.0
TL1 (8BH)
TL1.7
TL1.6
TL1.5
TL1.4
TL1.3
TL1.2
TL1.1
TL1.0
TH1 (8DH)
TH1.7
TH1.6
TH1.5
TH1.4
TH1.3
TH1.2
TH1.1
TH1.0
读/写
读/写
读/写
读/写
读/写
读/写
读/写
读/写
读/写
复位值
(POR/WDT/LVR/PIN)
0
0
0
0
0
0
0
0
第1位
第0位
位编号
位符号
7-0
TLx.y, THx.y
x = 0-1, y = 0-7
说明
定时器x低及高字节计数器
Table 7.24 定时器/计数器x控制寄存器1 (x = 0, 1)
第7位
CEH
第6位
第5位
第4位
第3位
第2位
TCON1
-
-
-
-
TCLKP1
TCLKP0
TC1
TC0
读/写
-
-
-
-
读/写
读/写
读/写
读/写
复位值
(POR/WDT/LVR/PIN)
-
-
-
-
0
0
0
0
位编号
位符号
说明
3-2
TCLKPx
x = 0, 1
定时器x时钟源预分频控制位
0:选择系统时钟作为定时器x的时钟源
1:选择系统时钟的1/12作为定时器x的时钟源
1-0
TCx
x = 0, 1
比较输出功能允许位
0:禁止定时器x比较输出功能
1:允许定时器x比较输出功能
37
SH79F081A
7.7.3 定时器2
两个数据寄存器(TH2和TL2)串联后可作为一个16位寄存器来访问,由寄存器T2CON和T2MOD控制。设置IEN0寄存器中
的ET2位能允许定時器2中断。(详见中断章节)
———
定时器2的工作方式与定时器0和定时器1相似。C/T2选择系统时钟(定时器)或外部引脚T2(计数器)作为定时器时钟输
入。通过所选的引脚设置TR2允许定时器2/计数器2数据寄存器计数。
定时器2方式
定时器2有4种工作方式:捕获/重载,带递增或递减计数器的自动重载方式,波特率发生器和可编程时钟输出。RCLK,TCLK
和CP/RL2的组合能选择这些方式。
Table 7.25 定时器2方式选择
———
CP/RL2 RCLK
方式
TCLK
C/T2
T2OE
DCEN
TR2
X
0
X
1
1
0
0
X
X
0
0
0
1
1
1
0
0
X
0
X
1
X
0
1
X
1
X
0
0
1
X
0
1
X
0
0
X
1
0
X
1
X
X
X
0
X
X
X
0
16位捕获
1
16位自动重载定时器
2
波特率发生器
3
只用于可编程时钟
3
带波特率发生器的可编程时钟输出
X
定时器2停止,T2EX通路仍旧允许
方式0:16位捕获
在捕获方式中,T2CON的EXEN2位有两个选项。
如果EXEN2 = 0,定时器2作为16位定时器或计数器,如果IET2被允许的话,定时器2能设置TF2溢出产生一个中断。
如果EXEN2 = 1,定时器2执行相同操作,但是在外部输入T2EX上的下降沿也能引起在TH2和TL2中的当前值分别被捕获到
RCAP2H和RCAP2L中,此外,在T2EX上的下降沿也能引起在T2CON中的EXF2被设置。如果IET2被允许,EXF2位也像TF2
一样也产生一个中断。
可配置寄存器T2MOD中的TCLKP2位选择系统时钟或系统时钟的1/12作为定时器2的时钟源。
System
Clock
1/12
Increment Mode
=0
TCLKP2
C/T2
TL2
=1
T2
TH2
0:Switch Off
1:Switch On
TR2
TF2
Overflow flag
CP / RL2
&
EXEN2
+
RCAP2L
RCAP2H
0:Switch Off
1:Switch On
T2EX
EXF2
Block Diagram of 16 bit Capcture mode (Mode 0) of Timer2
38
External falling
edge flag
Interrupt
Request
SH79F081A
方式1:16位自动重载定时器
在16位自动重载方式下,定時器2可以被选为递增计数或递减计数。这个功能通过T2MOD中的DCEN位(递减计数允许)
选择。系统复位后,DCEN位复位值为0,定时器2默认递增计数。当设置DCEN时,定时器2递增计数或递减计数取决于T2EX
引脚上的电平。
当DCEN = 0,通过在T2CON中的EXEN2位选择两个选项。
如果EXEN2 = 0,定时器2递增到0FFFFH,在溢出后置起TF2位,同时定时器自动将用户软件写好的寄存器RCAP2H和
RCAP2L的16位值装入TH2和TL2寄存器。
如果EXEN2 = 1,溢出或在外部输入T2EX上的下降沿都能触发一个16位重载,置起EXF2位。如果IET2被使能,TF2和EXF2
位都能产生一个中断。
可配置寄存器T2MOD中的TCLKP2位选择系统时钟或系统时钟的1/12作为定时器2的时钟源。
System Clock
1/12
Increment Mode
=0
TCLKP2
C/T2
TL2
TH2
TF2
=1
T2
Overflow
Flag
0:Switch Off
1:Switch On
TR2
+
RCAP2L
RCAP2H
EXEN2
+
0:Switch Off
1:Switch On
T2EX
Interrupt
Request
External Falling
Edge flag
EXF2
The Block Diagram of Auto Relode Mode (Mode 1)of Timer2 (DCEN=0)
设置DCEN位允许定时器2递增计数或递减计数。当DCEN = 1时,T2EX引脚控制计数的方向,而EXEN2控制无效。
T2EX置1可使定时器2递增计数。定时器向0FFFFH溢出,然后设置TF2位。溢出也能分别引起RCAP2H和RCAP2L上的16
位值重载入定时器寄存器。
T2EX清0可使定时器2递减计数。当TH2和TL2的值等于RCAP2H和RCAP2L的值时,定时器溢出。置起TF2位,同时0FFFFH
重载入定时器寄存器。
无论定时器2溢出,EXF2位都被用作结果的第17位。在此工作方式下,EXF2不作为中断标志。
可配置寄存器T2MOD中的TCLKP2位选择系统时钟或系统时钟的1/12作为定时器2的时钟源。
FFH
FFH
System Clock
1/12
TCLKP2
Interrupt
Request
=0
C/T2
TL2
TH2
TF2
=1
T2
TR2
Overflow
Flag
0:Switch Off
1:Switch On
Toggle
T2EX
1.T2EX=1, Timer2 is up counter
2.T2EX=0, Timer2 is down counter
RCAP2L
RCAP2H
EXF2
The Block Diagram of Auto-Reload Mode ( Mode 1) of Timer2 (DCEN=1)
39
SH79F081A
方式2:波特率发生器
通过设置T2CON寄存器中的TCLK和/或RCLK选择定时器2作为波特率发生器。接收器和发送器的波特率可以不同,如果定
时器2作为接收器或发送器则定时器1相应的作为另一种的波特率发生器。
设置RCLK和/或TCLK使定时器2进入波特率发生器方式,该方式与自动重载入方式相似。
定时器2的溢出会使RCAP2H和RCAP2L寄存器中的值重载入定时器2计数器,但不会产生中断。
如果EXEN2被置1,在T2EX脚上的下降沿会置起EXF2,但不会引起重载。因此当定时器2作为波特率发生器时,T2EX可作
为一个额外的外部中断。
可配置寄存器T2MOD中的TCLKP2位选择系统时钟或系统时钟的1/12作为定时器2的时钟源。
在EUART方式1和3中的波特率由定时器2的溢出率根据下列方程式决定。
1
BaudRate =
X
2X16
fSYS
65536 − [RCAP2H, RCAP2L]
1
BaudRate =
X
2X16X12
BaudRate =
1
X
16
———
; C/T2 = 0, TCLKP2 = 0
fSYS
———
; C/T2 = 0, TCKKP2 = 1
65536 − [RCAP2H, RCAP2L]
fT2
———
; C/T2 = 1
65536 − [RCAP2H, RCAP2L]
System
Clock
1/12
Timer1
overflow
/2
=0
=0
TCLKP2
=1
C/ T2
T2
=1
TL2
=1
RCLK
=0
TH2
/16
0:Switch Off
1:Switch On
TR2
SMOD
/2
=1
RCAP2L
TCLK
=0
RCAP2H
/16
EXEN2
T2EX
0:Switch Off
1:Switch On
Timer2 Interrupt
Request
EXF2
The Block Diagram of Baud-Rate Generator ( Mode 2 ) of Timer2
40
Receiver
CLK
Transiver
CLK
SH79F081A
方式3:可编程时钟输出
———
P3.1可以编程输出50%的占空比时钟周期。清C/T2位和置T2OE位,使定时器2作为时钟发生器。TR2位启动和中止定时器。
可配置寄存器T2MOD中的TCLKP2位选择系统时钟或系统时钟的1/12作为定时器2的时钟源。
在这种方式中,T2输出占空比为50%的时钟:
Clock Out Frequency =
1
X
2X2
Clock Out Frequency =
fSYS
65536 − [RCAP2H, RCAP2L]
1
X
2X2X12
; TCLKP2 = 0
fSYS
65536 − [RCAP2H, RCAP2L ]
; TCKLP2 = 1
定时器2溢出不产生中断,所以定时器2可以同时以相同频率用作波特率发生器和时钟输出。
System
Clock
1/12
/2
=0
TCLKP2
C/ T2
TL2
TH2
=1
TR2
0:Switch Off
1:Switch On
C/ T2
RCAP2L
RCAP2H
T2OE
0:Switch Off
1:Switch On
T2
/2
EXEN2
T2EX
0:Switch Off
1:Switch On
Timer2 Interrupt
Request
EXF2
The Block Diagram of Programmable Clock output (Mode 3) of Timer2
注意:
(1) TF2和EXF2都能引起定时器2的中断请求,两者有相同的向量地址。
(2) 当事件发生时或其他任何时间都能由软件设置TF2和EXF2为1,只有软件以及硬件复位才能使之清0。
(3) 当EA = 1且ET2 = 1时,设置TF2或EXF2为1能引起定时器2中断。
(4) 当定时器2作为波特率发生器时,读取或写入TH2/TL2,写入RCAPH2/RCAPL2会影响波特率的准确性,因此也会引起
通信出错。
41
SH79F081A
寄存器
Table 7.26 定时器2控制寄存器
第7位
C8H
第6位
第5位
第4位
第3位
第2位
第1位
第0位
———
————
CP/RL2
T2CON
TF2
EXF2
RCLK
TCLK
EXEN2
TR2
C/T2
读/写
读/写
读/写
读/写
读/写
读/写
读/写
读/写
读/写
复位值
(POR/WDT/LVR/PIN)
0
0
0
0
0
0
0
0
位编号
位符号
说明
7
TF2
定时器2溢出标志位
0:无溢出(必须由软件清0)
1:溢出(如果RCLK = 0和TCLK = 0,由硬件设1)
6
EXF2
T2EX引脚外部事件输入(下降沿)被检测到的标志位
0:无外部事件输入(必须由软件清0)
1:检测到外部输入(如果EXEN2 = 1,由硬件设1)
5
RCLK
EUART0接收时钟控制位
0:定时器1产生接收波特率
1:定时器2产生接收波特率
4
TCLK
EUART0发送时钟控制位
0:定时器1产生发送波特率
1:定时器2产生发送波特率
3
EXEN2
2
TR2
1
C/T2
0
CP/RL2
———
————
T2EX引脚上的外部事件输入(下降沿)用作重载/捕获触发器允许/禁止控制位
0:忽略T2EX引脚上的事件
1:当定时器2不做为EUART时钟(T2EX始终包括上拉电阻)时,检测到T2EX
引脚上一个下降沿,产生一个捕获或重载
定时器2开始/停止控制位
0:停止定时器2
1:开始定时器2
定时器2定时器/计数器方式选定位
0:定时器方式,T2引脚用作I/O端口
1:计数器方式,内部上拉电阻被打开
捕获/重载方式选定位
0:16位带重载功能的定时器/计数器
1:16位带捕获功能的定时器/计数器
42
SH79F081A
Table 7.27 定时器2模式控制寄存器
C9H
第7位
第6位
第5位
第4位
第3位
第2位
第1位
第0位
T2MOD
TCLKP2
-
-
-
-
-
T2OE
DCEN
读/写
读/写
-
-
-
-
-
读/写
读/写
复位值
(POR/WDT/LVR/PIN)
0
-
-
-
-
-
0
0
位编号
位符号
说明
7
TCLKP2
1
T2OE
定时器2输出允许位
0:设置P3.1/T2作为时钟输入或I/O端口
1:设置P3.1/T2作为时钟输出(波特率发生器方式)
0
DCEN
递减计数允许位
0:禁止定时器2作为递增/递减计数器,定时器2仅作为递增计数器
1:允许定时器2作为递增/递减计数器
定时器2时钟源预分频控制位
0:选择系统时钟作为定时器2的时钟源
1:选择系统时钟的1/12作为定时器2的时钟源
Table 7.28 定时器2重载/捕获和数据寄存器
第7位
CAH-CBH
第6位
第5位
第4位
第3位
第2位
第1位
第0位
RCAP2L
RCAP2L.7 RCAP2L.6 RCAP2L.5 RCAP2L.4 RCAP2L.3 RCAP2L.2 RCAP2L.1 RCAP2L.0
RCAP2H
RCAP2H.7 RCAP2H.6 RCAP2H.5 RCAP2H.4 RCAP2H.3 RCAP2H.2 RCAP2H.1 RCAP2H.0
读/写
读/写
读/写
读/写
读/写
读/写
读/写
读/写
读/写
复位值
(POR/WDT/LVR/PIN)
0
0
0
0
0
0
0
0
位编号
7-0
位符号
RCAP2L.x
RCAP2H.x
说明
定时器2重载/捕获数据,x = 0-7
Table 7.29 Timer2高位低位计数器寄存器
CCH-CDH
第7位
第6位
第5位
第4位
第3位
第2位
第1位
第0位
TL2
TL2.7
TL2.6
TL2.5
TL2.4
TL2.3
TL2.2
TL2.1
TL2.0
TH2
TH2.7
TH2.6
TH2.5
TH2.4
TH2.3
TH2.2
TH2.1
TH2.0
读/写
读/写
读/写
读/写
读/写
读/写
读/写
读/写
读/写
复位值
(POR/WDT/LVR/PIN)
0
0
0
0
0
0
0
0
位编号
7-0
位符号
TL2.x
TH2.x
说明
定时器2高位低位计数器,x = 0-7
43
SH79F081A
7.8 中断
7.8.1 特性
11个中断源
4层中断优先级
程序超范围中断
SH79F081A有11个中断源:1个OVL NMI中断,3个外部中断(INT0,INT1,INT4),INT4共6个中断源(INT40-43,INT45-46
共用一个向量地址),3个定时器中断(Timer0,1和2),1个EUART中断,ADC中断,SPI中断和PWM中断(3个PWM中断源
共用一个中断向量地址)。
7.8.2 程序超范围中断(OVL)
SH79F081A有一个不可屏蔽中断(NMI)源——程序超范围中断(OVL),其向量定位在007BH中,不可屏蔽中断用以防
止CPU超出有效程序范围。为应用这个特性,用户应该用常量0xA5填满未使用的Flash ROM,如果PC超过了用户的有效程序范
围,或者运算代码为不存在8051指令集中的0xA5,CPU因此获知PC已经超出了有效的程序范围,同时OVL中断发生。如果PC
超过8K Flash ROM范围,不可屏蔽中断OVL同样会发生。
不可屏蔽中断OVL享有最高优先级(除复位外),不会被其它中断源中断。同样不可屏蔽中断OVL能自身嵌套,但堆栈不
会因此增加。当OVL中断发生后,其它中断仍旧被允许,如果满足设定的条件,其它中断的标志将置1。
用户可以用OVL中断服务程序末端的RETI指令来修改压入栈顶的地址(因为进入OVL中断时,压入堆栈顶端的地址是无用
的),这样跳出中断服务程序后,程序可以跳转到用户指定的代码,诸如复位入口或保护程序入口。
OVL_NMI_SERVICE:
……
MOV
DPTR, #Start_or_Initial_address
POP
A
POP
A
PUSH
DPL
PUSH
DPH
RETI
特别提示:
由于OVL中断是不可屏蔽中断并且具有最高中断优先级,当产生OVL中断时,其它任何中断都被屏蔽掉,不能响应,所以
用户必须处理OVL中断以保护系统免受不必要的影响。
注意:
为了使能OVL中断,客户代码选项必须选择“OVL产生OVL中断”(OP_OVL置1,详见代码选项章节)。为了提高程序运
行的可靠性和便利性,推荐代码选择选择为“OVL产生OVL复位”,即OP_OVL清0。
44
SH79F081A
7.8.3 中断允许
任何一个中断源均可通过对寄存器IEN0和IEN1中相应的位置1或清0,实现单独使能或禁止。IEN0寄存器中还包含了一个全
局使能位EA,它可以使能所有的中断。一般在复位后,所有中断允许位设置为0,所有中断被禁止。
Table 7.30 初级中断允许寄存器
A8H
第7位
第6位
第5位
第4位
第3位
第2位
第1位
第0位
IEN0
EA
EADC
ET2
ES0
ET1
EX1
ET0
EX0
读/写
读/写
读/写
读/写
读/写
读/写
读/写
读/写
读/写
复位值
(POR/WDT/LVR/PIN)
0
0
0
0
0
0
0
0
位编号
位符号
说明
7
EA
所有中断允许位
0:禁止所有中断
1:允许所有中断
6
EADC
ADC中断允许位
0:禁止ADC中断
1:允许ADC中断
5
ET2
定时器2溢出中断允许位
0:禁止定时器2溢出中断
1:允许定时器2溢出中断
4
ES0
EUART中断允许位
0:禁止EUART中断
1:允许EUART中断
3
ET1
定时器1溢出中断允许位
0:禁止定时器1溢出中断
1:允许定时器1溢出中断
2
EX1
外部中断1允许位
0:禁止外部中断1
1:允许外部中断1
1
ET0
定时器0溢出中断允许位
0:禁止定时器0溢出中断
1:允许定时器0溢出中断
0
EX0
外部中断0允许位
0:禁止外部中断0
1:允许外部中断0
45
SH79F081A
Table 7.31 次级中断允许寄存器
A9H
第7位
第6位
第5位
第4位
第3位
第2位
第1位
第0位
IEN1
-
-
EPWM
-
EX4
-
-
ESPI
读/写
-
-
读/写
-
读/写
-
-
读/写
复位值
(POR/WDT/LVR/PIN)
-
-
0
-
0
-
-
0
位编号
位符号
说明
5
EPWM
3
EX4
外部中断4允许位
0:禁止外部中断4中断
1:允许外部中断4中断
0
ESPI
SPI中断允许位
0:禁止SPI中断
1:允许SPI中断
PWM中断允许位
0:禁止PWM中断
1:允许PWM中断
注意:
(1) 打开外部中断0/1/2/3/4时,相应的端口必须设置为输入状态。
(2) 打开PWM定时器中断,EPWM位和PWM控制寄存器中的PWMxIE (x = 0, 1, 2) 中断允许位必须同时置1。
Table 7.32 中断通道允许寄存器
BAH
第7位
第6位
第5位
第4位
第3位
第2位
第1位
第0位
IENC
-
EXS46
EXS45
-
EXS43
EXS42
EXS41
EXS40
读/写
-
读/写
读/写
-
读/写
读/写
读/写
读/写
复位值
(POR/WDT/LVR/PIN)
-
0
0
-
0
0
0
0
位编号
位符号
7-0
EXS4x
(x = 0-3, 5-6)
说明
外部中断4选择寄存器(x = 0-3, 5-6)
0:禁止外部中断4x
1:允许外部中断4x
46
SH79F081A
7.8.4 中断标志
每个中断源都有自己的中断标志,当产生中断时,硬件会置起相应的标志位,在中断摘要表中会列出中断标志位。
外部中断源产生外部中断INT0/1/2/3时,如果中断为边沿触发,CPU在响应中断后,标志IEx(x = 0-3)被硬件清0;如果中
断是电平触发,外部中断源直接控制中断标志,而不是由片上硬件控制。
外部中断INT4产生中断时,EXF1寄存器中的IF4x标志位(x = 0-7)置1,由于INT4x共用一个中断向量地址,所以标志位需
要用户软件清除。但是如果INT4为电平触发时,标志位不能被用户软件清0,只受INT4x中断源引脚所接信号电平直接控制。
注意尽管外部中断被禁止,但是中断标志位受外部中断源输入状态变化的影响而改变,除非该输入引脚配置为其它功能。
当TCON寄存器的TFx(x = 0,1)中断标志位被置1时,定时器0/1产生中断,CPU在响应中断后,标志被硬件自动清0。
当T2CON寄存器的TF2或EXF2标志位被置1时,定时器2产生中断,CPU在响应中断后,两个标志位都不会被硬件自动清0。
事实上,中断服务程序必须决定是由TF2或是EXF2产生中断,标志必须由软件清0。
当SCON寄存器的标志RI或TI被置1时,EUART产生中断,CPU在响应中断后,两个标志位都不会被硬件自动清0。事实上,
中断服务程序必须决定是接收中断或是发送中断,标志必须由软件清0。
当ADCON寄存器的ADCIF标志位被置1时,ADC产生中断。如果中断产生,ADDH/ADDL中的结果是有效的。如果ADC模
块的连续比较功能被打开,那么每次转换时,ADCIF标志位都不会被置位。只有当转换后的数据大于或者等于预设值时才会将
标志位置位。中断标志必须由软件清0。
当SPSTA寄存器的SPIF位或MODF位(当SSDIS清0)置1时,SPI产生中断。标志必须由软件清0。
当PWMC寄存器的PWMIF0-2标志位被置1时,PWM产生中断。标志必须由软件清0。
Table 7.33 外部中断标志寄存器
88H
第7位
第6位
第5位
第4位
第3位
第2位
第1位
第0位
TCON
TF1
TR1
TF0
TR0
IE1
IT1
IE0
IT0
读/写
读/写
读/写
读/写
读/写
读/写
读/写
读/写
读/写
复位值
(POR/WDT/LVR/PIN)
0
0
0
0
0
0
0
0
位编号
位符号
说明
7, 5
TFx (x = 0, 1)
定时器x溢出标志位
6, 4
TRx (x = 0, 1)
定时器x启动,停止控制位
3, 1
IEx
(x = 0, 1)
外部中断x请求标志位
0:无中断挂起
1:中断挂起
2, 0
ITx
(x = 0, 1)
外部中断x触发方式选择位
0:低电平触发
1:下降沿触发
47
SH79F081A
Table 7.34 外部中断2,3 & 4标志寄存器
E8H
第7位
第6位
EXF0
IT4.1
读/写
读/写
复位值
(POR/WDT/LVR/PIN)
0
位编号
7-6
第5位
第4位
第3位
第2位
IT4.0
-
-
-
读/写
-
-
-
0
-
-
-
位符号
IT4[1:0]
第1位
第0位
-
-
-
-
-
-
-
-
-
说明
外部中断4触发模式位
00:低电平触发
01:下降沿触发
10:上升沿触发
11:双沿触发
IT4[1:0]控制外部中断4各中断源采用同一触发方式
Table 7.35 外部中断4标志寄存器
D8H
第7位
第6位
第5位
第4位
第3位
第2位
第1位
第0位
EXF1
-
IF46
IF45
-
IF43
IF42
IF41
IF40
读/写
-
读/写
读/写
-
读/写
读/写
读/写
读/写
复位值
(POR/WDT/LVR/PIN)
-
0
0
-
0
0
0
0
位编号
位符号
7-0
IF4x
(x = 0-3, 5-6)
说明
外部中断4请求标志,IF4x须被软件清0
0:无中断请求
1:有中断请求
48
SH79F081A
7.8.5 中断向量
当一个中断产生时,程序计数器内容被压栈,相应的中断向量地址被载入程序计数器。中断向量的地址在中断摘要表中详
细列出。
7.8.6 中断优先级
每个中断源都可被单独设置为4个中断优先级之一,分别通过清0或置1 IPL0,IPH0,IPL1,IPH1中相应位来实现。但OVL
不可屏蔽中断无需IPH/IPL控制,在所有中断源中享有最高优先级(除复位外)。中断优先级服务程序描述如下:
响应一个中断服务程序时,可响应更高优先级的中断,但不能响应同优先级或低优先级的另一个中断。
响应最高级中断服务程序时,不响应其它任何中断。如果不同中断优先级的中断源同时申请中断时,响应较高优先级的中
断申请。
如果同优先级的中断源在指令周期开始时同时申请中断,那么内部查询序列确定中断请求响应顺序。
中断优先级
优先位
中断优先级
IPHx
IPLx
0
0
等级0(最低优先级)
0
1
等级1
1
0
等级2
1
1
等级3(最高优先级)
Table 7.36 中断优先级控制寄存器
B8H, B4H
第7位
第6位
第5位
第4位
第3位
第2位
第1位
第0位
IPL0
-
PADCL
PT2L
PSL
PT1L
PX1L
PT0L
PX0L
IPH0
-
PADCH
PT2H
PSH
PT1H
PX1H
PT0H
PX0H
读/写
-
读/写
读/写
读/写
读/写
读/写
读/写
读/写
复位值
(POR/WDT/LVR/PIN)
-
0
0
0
0
0
0
0
B9H, B5H
第7位
第6位
第5位
第4位
第3位
第2位
第1位
第0位
IPL1
-
-
PPWML
-
PX4L
-
-
PSPIL
IPH1
-
-
PPWMH
-
PX4H
-
-
PSPIH
读/写
-
-
读/写
-
读/写
-
-
读/写
复位值
(POR/WDT/LVR/PIN)
-
-
0
-
0
-
-
0
位编号
位符号
-
PxxxL/H
说明
相应中断源xxx优先级选择
49
SH79F081A
7.8.7 中断处理
中断标志在每个机器周期都会被采样获取。所有中断都在时钟的上升沿被采样。如果一个标志被置位,那么CPU会发现而
且中断系统会产生一个LCALL调用其中断服务程序,但由硬件产生的LCALL会被下列任何条件阻止:
同级或更高级的优先级中断在运行中。
当前的周期不是执行中指令的最后一个周期。换言之,正在执行的指令完成前,任何中断请求都得不到响应。
正在执行的是一条RETI或者访问专用寄存器IEN0\1或是IPL\H的指令。换言之,在RETI或者读写IEN0\1或是IPL\H之后,不
会马上响应中断请求,而至少在执行一条其它指令之后才会响应,这段时间保证CPU能观察到中断状态的变化。
注意:因为更改优先级通常需要2条指令,在此期间,建议关闭相应的中断以避免在修改优先级过程中产生中断。如果当模
块状态改变而标志不再有效时,将不会响应此中断。每一个轮询周期只查询有效的中断请求。
轮询周期/LCALL次序如下图所示:
C1
C2
Interrupt
Polled
C3
C3~Cn
Interrupt
Signal
Generated
Interrupt
Pending
Cn~Cn+7
Long Call to
Interrupt Vector Service
Cn+8
Interrupt
service
Interrupt
Latched
中断响应时间
由硬件产生的LCALL把程序计数器(PC)中的内容压入堆栈,(但不保存PSW)然后将相应中断源的向量地址存入程序计
数器(PC)。
中断服务程序从指定地址开始,到RETI指令结束。RETI指令通知处理器中断结束,然后把堆栈顶部两字节弹出,重载入程
序计数器(PC)中,返回到进入中断服务程序之前程序点继续执行。特别注意的是RETI指令非常重要,它会通知处理器该优先
级中断服务结束。RET指令也可以返回到原来地址继续执行,但是中断优先级控制系统仍然认为一个同一优先级的中断被响应,
这种情况下,当同一优先级或低优先级中断将不会被响应。
7.8.8 中断响应时间
如果检测出一个中断,这个中断的请求标志位就会在被检测后的每个机器周期被置起。内部电路会保持这个值直到下一个
机器周期,CPU会在第三个机器周期产生中断。如果响应有效,条件允许,在下一个指令执行的时候硬件LCALL指令将调用请
求中断的服务程序,否则中断被挂起。LCALL指令调用程序需要7个机器周期。因而,从外部中断请求到开始执行中断程序中的
第一条指令至少需要3+7个完整的机器周期。
当请求因前述的的三个情况受阻时,中断响应时间会加长。如果同级或更高优先级的中断正在执行,额外的等待时间取决
于正执行的中断服务程序的长度。
如果正在执行的指令还没有进行到最后一个周期,假如正在执行RETI指令,则完成正在执行的RETI指令,需要8个周期,
加上为完成下一条指令所需的最长时间20个机器周期(如果该指令是16位操作数的DIV,MUL指令),若系统中只有一个中断
源,再加上LCALL调用指令7个机器周期,则最长的响应时间是2+8+20+7个机器周期。
所以,中断响应时间一般大于10个机器周期小于37个机器周期。
50
SH79F081A
7.8.9 外部中断输入
SH79F081A有3个外部中断输入。外部中断0-1各自有一个中断向量地址,外部中断4有6个中断源共用一个中断向量地址。
这些外部中断可以通过设置TCON寄存器的IT1,IT0位,EXF0寄存器的IT4x位来选择是电平触发或是边沿触发。当ITx = 0(x =
0, 1)时,INTx(x = 0, 1)脚为低电平,外部中断x触发。当ITx(x = 0, 1)= 1,外部中断x为沿触发。在这个模式中,一个周
期内INTx脚上连续采样为高电平而下个周期为低电平,TCON寄存器的中断请求标志被置起,发出一个中断请求。由于外部中
断输入脚每个机器周期被采样一次,输入高或低电平应当保持至少1个机器周期以确保能够被正确采样到。如果外部中断为边沿
触发,外部中断源应当将中断输入脚至少保持1个机器周期高电平,然后再至少保持1个机器周期低电平,这样才能确保边沿能
够被检测到,使IEx置位。当调用中断服务程序后,CPU自动将IEx(x = 0-1)清0,而IF4x(x = 0-3,5-6)须软件清0。
如果外部中断为下降沿触发,外部中断源应当将中断脚至少保持1个机器周期高电平,然后至少保持1个机器周期低电平。
这样就确保了边沿能够被检测到以使IEx置1。当调用中断服务程序后,CPU自动将IEx清0。
如果外部中断为低电平触发,外部中断源必须一直保持请求有效,直到产生所请求的中断为止,此过程需要2个系统时钟周
期。如果中断服务完成后而外部中断仍旧维持,则会产生下一次中断。当中断为电平触发时不必清除中断标志IEx(x = 0,1),
因为中断只与输入口电平有关。
外部中断4除了具有更多的中断触发方式外,与外部中断0,1操作类似。
当SH79F081A进入空闲或是掉电模式,中断会唤醒处理器继续工作,详见电源管理章节。
>1 System Clock
High-Level Threshold
Low-Level Threshold
> 1 System Clock
Low-Level Threshold
> 2 System Clock
外部中断检测
7.8.10 中断汇总
中断源
向量地址
允许位
标志位
轮询优先级
中断号(C51)
Reset
0000h
-
-
0(最高级)
-
INT0
0003h
EX0
IE0
2
0
Timer0
000Bh
ET0
TF0
3
1
INT1
0013h
EX1
IE1
4
2
Timer1
001Bh
ET1
TF1
5
3
EUART
0023h
ES0
RI+TI
6
4
Timer2
002Bh
ET2
TF2+EXF2
7
5
ADC
0033h
EADC
ADCIF
8
6
SPI
003Bh
ESPI
SPIF
9
7
INT4
0053h
EX4+IENC
IF40-43, IF45-46
12
10
PWM
0063h
EPWM+PWM0/1/2IE
PWM0/1/2IF
13(最低级)
12
OVL NMI
007Bh
-
-
1
15
51
SH79F081A
8. 增强功能
8.1 脉冲宽度调制(PWM)
8.1.1 特性
6 路带死区控制的互补输出
提供每个 PWM 周期溢出中断和占空比溢出中断
输出极性可选择
提供出错侦测功能可紧急关闭 PWM 输出
提供保护寄存器可使重要寄存器免受干扰出错
SH79F081A集成了一个12位PWM模块和两个8位PWM模块。通过控制各自相应的寄存器,PWM模块可以产生周期和占空
比分别可调整的脉宽调制波形。此外,PWM模块还提供了三路与PWM0/1/2有固定相位关系的PWM输出。
如果EFLT置位,PWM输出能由FLT引脚的输入信号变化自动关闭。
PWM定时器也为PWM0/1/2提供3个中断源,在每个PWM周期都会产生中断。它们有不同的控制位和标志位,共用一个中
断向量地址。这样用户可以实现每个PWM周期中更改下一次循环的周期或占空比。
Table 8.1 PWM定时器允许寄存器
CFH
第7位
第6位
第5位
第4位
第3位
第2位
第1位
第0位
PWMEN
-
EFLT
EPWM21
EPWM11
EPWM01
EPWM2
EPWM1
EPWM0
读/写
-
读/写
读/写
读/写
读/写
读/写
读/写
读/写
复位值
(POR/WDT/LVR/PIN)
-
0
0
0
0
0
0
0
位编号
位符号
说明
FLT引脚配置位
———
0:普通I/O端口或SS引脚
1:PWM故障检测输入引脚
6
EFLT
5
EPWM21
PWM21输出控制位
0:PWM21输出禁止,用作I/O功能
1:PWM21输出允许
4
EPWM11
PWM11输出使能位
0:PWM11输出禁止,用作I/O功能
1:PWM11输出允许
3
EPWM01
PWM01输出使能位
0:PWM01输出禁止,用作I/O功能
1:PWM01输出允许
2
EPWM2
8位PWM2输出使能位
0:PWM2输出禁止,用作I/O功能
1:PWM2输出允许
1
EPWM1
8位PWM1输出使能位
0:PWM1输出禁止,用作I/O功能
1:PWM1输出允许
0
EPWM0
12位PWM0输出使能位
0:PWM0输出禁止,用作I/O功能
1:PWM0输出允许
当PWMEN清0后,PWM输出立即关闭。
FLT端口主要用于检测异常信号,快速关闭PWM输出。FLT探测到故障后,由硬件执行使PWM输出关闭,所以当故障发生
后,它可以快速响应,使得PWM输出无效以保护连接PWM的大功率器件。FLT引脚没有内建上拉电阻。
如果EFLT位清0,则表示FLT端口对PWM定时器输出控制无效。
52
SH79F081A
PWM保护寄存器
PWM保护寄存器用来控制对PWM允许寄存器、PWM控制寄存器、PWM周期寄存器、PWM占空比寄存器和PWM死区时间
控制寄存器的更改。只有当保护寄存器中的数据为55h时,才允许修改这些寄存器内容,否则不能修改。
这个寄存器能增强SH79F081A的抗干扰能力。
Table 8.2 PWM保护寄存器
第7位
E7H
第6位
第5位
第4位
第3位
第2位
第1位
第0位
PWMLO.7 PWMLO.6 PWMLO.5 PWMLO.4 PWMLO.3 PWMLO.2 PWMLO.1 PWMLO.0
PWMLO
读/写
读/写
读/写
读/写
读/写
读/写
读/写
读/写
读/写
复位值
(POR/WDT/LVR/PIN)
0
0
0
0
0
0
0
0
位编号
位符号
7-0
PWMLO[7:0]
说明
PWM锁定位
只有当PWMLO = 0x55,才能允许修改其他PWM寄存器
8.1.2 12位PWM定时器
SH79F081A包含一个12位PWM模块。PWM模块可以产生周期和占空比分别可调整的脉宽调制波形。PWMC寄存器用于控
制PWM模块的时钟,PWMPH/L寄存器用于控制PWM输出波形的周期,PWMDH/L寄存器用于控制PWM模块输出波形的占空比。
在PWM输出允许期间可以修改这三个寄存器,但在下一个PWM周期修改才会起作用。
Table 8.3 12位PWM控制寄存器
D2H
第7位
第6位
第5位
第4位
第3位
第2位
第1位
第0位
PWM0C
PWM0IE
PWM0IF
-
FLTS
FLTC
PWM0S
TnCK01
TnCK00
读/写
读/写
读/写
-
读/写
读/写
读/写
读/写
读/写
复位值
(POR/WDT/LVR/PIN)
0
0
-
0
0
0
0
0
位编号
位符号
7
PWM0IE
PWM0中断允许位(当IEN1寄存器中的EPWM位置1)
0:禁止PWM0中断
1:允许PWM0中断
6
PWM0IF
PWM0中断标志位
0:软件清0
1:硬件置1,PWM0周期计数器溢出
4
FLTS
FLT状态位
0:PWM正常状态,软件清0
1:PWM输出关闭,硬件置1
3
FLTC
FLT引脚配置位
0:FLT为低电平时,PWM输出关闭
1:FLT为高电平时,PWM输出关闭
2
PWM0S
1-0
TnCK0[1:0]
说明
12位PWM占空比的输出模式选择位
0:高有效
1:低有效
12位PWM时钟源选择位
00:振荡器时钟/2
01:振荡器时钟/4
10:振荡器时钟/8
11:振荡器时钟/16
53
SH79F081A
注意:
(1) PWM0C寄存器中的FLTS和FLTC位控制所有PWM定时器,而寄存器中的PWM0S,TnCK0[1:0]只能影响12位PWM0定
时器。
(2) PWM输出关闭时,PWM0/1/2和PWM01/11/21输出固定低电平 (PWMxS = 0) 或高电平 (PWMxS = 1)。
(3) 一旦检测到FLT引脚输入有效电平,PWM输出会立即关闭,但PWM内部计数器仍在继续运行。
(4) 在FLT输入信号有效期间,FLTS位无法清除。只有当FLT输入信号消失后,才能软件清除FLTS状态位,此时PWM恢复正
常输出。
Table 8.4 PWM周期控制寄存器低位 (PWM0PL)
D3H
第7位
第6位
第5位
第4位
第3位
第2位
第1位
第0位
PWM0PL
PP0.7
PP0.6
PP0.5
PP0.4
PP0.3
PP0.2
PP0.1
PP0.0
读/写
读/写
读/写
读/写
读/写
读/写
读/写
读/写
读/写
复位值
(POR/WDT/LVR/PIN)
0
0
0
0
0
0
0
0
位编号
位符号
7-0
PP0[7:0]
说明
12位PWM周期低8位寄存器
Table 8.5 PWM周期控制寄存器高位 (PWM0PH)
D4H
第7位
第6位
第5位
第4位
第3位
第2位
第1位
第0位
PWM0PH
-
-
-
-
PP0.11
PP0.10
PP0.9
PP0.8
读/写
-
-
-
-
读/写
读/写
读/写
读/写
复位值
(POR/WDT/LVR/PIN)
-
-
-
-
0
0
0
0
位编号
位符号
3-0
PP0[11:8]
说明
12位PWM周期高4位寄存器
PWM输出周期 = [PP0.11,PP0.0] X PWM时钟
当[PP0.11,PP0.0] = 000H,如果PWM0S = 0,不管PWM占空比为多少,PWM0输出低电平。
当[PP0.11,PP0.0] = 000H,如果PWM0S = 1,不管PWM占空比为多少,PWM0输出高电平。
Table 8.6 PWM占空比控制寄存器低位 (PWM0DL)
D5H
第7位
第6位
第5位
第4位
第3位
第2位
第1位
第0位
PWM0DL
PD0.7
PD0.6
PD0.5
PD0.4
PD0.3
PD0.2
PD0.1
PD0.0
读/写
读/写
读/写
读/写
读/写
读/写
读/写
读/写
读/写
复位值
(POR/WDT/LVR/PIN)
0
0
0
0
0
0
0
0
位编号
位符号
7-0
PD0[7:0]
说明
12位PWM占空比低8位寄存器
54
SH79F081A
Table 8.7 PWM占空比控制寄存器高位 (PWM0DH)
D6H
第7位
第6位
第5位
第4位
第3位
第2位
第1位
第0位
PWM0DH
-
-
-
-
PD0.11
PD0.10
PD0.9
PD0.8
读/写
-
-
-
-
读/写
读/写
读/写
读/写
复位值
(POR/WDT/LVR/PIN)
-
-
-
-
0
0
0
0
位编号
位符号
3-0
PD0[11:8]
说明
12位PWM占空比高4位寄存器
PWM输出占空比 = [PD0.11,PD0.0] X PWM时钟
当[PP0.11,PP0.0] ≤ [PD0.11,PD0.0],如果PWM0S = 0,PWM0输出高电平。
当[PP0.11,PP0.0] ≤ [PD0.11,PD0.0],如果PWM0S = 1,PWM0输出低电平。
编程注意事项:
(1) 设置PWMLO寄存器内容为0x55;选择PWM模块时钟源。
(2) 通过写适当的值到PWM周期控制寄存器(PWMP)或PWM占空比寄存器(PWMD)设置PWM周期/占空比,先设置低
位,再设置高位。注意,即使高位数值不变,也要重写一次,否则,低位的修改无效。
(3) 通过设置PWM控制寄存器(PWMC)的PWMxS位选择PWM输出模式(高电平有效或低电平有效)。
(4) 通过设置PWM控制寄存器(PWMC)中的EPWMx或EPWMx1位为“1”来允许PWM上桥或下桥输出。
(5) 如果PWM周期或者占空比需要改变,操作流程如同步骤2或者步骤3说明。修改后的重载计数器的值在下一个周期开始
有效。
(6) 为避免干扰,设置PWMLO寄存器中的数据不等于0x55。
01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 01 02 03 04 05 06 07 08
PWMn clock tPWM
Write [PPn.11, PPn.0] = 0DH
Write [PDn.11, PDn.0] = 07H
PWMn output
(PWMnS = 0)
n = 0 or 1
Duty cycle
= 06H x tPWM
Duty cycle
= 06H x tPWM
Period cycle = 0FH x tPWM
Period cycle = 0DH x tPWM
PWM输出周期或占空比更改示例
55
Duty cycle
= 07H x tPWM
SH79F081A
8.1.3 8位PWM定时器
SH79F081A包含两个8位PWM模块。PWM模块可以产生周期和占空比分别可调整的脉宽调制波形。PWM1/2C寄存器用于
控制PWM1/2模块的时钟,PWMP1/2寄存器用于控制PWM1/2模块输出波形的周期,PWMD1/2寄存器用于控制PWM1/2模块输
出波形的占空比。
Table 8.8 8位PWM1控制寄存器 (PWM1C)
D9H
第7位
第6位
第5位
第4位
第3位
第2位
第1位
第0位
PWM1C
PWM1IE
PWM1IF
-
-
-
PWM1S
TnCK11
TnCK10
读/写
读/写
读/写
-
-
-
读/写
读/写
读/写
复位值
(POR/WDT/LVR/PIN)
0
0
-
-
-
0
0
0
位编号
位符号
说明
7
PWM1IE
PWM1中断允许位(当IEN1寄存器中的EPWM位置1)
0:禁止PWM1中断
1:允许PWM1中断
6
PWM1IF
PWM1中断标志位
0:无溢出中断
1:PWM1周期计数器溢出
2
PWM1S
8位PWM1占空比的输出模式选择位
0:高有效
1:低有效
1-0
TnCK1[1:0]
8位PWM1时钟选择位
00:振荡器时钟/2
01:振荡器时钟/4
10:振荡器时钟/8
11:振荡器时钟/16
56
SH79F081A
Table 8.9 8位PWM2控制寄存器 (PWM2C)
DDH
第7位
第6位
第5位
第4位
第3位
第2位
第1位
第0位
PWM2C
PWM2IE
PWM2IF
-
-
-
PWM2S
TnCK21
TnCK20
读/写
读/写
读/写
-
-
-
读/写
读/写
读/写
复位值
(POR/WDT/LVR/PIN)
0
0
-
-
-
0
0
0
位编号
位符号
7
PWM2IE
PWM2中断允许位(当IEN1寄存器中的EPWM位置1)
0:禁止PWM2中断
1:允许PWM2中断
6
PWM2IF
PWM2中断标志位
0:无溢出
1:PWM2周期计数器溢出.
2
PWM2S
8位PWM2输出模式选择位
0:高有效
1:低有效
1-0
TnCK2[1:0]
说明
8位PWM2时钟选择位
00:振荡器时钟/2
01:振荡器时钟/4
10:振荡器时钟/8
11:振荡器时钟/16
Table 8.10 8位PWM1周期寄存器 (PWM1P)
DAH
第7位
第6位
第5位
第4位
第3位
第2位
第1位
第0位
PWM1P
PP1.7
PP1.6
PP1.5
PP1.4
PP1.3
PP1.2
PP1.1
PP1.0
读/写
读/写
读/写
读/写
读/写
读/写
读/写
读/写
读/写
复位值
(POR/WDT/LVR/PIN)
0
0
0
0
0
0
0
0
位编号
位符号
7-0
PP1[7:0]
说明
8位PWM1周期寄存器
Table 8.11 8位PWM2周期寄存器 (PWM2P)
DEH
第7位
第6位
第5位
第4位
第3位
第2位
第1位
第0位
PWM2P
PP2.7
PP2.6
PP2.5
PP2.4
PP2.3
PP2.2
PP2.1
PP2.0
读/写
读/写
读/写
读/写
读/写
读/写
读/写
读/写
读/写
复位值
(POR/WDT/LVR/PIN)
0
0
0
0
0
0
0
0
位编号
位符号
7-0
PP2[7:0]
说明
8位PWM2周期寄存器
PWM输出周期 = [PPx.7,PPx.0] X PWM时钟,x = 1,2
当[PPx.7,PPx.0] = 000H,如果PWMxS = 0,不管PWM占空比为多少,PWM1/2输出低电平。
当[PPx.7,PPx.0] = 000H,如果PWMxS = 1,不管PWM占空比为多少,PWM1/2输出高电平。
57
SH79F081A
Table 8.12 8位PWM1占空比寄存器 (PWM1D)
DBH
第7位
第6位
第5位
第4位
第3位
第2位
第1位
第0位
PWM1D
PD1.7
PD1.6
PD1.5
PD1.4
PD1.3
PD1.2
PD1.1
PD1.0
读/写
读/写
读/写
读/写
读/写
读/写
读/写
读/写
读/写
复位值
(POR/WDT/LVR/PIN)
0
0
0
0
0
0
0
0
位编号
位符号
7-0
PD1[7:0]
说明
8位PWM1占空比寄存器
Table 8.13 8位PWM2占空比寄存器 (PWM2D)
DFH
第7位
第6位
第5位
第4位
第3位
第2位
第1位
第0位
PWM2D
PD2.7
PD2.6
PD2.5
PD2.4
PD2.3
PD2.2
PD2.1
PD2.0
读/写
读/写
读/写
读/写
读/写
读/写
读/写
读/写
读/写
复位值
(POR/WDT/LVR/PIN)
0
0
0
0
0
0
0
0
位编号
位符号
7-0
PD2[7:0]
说明
8位PWM2占空比寄存器
PWM输出占空比 = [PDx.7,PDx.0] X PWM时钟,x = 1,2
当[PPx.7,PPx.0] ≤ [PDx.7,PDx.0],如果PWMxS = 0,PWM1/2输出高电平。
当[PPx.7,PPx.0] ≤ [PDx.7,PDx.0],如果PWMxS = 1,PWM1/2输出低电平。
编程注意事项:
(1) 设置PWMLO寄存器内容为0x55,选择PWM模块时钟。
(2) 通过写适当的值到PWM周期控制寄存器(PWMP)和PWM占空比寄存器(PWMD)设置PWM周期/占空比。
(3) 通过设置PWM控制寄存器(PWMC)的PWMxS位选择PWM输出模式(高电平有效或低电平有效)。
(4) 通过设置PWM控制寄存器(PWMC)中的EPWMx或EPWMx1位为“1”来允许PWM上桥或下桥输出。
(5) 如果PWM周期或者占空比需要改变,操作流程如同步骤2或者步骤3说明。修改后的重载计数器的值在下一个周期开始
有效。
(6) 为避免干扰,设置PWMLO寄存器中的数据不等于0x55。
01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 01 02 03 04 05 06 07 08
PWMn clock tPWM
Write [PP.7, PP.0] = 0DH
Write [PD.7, PD.0] = 07H
PWMn output
(PWMnS = 0)
Duty cycle
= 06H x tPWM
Duty cycle
= 06H x tPWM
Period cycle = 0FH x tPWM
Period cycle = 0DH x tPWM
PWM输出周期或占空比更改示例
58
Duty cycle
= 07H x tPWM
SH79F081A
8.1.4 PWM01/11/21
如下图所示,一般的,当没有插入死区时间时,PWM01/11/21输出波形与PWM0/1/2输出波形互补。当PWM控制寄存器中
EPWM01/11/21位置1时,PWM01/11/21的输出波形硬件自动产生。
PWMn output
(PWMnS = 0)
n = 0,1 or 2
PWMn1 output
(PWMnS = 0)
n =0,1 or 2
PWMn和PWMn1引脚输出波形
注意:
(1) 尽管PWM0/1/2被禁止,但是如果PWM01/11/21被允许,则它们仍然会有输出信号。
(2) 如果EFLT置位,当FLT端口有效时,PWM01/11/21和PWM0/1/2都输出低(PWMnS = 0)或者都输出高(PWMnS = 1)。
8.1.5 死区时间
SH79F081A PWM提供死区时间控制功能。
当PWMnS = 0(n = 0, 1, 2)时,死区时间产生如下图所示。
PWM int
PWM int
period
PWMnS=0
duty cycle
PWMn
PWMn1
dead time
dead time
dead time
Reload
PWM Enable
Reload
当PWMnS = 1(n = 0, 1, 2)时,死区时间产生如下图所示。
period
PWM int
PWM int
PWMnS=1
duty cycle
PWMn
PWMn1
dead time
PWM Enable
dead time
dead time
Reload
Reload
通过写PWM01/11/21死区时间控制寄存器,在PWM0/1/2和PWM01/11/21之间产生死区时间。
PWM01/11/21与PWM0/1/2周期相同。
注意:
(1) 死区时间 0/1/2 必须在 PWM 输出允许前置位,否则,死区时间不会改变。所以为了修改死区时间,先禁止 PWM 输出
(PWMLO = #55h),然后改变死区时间,允许PWM输出。最后,为保证PWM相关寄存器不受干扰影响而改变,修改PWMLO
寄存器内容不等于55h。
(2) 为了产生死区时间,请确保(PWMx周期 - PWMx占空比)> 2*PWMx1的死区时间(x = 0,1,2)。否则,PWM01/11/21当
PWMxS = 1时输出高电平,当PWMxS = 0时输出低电平。
(3) PWMDT寄存器用于控制死区时间,它的时基为振荡器时钟,而周期和占空比的时基由TnCKx1-0(x = 0,1,2)控制,最小
为2个振荡器时钟。
59
SH79F081A
Table 8.14 PWM0死区时间控制寄存器
D1H
第7位
第6位
第5位
第4位
第3位
第2位
第1位
第0位
PWM0DT
DT0.7
DT0.6
DT0.5
DT0.4
DT0.3
DT0.2
DT0.1
DT0.0
读/写
读/写
读/写
读/写
读/写
读/写
读/写
读/写
读/写
复位值
(POR/WDT/LVR/PIN)
0
0
0
0
0
0
0
0
位编号
位符号
7-0
DT0[7:0]
说明
12位PWM0死区时间控制
死区时间为 (DT0.7 - DT0.0) X tOSC
Table 8.15 PWM1死区时间控制寄存器
D7H
第7位
第6位
第5位
第4位
第3位
第2位
第1位
第0位
PWM1DT
DT1.7
DT1.6
DT1.5
DT1.4
DT1.3
DT1.2
DT1.1
DT1.0
读/写
读/写
读/写
读/写
读/写
读/写
读/写
读/写
读/写
复位值
(POR/WDT/LVR/PIN)
0
0
0
0
0
0
0
0
位编号
位符号
7-0
DT1[7:0]
说明
8位PWM1死区时间控制
死区时间为 (DT1.7 - DT1.0) X tOSC
Table 8.16 PWM2死区时间控制寄存器
DCH
第7位
第6位
第5位
第4位
第3位
第2位
第1位
第0位
PWM2DT
DT2.7
DT2.6
DT2.5
DT2.4
DT2.3
DT2.2
DT2.1
DT2.0
读/写
读/写
读/写
读/写
读/写
读/写
读/写
读/写
读/写
复位值
(POR/WDT/LVR/PIN)
0
0
0
0
0
0
0
0
位编号
位符号
7-0
DT2[7:0]
说明
8位PWM2死区时间控制
死区时间为 (DT2.7 - DT2.0) X tOSC
60
SH79F081A
8.2 串行外部设备接口(SPI)
8.2.1 特性
全双工,三线同步传输
主从机操作
6个可编程主时钟频率
极性相位可编程的串行时钟
带MCU中断的主模式故障出错标志
写入冲突标志保护
可选择LSB或MSB传输
串行外部设备接口(SPI)是一种高速串行通信接口,允许MCU与外围设备(包括其它MCU)进行全双工,同步串行通讯。
下图所示即为典型的由一个主设备和若干从属外部设备组成的SPI总线网络,主设备通过3条线连接所有从设备,主设备控
———
制连接从属设备SS引脚的4个并行端口来选中其中一个从属设备进行通讯。
VDD
MISO
MOSI
SCK
SS
Master
Port0.0
Port0.1
Port0.2
Slave
Slave
Slave
SS
SCK
MOSI
MISO
SS
SCK
MOSI
MISO
SS
SCK
MOSI
MISO
SS
SCK
MOSI
MISO
Port0.3
Slave
8.2.2 信号描述
主输出从输入(MOSI)
该路信号连接主设备和一个从设备。数据通过MOSI从主设备串行传送到从设备,主设备输出,从设备输入。
主输入从输出(MISO)
该路信号连接从设备和主设备。数据通过MISO从从设备串行传送到主设备,从设备输出,主设备输入。当SPI配置为从设
———
备并未被选中(SS引脚为高电平),从设备的MISO引脚处于高阻状态。
SPI串行时钟(SCK)
———
SCK信号用作控制MOSI和MISO线上输入输出数据的同步移动。每8时钟周期线上传送一个字节。如果从设备未被选中(SS
引脚为高电平),SCK信号被此从设备忽略。
———
从设备选择引脚(SS)
———
每个从属外围设备由一个从选择引脚(SS引脚)选择,当引脚信号为低电平时,表明该从设备被选中。主设备可以通过软
———
件控制连接于从设备SS引脚的端口电平选择每个从设备,很明显,只有一个主设备可以驱动通讯网络。为了防止MISO总线冲突,
———
同一时间只允许一个从设备与主设备通讯。在主设备模式中,SS引脚状态关联SPI状态寄存器SPSTA中MODF标志位以防止多
个主设备驱动MOSI和SCK。
———
下列情况,SS引脚可以作为普通端口或其它功能使用:
(1) 设备作为主设备,SPI控制寄存器SPCON寄存器的SSDIS位置1。这种配置仅仅存在于通讯网络中只有一个主设备的情
况,因此,SPI状态寄存器SPSTA中MODF标志位不会被置1。
(2) 设备配置为从设备,SPI控制寄存器SPCON的CPHA位和SSDIS位置1。这种配置情况存在于只有一个主设备一个从设
———
备的通讯网络中,因此,设备总是被选中的,主设备也不需要控制从设备的SS引脚选择其作为通讯目标。
———
注意:当CPHA = ‘0’时,SS引脚电平被拉低表示启动发送。
61
SH79F081A
8.2.3 波特率
在主模式下,SPI的波特率有六种可选择的频率,分别是内部时钟的4,8,16,32,64或128分频,可以通过设定SPCON
寄存器的SPR[2:0]位进行选择。
8.2.4 功能描述
下图所示是SPI模块的详细结构。
Internal Bus
FCLK PERIPH
SPDAT
Transmit Register
/4
/8
/16
/32
/64
/128
Clock
Divider
7
MSTR
5
4
3
2
1
0
Recieve Register
7
Clock Select
DIR
6
CPHA
CPOL
6
5
4
3
2
Pin
Control
Logic
0
1
M
S
Clock Logic
SSDIS
SPR2
SPR1
MOSI
MISO
SCK
SS
SPR0
8-bit Bus
Recieve Data Register
SPI
Control
SPI Interrupt Request
1-bit Signal
SPSTA
SPEN
SPIF
MODF WCOL RXOV
SPI模块框图
62
-
-
-
SH79F081A
8.2.5 工作模式
SPI可配置为主模式或从属模式中的一种。SPI模块的配置和初始化通过设置SPCON寄存器(串行外围设备控制寄存器)和
SPSTA(串行外围设备状态寄存器)来完成。配置完成后,通过设置SPCON,SPSTA,SPDAT(串行外围设备数据寄存器)
来完成数据传送。
在SPI通讯期间,数据同步地被串行的移进移出。串行时钟线(SCK)使两条串行数据线(MOSI和MISO)上数据的移动和
———
采样保持同步。从设备选择线(SS)可以独立地选择SPI从属设备;如果从设备没有被选中,则不能参与SPI总线上的活动。
当SPI主设备通过MOSI线传送数据到从设备时,从设备通过MISO线发送数据到主设备作为响应,这就实现了在同一时钟下
数据发送和接收的同步全双工传输。发送移位寄存器和接收移位寄存器使用相同的特殊功能器地址,对SPI数据寄存器SPDAT
进行写操作将写入发送移位寄存器,对SPDAT寄存器进行读操作将获得接收移位寄存器的数据。
8-bit Shift Register
SPI
Clock Generator
MISO
MISO
MOSI
MOSI
SCK
8-bit Shift Register
SCK
VDD
SS
SS
Master MCU
Slave MCU
VSS
全双工主从互联图
主模式
(1) 模式启动
SPI主设备控制SPI总线上所有数据传送的启动。当SPCON寄存器中的MSTR位置1时,SPI在主模式下运行,只有一个主设
备可以启动传送。
(2) 发送
在SPI主模式下,写一个字节数据到SPI数据寄存器SPDAT,数据将会写入发送移位缓冲器。如果发送移位寄存器已经存在
一个数据,那么主SPI产生一个WCOL信号以表明写入太快。但是在发送移位寄存器中的数据不会受到影响,发送也不会中断。
另外如果发送移位寄存器为空,那么主设备立即按照SCK上的SPI时钟频率串行地移出发送移位寄存器中的数据到MOSI线上。
当传送完毕,SPSTA寄存器中的SPIF位被置1。如果SPI中断被允许,当SPI F位置1时,也会产生一个中断。
(3) 接收
当主设备通过MOSI线传送数据给从设备时,相对应的从设备同时也通过MISO线将其发送移位寄存器的内容传送给主设备
的接收移位寄存器,实现全双工操作。因此,SPIF标志位置1即表示传送完成也表示接收数据完毕。从设备接收的数据按照MSB
或LSB优先的传送方向存入主设备的接收移位寄存器。当一个字节的数据完全被移入接收寄存器时,处理器可以通过读SPDAT
寄存器获得该数据。如果发生超限(SPIF标志未被清0,就试图开始下一次传送),RXOV位置1,表示发生数据超限,此时接
收移位寄存器保持原有数据并且SPIF位置1,这样直到SPIF位被清0,SPI主设备将不会接收任何数据。
从模式
(1) 模式启动
———
当SPCON寄存器中的MSTR位清0,SPI在从模式下运行。在数据传送之前,从设备的SS引脚必须被置低,而且必须保持低
电平直到一个字节数据传送完毕。
(2) 发送与接收
从属模式下,按照主设备控制的SCK信号,数据通过MOSI引脚移入,MISO引脚移出。一个位计数器记录SCK的边沿数,
当接收移位寄存器移入8位数据(一个字节)同时发送移位寄存器移出8位数据(一个字节),SPIF标志位被置1。数据可以通过
读取SPDAT寄存器获得。如果SPI中断被允许,当SPIF置1时,也会产生一个中断。
为防止超限,SPI从设备在向接收移位寄存器移入数据之前也必须软件清零SPIF标志位,否则RXOV位置1,表示发生数据
超限。此时接收移位寄存器保持原有数据并且SPIF位置1,这样SPI从设备将不会接收任何数据直到SPIF清0。
SPI从设备不能启动数据传送,所以SPI从设备必须在主设备开始一次新的数据传送之前将要传送的数据写入发送移位寄存
器。如果在开始发送之前未写入数据,从设备将传送“0x00”字节给主设备。如果写SPDAT操作发生在传送过程中,那么SPI从设
备的WCOL标志位置1,即如果传送移位寄存器已经含有数据,SPI从设备的WCOL位置1,表示写SPDAT冲突。但是移位寄存
器的数据不受影响,传送也不会被中断。
63
SH79F081A
8.2.6 传送形式
通过软件设置SPCON寄存器的CPOL位和CPHA位,用户可以选择SPI时钟极性和相位的四种组合方式。CPOL位定义时钟
的极性,即空闲时的电平状态,它对SPI传输格式影响不大。CPHA位定义时钟的相位,即定义允许数据采样移位的时钟边沿。
在主从通讯的两个设备中,时钟极性相位的设置应一致。
SCK Cycle Number
1
2
3
4
5
6
7
8
bit6
bit5
bit4
bit3
bit2
bit1
LSB
bit6
bit5
bit4
bit3
bit2
bit1
LSB
SPEN (Internal)
SCK (CPOL=0)
SCK (CPOL=1)
MOSI (from Master)
MSB
MSB
MISO (from Slave)
SS (to Slave)
Capture Point
数据传送形式(CPHA = 0)
———
如果CPHA = 0,SCK的第一个沿捕获数据,从设备必须在SCK的第一个沿之前将数据准备好,因此,SS引脚的下降沿从
———
设备开始发送数据。SS引脚在每次传送完一个字节之后必须被拉高,在发送下一个字节之前重新设置为低电平,因此当CPHA =
0,SSDIS不起作用。
SCK Cycle Number
1
2
3
4
5
6
7
8
SPEN (Internal)
SCK (CPOL=0)
SCK (CPOL=1)
MOSI (from Master)
MSB
bit6
bit5
bit4
bit3
bit2
bit1
MISO (from Slave)
MSB
bit6
bit5
bit4
bit3
bit2
bit1
LSB
LSB
SS (to Slave)
Capture Point
数据发送形式(CPHA = 1)
如果CPHA = 1,主设备在SCK的第一个沿将数据输出到MOSI线上,从设备把SCK的第一个沿作为开始发送信号。用户必
———
须在第一个SCK的两个沿内完成写SPDAT的操作。SS引脚在每个字节数据的传送过程始终保持低电平。这种数据传输形式是一
个主设备一个从设备之间通信的首选形式。
MISO/MOSI
Byte1
Byte2
Byte3
Master SS
Slave SS (CPHA = 0)
Slave SS (CPHA = 1)
———
CPHA/SS时序
注意:当 SPI 用作从设备模式,且 SPCON 寄存器的 CPOL 位清 0,P2.0/SCK 端口必须设置为输入模式,并在 SPEN 位置
1 前打开上拉电阻。
64
SH79F081A
8.2.7 出错检测
SPSTA寄存器中的标志位表示在SPI通讯中的出错情况:
(1) 模式故障(MODF)
———
SPI主模式下的模式故障出错表明SS引脚上的电平状态与实际的设备模式不一致。SPSTA寄存器中MODF位置1后,表明系
统控制存在多主设备冲突的问题。这种情况下,SPI系统受到如下影响:
产生 SPI 接收/错误 CPU 中断请求;
SPSTA 寄存器的 SPEN 位清 0,SPI 被禁止;
SPCON 寄存器的 MSTR 位清 0。
———
———
当SPCON寄存器的SS引脚禁止位(SSDIS)清0,SS引脚信号为低时,MODF标志位置1。然而,对于只有一个主设备的
———
系统来说,主设备的SS引脚被拉低,那决不是另外一个主设备试图驱动网络。这种情况下,为防止MODF置1,可使SPCON寄
———
存器中的SSDIS位置1,SS引脚作为普通I/O口或是其它功能引脚。
重新启动串行通信时,用户必须将MODF位软件清0,将SPCON寄存器中的MSTR位和SPSTA寄存器的SPEN位置1,重新
启动主模式。
(2) 写冲突(WCOL)
在发送数据序列期间写入SPDAT寄存器会引起的写冲突,SPSTA寄存器中的WCOL位置1。WCOL位置1不会引起中断,发
送也不会中止。WCOL位需由软件清0。
(3) 超限情况(RXOV)
主设备或从设备尚未清除SPIF位,主或从设备又试图发送几个数据字节时,超限情况发生。在这种情况下,接收移位寄存
器保持原有数据,SPIF置1,同样SPI设备直到SPIF被清除后才会再接收数据。在SPIF位被清除之前继续调用中断,发送也不会
中止。RXOV位置1不会引起中断,RXOV位需由软件清0。
8.2.8 中断
两种SPI状态标志SPIF & MODF能产生一个CPU中断请求。
串行外围设备数据发送标志,SPIF:完成一个字节发送后由硬件置1。
———
模式故障标志,MODF:该位被置1表示SS引脚上的电平与SPI模式不一致的。SSDIS位为0并且MODF置1将产生SPI接收
器/出错CPU中断请求。当SSDIS置1时,无MODF中断请求产生。
SPIF
SPI Transmitter
SPI
CPU Interrupt Request
CPU Interrupt Request
MODF
SPI Receiver/Error
CPU Interrupt Request
SSDIS
SPI中断请求的产生
65
SH79F081A
8.2.9 寄存器
Table 8.17 SPI控制寄存器
第7位
第6位
第5位
第4位
第3位
第2位
第1位
第0位
SPCON
DIR
MSTR
CPHA
CPOL
SSDIS
SPR2
SPR1
SPR0
读/写
读/写
读/写
读/写
读/写
读/写
读/写
读/写
读/写
复位值
(POR/WDT/LVR/PIN)
0
0
0
0
0
0
0
0
A2H
位编号
位符号
说明
7
DIR
6
MSTR
SP设备选择位
0:配置SPI作为从属设备
1:配置SPI作为主设备
5
CPHA
时钟相位控制位
0:SCK周期的第一沿采集数据
1:SCK周期的第二沿采集数据
4
CPOL
时钟极性控制位
0:在Idle状态下SCK处于低电平
1:在Idle状态下SCK处于高电平
传送方向选择位
0:MSB优先发送
1:LSB优先发送
———
SS引脚控制位
———
0:在主和从属模式下,打开SS引脚
3
2-0
SSDIS
SPR[2:0]
———
1:在主和从属模式下,关闭SS引脚
如果SSDIS置1,不产生MODF中断请求。
在从属模式下,如果CPHA = 0,该位不起作用。
串行外部设备时钟速率选择位
000:fSYS/4
001:fSYS/8
010:fSYS/16
011:fSYS/32
100:fSYS/64
其他:fSYS/128
66
SH79F081A
Table 8.18 SPI状态寄存器
F8H
第7位
第6位
第5位
第4位
第3位
第2位
第1位
SPSTA
读/写
复位值
(POR/WDT/LVR/PIN)
SPEN
SPIF
MODF
WCOL
RXOV
-
-
-
读/写
读/写
读/写
读/写
读/写
-
-
-
0
0
0
0
0
-
-
-
位编号
位符号
7
SPEN
SPI控制位
0:关闭SPI
1:打开SPI接口
6
SPIF
串行外部设备数据传送标志位
0:由软件清0
1:表明已完成数据传输,由硬件置1
5
MODF
第0位
说明
模式故障位
0:由软件清0
———
1:表明SS引脚电平与SPI模式不一致,由硬件置1
4
WCOL
写入冲突标志位
0:由软件清0,表明已处理写入冲突
1:由硬件置1,表明检测到一个冲突
3
RXOV
接收超限位
0:表明已处理接收超限,由软件清0
1:表明已检测到接收超限,由硬件置1
Table 8.19 SPI数据寄存器
A3H
第7位
第6位
第5位
第4位
第3位
第2位
第1位
第0位
SPDAT
SPDAT7
SPDAT6
SPDAT5
SPDAT4
SPDAT3
SPDAT2
SPDAT1
SPDAT0
读/写
读/写
读/写
读/写
读/写
读/写
读/写
读/写
读/写
复位值
(POR/WDT/LVR/PIN)
0
0
0
0
0
0
0
0
位编号
位符号
7-0
SPDAT[7:0]
说明
写入SPDAT的数据被放置到发送移位寄存器中。
读取SPDAT时将获得接收移位寄存器的数据。
注意:当关闭SPI功能后,读取SPI数据寄存器SPDAT的数据无效。
67
SH79F081A
8.3 增强型通用异步收发器(EUART)
8.3.1 特性
内建1个EUART,兼容传统8051
波特率可选择为系统时钟分频或定时器1/2的溢出率
增强功能包括帧出错检测及自动地址识别
EUART有四种工作方式
8.3.2 EUART工作方式
EUART有4种工作方式。在通信之前用户必须先初始化SCON,选择方式和波特率。如果使用方式1或方式3应先初始化定
时器1或定时器2。
在所有四种方式中,任何将SBUF作为目标寄存器的写操作都会启动发送。在方式0中由条件RI = 0和REN = 1初始化接收。
这会在TxD引脚上产生一个时钟信号,然后在RxD引脚上移8位数据。在其他方式中由输入的起始位初始化接收(如果REN = 1)。
通过发送起始位,外部发送器开始通信。
EUART方式列表
SM0
SM1
方式
类型
0
0
0
同步
0
1
1
异步
1
0
2
异步
1
1
3
异步
波特率
帧长度
起始位
停止位
第9位
SYSCLK/(4或12)
8位
无
无
无
定时器1或2的溢出率/(16或32)
10位
1
1
无
SYSCLK/(32或64)
11位
1
1
0, 1
定时器1或2的溢出率/(16或32)
11位
1
1
0, 1
方式0:同步,半双工通讯
方式0支持与外部设备的同步通信。在RXD引脚上收发串行数据。TXD引脚用作发送移位时钟。SH79F081A提供TxD引脚
上的移位时钟。因此这个方式是串行通信的半双工方式。在这个方式中,每帧收发8位,低位先接收或发送。
通过置SM2位(SCON.5)为0或1,波特率固定为系统时钟的1/12或1/4。当SM2位为0时,串行端口以系统时钟的1/12运行。
当置1时,串行端口以系统时钟的1/4运行。与标准8051唯一不同的是,SH79F081A在方式0中有可变波特率。
功能块框图如下图所示。数据通过RxD引脚进入和移出串行端口。移位时钟由TxD引脚输出,用来移位进出SH79F081A的
数据。
Transmit Shift Register
Internal
Data Bus
System Clock
PARIN
Write to
SBUF
SOUT
RXD
LOAD
CLOCK
÷ 12
÷4
TX START
TX SHIFT
TX CLOCK
0
SM2
TI
SERIAL
CONTROLLER
1
Serial Port Interrupt
RI
RX CLOCK
SHIFT
CLOCK
TXD
LOAD SBUF
RI
RX START
REN
RX SHIFT
Read SBUF
CLOCK
PAROUT
RXD
SIN
Receive Shift Register
68
SBUF
SBUF
SH79F081A
任何将SBUF作为目标寄存器的写操作都会启动发送。下一个系统时钟Tx控制块开始发送。数据转换发生在移位时钟的下降
沿,移位寄存器的内容逐次从左往右移位,空位置0。当移位寄存器中的所有8位都发送后,Tx控制模块停止发送操作,然后在
下一个系统时钟的上升沿将TI置1(SCON.1),并且RxD引脚保持高电平。
Write to SBUF
RxD
D0
D1
D3
D2
D5
D4
D6
D7
TxD
TI
Send Timing of Mode 0
REN(SCON.4)置1和RI(SCON.0)清0初始化接收。下一个系统时钟启动接收,在移位时钟的上升沿锁存数据,接收转
换寄存器的内容逐次向左移位。当所有8位都接收到接收移位寄存器中后,Rx控制块停止接收,然后在下一个系统时钟的上升沿
上RI置1,直到被软件清0才允许接收。
RxD
D0
D1
D2
D3
D4
D5
D6
D7
TxD
RI
Receive Timing of Mode 0
方式1:8位EUART,可变波特率,异步全双工
方式1提供10位全双工异步通信,10位由一个起始位(逻辑0),8个数据位(低位为第一位),和一个停止位(逻辑1)组
成。在接收时,这8个数据位存储在SBUF中而停止位储存在RB8(SCON.2)中。方式1中的波特率是可变的,串行收发波特率
可被设置为定时器1溢出率的1/16或1/32,或是定时器2溢出率的1/16(详见波特率章节)。功能块框图如下图所示:
Timer 1 Overflow
Timer 2 Overflow
Transmit Shift Register
STOP
Internal
Data Bus
÷2
PARIN
START
Write to SBUF
SOUT
TXD
LOAD
SMOD
0
TCLK
1
0
CLOCK
TX START
1
÷ 16
TX SHIFT
TX CLOCK
TI
RCLK
0
SERIAL
CONTROLLER
1
÷ 16
Serial Port Interrupt
RI
RX CLOCK
LOAD SBUF
SAMPLE
1-TO-0
DETECTOR
RX START
Read SBUF
RX SHIFT
CLOCK
PAROUT
RXD
BIT
DETECTOR
SIN
D8
Receive Shift Register
69
SBUF
RB8
Internal
Data Bus
SH79F081A
任何将SBUF作为目标寄存器的写操作都会启动发送,实际上发送是从16分频计数器中的下一次跳变之后的系统时钟开始
的,因此位时间与16分频计数器是同步的,与对SBUF的写操作不同步。起始位首先在TxD引脚上移出,然后是8位数据位。在
发送移位寄存器中的所有8位数据都发送完后,停止位在TxD引脚上移出,在停止位发出的同时Tl标志置1。
Write to SBUF
TxD
Start
D0
D1
D2
D3
D4
D5
D6
D7
Stop
Shift CLK
TI
Send Timing of Mode 1
只有REN位置1时才允许接收。当RxD引脚检测到下降沿时串行口开始接收串行数据。为此,CPU对RxD不断采样,采样速
率为波特率的16倍。当检测下降沿时,16分频计数器立即复位,这有助于16分频计数器与RxD引脚上的串行数据位同步。16分
频计数器把每一位的时间分为16个状态,在第7、8、9状态时,位检测器对RXD端的电平进行采样。为抑制噪声,在这3个状态
采样中至少有2次采样值一致数据才被接收。如果所接收的第一位不是0,说明这位不是一帧数据的起始位,该位被忽略,接收
电路被复位,等待RxD引脚上另一个下降沿的到来。若起始位有效,则移入移位寄存器,并接着移入其它位到移位寄存器。8个
数据位和1个停止位移入之后,移位寄存器的内容被分别装入SBUF和RB8中,RI置1,但必须满足下列条件:
1. RI = 0
2. SM2 = 0或者接收的停止位 = 1
如果这些条件被满足,那么停止位装入RB8,8个数据位装入SBUF,RI被置1。否则接收的帧会丢失。这时,接收器将重新
去探测RxD端是否另一个下降沿。用户必须用软件清除RI,然后才能再次接收。
RxD
Start
D0
D1
D2
D3
D4
D5
Bit Sample
Shift CLK
RI
Receive Timing of Mode 1
70
D6
D7
Stop
SH79F081A
方式2:9位EUART,固定波特率,异步全双工
这个方式使用异步全双工通信中的11位。一帧由一个起始位(逻辑0),8个数据位(低位为第一位),一个可编程的第9
数据位和一个停止位(逻辑1)组成。方式2支持多机通信和硬件地址识别(详见多机通信章节)。在数据传送时,第9数据位(SCON
中的TB8)可以写0或1,例如,可写入PSW中的奇偶位P,或用作多机通信中的数据/地址标志位。当接收到数据时,第9数据位
进入RB8而停止位不保存。PCON中的SMOD位选择波特率为系统工作频率的1/32或1/64。功能块框图如下所示:
Transmit Shift Register
System Clock
TB8
D8
STOP
÷
Internal
Data Bus
PARIN
2
START
Write to SBUF
TXD
SOUT
LOAD
CLOCK
SMOD
0
1
TX START
÷ 32
TX SHIFT
TX CLOCK
TI
SERIAL
CONTROLLER
÷ 32
Serial Port Interrupt
RI
RX CLOCK
LOAD SBUF
SAMPLE
1-TO-0
DETECTOR
Read SBUF
RX SHIFT
RX START
CLOCK
SBUF
PAROUT
BIT
DETECTOR
RXD
SIN
Internal
Data Bus
RB8
D8
Receive Shift Register
任何将SBUF作为目标寄存器的写操作都会启动发送,同时也将TB8载入到发送移位寄存器的第9位中。实际上发送是从16
分频计数器中的下一次跳变之后的系统时钟开始的,因此位时间与16分频计数器是同步的,与对SBUF的写操作不同步。起始位
首先在TxD引脚上移出,然后是的第9数据位。在发送转换寄存器中的所有9位数据都发送完后,停止位在TxD引脚上移出,在停
止位发送后Tl标志置1。
Write to SBUF
TxD
Start
D0
D1
D2
D3
D4
D5
Shift CLK
TI
Send Timing of Mode 2
71
D6
D7
D8
Stop
SH79F081A
只有REN位置1时才允许接收。当RxD引脚检测到下降沿时串行口开始接收串行数据。为此,CPU对RxD不断采样,采样速
率为波特率的16倍。当检测下降沿时,16分频计数器立即复位。这有助于16分频计数器与RxD引脚上的串行数据位同步。16分
频计数器把每一位的时间分为16个状态,在第7、8、9状态时,位检测器对RXD端的电平进行采样。为抑制噪声,在这3个状态
采样中至少有2次采样值一致数据才被接收。如果所接收的第一位不是0,说明这位不是一帧数据的起始位,该位被忽略,接收
电路被复位,等待RxD引脚上另一个下降沿的到来。若起始位有效,则移入移位寄存器,并接着移入其它位到移位寄存器。9个
数据位和1个停止位移入之后,移位寄存器的内容被分别装入SBUF和RB8中,RI置1,但必须满足下列条件:
1. RI = 0
2. SM2 = 0或者接收的第9位 = 1,且接收的字节符合实际从机地址
如果这些条件被满足,那么第9位移入RB8,8位数据移入SBUF,RI被置1。否则接收的数据帧会丢失。
在停止位的当中,接收器回到寻找RxD引脚上的另一个下降沿。用户必须用软件清除RI,然后才能再次接收。
RxD
Start
D0
D1
D2
D3
D4
D5
D6
D7
D8
Stop
Bit Sample
Shift CLK
RI
Receive Timing of Mode 2
方式3:9位EUART,可变波特率,异步全双工
方式3使用方式2的传输协议以及方式1的波特率产生方式。
Timer 1 Overflow
Transmit Shift Register
Timer 2 Overflow
STOP
TB8
Internal
Data Bus
÷2
D8
PARIN
SOUT
TXD
START
Write to SBUF
LOAD
SMOD
0
TCLK
1
0
CLOCK
TX START
1
÷ 16
TX SHIFT
TX CLOCK
TI
RCLK
0
SERIAL
CONTROLLER
1
÷ 16
Serial Port Interrupt
RI
RX CLOCK
LOAD SBUF
SAMPLE
1-TO-0
DETECTOR
RX START
Read SBUF
RX SHIFT
CLOCK
PAROUT
RXD
BIT
DETECTOR
SIN
D8
Receive Shift Register
72
SBUF
RB8
Internal
Data Bus
SH79F081A
8.3.3 波特率
在方式0中,波特率可编程为系统时钟的1/12或1/4,由SM2位决定。当SM2为0时,串行端口在系统时钟的1/12下运行。当
SM2为1时,串行端口在系统时钟的1/4下运行。
在方式1和方式3中,波特率可选择来至定时器1或定时器2的溢出率。
分别置TCLK(T2CON.4)和RCLK(T2CON.5)位为1来选择定时器2作为TX和RX的波特时钟源(详见定时器章节)。无
论TCLK还是RCLK为逻辑1,定时器2都为波特率发生器方式。如果TCLK和RCLK为逻辑0,定时器1作为Tx和Rx的波特时钟源。
方式1和方式3波特率公式如下所示,其中TH1是定时器1的8位自动重载寄存器,SMOD为EUART的波特率二倍频器
(PCON.7),[RCAP2H,RCAP2L]是定时器2的16位重载入寄存器。T1CLK是定时器1的时钟源,T2CLK是定时器2的时钟源。
2 SMOD
fT 1
,用定时器1作为波特率发生器,定时器1工作在方式2
×
32
256 − TH 1
f SYS
1
,用定时器2作为波特率发生器,定时器2时钟源为系统时钟
BaudRate =
×
2 × 16 65536 − [ RCAP 2 H , RCAP 2 L]
f SYS / 12
1
,用定时器2作为波特率发生器,定时器2时钟源为系统时钟/12
BaudRate =
×
2 × 16 65536 − [ RCAP 2 H , RCAP 2 L]
fT 2
1
,用定时器2作为波特率发生器,定时器2时钟源为T2引脚输入时钟
BaudRate = ×
16 65536 − [ RCAP 2 H , RCAP 2 L]
BaudRate =
在方式2中,波特率固定为系统时钟的1/32或1/64,由SMOD位(PCON.7)决定。当SMOD位为0时,EUART以系统时钟
的1/64运行。当SMOD位为1时,EUART以系统时钟的1/32运行。
BaudRate = 2 SMOD × (
f SYS
)
64
8.3.4 多机通讯
软件地址识别
方式2和方式3有一个专门的适用于多机通讯的功能。在这两个方式下,接收的是9位数据,第9位移入RB8中,然后再来一
位停止位。EUART可以这样来设定:当接收到停止位时,只有在RB8 = 1的条件下,串行口中断才会有效(请求标志RI置1)。
可以通过将SCON寄存器的SM2位置1使EUART具有这个功能。
在多机通讯系统中,以如下所述来利用这一功能。当主机要发送一数据块给几个从机中的一个时,它先送出一地址字节,
以辨认目标从机。地址字节与数据字节可用第9数据位来区别,地址字节的第9位为1,数据字节的第9位为0。
如果从机SM2为1,则不会响应数据字节中断。地址字节可以中断所有从机,这样,每一个从机都检查所接收到的地址字节,
以判别自己是不是目标从机。被寻到的从机清0 SM2位,并准备接收即将到来的数据字节,当接收完毕时,从机再一次将SM2
置1。没有被寻址的从机,则维持它们的SM2位为1,忽略到来的数据字节,继续做自己的事情。
注意:在方式0中,SM2用来选择波特率加倍。在方式1中,SM2用来检测停止位是否有效,如果SM2 = 1,接收中断不会
响应直到接收到一个有效的停止位。
73
SH79F081A
自动(硬件)地址识别
在方式2和方式3中,SM2置1将使EUART在如下状态下运行:当1个停止位被接收时,如果载入RB8的第9数据位为1(地址
字节)并且接收到的数据字节符合EUART的从机地址,EUART产生一个中断。接着,从机应该将SM2清零,以接收后续的数据
字节。
在9位方式下要求第9位为1以表明该字节是地址而非数据。当主机要发送一组数据给几个从机中的一个时,必须先发送目标
从机的地址。所有从机在等待接收地址字节时,为了确保仅在接收地址字节时产生中断,SM2位必须置1。自动地址识别的特点
是只有地址匹配的从机才能产生中断,地址比较通过硬件完成而不是软件
中断产生后,地址相匹配的从机清零SM2,继续接收数据字节。地址不匹配的从机不受影响,将继续等待接收和它匹配的
地址字节。一旦全部信息接收完毕,地址匹配的从机应该再次把SM2置1,忽略所有传送的非地址字节,直到接收到下一个地址
字节。
使用自动地址识别功能时,主机可以通过调用给定的从机地址选择与一个或多个从机通信。使用广播地址可以联系所有的
从机。有两个特殊功能寄存器用来定义从机地址(SADDR)和地址屏蔽(SADEN)。从机地址是一个8位的字节,存于SADDR
寄存器中。SADEN用于定义SADDR 内位的有效与否,如果SADEN中某一位为0,则SADDR中相应位被忽略,如果SADEN中
某一位置1,则SADDR中相应位将用于得到给定的从机地址。这可以使用户在不改变SADDR寄存器中的从机地址的情况下灵活
地寻址多个从机。使用给定地址可以识别多个从机而排除其他的从机。
从机1
从机2
SADDR
10100100
10100111
SADEN(为0的位被忽略)
11111010
11111001
实际从机地址
10100x0x
10100xx1
广播地址(SADDR或SADEN)
1111111x
11111111
从机1和从机2给定地址的最低位是不同的。从机1忽略了最低位,而从机2的最低位是1。因此只与从机1通讯时,主机必须
发送最低位为0的地址(10100000)。类似地,从机1的第1位为0,从机2的第1位被忽略。因此,只与从机2通讯时,主机必须
发送第1位为1的地址(10100011)。如果主机希望同时与两从机通讯,则第0位为1,第1位为0,第2位被两从机都忽略,此时
有两个不同的地址用于选定两个从机(1010 0001和1010 0101)。
主机可以通过广播地址与所有从机同时通讯。这个地址等于SADDR和SADEN的逻辑或,结果中的0表示该位被忽略。多数
情况下,广播地址为0xFFh,该地址可被所有从机应答。
系统复位后,SADDR和SADEN两个寄存器初始化为0,这两个结果设定了给定地址和广播地址为XXXXXXXX(所有位都被
忽略)。这有效地去除了多机通讯的特性,禁止了自动寻址方式。这样的EUART将对任何地址都产生应答,兼容了不支持自动
地址识别的8051控制器。用户可以按照上面提到的方法实现软件识别地址的多机通讯。
8.3.5 帧出错检测
当寄存器PCON中的SSTAT位为逻辑1时,帧出错检测功能才有效。3个错误标志位被置1后,只能通过软件清零,尽管后续
接收的帧没有任何错误也不会自动清零
注意:SSTAT位必须为逻辑1是访问状态位(FE0, RXOV0和TXCOL0),SSTAT位为逻辑0时是访问方式选择位(SM0,
SM1和SM2)。
发送冲突
如果在一个发送正在进行时,用户软件写数据到SBUF寄存器时,发送冲突位(SCON寄存器中的TXCOL位)置1。如果发
生了冲突,新数据会被忽略,不能被写入发送缓冲器。
接收溢出
如果在接收缓冲器中的数据未被读取之前,RI清0。又有新的数据存入接收缓冲器,那么接收溢出位(SCON寄存器中的RXOV
位)置1。如果发生了接收溢出,接收缓冲器中原来的数据将丢失。
帧出错
如果检测到一个无效(低)停止位,那么帧出错位(寄存器SCON中的FE)置1。
暂停检测
当连续检测到11个位都为低电平位时,则认为检测到一个暂停。由于暂停条件同样满足帧错误条件,因此检测到暂停时也
会报告帧错误。一旦检测到暂停条件,UART将进入空闲状态并一直保持,直至接收到有效停止位(RxD引脚上出现上升沿)。
74
SH79F081A
8.3.6 寄存器
Table 8.20 EUART控制及状态寄存器
98H
第7位
第6位
第5位
第4位
第3位
第2位
第1位
第0位
SCON
SM0
/FE
SM1
/RXOV
SM2
/TXCOL
REN
TB8
RB8
TI
RI
读/写
读/写
读/写
读/写
读/写
读/写
读/写
读/写
读/写
复位值
(POR/WDT/LVR/PIN)
0
0
0
0
0
0
0
0
位编号
位符号
7-6
SM[0:1]
7
FE
6
RXOV
说明
EUART串行方式控制位,SSTAT = 0
00:方式0,同步方式,固定波特率
01:方式1,8位异步方式,可变波特率
10:方式2,9位异步方式,固定波特率
11:方式3,9位异步方式,可变波特率
EUART帧出错标志位,当FE位被读时,SSTAT位必须被设置为1
0:无帧出错,由软件清除
1:发生帧出错,由硬件置1
EUART接收溢出标志位,当RXOV位被读时,SSTAT位必须被设置为1
0:无接收超限,由软件清除
1:有接收超限,由硬件置1
EUART多处理机通讯允许位(第9位“1”校验器),SSTAT = 0
0:在方式0下,波特率是系统时钟的1/12
在方式1下,禁止停止位确认检验,停止位将置RI为1产生中断
在方式2和3下,任何字节都会置RI为1产生中断
1:在方式0下,波特率是系统时钟的1/4
在方式1下,允许停止位确认检验,只有有效的停止位(1)才能置RI为1产生中断
在方式2和3下,只有寻址字节(第9位 = 1)能置RI为1产生中断
5
SM2
5
TXCOL
4
REN
EUART接收器允许位
0:禁止接收
1:允许接收
3
TB8
发送器,EUART的第8位
第9位在EUART的方式2和3下发送,由软件置1或清0
2
RB8
接收器,EUART的第8位
在方式0下,RB8保留
在方式1下,RB8接收停止位
在方式2和3下,RB8接收第9位
1
TI
EUART的发送中断标志位
0:由软件清0
1:由硬件置1,在方式0下的第8位最后,或在其他方式下的停止位开始
0
RI
EUART的接收中断标志位
0:由软件清0
1:由硬件置1,在方式0下的第8位最后,或在其他方式下的停止位开始
EUART发送冲突标志位,当TXCOL位被读时,SSTAT位必须被设置为1
0:无发送冲突,由软件清0
1:有发送冲突,由硬件置1
75
SH79F081A
Table 8.21 EUART数据寄存器
99H
第7位
第6位
第5位
第4位
第3位
第2位
第1位
第0位
SBUF
SBUF.7
SBUF.6
SBUF.5
SBUF.4
SBUF.3
SBUF.2
SBUF.1
SBUF.0
读/写
读/写
读/写
读/写
读/写
读/写
读/写
读/写
读/写
复位值
(POR/WDT/LVR/PIN)
0
0
0
0
0
0
0
0
位编号
位符号
7-6
SBUF[7-0]
说明
SBUF包括两个寄存器:一个发送移位寄存器和一个接收锁存器
写入SBUF的数据将送至发送移位寄存器,并启动发送过程
读SBUF将返回接收锁存器中的内容
Table 8.22 电源控制寄存器
87H
第7位
第6位
第5位
第4位
第3位
第2位
第1位
第0位
PCON
SMOD
SSTAT
-
-
GF1
GF0
PD
IDL
读/写
读/写
读/写
-
-
读/写
读/写
读/写
读/写
复位值
(POR/WDT/LVR/PIN)
0
0
-
-
0
0
0
0
位编号
位符号
说明
7
SMOD
波特率加倍位
在模式1和3中,SMOD = 1,当定时器1为波特率发生器时,波特率加倍
在模式2中,SMOD = 1,波特率加倍
6
SSTAT
SCON[7:5]功能选择位
0:SCON[7:5]作为SM0,SM1,SM2使用
1:SCON[7:5]作为FE,RXOV,TXCOL使用
3-2
GF[1:0]
用户通用标志位
1
PD
掉电模式控制位
0
IDL
空闲模式控制位
Table 8.23 EUART从属地址及地址掩码寄存器
9AH-9BH
第7位
第6位
第5位
第4位
第3位
第2位
第1位
第0位
SADDR
SADD7
SADD6
SADD5
SADD4
SADD3
SADD2
SADDR1
SADD0
SADEN
SADEN7
SADEN6
SADEN5
SADEN4
SADEN
SADEN2
SADEN1
SADEN0
读/写
读/写
读/写
读/写
读/写
读/写
读/写
读/写
读/写
复位值
(POR/WDT/LVR/PIN)
0
0
0
0
0
0
0
0
位编号
位符号
说明
7-0
SADDR.7-0
EUART从机地址
定义EUART从机地址
7-0
SADEN.7-0
从机地址位屏蔽寄存器
0:SADDR中的相应位被忽略
1:SADDR中的相应位被检验
76
SH79F081A
8.4 模/数转换器(ADC)
8.4.1 特性
10位分辨率
内建基准电压
8模拟通道输入
SH79F081A包含一个单端型、10位逐次逼近型模/数转换器(ADC),基准电压VREF直接与VDD相连,8个ADC通道都可以
————
输入独立的模拟信号,但是每次只能使用一个通道。GO/DONE信号控制开始转换,提示转换结束。当转换完成时,更新ADC
数据寄存器,设置ADCON寄存器中的ADCIF位,并产生一个中断(如果ADC中断被允许)。
ADC模块整合数字比较功能可以比较ADC中的模拟输入的值与数字值。如果允许数字比较功能(在ADCON寄存器中的EC
位置1),并且ADC模块使能(在ADCON寄存器中的ADON位置1),只有当相应的模拟输入的数字值大于或等于寄存器中的比
————
————
较值(ADDH/L)时,才会产生ADC中断。当GO/DONE置1时,数字比较功能会持续工作,直到GO/DONE清0。这一点与模数
转换工作方式不同。
带数字比较功能的ADC模块能在Idle模式下工作,并且ADC中断能够唤醒Idle模式。但是,在掉电模式下,ADC模块被禁止。
8.4.2 ADC模块图
SCH2~SCH0
000
001
10 bit
SAR
ADC
010
Input voltage
011
100
101
CH7~CH0
AN0
AN1
AN2
AN3
AN4
AN5
110
AN6
111
AN7
AD转换器模块图
77
SH79F081A
8.4.3 寄存器
Table 8.24 ADC控制寄存器
93H
第7位
第6位
第5位
第4位
第3位
第2位
第1位
第0位
ADCON
ADON
ADCIF
EC
-
SCH2
SCH1
SCH0
读/写
读/写
读/写
读/写
-
读/写
读/写
读/写
GO/DONE
读/写
复位值
(POR/WDT/LVR/PIN)
0
0
0
-
0
0
0
0
—---—-----—
位编号
位符号
7
ADON
ADC允许位
0:禁止ADC模块
1:允许ADC模块
6
ADCIF
ADC中断标志位
0:无ADC中断
1:由硬件置1表示已完成AD转换,或者模拟输入大于或等于ADDH/ADDL(如果
允许数字比较模块)
5
EC
3-1
0
SCH[2:0]
—---—------—
GO/DONE
说明
比较功能允许位
0:禁止数字比较功能
1:允许数字比较功能
ADC通道选择位
000:ADC通道AN0
001:ADC通道AN1
010:ADC通道AN2
011:ADC通道AN3
100:ADC通道AN4
101:ADC通道AN5
110:ADC通道AN6
111:ADC通道AN7
ADC状态标志位
0:当完成AD转换时,由硬件自动清0。在转换期间清0这个位会中止AD转换。如
果允许数字比较功能,该位不会由硬件清0只能由软件清0
1:置1开始AD转换或者启动数字比较功能
78
SH79F081A
Table 8.25 ADC转换时间寄存器
94H
第7位
第6位
第5位
第4位
第3位
第2位
第1位
第0位
ADT
TADC2
TADC1
TADC0
-
TS3
TS2
TS1
TS0
读/写
读/写
读/写
读/写
-
读/写
读/写
读/写
读/写
复位值
(POR/WDT/LVR/PIN)
0
0
0
-
0
0
0
0
位编号
位符号
7-5
TADC[2:0]
3-0
TS[3:0]
说明
ADC时钟周期选择位
000:ADC时钟周期tAD = 2 tSYS
001:ADC时钟周期tAD = 4 tSYS
010:ADC时钟周期tAD = 6 tSYS
011:ADC时钟周期tAD = 8 tSYS
100:ADC时钟周期tAD = 12 tSYS
101:ADC时钟周期tAD = 16 tSYS
110:ADC时钟周期tAD = 24 tSYS
111:ADC时钟周期tAD = 32 tSYS
采样时间选择位
2 tAD ≤ 采样时间 = (TS [3:0]+1) * tAD ≤ 15 tAD
注意:
(1) 请确保tAD ≧ 1µs;
(2) 即使TS[3:0] = 0000,最小采样时间为2tAD;
(3) 即使TS[3:0] = 1111,最大采样时间为15tAD;
(4) 在设置TS[3:0]前,请估算连接到ADC输入引脚的串联电阻;
(5) 选择2*tAD为采样时间时,请确保连接到ADC输入引脚的串联电阻小于10kΩ;
(6) 总共转换时间 = 12tAD + 采样时间。
举例说明:
系统时钟(SYSCLK)
4MHz
12MHz
16MHz
TADC[2:0]
000
001
001
001
111
111
111
000
100
100
100
111
111
111
000
110
110
110
111
111
111
tAD
0.25 *2=0.5µs
0.25 *4=1µs
0.25 *4=1µs
0.25 *4=1µs
0.25 *32=8µs
0.25 *32=8µs
0.25 *32=8µs
0.083*2=0.166µs
0.083*12=1µs
0.083*12=1µs
0.083*12=1µs
0.083*32=2.7µs
0.083*32=2.7µs
0.083*32=2.7µs
0.0625*2=0.125µs
0.0625*24=1.5µs
0.0625*24=1.5µs
0.0625*24=1.5µs
0.0625*32=2.0µs
0.0625*32=2.0µs
0.0625*32=2.0µs
TS[3:0]
0000
0111
1111
0000
0111
1111
0000
0111
1111
0000
0111
1111
0000
0111
1111
0000
0111
1111
79
采样时间
2*1=2µs
8*1=8µs
15*1=15µs
2*8=16µs
8*8=64µs
15*8=120µs
2*1=2µs
8*1=8µs
15*1=15µs
2*2.7=5.4µs
8*2.7=21.6µs
15*2.7=40.5µs
2*1.5=3.0µs
8*1.5=12µs
15*1.5=22.5µs
2*2.0=4.0µs
8*2.0=16µs
15*2.0=30µs
转换时间
(tAD