HOLTEK HT46F49E

HT46F46E/HT46F47E/HT46F48E/HT46F49E
内置 EEPROM 经济 A/D 型八位 FLASH 单片机
盛群知识产权政策
专利权
盛群半导体公司在全球各地区已核准和申请中之专利权至少有 160 件以上,享有绝对之合法权益。与盛群
公司 MCU 或其它产品有关的专利权并未被同意授权使用,任何经由不当手段侵害盛群公司专利权之公司、
组织或个人,盛群将采取一切可能的法律行动,遏止侵权者不当的侵权行为,并追讨盛群公司因侵权行为
所受之损失、或侵权者所得之不法利益。
商标权
商标权
盛群之名称和标识、Holtek 标识、HT-IDE、HT-ICE、Marvel Speech、 Music Micro、 Adlib Micro、 Magic
Voice、 Green Dialer、 PagerPro、 Q-Voice、 Turbo Voice、 EasyVoice 和 HandyWriter 都是盛群半导体公
司在台湾地区和其它国家的注册商标。
著作权
Copyright  2009 by HOLTEK SEMICONDUCTOR INC.
规格书中所出现的信息在出版当时相信是正确的,然而盛群对于规格内容的使用不负责任。文中提到的应
用其目的仅仅是用来做说明,盛群不保证或不表示这些应用没有更深入的修改就能适用,也不推荐它的产
品使用在会由于故障或其它原因可能会对人身造成危害的地方。盛群产品不授权使用于救生、维生器件或
系统中做为关键器件。盛群拥有不事先通知而修改产品的权利,对于最新的信息,请参考我们的网址
http://www.holtek.com.tw; http://www.holtek.com.cn
Rev. 1.40
1
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
技术相关信息
·
·
·
工具信息
FAQs
应用范例
-HA0052S HT46R47 之应用-电池充电器
-HA0075S MCU 复位电路及振荡电路应用
-HA0123S HT48F MCU 系列 1K 位 EEPROM Data Memory 的读写-使用 C 语言
-HA0125S HT48F MCU 系列 2K 位 EEPROM Data Memory 的读写-使用 C 语言
特性
•
•
•
•
•
•
•
•
•
•
工作电压:
fSYS=4MHz:2.2V ~5.5V
fSYS=8MHz:3.3V~5.5V
fSYS=12MHz:4.5V~5.5V
13 到 23 个双向输入/输出口
与输入/输出口共用引脚的外部中断输入
8 位可编程定时/计数器,具有溢出中断和 7 级
预分频器
内置晶体和 RC 振荡驱动电路
看门狗定时器
具有 PFD 功能,可以用来发声
暂停和唤醒功能可降低功耗
在 VDD =5V,系统频率为 8MHz 时,指令周期
为 0.5µs
4 或 6 层硬件堆栈
•
•
•
•
•
•
•
•
•
•
•
•
•
4 通道 8 位或 9 位分辨率的 A/D 转换器
1 或 2 通道 8 位的 PWM 输出口,与输入/输出
口共用引脚
位操作指令
查表指令
63 条指令
指令执行时间为 1 或 2 个指令周期
低电压复位功能
100,000 次可擦/写闪存程序存储器
106 次可擦/写 EEPROM 数据存储器
闪存程序存储器数据有效期>10 年
EEPROM 数据有效期>10 年
在线烧写界面(ISP)
多种封装
概述
经济型 A/D 单片机是内置 EEPROM 的 8 位 FLASH 型高性能精简指令集 MCU,专门为需要 A/D 转换
的产品而设计,例如传感器信号输入。所有单片机都集成了多通道模数转换器和 1 或者 2 通道 PWM 输出。
暂停和唤醒功能、振荡类型选择、可编程分频器等功能,使得实际应用时只需要很少的外部器件。
具有 A/D 和 PWM、低功耗、高性能、灵活的输入/输出口和低成本,使得这款单片机可以广泛应用于
带传感器信号处理、马达驱动、工业控制、消费类产品和子系统控制器等。此系列芯片大部分特性都是通
用的,然而,主要不同在于输入/输出引脚数目、RAM 和 ROM 的容量、A/D 分辨率、堆栈层数和封装类
型。
Rev. 1.40
2
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
选型表
此系列芯片大部分特性都是通用的,主要区别在于程序存储器容量、输入/输出口数目、A/D 分辨率、
堆栈的层数和封装的类型。以下表格为各单片机的主要特性。
型号
HT46F46E
HT46F47E
HT46F48E
HT46F49E
电压
2.2V~
5.5V
2.2V~
5.5V
2.2V~
5.5V
2.2V~
5.5V
数据
EEPROM
输
入
/
输
出
定时
器
中
断
A/D
PWM
堆
栈
64×8
128×8
13
8-bit×1
3
8-bit×4
8-bit×1
4
2K×14
64×8
128×8
13
8-bit×1
3
9-bit×4
8-bit×1
6
2K×14
88×8
128×8
19
8-bit×1
3
9-bit×4
8-bit×1
6
4K×15
128×8
256×8
23
8-bit×1
3
9-bit×4
8-bit×2
6
程序
存储
器
数据
存储
器
1K×14
封装
种类
16NSOP
18DIP/SOP
16NSOP,18DIP,
18SOP,20SSOP
24SKDIP/SOP
24SSOP
24/28SKDIP,
24/28SOP,
24/28SSOP
注意: 对于具有两种封装形式的单片机而言,选型表针对较大封装的情况。
方框图
W a tc h d o g
T im e r
In - c ir c u it
P r o g r a m m in g
C ir c u itr y
8 - b it
R IS C
M C U
C o re
S ta c k
F la s h
P ro g ra m
M e m o ry
I/O
P o rts
Rev. 1.40
E E P R O M
D a ta
M e m o ry
8 - b it
T im e r
R A M D a ta
M e m o ry
L o w
V o lta g e
R e s e t
P r o g r a m m a b le
F re q u e n c y
G e n e ra to r
3
W a tc h d o g
T im e r O s c illa to r
R e s e t
C ir c u it
In te rru p t
C o n tr o lle r
R C /C ry s ta l
S y s te m
O s c illa to r
A /D
C o n v e rte r
P W M
G e n e ra to r
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
引脚图
P A 3 /P F D
1
1 6
P A 4 /T M R
P A 1
3
1 4
P A 6
P A 2
2
P A 0
1 5
4
P B 1 /A N 1
5
P B 0 /A N 0
6
V S S
P D 0 /P W
1 0
V D D
1 1
7
M
1 2
8
9
P B 6
P A 3 /P F D
3
2 2
P A 4 /T M R
4
P A 1
2 1
5
P A 0
2 0
6
P B 3 /A N 3
1 9
P B 2 /A N 2
P B 1 /A N 1
P B 0 /A N 0
V S S
P C 0
7
1 8
8
1 7
9
1 0
1 1
1 2
1 6
1 5
1 4
1 3
1 6
P A 6
V S S
5
7
V D D
P B 1 /A N 1
P B 1 /A N 1
P C 1
2 1
5
2 0
P B 2 /A N 2
M
P B 0 /A N 0
V S S
P C 0
6
1 9
7
1 8
8
1 7
9
1 6
1 0
1 5
1 1
1 4
1 2
1 3
1 6
5
1 5
6
1 4
7
1 3
8
1 2
9
1 1
1 0
P A 5 /IN T
P A 7
O S C 2
O S C 1
V D D
R E S
P D 0 /P W
M
N C
H T 4 6 F 4 7 E
2 0 S S O P -A
P B 5
1
2 8
P B 6
P A 3 /P F D
3
2 6
P A 4 /T M R
2 5
5
2 4
6
P A 0
P B 3 /A N 3
O S C 2
P B 1 /A N 1
P B 2 /A N 2
P A 7
P B 0 /A N 0
O S C 1
V S S
V D D
P C 1
4
P A 1
P A 6
P D 0 /P W
2 7
P A 2
P A 5 /IN T
R E S
2
P B 4
P B 7
H T 4 6 F 4 9 E
2 4 S K D IP -A /S O P -A /S S O P -A
4
1 7
4
V S S
M
P A 4 /T M R
V D D
P D 0 /P W
P D 0 /P W
2 2
P B 3 /A N 3
R E S
P B 0 /A N 0
3
O S C 2
O S C 1
R E S
P A 3 /P F D
2 3
P A 0
P A 7
P B 2 /A N 2
P B 6
P A 1
P A 6
P A 6
O S C 1
2 4
4
1 8
N C
1
P A 2
P A 5 /IN T
3
1 9
2
P A 0
P B 5
2
P A 1
1 2
1 0
9
P A 4 /T M R
1 4
1 1
8
2 0
P B 3 /A N 3
1 3
6
1
P A 7
O S C 2
1 5
4
P B 4
P B 7
H T 4 6 F 4 8 E
2 4 S K D IP -A /S O P -A /S S O P -A
Rev. 1.40
3
P A 3 /P F D
P A 2
P A 5 /IN T
1 7
2
H T 4 6 F 4 6 E /H T 4 6 F 4 7 E
1 8 D IP -A /S O P -A
2 4
P A 2
P A 1
P B 0 /A N 0
R E S
1
2 3
P A 4 /T M R
P B 2 /A N 2
P B 1 /A N 1
O S C 1
P B 5
2
1 8
P A 0
P B 3 /A N 3
H T 4 6 F 4 6 E /H T 4 6 F 4 7 E
1 6 N S O P -A
P B 4
1
P A 2
P A 5 /IN T
P A 7
O S C 2
1 3
P A 3 /P F D
M 0
P C 0
P C 1
P C 2
2 3
7
2 2
8
2 1
9
1 0
1 1
1 2
1 3
1 4
2 0
1 9
1 8
1 7
1 6
1 5
P B 7
P A 5 /IN T
P A 6
P A 7
O S C 2
O S C 1
V D D
R E S
P D 1 /P W
P D 0 /P W
P C 4
M 1
M 0
P C 3
H T 4 6 F 4 9 E
2 8 S K D IP -A /S O P -A /S S O P -A
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
引脚说明
HT46F46E,HT46F47E
引脚名称
PA0~PA2
PA3/PFD
PA4/TMR
PA5/ INT
PA6~PA7
输入/输出
输入 输出
配置选项
配置选项
说明
输入/输出
上拉电阻
唤醒功能
PA3 或 PFD
8 位双向输入/输出口。每一位可由配置选项设置为唤醒输
入。可由软件设置为 CMOS 输出、带或不带上拉电阻(由
上拉电阻选项决定)的斯密特触发输入。PFD、TMR、 INT
分别与 PA3,PA4、PA5 共用引脚。
PB0/AN0
PB1/AN1
PB2/AN2
PB3/AN3
输入/输出
PD0/PWM
输入/输出
OSC1
OSC2
输入
输出
RES
VDD
VSS
输入
—
—
4 位双向输入/输出口。可由软件设置为 CMOS 输出、带或
不带上拉电阻(由上拉电阻选项决定)的斯密特触发输入。
上拉电阻
A/D 输入与 PB 口共用引脚。一旦 PB 作为 A/D 输入(由软
件设置),则相应输入/输出功能和上拉电阻会自动失效。
1 位双向输入/输出口。可由软件设置为 CMOS 输出、带或
上拉电阻
不带上拉电阻(由上拉电阻选项决定)的斯密特触发输入。
PD0 或 PWM
PWM 输出与 PD0 共用引脚(由 PWM 选项决定)
。
OSC1、OSC2 连接 RC 或晶体(由配置选项确定)以产生内
晶体或 RC 部系统时钟。在 RC 振荡方式下,OSC2 是系统时钟四分频
的输出口。
—
斯密特触发复位输入,低电平有效。
—
正电源。
—
负电源,接地。
注:1、PA 的每个端口都可通过配置选项设定成具有唤醒功能。
2、引脚可以单独选择带上拉电阻。
3、引脚 PB2/AN2~PB3/AN3 在 16-pin 封装中没有引出。
4、未引出的端口可设置成输出或带上拉的输入以降低功耗。
HT46F48E
引脚名称
PA0~PA2
PA3/PFD
PA4/TMR
PA5/ INT
PA6~PA7
PB0/AN0
PB1/AN1
PB2/AN2
PB3/AN3
PB4~PB7
输入/输出
输入 输出
配置选项
配置选项
说明
输入/输出
上拉电阻
唤醒功能
PA3 或 PFD
8 位双向输入/输出口。每一位可由配置选项设置为唤醒输
入。可由软件设置为 CMOS 输出、带或不带上拉电阻(由
上拉电阻选项决定)的斯密特触发输入。PFD、TMR、 INT
分别与 PA3,PA4、PA5 共用引脚。
输入/输出
上拉电阻
8 位双向输入/输出口。可由软件设置为 CMOS 输出、带或
不带上拉电阻(由上拉电阻选项决定)的斯密特触发输入。
A/D 输入与 PB 口共用引脚。一旦 PB 作为 A/D 输入(由软
件设置),则相应输入/输出功能和上拉电阻会自动失效。
PC0~PC1
输入/输出
上拉电阻
PD0/PWM
输入/输出
上拉电阻
输入/输出或
PWM
输入
输出
晶体或 RC
OSC1
OSC2
Rev. 1.40
2 位双向输入/输出口。可由软件设置为 CMOS 输出、带或
不带上拉电阻(由上拉电阻选项决定)的斯密特触发输入。
1 位双向输入/输出口。可由软件设置为 CMOS 输出、带或
不带上拉电阻(由上拉电阻选项决定)的斯密特触发输入。
PWM 输出与 PD0 共用引脚(由 PWM 选项决定)
。
OSC1、OSC2 连接 RC 或晶体(由配置选项确定)以产生内
部系统时钟。在 RC 振荡方式下,OSC2 是系统时钟四分频
的输出口。
5
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
引脚名称
RES
VDD
VSS
输入/输出
输入 输出
输入
—
—
配置选项
配置选项
—
—
—
说明
斯密特触发复位输入,低电平有效。
正电源。
负电源,接地。
注:1、PA 的每个端口都可通过配置选项设定成具有唤醒功能。
2、引脚可以单独选择带上拉电阻。
HT46F49E
引脚名称
PA0~PA2
PA3/PFD
PA4/TMR
PA5/ INT
PA6~PA7
PB0/AN0
PB1/AN1
PB2/AN2
PB3/AN3
PB4~PB7
输入/输出
输入 输出
配置选项
配置选项
说明
输入/输出
上拉电阻
唤醒功能
PA3 或
PFD
8 位双向输入/输出口。每一位可由配置选项设置为唤醒输
入。可由软件设置为 CMOS 输出、带或不带上拉电阻(由
上拉电阻选项决定)的斯密特触发输入。PFD、TMR、 INT
分别与 PA3,PA4、PA5 共用引脚。
输入/输出
上拉电阻
8 位双向输入/输出口。可由软件设置为 CMOS 输出、带或
不带上拉电阻(由上拉电阻选项决定)的斯密特触发输入。
A/D 输入与 PB 口共用引脚。一旦 PB 作为 A/D 输入(由软
件设置),则相应输入/输出功能和上拉电阻会自动失效。
PC0~PC4
输入/输出
上拉电阻
PD0/PWM0
PD1/PWM1
输入/输出
上拉电阻
输入/输出
或 PWM
OSC1
OSC2
输入
输出
晶体或 RC
RES
VDD
VSS
输入
—
—
—
—
—
5 位双向输入/输出口。可由软件设置为 CMOS 输出、带或
不带上拉电阻(由上拉电阻选项决定)的斯密特触发输入。
2 位双向输入/输出口。可由软件设置为 CMOS 输出、带或
不带上拉电阻(由上拉电阻选项决定)的斯密特触发输入。
PWM 输出与 PD0 或 PD1 共用引脚(由 PWM 选项决定)
。
OSC1、OSC2 连接 RC 或晶体(由配置选项确定)以产生内
部系统时钟。在 RC 振荡方式下,OSC2 是系统时钟四分频
的输出口。
斯密特触发复位输入,低电平有效。
正电源。
负电源,接地。
注:1、PA 的每个端口都可通过配置选项设定成具有唤醒功能。
2、引脚可以单独选择带上拉电阻。
3、PC2~PC4 和 PD1/PWM1 在 24-pin 的封装中没有引出。
4、未引出的端口可设置成输出或带上拉的输入以降低功耗。
极限参数
电源供电…………….…..VSS-0.3V~VSS+6.0V
端口输入电压…………...VSS-0.3V~VDD+0.3V
IOL 总电流…………………………….150mA
总功耗……………………………… 500mW
储存温度………….-50℃~125℃
工作温度………….-40℃~ 85℃
IOH 总电流……. ………-100mA
注:这里只强调额定功率,超过极限参数所规定的范围将对芯片造成损害,无法预期芯片在上述标示范围外的工作状态,而
且若长期在标示范围外的条件下工作,可能影响芯片的可靠性。
Rev. 1.40
6
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
直流电气特性
符号
Ta=25℃
参数
VDD
测试条件
条件
fSYS=4MHz
VDD
工作电压
IDD1
工作电流(晶体振荡)
IDD2
工作电流(RC 振荡)
IDD3
IDD4
工作电流
(晶体振荡,RC 振荡)
工作电流
(晶体振荡,RC 振荡)
ISTB1
静态电流(看门狗打开)
ISTB2
静态电流(看门狗关闭)
VIL2
VIH2
输 入 /输 出 口、 TMR 、
INT 的低电平输入电压
输 入 /输 出 口、 TMR 、
INT 的高电平输入电压
低电平输入电压( RES)
高电平输入电压( RES)
VLVR
低电压复位
IOL
输入/输出口灌电流
IOH
输入/输出口源电流
RPH
上拉电阻
VAD
EAD
A/D 输入电压
A/D 转换误差
IADC
打开 ADC 增加的功耗
VIL1
VIH1
Rev. 1.40
—
3V
5V
3V
5V
5V
5V
3V
5V
3V
5V
fSYS=8MHz
fSYS=12MHz
无负载,fSYS=4MHz
ADC 关闭
无负载,fSYS=4MHz
ADC 关闭
无负载,fSYS=8MHz
ADC 关闭
无负载,fSYS=12MHz
ADC 关闭
无负载,系统 HALT
无负载,系统 HALT
最小
典型
最大
单位
2.2
—
5.5
V
3.3
4.5
—
—
—
—
—
—
0.6
2
0.8
2.5
5.5
5.5
1.5
4
1.5
4
V
V
mA
mA
mA
mA
—
4
8
mA
—
5
10
mA
—
—
—
—
—
—
—
—
5
10
1
2
µA
µA
µA
µA
—
—
0
—
0.3VDD
V
—
—
0.7VDD
—
VDD
V
—
—
—
—
—
LVR 打开,2.1V 选择
LVR 打开,3.15V 选择
LVR 打开,4.2V 选择
VOL=0.1VDD
VOL=0.1VDD
VOH=0.9VDD
VOH=0.9VDD
—
—
—
—
0
0.9VDD
1.98
2.98
3.98
4
10
-2
-5
20
10
0
—
—
—
—
—
2.10
3.15
4.20
8
20
-4
-10
60
30
—
±0.5
0.5
1.5
0.4 VDD
VDD
2.22
3.32
4.42
—
—
—
—
100
50
VDD
±1
1
3
V
V
V
V
V
mA
mA
mA
mA
kΩ
kΩ
V
LSB
mA
mA
3V
5V
3V
5V
3V
5V
—
—
3V
5V
—
7
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
交流电气特性
Ta=25℃
fSYS
系统时钟
—
fTIMER
定时器输入频率(TMR)
—
tWDTOSC
看门狗振荡器周期
tRES
外部复位低电平脉冲宽度
3V
5V
—
tSST
系统启动延迟时间
—
tLVR
tINT
tAD1
低电压复位时间
中断脉冲宽度
A/D 时钟周期-HT46F46E
A/D 时钟周期HT46F47E/HT46F48E/HT46F49E
A/D 转换时间-HT46F46E
A/D 转换时间HT46F47E/HT46F48E/HT46F49E
A/D 采样时间-HT46F46E
A/D 采样时间HT46F47E/HT46F48E/HT46F49E
—
—
—
测试条件
条件
2.2V~5.5V
3.3V~5.5V
4.5V~5.5V
2.2V~5.5V
3.3V~5.5V
4.5V~5.5V
—
—
—
从 HALT 状态
唤醒
—
—
—
—
—
1
—
—
µs
—
—
—
64
—
tAD1
—
—
—
76
—
tAD2
—
—
—
32
—
tAD1
—
—
—
32
—
tAD2
符号
tAD2
tADC1
tADC2
tADCS1
tADCS2
参数
VDD
最小
典型
最大
单位
400
400
400
0
0
0
45
32
1
—
—
—
—
—
—
90
65
—
4000
8000
12000
4000
8000
12000
180
130
—
kHz
kHz
kHz
kHz
kHz
kHz
µs
µs
µs
—
1024
—
*tSYS
0.25
1
0.5
1
—
—
2
—
—
ms
µs
µs
注:*tSYS =1/fSYS
Rev. 1.40
8
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
EEPROM 交流电气特性
交流电气特性
Ta=25℃
符号
fSK
tSKH
tSKL
tCSS
tCSH
tCDS
tDIS
tDIH
tPDI
tPD0
tSV
tPR
Rev. 1.40
VCC=5V±
±10%
最小
最大
0
2
250
—
250
—
50
—
0
—
250
—
100
—
100
—
250
—
250
—
250
—
5
—
参数
时钟频率
SK 高电平时间
SK 低电平时间
CS 建立时间
CS 保持时间
CS 屏蔽时间
DI 建立时间
DI 保持时间
D0 等待“1”时间
D0 等待“0”时间
状态有效时间
写周期时间
9
VCC=2.2V±
±10%
最小
最大
0
1
500
—
500
—
100
—
0
—
250
—
200
—
200
—
500
—
500
—
250
—
5
—
单位
MHz
ns
ns
ns
ns
ns
ns
ns
ns
ns
ns
ms
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
系统结构
系统结构
内部系统结构是盛群半导体公司内置 EEPROM 经济 A/D 型 FLASH 单片机具有良好运行性能的主要
因素。由于采用 RISC 结构,此系列单片机具有高运算速度和高性能的特性。通过流水线的方式,指令的
取得和执行同时进行,此举使得除了分支和调用指令外,其它指令都能在一个指令周期内完成。8 位的 ALU
参与指令集中所有的运算,它可完成算术运算、逻辑运算、移位、加、减和分支等功能,而内部的数据路
径则以通过累加器或 ALU 的方式加以简化。有些寄存器在数据存储器中被实现,且可以直接或间接寻址。
简单的寄存器寻址方式和结构特性,确保了在提供最大可靠度和灵活性的 I/O 和 A/D 控制系统时,仅需要
少数的外部器件。使得这些单片机适合用在低成本和批量生产的控制应用上,且可以提供 1K 至 4K 字的
程序存储器和 64 至 128 字节数据储存。
时序和流水线结构
系统时钟由晶体/陶瓷振荡器或 RC 振荡器提供,细分为 T1~T4 四个内部产生的非重叠时钟。程序计数
器在 T1 时自动加一并抓取一条新的指令,剩下的 T2~T4 时钟完成指令的解码和执行,因此一个 T1~T4 时
钟形成一个指令周期。虽然指令的取得和执行发生在连续的指令周期,但单片机流水线的结构会保证指令
在一个指令周期内被有效的执行,特殊的情况发生在程序计数器的内容被改变的时候,如子程序的调用或
跳转,在这情况下指令将需要多一个指令周期的时间去执行。
当使用 RC 振荡器时,OSC2 可以获得一个 T1 相时钟同步信号,这个 T1 相时钟有 fSYS/4 的频率,拥
有 1:3 高/低的占空比。
如果指令牵涉到分支,例如跳转或调用等指令,则需要两个机器周期才能完成指令执行。需要一个额
外周期的原因是程序先用一个周期取出实际要跳转或调用的地址,再用另一个周期去实际执行分支动作,
因此用户必须特别考虑额外周期的问题,尤其是在执行时间要求较严格时。
O s c illa to r C lo c k
( S y s te m C lo c k )
P h a s e C lo c k T 1
P h a s e C lo c k T 2
P h a s e C lo c k T 3
P h a s e C lo c k T 4
P ro g ra m
C o u n te r
P ip e lin in g
P C
P C + 1
F e tc h In s t. (P C )
E x e c u te In s t. (P C -1 )
F e tc h In s t. (P C + 1 )
E x e c u te In s t. (P C )
P C + 2
F e tc h In s t. (P C + 2 )
E x e c u te In s t. (P C + 1 )
系统时序和流水线
1
M O V A ,[1 2 H ]
3
C P L [1 2 H ]
2
C A L L D E L A Y
4
F e tc h In s t. 1
E x e c u te In s t. 1
F e tc h In s t. 2
5
:
6
D E L A Y :
:
N O P
E x e c u te In s t. 2
F e tc h In s t. 3
F lu s h P ip e lin e
F e tc h In s t. 6
E x e c u te In s t. 6
F e tc h In s t. 7
指令捕捉
Rev. 1.40
10
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
程序计数器
程序执行期间,程序计数器用来指向下一条要执行的指令地址。除了 JMP 或 CALL 这些要求跳转到
一个非连续的程序存储器地址之外,它会在每条指令执行完后自动增加一。对于内置 EEPROM 经济 A/D
型 FLASH 系列的单片机,根据所选择的单片机型号不同,程序计数器宽度会因程序存储器容量的不同而
不同。然而必须要注意只有低 8 位,即程序计数器低字节寄存器 PCL,是可以让使用者直接读写的。
当执行的指令要求跳转到非连续的地址时,如跳转指令、子程序调用、中断或复位等,单片机通过载
入所需的地址到程序计数器来控制程序。对于条件跳转指令,一旦条件符合,下一条在现在指令执行时所
取得的指令即会被摒弃,而由一个空指令周期来加以取代。
程序计数器低字节,即程序计数器低字节寄存器 PCL,可以通过程序控制取得,且它是可以读取和写
入的寄存器。通过直接传送数据到这寄存器,一个程序短跳转可以直接被执行,然而因为只有低字节的运
用是有效的,因此跳转被限制在同页存储器,即 256 个存储器地址的范围内,当这样一个程序跳转要执行
时,需注意会插入一个空指令周期。
程序计数器低字节在程序控制下是完全可用的。PCL 的使用可能导致程序分支,所以额外的周期需要
预先取得。有关 PCL 寄存器更多的信息可在特殊功能寄存器部份中找到。
模式
初始化复位
外部中断
定时/计数器溢出
A/D 转换中断
条件跳跃
装载 PCL
跳转、子程序调用
从子程序返回
b11
0
0
0
0
b10
0
0
0
0
b9
0
0
0
0
b8
0
0
0
0
PC11
#11
S11
PC10
#10
S10
PC9
#9
S9
PC8
#8
S8
程序计数器
b6
b5
0
0
0
0
0
0
0
0
PC+2
@7 @6 @5
#7
#6
#5
S7
S6
S5
b7
0
0
0
0
b4
0
0
0
0
b3
0
0
1
1
b2
0
1
0
1
b1
0
0
0
0
b0
0
0
0
0
@4
#4
S4
@3
#3
S3
@2
#2
S2
@1
#1
S1
@0
#0
S0
程序计数器
注: PC11~PC8:当前程序计数器位
@7~@0:PCL 位
#11~#0:指令码位
S11~S0:堆栈寄存器位
对于 HT46F49E,程序计数器为 12 位,即 b11~b0
对于 HT46F47E 和 HT46F48E,程序计数器为 11 位,即 b10~b0,表格中 b11 列无效
对于 HT46F46E,程序计数器为 10 位,即 b9~b0,表格中 b11 和 b10 列无效
Rev. 1.40
11
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
堆栈
堆栈是存储器中一个特殊的部分,它只用来储存程序计数器中的内容。根据选择的单片机,堆栈可介
于 4 或 6 层之间,它们既不是数据部份也不是程序空间部份,且既不可读取也不可写入。当前层由堆栈指
针 SP 加以指示,同样也是不可读写的。在子程序调用或中断响应服务时,程序计数器的内容被压入堆栈。
当子程序或中断服务程序结束时,返回指令(RET 或 RETI)使程序计数器从堆栈中返回它之前的值。当
芯片复位之后,SP 将指向堆栈的顶部。
P ro g ra m
T o p o f S ta c k
B o tto m
S ta c k L e v e l 1
S ta c k L e v e l 2
S ta c k
P o in te r
S ta c k L e v e l 3
o f S ta c k
C o u n te r
P ro g ra m
M e m o ry
S ta c k L e v e l N
注:对于 HT46F46E 而言,有 4 层堆栈;而对于 HT46F47E、HT46F48E 和 HT46F49E,具有 6 层堆栈。
如果堆栈已满,且有非屏蔽的中断发生,中断请求标志位会被置位,但是中断响应将被禁止。当堆栈
指针减少(执行 RET 或 RETI)
,中断将被响应。这个特性提供程序设计者简单的方法来预防堆栈溢出。然
而即使堆栈已满,CALL 指令仍然可以被执行,但会造成堆栈溢出。使用时应避免堆栈溢出的情况发生,
因为这可能会造成不可预期的程序分支指令执行错误。
算术逻辑单元——
算术逻辑单元——ALU
——
算术逻辑单元是单片机中很重要的部份,执行指令集中的算术和逻辑运算。ALU 连接到单片机的数据
总线,在接收相关的指令码后执行需要的算术与逻辑运算,并将结果储存在指定的寄存器,当 ALU 计算
或操作时,可能导致进位、借位或其它状态的改变,而相关的状态寄存器会因此更新内容以显示这些改变,
ALU 所提供的功能如下:
算术运算:ADD、ADDM、ADC、ADCM、SUB、SUBM、SBC、SBCM、DAA
逻辑运算:AND、OR、XOR、ANDM、ORM、XORM、CPL、CPLA
移位运算:RRA、RR、RRCA、RRC、RLA、RL、RLCA、RLC
递增和递减:INCA、INC、DECA、DEC
分支判断:JMP、SZ、SZA、SNZ、SIZ、SDZ、SIZA、SDZA、CALL、RET、RETI
FLASH 程序存储器
程序存储器用来存放用户代码即储存程序。程序存储器为 FLASH 类型意味着可以多次重复编程,方
便用户使用同一芯片进行程序的修改。使用适当的单片机编程工具,此系列所有单片机提供用户灵活便利
的调试方法和项目开发规划。
结构
14 位的程序存储器的容量是 1K 或 2K,15 位的程序存储器的容量则是 4K,这取决于选用哪种单片机。
程序存储器用程序计数器来寻址,其中也包含数据、表格和中断入口,数据表格可以设定在程序存储器的
任何地址,由表格指针来寻址。
Rev. 1.40
12
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
特殊向量
程序存储器内部某些地址保留用做诸如复位和中断入口等特殊用途。
地址 000H
该地址为程序初始化保留。系统复位后,程序总是从 000H 开始执行。
地址 004H
该地址为外部中断服务程序保留。当 INT 引脚转成低电平,如果中断允许且堆栈未满,则程序会
跳转到 004H 地址开始执行。
地址 008H
该地址为定时/计数器中断服务程序保留。当定时/计数器溢出,如果中断允许且堆栈未满,则程
序会跳转到 008H 地址开始执行。
地址 00CH
该地址为 A/D 转换中断服务程序保留。当 A/D 转换完成,如果中断允许且堆栈未满,则程序会
跳转到 00CH 地址开始执行。
0 0 0 H
0 0 4 H
0 0 8 H
0 0 C H
0 1 0 H
H T 4 6 F 4 6 E
H T 4 6 F 4 7 E
H T 4 6 F 4 8 E
H T 4 6 F 4 9 E
In itia lis a tio n
V e c to r
In itia lis a tio n
V e c to r
In itia lis a tio n
V e c to r
E x te rn a l
In te rru p t V e c to r
E x te rn a l
In te rru p t V e c to r
E x te rn a l
In te rru p t V e c to r
T im e r /E v e n t C o u n te r
In te rru p t V e c to r
T im e r /E v e n t C o u n te r
In te rru p t V e c to r
T im e r /E v e n t C o u n te r
In te rru p t V e c to r
A /D C o n v e rte r
In te rru p t V e c to r
A /D C o n v e rte r
In te rru p t V e c to r
A /D C o n v e rte r
In te rru p t V e c to r
1 4 b its
1 4 b its
1 5 b its
0 1 4 H
3 0 0 H
3 F F H
4 0 0 H
7 F F H
8 0 0 H
F F F H
N o t Im p le m e n te d
程序存储器结构
程序存储器结构
Rev. 1.40
13
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
查表
程序存储器中的任何地址都可以定义成一个表格,以便储存固定的数据。使用表格时,表格指针必须
先行设定,其方式是将表格的低字节地址放在表格指针寄存器 TBLP 中。这个寄存器定义表格低字节的 8
位地址。
在设定完表格指针后,表格数据可以使用“TABRDC [m]”或“TABRDL [m]”指令从当前的程序所在
的存储器页或存储器最后一页中来查表读取。当这些指令执行时,程序存储器中表格数据低字节,将被传
送到使用者所指定的数据存储器[m],程序存储器中表格数据的高字节,则被传送到 TBLH 特殊寄存器,
而高字节中未使用的位将被读取为“0”
。
下图是查表中寻址/数据流程:
P ro g ra m C o u n te r
H ig h B y te
P ro g ra m
M e m o ry
T B L P
T B L H
T a b le C o n te n ts H ig h B y te
S p e c ifie d b y [m ]
T a b le C o n te n ts L o w B y te
查表范例
以下范例说明 HT46F47E 中,表格指针和表格数据如何被定义和执行。这个例子使用的表格数据用
ORG 伪指令储存在存储器的最后一页,在此 ORG 伪指令中的值为 700H,即 2K 程序存储器 HT46F47E 单
片机中最后一页存储器的起始地址,而表格指针的初始值则为 06H,这可保证从数据表格读取的第一笔数
据位于程序存储器地址 706H,即最后一页起始地址后的第六个地址。值得注意的是,假如“TABRDC [m]”
指令被使用,则表格指针指向当前页。在这个例子中,表格数据的高字节等于零,而当“TABRDL [m]”
指令被执行时,此值将会自动的被传送到 TBLH 寄存器。
tempreg1
tempreg2
:
:
mov
mov
db ? ; temporary register #1
db ? ; temporary register #2
a,06h
; initialize table pointer – note that this address
; is referenced
tblp,a
; to the last page or present page
:
:
tabrdl tempreg1 ; transfers value in table referenced by table pointer
; to tempreg1
; data at prog. memory address 706H transferred to
; tempreg1 and TBLH
dec
tblp
; reduce value of table pointer by one
tabrdl tempreg2 ; transfers value in table referenced by table pointer
; to tempreg2
; data at prog. memory address 705H transferred to
; tempreg2 and TBLH
; in this example the data ″1AH″ is transferred to
; tempreg1 and data ″0FH″ to register tempreg2
; the value ″00H″ will be transferred to the high byte
; register TBLH
:
:
org
dc
Rev. 1.40
700h
; sets initial address of last page (for HT46F47E)
00Ah, 00Bh, 00Ch, 00Dh, 00Eh, 00Fh, 01Ah, 01Bh
:
14
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
因为 TBLH 寄存器是只读寄存器,不能重新储存,若主程序和中断服务程序都使用表格读取指令,应
该注意它的保护。使用表格读取指令,中断服务程序可能会改变 TBLH 的值,若随后在主程序中再次使用
这个值,则会发生错误。因此建议避免同时使用表格读取指令。然而在某些情况下,如果同时使用表格读
取指令是不可避免的,则在执行任何主程序的表格读取指令前,中断应该先除能,另外要注意的是所有与
表格相关的指令,都需要两个指令周期去完成操作。
表格地址
b11 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1 b0
TABRDC[m] PC11 PC10 PC9 PC8 @7 @6 @5 @4 @3 @2 @1 @0
TABRDL[m] 1
1
1 1 @7 @6 @5 @4 @3 @2 @1 @0
指令
表格区
注:PC11~PC8:当前程序计数器位
@7~@0:表格指针 TBLP 位
对于 HT46F49E 而言,表格地址为 12 位,即 b11~b0
对于 HT46F47E 和 HT46F48E 而言,表格地址为 11 位,即 b10~b0
对于 HT46F46E 而言,表格地址为 10 位,即 b9~b0
在线编程
FLASH 型程序存储器提供用户和设计者便利地对同一芯片进行程序的更新和修改。HOLTEK 单片机
提供在线编程的方式。用户可将进行过编程或未经过编程的单片机芯片连同电路板一起制成,最后阶段进
行程序的更新和程序的烧写,在无需去除或者重新插入芯片的情况下方便地保持程序为最新版本。
引脚名称
PA0
PA4
RES
VDD
VSS
说明
串行数据输入/输出
串行时钟输入
复位
电源
地
芯片内部程序存储器和 EEPROM 存储器都可以通过 5 线的接口在线进行编程。其中 PA0 用于数据串
行下载或上传、PA4 用于串行时钟、两条用于提供电源,另外一条用于复位。芯片在线烧写的详细使用说
明超出此文档的描述范围,将由专门的参考文献提供。
C o n n e c to r
P o w e r
V D D
G ro u n d
V S S
D a ta
P A 0
C lo c k
P A 4
R e s e t
R E S
在线编程接口
Rev. 1.40
15
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
数据存储器
数据存储器是内容可更改的 8 位 RAM 内部存储器,用来储存临时数据。分为两部份,第一部份是特
殊功能寄存器,这些寄存器有固定的地址且与单片机的正确操作密切相关。大多特殊功能寄存器都可在程
序控制下直接读取和写入,但有些被加以保护而不对用户开放。第二部份数据存储器是作一般用途使用,
都可在程序控制下进行读取和写入。
结构
数据存储器分为两个区块,即 BANK0 和 BANK1,全部 8 位宽度。数据存储器大部分位于 BANK0 区
块,分为两个部份,即专用和通用数据存储器。所有单片机的数据存储器的起始地址都是 00H。常见的寄
存器,如 ACC 和 PCL 等,全都具有相同的数据存储器地址。
0 0 H
0 0 H
S p e c ia l P u r p o s e
D a ta M e m o ry
3 F H
4 0 H
S p e c ia l P u r p o s e
D a ta M e m o ry
2 7 H
2 8 H
G e n e ra l P u rp o s e
D a ta M e m o ry
G e n e ra l P u rp o s e
D a ta M e m o ry
7 F H
H T 4 6 F 4 6 E a n d H T 4 6 F 4 7 E
0 0 H
S p e c ia l P u r p o s e
D a ta M e m o ry
3 F H
4 0 H
G e n e ra l P u rp o s e
D a ta M e m o ry
7 F H
H T 4 6 F 4 8 E
B F H
H T 4 6 F 4 9 E
数据存储器结构
注意:
注意:除部分特殊位,大部分数据存储区可以通过“SET [m].i”和“CLR [m].i”直接寻址。数据存储器也可以通过指
针 MP0 和 MP1 间接寻址。
数据存储器 BANK1 区块仅包含一个特殊功能寄存器 EECR,用来控制 EEPROM 通讯,全部具有相同
地址 40H。
4 0 H
E E C R
BANK1 数据存储器结构
通用数据存储器
所有的单片机程序需要一个读/写的存储区,让临时数据可以被储存和再使用。该 RAM 区域就是通用
数据存储器。这个数据存储区可让使用者进行读取和写入的操作。使用“SET [m].i”和“CLR [m].i”指令
可对个别的位做置位或复位的操作,方便用户在数据存储器内进行位操作。
特殊数据存储器
这个区域的数据存储器是存放特殊寄存器的,这些寄存器与单片机的正确操作密切相关,大多数的寄
存器可进行读取和写入,只有一些是被保护而只能读取的,相关细节的介绍请参看有关特殊功能寄存器的
部份。要注意的是,任何读取指令对存储器中未定义的地址进行读取将得到“00H”的值。
Rev. 1.40
16
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
特殊功能寄存器
为了确保单片机能成功的工作,数据存储器中设置了一些内部寄存器。这些寄存器确保内部功能(如
定时器和中断等)和外部功能(如 I/O 数据控制和 A/D 转换操作)的正确工作。在数据存储器中,这些寄
存器以 00H 作为起始地址。在特殊功能寄存器和通用数据存储器的起始地址之间,有一些未定义的数据存
储器,被保留用来做未来扩充,若从这些地址读取数据将返回 00H 值。
间接寻址寄存器 — IAR0,
,IAR1
间接寻址寄存器 IAR0 和 IAR1 位于数据存储区,并没有实际的物理地址。间接寻址的方法准许使用
间接寻址指针做数据操作,以取代定义实际存储器地址的直接存储器寻址方法。在间接寻址寄存器 IAR0
和 IAR1 上的任何动作,将对间接寻址指针 MP0 或 MP1 所指定的存储器地址产生对应的读/写操作。IAR0
和 MP0 配合使用将对 BANK0 区块数据进行存取,而 IAR1 和 MP1 配合使用可以对 BANK0 和 BANK1 区
块数据进行存取。直接读取间接寻址寄存器将返回 00H 的结果,而直接写入此寄存器则不做任何操作。
间接寻址指针 — MP0,MP1
对于该系列所有单片机,系统提供两个间接寻址指针,即 MP0 和 MP1。由于这些指针在数据存储器
中能象普通的寄存器一般被写入和操作,因此提供了一个寻址和数据追踪的有效方法。当对间接寻址寄存
器进行任何操作时,单片机指向的实际地址是由间接寻址指针所指定的地址。当 MP0 和 IAR0 配合使用将
对 BANK0 区块数据进行存取,而 MP1 和 IAR1 配合使用可以对 BANK0 和 BANK1 区块数据进行存取。
对于内含 64 或 88 个字节 RAM 空间的单片机,间接寻址指针的第 7 位没有作用。然而必须注意当读
取间接寻址指针时,第 7 位将返回“1”
。
以下例子说明如何清除一个具有 4 RAM 地址的区块,它们已事先定义成地址 adres1 到 adres4。
data .section ´data´
adres1
db ?
adres2
db ?
adres3
db ?
adres4
db ?
block
db ?
code .section at 0 ´code´
org 00h
start:
mov a,04h
; setup size of block
mov block,a
mov a,offset adres1 ; Accumulator loaded with first RAM address
mov mp0,a
; setup memory pointer with first RAM address
loop:
clr
inc
sdz
jmp
IAR0
mp0
block
loop
; clear the data at address defined by mp0
; increment memory pointer
; check if last memory location has been cleared
continue:
在上面的例子中有一点值得注意,即并没有确定 RAM 地址。
Rev. 1.40
17
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
0 0 H
0 1 H
0 2 H
0 3 H
0 4 H
0 5 H
0 6 H
0 7 H
0 8 H
0 9 H
0 A H
0 B H
0 C H
0 D H
0 E H
0 F H
1 0 H
1 1 H
1 2 H
1 3 H
1 4 H
1 5 H
1 6 H
1 7 H
1 8 H
1 9 H
1 A H
1 B H
1 C H
1 D H
1 E H
1 F H
2 0 H
2 1 H
2 2 H
2 3 H
2 4 H
2 5 H
2 6 H
2 7 H
H T 4
IA
M
IA
M
A
T
T
P
6 F 4 6 E
R 0
P 0
R 1
P 1
B P
C C
C L
B L P
B L H
H T 4
IA
M
IA
M
A
T
T
P
6 F 4 7 E
R 0
P 0
R 1
P 1
B P
C C
C L
B L P
B L H
H T 4
IA
M
IA
M
A
T
T
P
6 F 4 8 E
R 0
P 0
R 1
P 1
B P
C C
C L
B L P
B L H
H T 4
IA
M
IA
M
A
T
T
P
6 F 4 9 E
R 0
P 0
R 1
P 1
B P
C C
C L
B L P
B L H
S T A T U S
IN T C
S T A T U S
IN T C
S T A T U S
IN T C
S T A T U S
IN T C
T M R
T M R C
T M R
T M R C
T M R
T M R C
T M R
T M R C
P A
P A C
P B
P B C
P A
P A C
P B
P B C
P D
P D C
P W M
P D
P D C
P W M
P A
P A C
P B
P B C
P C
P C C
P D
P D C
P W M
P A
P A C
P B
P B C
P C
P C C
P D
P D C
P W M 0
P W M 1
A D R
A D C R
A C S R
A D
A D
A D
A C
R L
R H
C R
S R
A D
A D
A D
A C
R L
R H
C R
S R
A D
A D
A D
A C
R L
R H
C R
S R
: U n u s e d , re a d a s "0 0 "
3 F H
特殊数据存储器结构
存储区指针 − BP
数据存储器分为两个区块,即 BANK0 和 BANK1。除了 EECR 寄存器外,其他特殊寄存器和通用寄
存器都位于 BANK0。区块 BANK1 仅有一个 EEPROM 控制寄存器,即 EECR。可以使用存储区指针 BP
来选择对应的数据存储器区块。如果对 BANK0 进行数据存取,必须先设置存储区指针 BP 的值为 00H;
如果对 BANK1 进行数据存取,必须先设置存储区指针 BP 的值为 01H。
将 MP0 和 IAR0 配合使用,
无需设置存储区指针 BP 的值,
即可对 BANK0 进行数据存取。
寄存器 EECR
位于 BANK1 中 40H 地址,内部 EEPROM 数据的写入与读出可通过 EECR 进行操作,将 MP1 和 IAR1 配
合使用,存储区指针 BP 的值设置为“01H”即可对 EECR 进行间接存取。
复位后,通用数据存储器会初始化到 BANK0,但是在 HALT 模式下的 WDT 溢出复位,不会改变通
用数据存储器的存储区块。请注意,特殊功能数据存储器不受存储区的影响,也就是说,不论是在 BANK0、
BANK1 都能对特殊功能寄存器进行读写操作。直接寻址只会对 BANK0 内数据寄存器进行存取,而无需
设置存储区指针 BP 的值。
Rev. 1.40
18
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
b 7
b 0
B P 0
B P R e g is te r
B P 0
0
1
D a ta M e m o ry
B a n k 0
B a n k 1
N o t u s e d , m u s t b e re s e t to "0 "
存储区指针
累加器 — ACC
对任何单片机来说,累加器是相当重要的且与 ALU 所完成的运算有密切关系,所有 ALU 得到的运算
结果都会暂时储存在 ACC 累加器。若没有累加器,ALU 必须在每次进行如加法、减法和移位的运算时,
将结果写入到数据存储器,这样会造成程序编写和时间的负担。另外数据传送也常常牵涉到累加器的临时
储存功能,例如在使用者定义的寄存器和另一个寄存器之间传送数据时,由于两寄存器之间不能直接传送
数据,因此必须通过累加器来传送数据。
程序计数器低字节寄存器 — PCL
为了提供额外的程序控制功能,程序计数器低字节设置在数据存储器的特殊功能区域内,程序员可对
此寄存器进行操作,很容易的直接跳转到其它程序地址。直接给 PCL 寄存器赋值将导致程序直接跳转到程
序存储器的某一地址,然而由于寄存器只有 8 位的长度,因此只允许在本页的程序存储器范围内进行跳转,
而当使用这种运算时,要注意会插入一个空指令周期。
表格寄存器 — TBLP,
,TBLH
这两个特殊功能寄存器对储存在程序存储器中的表格进行操作。TBLP 为表格指针,指向表格数据的
地址。它的值必须在任何表格读取指令执行前加以设定,由于它的值可以被如 INC 或 DEC 的指令所改变,
这就提供了一种简单的方法对表格数据进行读取。表格读取数据指令执行之后,表格数据高字节存储在
TBLH 中。其中要注意的是,表格数据低字节会被传送到使用者指定的地址。
状态寄存器 — STATUS
8 位的 STATUS 寄存器包含零标志位(Z)
、进位标志位(C)、辅助进位标志位(AC)
、溢出标志位(OV)
、
暂停标志位(PDF)和看门狗溢出标志位(TO)
,它同时记录算术/逻辑运算的和系统工作状态数据。
除了 TO 和 PDF 标志位外,状态寄存器中的位像其它大部份寄存器一样可以被改变,但任何数据写入
到状态寄存器将不会改变 TO 或 PDF 标志位。另外,执行不同的指令后,与状态寄存器有关的运算可能会
得到不同的结果。TO 标志位只会受系统上电、看门狗溢出、或执行“CLR WDT”或“HALT”指令影响。
PDF 标志位只会受执行“HALT”或“CLR WDT”指令或系统上电影响。
Z、OV、AC 和 C 标志位通常反映最近运算的状态:
当加法运算的结果产生进位,或减法运算的结果没有产生借位时,则 C 被置位,否则 C 被清零,
同时 C 也会被带进位/借位的移位指令所影响。
当低半字节加法运算的结果产生进位,或高半字节减法运算的结果没有产生借位时,AC 被置位,
否则 AC 被清零。
当算术或逻辑运算结果是零时,Z 被置位,否则 Z 被清零。
Rev. 1.40
19
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
当运算结果高两位的进位状态异或结果为 1 时,OV 被置位,否则 OV 被清零。
系统上电或执行“CLR WDT”指令会清零 PDF,而执行“HALT”指令则会置位 PDF。
系统上电或执行“CLR WDT”或“HALT”指令会清零 TO,而当 WDT 溢出则会置位 TO。
另外当进入一个中断程序或执行子程序调用时,状态寄存器不会自动压入到堆栈保存。假如状态寄存
器的内容是重要的且子程序可能改变状态寄存器的话,则需谨慎的去做正确的储存。
b 7
T O
P D F
O V
Z
b 0
A C
C
S T A T U S R e g is te r
A r
C a
A u
Z e
ith m e
r r y fla
x ilia r y
r o fla g
O v e r flo w
g
tic /L o g ic O p e r a tio n F la g s
c a r r y fla g
fla g
S y s te m M
P o w e r d o w
W a tc h d o g
N o t im p le m
a n
n
tim
e
a g e m e n t F la g s
fla g
e - o u t fla g
n te d , re a d a s "0 "
状态寄存器
中断控制寄存器 — INTC
8 位的 INTC 寄存器用来控制外部和内部中断的动作。通过标准的位操作指令来设定这些寄存器的位,
每个中断的使能/除能功能可分别被控制。INTC 寄存器内的总中断位 EMI 控制所有中断的使能/除能,用
来设定所有中断使能位的开或关。当一个中断程序被响应时,就会自动屏蔽其它中断,EMI 位将被清除,
而执行“RETI”指令则会置位 EMI 位。
定时/计数器
,TMRC
定时 计数器 — TMR,
该系列的单片机提供了一个 8 位定时/计数器。TMR 寄存器用于存放 8 位设定值,可以预先写入固定
的数据,以允许设定不同的时间中断。而 TMRC 寄存器设置定时/计数器的工作模式、打开或关闭定时/计
数器。
输入/输出
输入 输出控制寄存器
输出控制寄存器
在特殊功能寄存器中,输入/输出寄存器和它们相对应的控制寄存器很重要。所有的输入/输出端口都
有相对应的寄存器,标示为 PA、PB、PC 和 PD。如数据存储器结构图中所示,这些输入/输出寄存器映射
到数据存储器的特定地址,用以传送端口上的输入/输出数据。每个输入/输出端口有一个相对应的控制寄
存器,分别为 PAC、PBC、PCC 和 PDC,也同样映射到数据存储器的特定地址。这些控制寄存器设定引脚
的状态,以决定哪些是输入口,哪些是输出口。要设定一个引脚为输入,控制寄存器对应的位必须设定成
逻辑高,若引脚设定为输出,则控制寄存器对应的位必须设为逻辑低。程序初始化期间,在从输入/输出端
口中读取或写入数据之前,必须先设定控制寄存器的位以确定引脚为输入或输出。使用“SET [m].i”和“CLR
[m].i”指令可以直接设定这些寄存器的某一位。这种在程序中可以通过改变输入/输出端口控制寄存器中某
一位而直接改变该端口输入/输出状态的能力是此系列单片机非常有用的特性。
脉宽调制寄存器 — PWM,
,PWM0,
,PWM1
此系列单片机都提供了 1 个或 2 个脉冲宽度调制器(即 PWM)。每个 PWM 都具有自己独立的控制寄存
器。对于只有一个脉冲宽度调制器的单片机,它的控制寄存器为 PWM。具有两个脉冲宽度调制器的单片
机,控制寄存器为 PWM0 和 PWM1。这些 8 位的寄存器定义相应的脉冲宽度调制器调制周期的占空比。
Rev. 1.40
20
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
A/D 转换寄存器 — ADR,
,ADRL,
,ADRH,
,ADCR,
,ACSR
此系列单片机都提供了 4 通道 8 位或 9 位 A/D 转换器。A/D 转换需要涉及到 1 个或 2 个数据存储器、
一个控制寄存器和一个时钟控制寄存器。对于 HT46F46E,A/D 转换结果寄存器为 8 位的 ADR;而对于此
系列其它 9 位 A/D 分辨率单片机,其 A/D 转换结果寄存器为高位 ADRH 寄存器和低位 ADRL 寄存器。当
一个模数转换周期结束后,转换出的数字量将保存在这些寄存器中。通道的选择和 A/D 转换器的设置通过
寄存器 ADCR 控制,A/D 时钟频率由时钟源寄存器 ACSR 定义。
EEPROM 控制寄存器–EECR
控制寄存器
此系列所有单片机的一个特性是内建 EEPROM 数据存储器。“Electrically Erasable Programmable Read
Only Memory”为电可擦可编程只读存储器,由于其非挥发的存储结构,即使在电源掉电的情况下存储器内
的数据仍然保存完好。通过将这些存储器合并,对设计者来说增加了许多新的应用机会,EEPROM 的存储
功能使得此系列单片机可以用来存储产品编号、校准值、用户特定数据、系统配置参数或其他产品信息等。
b 7
D O
D I
S K
b 0
C S
E E C R
N o
E E
1 :
0 :
t im
P R
m e
s ta
R e g is te r
p le m e n te d , r e a d a s " 0 "
O M D a ta M e m o r y S e le c t B it
m o r y s e le c t
n d b y
E E P R O M
E E P R O M
E E P R O M
S e r ia l C lo c k In p u t
S e r ia l D a ta In p u t
S e r ia l D a ta O u tp u t
EEPROM 控制寄存器
EEPROM 数据存储器
内部 EEPROM 数据寄存器容量为 128×8 位或者 256×8 位,取决于选用哪种单片机。由于映射方式
与程序存储器和数据存储器不同,只能使用间接寻址且必须通过 EECR 寄存器进行操作。
单片机
HT46F49E 除外
HT46F49E
EEPROM 存储器容量
128×8
256×8
EEPROM 数据存储器容量
EEPROM 数据存储器的存取
内部 EEPROM 数据寄存器的操作由 7 条指令实现,控制 EEPROM 数据寄存器的 READ、WRITE、
ERASE、EWEN 等。内部 EEPROM 和三线制 EEPROM 结构相似,4 个引脚用来传输指令,地址和数据信
息,即芯片片选 CS,串行时钟 SK,数据输入 DI 和数据输出 DO。通过间接寻址 BANK1 区块 EECR 寄存
器,控制 EEPROM 的 CS、SK,DI 和 DO 信号,以软件的方式产生 EEPROM 的操作时序,进而达到读写
EEPROM 的目的。
Rev. 1.40
21
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
位
符号
EEPROM 功能
0~3
—
未用,读取为“0”
4
CS
EEPROM 数据寄存器选择位
5
SK
串行时钟位:用来将数据写入或读出 EEPROM
6
DI
数据输入位:用来将指令,地址和数据信息写入内
部 EEPROM
7
DO
数据输出位:用来将内部 EEPROM 数据读出
没有数据读出时此位将是高阻态
EECR 寄存器—
寄存器—控制位功能
当执行 READ 指令,数据从内部 EEPROM 数据寄存器读取,SK 上升沿时 DO 数据有效,否则 DO 为
高阻态。DI 线上的串行数据会在 SK 上升沿写入内部 EEPROM 数据寄存器。当指令,地址和数据信息发
送完成后,必须马上将 CS 置低。上电复位后,操作内部 EEPROM 数据寄存器必须重新进行初始化。
寄存器 EECR 的操作只能通过 MP1 和 IAR1 间接寻址方式进行,由于位于 BANK1 区块 40H 地址,对
寄存器 EECR 操作前必须将 MP1 设置为 40H 且将存储区指针 BP 设置为 1。
EEPROM 数据寄存器指令设置
控制内部 EEPROM 的所有操作指令共有 7 条,比如读、写,禁止和使能等。当 CS 引脚置位高电平且
将起始位“1”发出后,相关的指令通过 DI 引脚写入内部 EEPROM 数据寄存器。对于 READ,WRITE 和
ERASE 指令有两位操作码对应,然后写入地址信息,对于容量为 128×8 的单片机,地址是 7 位。对于容
量为 256×8 的单片机,9 位的地址信息会被写入,然而高位是空位,可以为任意值。地址以高位在前的格
式发出。
EEPROM 数据输入和输出时序
对于 EWEN、EWDS,ERAL 和 WRAL 这 4 条指令,起始位“1”发出后,紧接着发出两位的操作码
“00”
, 对于 EEPROM 存储器容量 128×8 的单片机,然后写入 7 位长度的地址信息,而对于 EEPROM
存储器容量 256×8 的单片机,则写入 9 位长度的地址信息。地址信息高两位定义可参考下面表格,地址
信息其余位为任意值,可设置为 0 或 1。
当 WRITE 或 ERASE 指令发出后,内部 EEPROM 寄存器写周期将数据写入芯片,内部写数据期间
EEPROM 无法接收指令,直至内部写周期结束。上电复位后,对内部 EEPROM 数据寄存器操作前必须进
行初始化,以确保操作正确进行。
Rev. 1.40
22
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
指令
READ
ERASE
WRITE
EWEN
EWDS
ERAL
WRAL
描述
Read Out Data Byte(s)
Erase Single Data Byte
Write Single Data Byte
Erase/Write Enable
Erase/Write Disable
Erase All
Write All
起始位
1
1
1
1
1
1
1
指令码
10
11
01
00
00
00
00
地址
A6~A0
A6~A0
A6~A0
11 XXXXX
00 XXXXX
10 XXXXX
01 XXXXX
数据
D7~D0
—
D7~D0
—
—
—
D7~D0
地址
X,A7~A0
X,A7~A0
X,A7~A0
11 XXXXXXX
00 XXXXXXX
10 XXXXXXX
01 XXXXXXX
数据
D7~D0
—
D7~D0
—
—
—
D7~D0
指令设置摘要—
指令设置摘要—HT46F49E 除外
指令
READ
ERASE
WRITE
EWEN
EWDS
ERAL
WRAL
描述
Read Out Data Byte(s)
Erase Single Data Byte
Write Single Data Byte
Erase/Write Enable
Erase/Write Disable
Erase All
Write All
起始位
1
1
1
1
1
1
1
指令码
10
11
01
00
00
00
00
指令设置摘要—
指令设置摘要—HT46F49E
READ
READ 指令用于从内部 EEPROM 读取一个或者多个数据。发送 READ 指令前必须将 CS 置位高电平,
紧接着为起始位“1”和两位操作码“10”
,所有数据由 DI 发送。随后地址信息以高位在前的模式发出。
对于单片机 HT46F49E,最后一位指令操作码和地址信息高位之间必须插入 1 个空位。在最后一位地址,
即 A0 发出后,数据信息以 D7 开始,以高位在前模式在 SK 上升沿由 DO 读取。然而,在首位数据 D7 之
前有一个逻辑“0”信号。一个字节数据被读取之后,EEPROM 内地址会自动增加,允许下一个连续的数
据被读取,而不需要输入下一数据的地址。只要 CS 保持为高电平,下一个地址的数据 D7 将紧接着上一个
地址的数据 D0 之后被读取,两数据间也不会再有逻辑“0”插入。地址会循环累加直到 CS 从高电平变为
低电平。READ 指令执行完后 DO 为高阻态,注意的是 READ 指令不受 EWEN 和 EWDS 影响,无论 EWEN
或者 EWDS 命令执行与否,READ 命令都可以有效执行。
READ 时序—
时序—HT46F49E 除外
Rev. 1.40
23
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
READ 时序—
时序—HT46F49E
WRITE
WRITE 指令用于向内部 EEPROM 写入一个数据。发送 WRITE 指令前必须将 CS 置位高电平,紧接着
为起始位“1”和两位操作码“01”
,所有数据由 DI 发送。随后地址信息以高位在前的模式发出。在最后
一位地址,即 A0 发出后,数据信息以高位在前模式发出。对于单片机 HT46F49E,最后一位指令操作码
和地址信息高位之间必须插入 1 个空位。当 WRITE 指令、地址和数据送出后,EEPROM 会在 CS 下降沿
进入内部写周期。由于内部写周期包括先擦除再写入的过程,因此在写入数据前不需要执行擦除命令。内
部写周期时钟由 EEPROM 时钟发生器提供,并不需要 SK 信号。内部写数据期间 EEPROM 无法接收指令,
直至内部写周期结束。EEPROM 执行内部写周期期间,可通过设置 CS 为高电平,循环检测 DO 位状态决
定内部写周期是否结束,DO 位保持低电平说明内部写周期仍在进行;当 DO 恢复到高电平,内部写周期
结束。执行 WRITE 指令前必须先发出 EWEN 指令,以使能内部 EEPROM 的擦写。
WRITE 时序—
时序—HT46F49E 除外
WRITE 时序—
时序—HT46F49E
Rev. 1.40
24
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
EWEN/EWDS
EWEN/EWDS 指令可以使能或禁止擦写动作有效执行。发送 EWEN 或 EWDS 指令前必须将 CS 置位
高电平,紧接着为起始位“1”和两位操作码“00”
。执行 EWEN 指令将继续发送“11”
,执行 EWDS 指令
将继续发送“00”
。最后依据内置 EEPROM 为 128×8 或者 256×8 的存储器容量,分别将 5 位或者 7 位任意
数据发出以结束指令过程。当内部 EEPROM 寄存器处于禁止擦写状态时,EEPROM 存储器内数据无法被
改写,这样 EEPROM 内数据处于写保护状态。执行 WRITE、ERASE、WRAL 或 ERAL 指令之前,必须
先执行 EWEN 命令使能擦写,擦写使能直到芯片掉电或 EWDS 指令被执行。
EWEN/EWDS 时序
ERAL
在擦写使能模式下,ERAL 命令可以将所有存储器单元擦除为逻辑“1”状态。发送 ERAL 指令前必
须将 CS 置位高电平,紧接着为起始位“1”和两位操作码“00”
,继续发送“10”
,最后依据内置 EEPROM 为
128×8 或者 256×8 的存储器容量,分别将 5 位或者 7 位任意数据发出以结束指令过程。ERAL 命令送出
后,EEPROM 会在 CS 下降沿执行内部擦除动作。内部擦除动作时钟由 EEPROM 时钟发生器提供,并不
需要 SK 信号。内部擦除数据期间 EEPROM 无法接收指令,直至内部擦除周期结束。EEPROM 执行内部
写周期期间,可通过设置 CS 为高电平,循环检测 DO 位状态决定内部写周期是否结束,DO 位保持低电平
说明内部写周期仍在进行;
当 DO 恢复到高电平,
内部写周期结束。
执行 ERAL 指令之前,
必须先执行 EWEN
命令使能擦写。
ERAL 时序
WRAL
在擦写使能模式下,WRAL 指令可以将相同数据写入内部 EEPROM 寄存器所有单元。发送 WRAL
指令前必须将 CS 置位高电平,紧接着为起始位“1”和两位操作码“00”
,继续发送“01”
,最后依据内置
EEPROM 为 128×8 或者 256×8 的存储器容量,分别将 5 位或者 7 位任意数据发出以结束指令过程。WRAL
命令送出后,数据信息以高位在前模式发出,EEPROM 会在 CS 下降沿进入内部写周期。内部写周期时钟
由 EEPROM 时钟发生器提供,并不需要 SK 信号。内部写数据期间 EEPROM 无法接收指令,直至内部写
周期结束。EEPROM 执行内部写周期期间,可通过设置 CS 为高电平,循环检测 DO 位状态决定内部写周
期是否结束,DO 位保持低电平说明内部写周期仍在进行;当 DO 恢复到高电平,内部写周期结束。执行
WRAL 指令之前,必须先执行 EWEN 命令使能擦写。执行 WRAL 指令时内部写周期包括先擦除再写入的
过程,因此在写入数据前不需要执行擦除命令。
Rev. 1.40
25
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
WRAL 时序
ERASE
在擦写使能模式下,ERASE 指令用来擦除指定地址的数据,指定地址的数据将设置为“1”。发送
ERASE 指令前必须将 CS 置位高电平,紧接着为起始位“1”和两位操作码“11”
,所有数据由 DI 发送。
随后地址信息以高位在前的模式发出。对于单片机 HT46F49E,最后一位指令操作码和地址信息高位之间
必须插入 1 个空位。ERASE 指令和指定地址发出后,EEPROM 会在 CS 下降沿执行内部擦除动作,将指
定地址的数据设置为全 1。内部擦除动作时钟由 EEPROM 时钟发生器提供,并不需要 SK 信号。EEPROM
内部写数据期间无法接收指令,直至内部写周期结束。EEPROM 执行内部写周期期间,可通过设置 CS
为高电平,循环检测 DO 位状态决定内部写周期是否结束,DO 位保持低电平说明内部写周期仍在进行;
当 DO 恢复到高电平,内部写周期结束。执行 ERASE 指令之前,必须先执行 EWEN 命令使能擦写。
ERASE 时序—
时序—HT46F49E
HT46F49E 除外
ERASE 时序—
时序—HT46F49E
Rev. 1.40
26
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
内部写周期
执行 WRITE、ERASE,ERAL 和 WRAL 指令后,内部 EEPROM 寄存器进入内部写或擦除过程,内部
擦除动作时钟由 EEPROM 时钟发生器提供,并不需要 SK 信号。虽然单片机无法控制 EEPROM 内部写的
时序,但是仍然有一些方法检测出内部写周期是否已经结束。在这个内部写周期过程中,EEPROM 不会执
行其他任何的命令,直至内部写周期结束。
检测 EEPROM 内部写周期是否结束的一种方法就是在 CS 下降沿检查 DO 信号。CS 下降沿将初始化
EEPROM 内部写周期,如果内部写周期没有结束,DO 为低电平;如果内部写周期结束,DO 为高电平,
内部 EEPROM 寄存器可以接收其他指令。
Is s u e in s tr u c tio n
A d d re s s , D a ta
C S
tC
D S
d e la y
In te r n a l w r ite c y c le in itia te d
C S
tS
N o
D O
V
d e la y
= "1 "
D O
w ill g o lo w h e r e to in d ic a te in te r n a l
w r ite c y c le s till in p r o g r e s s
Y e s
In te r n a l w r ite
c y c le fin is h e d
内部写周期巡检时序
EEPROM 初始化
当单片机上电复位后,用户对内部 EEPROM 寄存器执行操作之前必须执行一段初始化程序,比如执
行 WRITE 指令将随机数据写入某一地址前必须首先发出 EWEN 指令,然后执行 EWDS 指令结束内部
EEPROM 的操作(此步骤为可选)
。
下列范例程序实现如何上电后初始化 EEPROM:
mov
A, 01h
mov
BP, A
;set to bank1
mov
A,40h
mov
MP1,A
; set MP1 to EECR address
call
EWEN
;subroutine to run EWEN instructions
mov
A, 7Fh
mov
EEADDR, A
mov
A, 55h
mov
EEDATA, A
call
WRITE
;subroutine to run WRITE instructions
;write 55h data to address 7FH
call
EWDS
;optional subroutine to run EWDS instruction
Rev. 1.40
27
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
EEPROM 程序范例
下面几个范例程序列出如何将指令发出,对EEPROM进行读写操作。这些程序能形成对EEPROM存取
数据的原理的基本的理解。这些程序供有相同的256×8位容量的内部EEPROM存储器的HT46F49E单片机使
用。对于另外的有更小的128×8位容量的内部EEPROM存储器的单片机,插入在最后一位指令操作码和地址
信息高位之间1个空位没有发出。
范例 1-定义和发送
定义和发送 EEPROM 操作指令
_CS
EQU
IAR1.4
_SK
EQU
IAR1.5
_DI
EQU
IAR1.6
_DO
EQU
IAR1.7
_EECR
EQU
40H
C_Addr_Length
EQU 8
C_Data_Length
EQU 8
DATA .SECTION at 70H ‘DATA’
EE_command
DB
?
ADDR
DB
?
WR_Data
DB
?
COUNT
DB
?
WriteCommand:
MOV
A,3
MOV COUNT,A
WriteCommand_0:
CLR
_DI
SZ
EE_command.7
SET
_DI
SET
_SK
CLR
_SK
CLR
C
RLC
EE_command
SDZ
COUNT
JMP
WriteCommand_0
CLR
_DI
RET
Rev. 1.40
;EEPROM lines setup to have corresponding
;Bit in the Indirect Addressing Register IAR1
;EEPROM can only be indirectly addressed using MP1
;
;Setup address of the EEPROM control register
;Address length-8bits
;Data length-always 8bits
;Stores the read or write instruction information
;Store Write data or read data address
;Store read or write data
;Temporary counter
;Write instruction code subroutine
;Read,Write and Erase instruction are 3bits long
;Prepare the transmitted bit
;Check value of highest instruction code bit
;Get next bit of instruction code
;Check if last bit has been transmitted
28
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
范例 2-向
向 EEPROM 写地址
WriteAddr:
MOV
MOV
SET
CLR
A,C_Addr_Length
COUNT,A
_SK
_SK
CLR
SZ
SET
CLR
RLC
SET
CLR
SDZ
JMP
CLR
RET
_DI
ADDR.7
_DI
C
ADDR
_SK
_SK
COUNT
WriteAddr_0
_DI
;Write address subroutine
;Setup address length
;Dummy bit transmission for HT46F49E only
;Not requied for other devices
WriteAddr_0:
;Check value of address MSB
; GET next address bit
;Check if address lsb has been written
范例 3-向
向 EEPROM 写数据
WriteData:
MOV
MOV
A,C_Data_Length
COUNT,A
CLR
SZ
SET
CLR
RLC
SET
CLR
SDZ
JMP
CLR
SET
_DI
WR_Data.7
_DI
C
WR_Data
_SK
_SK
COUNT
WriteData_0
_CS
_CS
SNZ
JMP
RET
_DO
$-1
;Setup data length
WriteData_0:
Rev. 1.40
;Check value of data MSB
;Get next address bit
;Check if data lsb has been written
;CS low edge initiates internal write cycle
;CS high edge allows DO to be used to indicate
;end of write cycle
;Poll for DO high to indicate end of write cycle
29
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
范例 4-从
从 EEPROM 读数据
ReadData:
MOV
MOV
CLR
A,C_Data_Length
COUNT,A
WR_Data
CLR
RLC
SET
SZ
SET
CLR
SDZ
JMP
MOV
RET
C
WR_Data
_SK
_DO
WR_Data.0
_SK
COUNT
ReadData _0
A,WR_Data
;Setup data length
ReadData _0:
;Check value of data MSB
;Check if lsb has been received
输入/输出端口
输入 输出端口
盛群单片机的输入/输出端口控制具有很大的灵活性。这体现在每一个引脚在使用者的程序控制下可以
被指定为输入或输出、所有引脚的上拉电阻选项、以及指定引脚的唤醒选择,这些特性也使得此类单片机
在广泛应用上都能符合开发的要求。
依据所选单片机及封装类型的不同,该系列单片机提供从 13 到 23 个不等双向输入/输出口,标示为
PA、PB、PC 和 PD,这些输入/输出端口在数据存储器的对应指定地址如表所示。所有输入/输出口都可作
为输入及输出之用。作为输入操作时,输入/输出引脚无锁存功能,输入数据必须在指令“MOV A,[m]”T2
上升沿准备好,m 表示端口地址。对于输出操作,所有数据是锁存的,而且持续到输出锁存被重写。
上拉电阻
许多产品应用在端口处于输入状态时需要外加一个上拉电阻来实现上拉的功能。为了免去这个外加的
电阻,当引脚设置为输入时,可由内部连接上拉电阻,这些上拉电阻可通过配置选项来加以选择,它用一
个 PMOS 晶体管来实现。
PA 口唤醒
此系列的单片机都具有暂停功能,使得单片机进入暂停模式以降低功耗,此功能对于电池及低功耗应
用很重要。唤醒单片机有很多种方法,其中之一就是使 PA 某位引脚从高电平转为低电平。当使用暂停指
令“HALT”迫使单片机进入暂停状态以后,单片机将保持闲置即低功耗状态,直到 PA 口上被选为唤醒输
入的引脚电平发生下降沿跳变。这个功能特别适合于通过外部开关来唤醒的应用。值得注意的是 PA 口的
每个引脚都可单独的选择具有唤醒的功能。
Rev. 1.40
30
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
输入/输出端口控制寄存器
输入 输出端口控制寄存器
每一个输入/输出端口都具有各自的控制寄存器(PAC、PBC、PCC 和 PDC)控制输入/输出状态。利
用此控制寄存器,每一个 CMOS 输出或者带或不带上拉电阻的输入,均可利用软件控制方式加以动态的重
新设置。所有输入/输出端口的引脚都各自对应于输入/输出端口控制寄存器的某一位。若输入/输出引脚要
实现输入功能,则对应的控制寄存器位必须设定为“1”,这时程序指令可以直接读出输入引脚的逻辑状态。
,则此引脚被设置为 CMOS 输出。当引脚被设置为输出状态,程序
如果引脚的控制寄存器位被设定为“0”
指令读取的是输出端口寄存器的内容。请注意当输入/输出端口被设置为输出状态时,此时如果对输出口做
读取的动作,则会读取到内部数据寄存器中的锁存值,而不是输出引脚实际的逻辑状态。
引脚共用
引脚共用功能
引脚的共用功能可以增加单片机的灵活程度。有限的引脚个数会严重的限制设计者,但是引脚的复用
功能特性,可以很好的解决此类问题。复用功能输入/输出引脚的功能选择,有些是由配置选项进行设定,
有些则是在应用程序中进行控制。
外部中断输入
外部中断引脚 INT 与输入/输出引脚 PA5 共用。如果不需要外部中断输入,此引脚可当作一般的
输入/输出引脚使用;此时,外部中断控制寄存器 INTC 中的外部中断使能位必须除能。
外部时钟输入
外部时钟输入引脚 TMR 与 PA4 共用。如果 PA4/TMR 引脚被设定为计数器输入,则 TMRC 控制
寄存器中相应的控制位也必须正确设置。在不需要外部计数器输入的时候,此引脚也可以作为一
般 I/O 引脚使用。对于此种应用,TMRC 控制寄存器中的定时器模式位必须选为定时器模式(内部
时钟源),以避免输入/输出引脚与计数器操作的冲突。
PFD 输出
此系列每款单片机包含 PFD 功能,PFD 信号输出引脚与 PA3 共用。PFD 输出功能可以通过配置
选项进行选择,并且在程序烧录后保持不变。需要注意的是,必须将 PAC.3 设为输出以使能 PFD
输出。若 PAC 设置为带上拉电阻的输入,即使选择了 PFD 输出功能,此引脚仍将作为带上拉电
阻的一般输入引脚使用。
PWM 输出
此系列单片机均提供 1 个或者 2 个 PWM 输出,分别与 PD0 和 PD1 共用引脚。PWM 输出功能可
以通过配置选项进行选择,并且在程序烧录后保持不变。需要注意的是,必须将 PDC 中相应的
位设为输出以使能 PWM 输出。若 PDC 设置为带上拉电阻的输入,即使选择了 PWM 输出功能,
此引脚仍将作为带上拉电阻的一般输入引脚使用。
A/D 输入
此系列的单片机都具有 4 个 A/D 转换器输入。所有的模拟输入与 PB 口的 I/O 引脚共用。如果这
些引脚被用来作为 A/D 输入而不是一般的 I/O 引脚,则 A/D 转换控制寄存器 ADCR 中相应的位
必须被正确的设定。配置选项内不包含 A/D 功能。如果这些引脚作为 I/O 引脚使用,仍可以通过
配置选项选择是否要接上拉电阻。然而如果作为 A/D 输入使用,则这些引脚上的上拉电阻会自动
失效。
Rev. 1.40
31
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
输入/输出端口
输入 输出端口结构
输出端口结构
下列为输入/输出端口的内部结构图,可能与芯片内部实际的结构并不完全相同,只是用于帮助用户理
解输入/输出端口。
D a ta B u s
W r ite C o n tr o l R e g is te r
D D
W e a k
P u ll- u p
Q
C K
S
C h ip R e s e t
I/O
R e a d C o n tr o l R e g is te r
P in
D a ta B it
Q
D
W r ite D a ta R e g is te r
C K
Q
S
M
R e a d D a ta R e g is te r
S y s te m
V
P u ll- H ig h
O p tio n
C o n tr o l B it
Q
D
U
X
W a k e -u p
P A o n ly
W a k e - u p O p tio n
没有引脚共用
没有引脚共用功能的输入/
功能的输入/输出端口
D a ta B u s
W r ite C o n tr o l R e g is te r
W r ite D a ta R e g is te r
R e a d
IN
T M
S y
D a ta
T fo r
R fo r
s te m
R e
P A
P A
W a
g is te r
5 o n ly
4 o n ly
k e -u p
W e a k
P u ll- u p
S
P A 4 /T M R
P A 5 /IN T
D a ta B it
Q
D
C K
D D
Q
C K
C h ip R e s e t
R e a d C o n tr o l R e g is te r
V
P u ll- H ig h
O p tio n
C o n tr o l B it
Q
D
S
Q
M
U
X
W a k e - u p O p tio n
PA4/PA5 输入/
输入/输出端口
Rev. 1.40
32
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
V
D a ta B u s
W r ite C o n tr o l R e g is te r
W r ite D a ta R e g is te r
P F D
o r P W M
W e a k
P u ll- u p
Q
C K
S
C h ip R e s e t
R e a d C o n tr o l R e g is te r
P u ll- H ig h
O p tio n
C o n tr o l B it
Q
D
D D
P A 3 /P F D
P D 0 /P W M
D a ta B it
Q
D
C K
S
P D 0 /P W M 0
( H T 4 6 F 4 9 E 2 8 - p in p a c k a g e o n ly )
P D 1 /P W M 1
Q
M
W a v e fo rm
M
R e a d D a ta R e g is te r
U
U
X
P F D /P W M
O p tio n
X
PA3/PFD 和 PD/PWM 输入/
输入/输出端口
V
D a ta B u s
W r ite C o n tr o l R e g is te r
W r ite D a ta R e g is te r
S
P B 0 /A N 0 ~ P B 3 /A N 3
D a ta B it
Q
D
C K
S
Q
M
R e a d D a ta R e g is te r
T o A /D C o n v e rte r
W e a k
P u ll- u p
Q
C K
C h ip R e s e t
R e a d C o n tr o l R e g is te r
P u ll- H ig h
O p tio n
C o n tr o l B it
Q
D
D D
P C R 2
P C R 1
P C R 0
U
X
A n a lo g
In p u t
S e le c to r
A C S 2 ~ A C S 0
PB 输入/
输入/输出端口
编程注意事项
在使用者的程序中,最先要考虑的是端口的初始化。复位之后,所有的输入/输出数据及端口控制寄存
器都将被设为逻辑高。所有输入/输出引脚默认为输入状态,而其电平则取决于其它相连接电路以及是否选
择了上拉选项。如果 PAC、PBC、PCC 和 PDC 端口控制寄存器某些引脚位被设定输出状态,这些输出引
脚会有初始高电平输出,除非数据寄存器端口 PA、PB、PC 和 PD 在程序中被预先设定。设置哪些引脚是
输入及哪些引脚是输出,可通过设置正确的值到适当的端口控制寄存器,或者使用指令“SET [m].i”及“CLR
[m].i”来设定端口控制寄存器中个别的位。注意的是当使用这些位控制指令时,一个读-修改-写的操作将
会发生。单片机必须先读入整个端口上的数据,修改个别的位,然后重新把这些数据写入到输出端口。
Rev. 1.40
33
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
S y s te m
C lo c k
T 1
T 2
T 3
T 4
T 1
T 2
T 3
T 4
P o rt D a ta
W r ite to P o r t
R e a d fro m
P o rt
读写时序
PA 口有唤醒的额外功能,当芯片在 HALT 状态时有很多方法去唤醒此单片机,其中之一就是 PA 口任
一个引脚电平由高到低的转换,可以设定 PA 口的一个或多个引脚有这项功能。
注意,有些型号芯片具有不同封装类型,导致某些端口没有引出。若这此引脚被设为输入,就会产生
振荡并增加系统功耗,特别在 HALT 模式下更明显。建议在使用中将未引出的端口设为输出或设为带上拉
的输入。
定时/计数器
定时 计数器
定时/计数器在任何单片机中都是一个很重要的部分,提供程序设计者一种实现和时间有关功能的方
法。每款单片机提供一个 8 位的向上定时/计数器。每个定时/计数器有三种不同的工作模式,可以被当作
普通定时器、外部事件计数器、或者脉冲宽度测量器使用。定时器里的 8 级预分频器扩大了定时的范围。
有两个和定时/计数器相关的寄存器,分别为 TMR 和 TMRC。TMR 是存储实际的计数值,赋值给此
寄存器可以设定初始计数值,读取此寄存器可获得定时/计数器的内容。而 TMRC 是定时/计数器的控制寄
存器,此寄存器设置定时/计数器的选项,控制定时/计数器的工作模式。定时/计数器的时钟源可配置设置
来自内部系统时钟或外部引脚输入(PA4/TMR)
。
配置定时/计数器输入时钟源
配置定时 计数器输入时钟源
内部定时/计数器的时钟源可以来自系统时钟或外部时钟源。当定时/计数器在定时器模式或者在脉冲
宽度测量模式时,使用系统时钟作为计时来源。内部时钟还可以通过预分频器进行分频,预分频值由 PSC0、
PSC1 及 PSC2 三位决定。
定时/计数器在事件计数器模式时使用外部时钟源,时钟源由外部定时/计数器引脚 PA4/TMR 提供。每
次外部引脚由高电平到低电平或者由低电平到高电平(由 TE 位决定)跳变时,计数器值加一。
D a ta B u s
P r e lo a d R e g is te r
P S C 2 ~ P S C 0
(1 /1 ~ 1 /1 2 8 )
fS
Y S
8 - S ta g e P r e s c a le r
T M 1
R e lo a d
T M 0
T im e r /E v e n t C o u n te r
M o d e C o n tro l
P A 4 /T M R In p u t
T O N
O v e r flo w
to In te rru p t
T im e r /E v e n t C o u n te r
8 - B it T im e r /E v e n t C o u n te r
¸ 2
P F D
T E
8 位定时/
位定时/计数器结构
Rev. 1.40
34
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
定时/计数寄存器
定时 计数寄存器 — TMR
TMR 是一个 8 位特殊功能寄存器,用于储存实际定时器值。在收到一内部计时脉冲时或外部定时/计
数器引脚 PA4/TMR 状态发生跳变时,此寄存器的值将会加一。定时器将从预置寄存器所载入的值开始计
数,直到计满 FFH,此时定时器溢出且会产生一个内部中断信号。定时器自动重新加载计数器初值并继续
计数。为了得到定时/计数器 00H 至 FFH 的最大计数范围,预置寄存器必须先清除为 00H。注意的是,上
电后预置寄存器处于未知状态。定时/计数器在 OFF 条件下,如果把数据写入预置寄存器,这数据将被立
即写入实际的定时器。而如果定时/计数器已经 ON 且正在计数,在这个周期内写入到预置寄存器的任何新
数据将保留在预置寄存器,只有在下一个溢出发生时才被写入实际定时器。
定时/计数控制寄存器
定时 计数控制寄存器 — TMRC
定时/计数器能工作在三种不同的模式,至于选择工作在哪一种模式则是由控制寄存器的内容决定。
TMRC 和 TMR 寄存器控制定时/计数器的全部操作。在使用定时器之前,必须正确地设定定时/计数控制寄
存器,以便保证定时器能正确操作,而这个过程通常在程序初始化期间完成。
为了确定定时器工作在哪一种模式,定时器模式,外部事件计数模式或脉冲宽度测量模式,TM0 和
TM1 位必须设定到要求的逻辑电平。定时器打开位 TON,即定时/计数控制寄存器的第 4 位,是定时器控
制的开关,设定为逻辑高时,计数器开始计数,而清零时则停止计数。定时/计数控制寄存器的第 0~2 位决
定输入定时预分频器中的分频系数。如果使用外部计时源,预分频器的位将不起作用。如果定时器工作在
事件计数或脉冲宽度测量模式,TE 的逻辑电平,即 TMRC 寄存器的第 3 位将可用来选择上升沿或下降沿
触发。
b 7
T M 1
T M 0
T O N
T E
b 0
P S C 2 P S C 1 P S C 0
T M R C R e g is te r
T im e r P
P S C 2
0
0
0
0
1
1
1
1
E v e n t C
1 : c o u n
0 : c o u n
P u ls e W
1 : s ta rt
0 : s ta rt
r e s c a le r R a te S e le
P S C 0
P S C 1
0
0
1
0
0
1
1
1
0
0
1
0
0
1
1
1
o u n te r A c tiv e E d g
t o n fa llin g e d g e
t o n r is in g e d g e
id th M e a s u r e m e n
c o u n tin g o n r is in g
c o u n tin g o n fa llin g
c t
T im e r
1 :1
1 :2
1 :4
1 :8
1 :1
1 :3
1 :6
1 :1
e S e le c t
R a te
6
2
4
2 8
t A c tiv e E d g e S e le c t
e d g e , s to p o n fa llin g e d g e
e d g e , s to p o n r is in g e d g e
T im e r /E v e n t C o u n te r C o u n tin g E n a b le
1 : e n a b le
0 : d is a b le
N o t im p le m e n te d , r e a d a s " 0 "
O p e r a tin g M o d e S e
T M 1
T M 0
0
n o
0
0
e v
1
1
tim
0
1
p u
1
le c t
m o d
e n t c
e r m
ls e w
e a v a ila b le
o u n te r m o d e
o d e
id th m e a s u r e m e n t m o d e
定时/
定时/计数控制寄存器
Rev. 1.40
35
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
设置定时器模式
设置定时器模式
在这个模式下,定时器可以用来测量固定时间间隔,当定时器发生溢出时,就会产生一个内部中断信
号。要工作在这个模式,TMRC 寄存器中位 TM1 和 TM0 必须分别设为 1 和 0。在这个模式下,定时器的
计数源来自内部时钟。定时器的输入计时频率是 fSYS 除以定时器预分频器的值,这个值由定时器控制寄存
器的 PSC2~PSC0 位决定。定时器使能位 TON 必须被设为逻辑高,才能使定时器工作。每次内部时钟由高
到低的电平跳变都会使定时器值增加一。当定时器已满即溢出时,会产生中断信号且定时器会重新载入已
经载入到预置寄存器的值,然后继续向上计数。若定时器中断允许,将会产生一个中断信号。寄存器 INTC
中 ETI 位清零,则定时器中断禁止。注意的是定时器溢出中断也是唤醒暂停模式的一种方法。
P r e s c a le r O u tp u t
In c re m e n t
T im e r C o n tr o lle r
T im e r + 1
T im e r + 2
T im e r + N
T im e r + N + 1
定时器模式时序图
设置事件计数模式
设置事件计数模式
在这个模式下,发生在 PA4/TMR 引脚的外部逻辑事件改变的次数,可以通过内部计数器来记录。为
使定时/计数器工作在事件计数器模式,TMRC 寄存器中 TM1 和 TM0 位必须分别设为 0 和 1。计数器打开
位 TON 必须设为逻辑高,使计数器开始计数。当 TE 为逻辑低时,每次外部定时/计数器引脚 PA4/TMR 接
收到由低到高的电平跳变将使计数器值加一。而当 TE 为逻辑高时,每次外部定时/计数器引脚接收到由高
到低的电平跳变将使计数器值加一。与另外两个模式一样,当计数器计满时,计数器将溢出且自动从预置
寄存器中加载初值。若定时中断允许,将会产生一个中断信号。定时器中断可以通过清除 INTC 寄存器中
ETI 位禁止。为了确保定时/计数器工作在事件计数器模式,必须注意两点,首先是要将 TM0 和 TM1 位设
定在事件计数器模式,其次是确定端口控制寄存器将这个引脚设定为输入状态。计数器的溢出是唤醒暂停
模式的一种方法。在事件计数模式下,即使系统进入 HALT 状态,定时/计数器仍可记录外部引脚的变化。
因此当定时/计数器溢出将会唤醒系统,若中断允许将会产生一个定时器中断信号。
E x te rn a l E v e n t
In c re m e n t
T im e r C o u n te r
T im e r + 1
T im e r + 2
T im e r + 3
计数器模式时序图
Rev. 1.40
36
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
设置脉冲宽度测量模式
设置脉冲宽度测量模式
在这个模式下,可以测量外部 PA4/TMR 引脚上的外部脉冲宽度。在脉冲宽度测量模式中,定时/计数
器的时钟源由内部时钟提供,TM0 和 TM1 位则必须都设为逻辑高。如果 TE 位是逻辑低,当外部 PA4/TMR
引脚接收到一个由高到低的电平跳变时,定时/计数器将开始计数直到外部 PA4/TMR 引脚回到它原来的高
电平。此时 TON 位将自动清除为零,且定时/计数器停止计数。而如果 TE 位是逻辑高,则当外部 PA4/TMR
引脚接收到一个由低到高的电平跳变时,
定时/计数器开始计数直到外部 PA4/TMR 引脚回到原来的低电平。
如上所述,TON 位将自动清除为 0,且定时/计数器停止计数。注意,在脉冲宽度测量模式中,当外部定时
器引脚上的外部控制信号回到它原来的电平时,TON 位将自动地清除为 0。而在其它两种模式下,TON 位
只能在程序控制下才会被清除为 0。这时定时/计数器中的值可被程序读取,并由此得知外部定时/计数器引
脚接收到的脉冲的长度。当 TON 位被清除时,任何在外部定时/计数器引脚的电平跳变将被忽略。直到 TON
位再次被程序设定为逻辑高,定时/计数器才开始脉冲宽度测量。用这种方法可完成单个脉冲的测量,注意
的是在这种模式下,定时/计数器是通过外部定时/计数器引脚上的逻辑跳变来控制,而不是通过逻辑电平。
与另外两个模式一样,当定时/计数器计满产生溢出,定时/计数器将清零并载入预置寄存器的值。若
定时器中断允许,将会产生一个内部中断信号。为了确保 PA4/TMR 工作在脉冲宽度测量模式,必须注意
两点,首先是要将 TM0 与 TM1 位设定在脉冲宽度测量模式,其次是确定此引脚的输入/输出端口控制寄存
器对应位被设定为输入状态。定时器的溢出中断也是唤醒暂停模式的一种。
E x te rn a l T M R
P in In p u t
T O N ( w ith T E = 0 )
P r e s c a le r O u tp u t
In c re m e n t
T im e r C o u n te r
+ 1
T im e r
+ 2
+ 3
+ 4
P r e s c a le r O u tp u t is s a m p le d a t e v e r y fa llin g e d g e o f T 1 .
脉冲宽度测量模式时序图
可编程分频器 − PFD
PFD 输出引脚与 PA3 引脚共用。此功能通过配置选项选择,如果不选择该功能,则这个引脚作为普通
的输入/输出引脚使用。PFD 电路使用定时器溢出信号作为它的时钟源。载入合适的值到定时器预分频器,
可以产生需要时钟源的分频系数,由此来控制输出的频率。系统时钟被预分频器分频后的时钟源,进入定
时器计时,定时器从预置寄存器的值开始往上计数,直到计数值满而产生溢出信号,导致 PFD 输出改变状
态。定时器将自动地重新载入预置寄存器的值,并继续向上计数。
要使 PFD 正确运作,必须将 PA 控制寄存器 PAC 的第 3 位设置为输出。如果把它设置为输入,则 PFD
输出不工作,该引脚仍是作为普通的输入引脚使用。只有把 PA3 位置“1”,PFD 输出引脚才会有输出。这
个输出数据位被用作 PFD 输出的开/关控制。注意,如果 PA3 输出数据位被清为“0”
,PFD 输出将为低电
平。
假如系统时钟使用晶体振荡器,则使用这种频率产生的方法可以产生非常精确的频率值。
Rev. 1.40
37
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
T im e r O v e r flo w
P F D C lo c k
P A 3 D a ta
P F D O u tp u t a t P A 3
PFD 输出控制
输出控制
预分频器
TMRC 控制寄存器的 PSC0~PSC2 可以用来定义定时/计数器中内部时钟源的预分频级数。定时/计数器
溢出信号可用来驱动 PFD 或产生定时器中断。
输入/输出接口
输入 输出接口
当工作在事件计数或脉冲宽度测量模式时,定时/计数器需要使用外部 PA4/TMR 引脚以确保正确的动
作。由于此端口为共用引脚,必须将其设置为定时/计数器的外部输入而不是普通的输入/输出,这需要设
置 TMRC 寄存器内的相应的位为事件计数或脉宽测量模式。另外端口控制寄存器 PAC 的第 4 位必须为高,
以保证被设为输入引脚。即使定时/计数器使用了此引脚,配置选项的上拉仍有效。
编程注意事项
当定时/计数器工作在定时器模式时,定时器的时钟源使用内部系统时钟且与单片机所有运算都能同
步。在这个模式下,当定时器寄存器溢出时,单片机将产生一个内部中断信号,使程序进入相应的内部中
断向量。对于脉冲宽度测量模式,定时器的时钟源也是使用内部系统时钟,但定时器只有在正确的逻辑条
件出现在外部 PA4/TMR 引脚时开始工作。由于外部事件和内部定时器时钟无法同步,只有当下一个定时
器时钟到达时,单片机才会发现这个外部事件,因此在测量值上可能有小的差异,需要程序设计者在程序
应用时加以注意。同样的情况发生在定时/计数器配置为外部事件计数模式时,它的时钟源是外部事件,与
内部系统时钟或者定时器时钟不同步。
当读取定时/计数器或写数据到预置寄存器时,计数时钟会被阻隔以避免错误发生,但这样做可能会导
致计数错误,所以程序设计者应该考虑到这点。在第一次使用定时/计数器之前,要仔细确认有没有正确地
设定初始值。中断控制寄存器中的定时器使能位必须正确的设置,否则相应定时/计数器内部中断仍然无效。
定时/计数器控制寄存器中的触发边沿选择、定时/计数器工作模式和时钟源控制位也必须正确的设定,以
确保定时/计数器按照应用需求而正确的配置。在定时/计数器打开之前,必须确保先载入定时/计数器寄存
器的初始值;这是因为在上电后,定时/计数器寄存器中的初始值是未知的。定时/计数器初始化后,可以
使用定时/计数器控制寄存器中的使能位来打开或关闭定时器。在打开定时器之前,必须先确定定时器模式
是否已设定。通过写定时/计数控制寄存器,即同时改变模式并打开定时器,可能会导致错误结果。
Rev. 1.40
38
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
当发生定时/计数器溢出,相应的中断请求标志将置位。若中断允许,将会产生一个中断信号。不管中
断是否允许,在 HALT 状态下,定时/计数器的溢出也会产生唤醒,这种情况可能发生在外部信号变化的计
数模式中,定时/计数器向上计数直至溢出并唤醒系统。若在 HALT 模式下,不需要定时器中断唤醒系统,
可以在进入 HALT 前将相应中断请求标志位置位。
定时/计数器应用范例
定时 计数器应用范例
这个例子说明了如何设置定时/计数器的寄存器,如何设置和控制中断。另外还需注意的是,怎样通
过寄存器的第 4 位来启停定时/计数器。此应用范例设置定时/计数为定时模式,时钟来源于内部的系统时
钟。
org 04h
reti
org 08h
jmp tmrint
:
org 20h
; external interrupt vector
; timer/event counter interrupt vector
;jmp here when timer overflows
; main program
; internal timer/event counter interrupt routine
tmrint:
:
;timer/event counter main program placed here
:
reti
:
:
begin:
mov a,09bh
mov tmr,a
mov a,081h
mov tmrc,a
mov a,005h
mov intc,a
set tmrc.4
Rev. 1.40
; setup timer registers
; setup timer preload value
; setup timer control register
; timer mode and prescaler set to /2
; setup interrupt register
; enable master interrupt and timer interrupts
; start timer – note mode bits must be previously setup
39
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
脉冲宽度调制器
此系列每款单片机都提供 1 个或 2 个脉冲宽度调制(PWM)输出。
这在马达速度控制等应用中十分有用,
通过给相应的 PWM 寄存器设置特定的值,PWM 功能可提供占空比可调而频率固定的波形。
在数据存储器中,单片机为每一个 PWM 都指定了对应的寄存器。对于只有一个 PWM 输出的单片机,
这个寄存器为 PWM。对于有两个 PWM 输出的单片机,寄存器则为 PWM0 和 PWM1。此寄存器为 8 位,
表示输出波形中每个调制周期的占空比。为了提高 PWM 调制频率,每一个调制周期被调制两个或四个独
立的调制子区段,即分别是 7+1 或 6+2 模式。每个单片机可以通过设置适当的配置选项来选择使用哪种
模式。当选择一种配置选项模式后,此模式将应用于此芯片的所有 PWM 输出。注意的是,当使用 PWM
时,只要将所需的值写入相应的 PWM 寄存器内,单片机的内部硬件会自动地将波形细分为子调制周期。
对所有的单片机而言,PWM 时钟源就是系统时钟 fSYS。
单片机型号
通道
PWM 模式
输出引脚
PWM 寄存器名称
HT46F49E
2
6+2 或 7+1
PD0/PD1
PWM0/PWM1
其它芯片
1
6+2 或 7+1
PD0
PWM
将原始调制周期分成 2 个或 4 个子周期的方法,使产生更高的 PWM 频率成为可能,这样可以提供更
广泛的应用。只要产生的 PWM 脉冲周期小于负载的时间常数,PWM 输出就比较合适,这是因为长时间
常数负载将会平均 PWM 输出的脉冲。使用者必须理解 PWM 频率与 PWM 调制频率的不同之处。当 PWM
时钟为系统时钟 fSYS,而 PWM 值为 8 位时,整个 PWM 周期的频率为 fSYS/256。然而工作在 7+1 模式时,
PWM 调制频率将会是 fSYS/128,而工作在 6+2 模式时,PWM 调制频率将会是 fSYS/64。
PWM 调制频率
PWM 频率
PWM 占空比
(6+2)位模式 fSYS/64
(7+1)位模式 fSYS/128
fSYS/256
[PWM]/256
6+2 PWM 模式
通过一个 8 位的 PWM,PWM0 或 PWM1 寄存器控制,每个完整的 PWM 周期由 256 个时钟周期组成。
在 6+2 PWM 模式中,每个 PWM 周期又被分成四个独立的子周期,称为调制周期 0~调制周期 3,在表格
中以“i”表示。四个子周期各包含 64 个时钟周期。在这个模式下,得到以 4 为因数增加的调制频率。8
位的 PWM 寄存器被分成两个部分,这个寄存器的值表明整个 PWM 波形的占空比。第一部分包括第 2 位~
第 7 位,表示 DC 值,第二部分为第 0 位~第 1 位,表示 AC 值。在 6+2 PWM 模式中,四个调制子周期的
占空比,分别如下表所示。
参数
调制周期 i
(i=0~3)
AC (0~3)
DC (占空比
占空比)
占空比
i<AC
DC + 1
64
i≥AC
DC
64
6+2 模式调制周期值
Rev. 1.40
40
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
下图表示 6+2 模式下 PWM 输出的波形。请特别注意单个的 PWM 周期是如何分成四个独立的调制周
期以及 AC 值与 PWM 值的关系。
fS
Y S
/2
[P W M ] = 1 0 0
P W M
2 5 /6 4
2 5 /6 4
2 5 /6 4
2 5 /6 4
2 5 /6 4
2 6 /6 4
2 5 /6 4
2 5 /6 4
2 5 /6 4
2 6 /6 4
2 6 /6 4
2 6 /6 4
2 5 /6 4
2 5 /6 4
2 6 /6 4
2 6 /6 4
2 6 /6 4
2 6 /6 4
2 5 /6 4
2 6 /6 4
[P W M ] = 1 0 1
P W M
[P W M ] = 1 0 2
P W M
[P W M ] = 1 0 3
P W M
P W M
m o d u la tio n p e r io d : 6 4 /fS
M o d u la tio n c y c le 0
Y S
M o d u la tio n c y c le 1
P W M
M o d u la tio n c y c le 2
c y c le : 2 5 6 /fS
M o d u la tio n c y c le 3
M o d u la tio n c y c le 0
Y S
6+2 PWM 模式
b 7
b 0
P W M , P W M 0 , P W M 1 R e g is te r s
A C
v a lu e
D C
v a lu e
(6 + 2 ) M o d e
6+2 模式 PWM 寄存器
7+1 模式
通过一个 8 位的 PWM,PWM0 或 PWM1 寄存器控制,每个完整的 PWM 周期由 256 个时钟周期组成。
在 7+1PWM 模式中,每个 PWM 周期又被分成两个独立的子周期,称为调制周期 0~调制周期 1,在表格中
以“i”表示。两个子周期各包含 128 个时钟周期。在这个模式下,得到以 2 为因数增加的调制频率。8 位
的 PWM 寄存器被分成两个部分,这个寄存器的值表明整个 PWM 波形的占空比。第一部分包括第 1 位~
第 7 位,表示 DC 值,第二部分为第 0 位,表示 AC 值。在 7+1 PWM 模式中,两个调制子周期的占空比,
分别如下表所示。
参数
调制周期 i
(i=0~1)
AC (0~1)
DC (占空比
占空比)
占空比
i<AC
DC + 1
128
i≥AC
DC
128
7+1 模式调制周期值
Rev. 1.40
41
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
下图表示 7+1 模式下 PWM 输出的波形。请特别注意单个的 PWM 周期是如何分成两个独立的调制周
期以及 AC 值与 PWM 值的关系。
fS
Y S
/2
[P W M ] = 1 0 0
P W M
5 0 /1 2 8
5 0 /1 2 8
5 0 /1 2 8
5 1 /1 2 8
5 0 /1 2 8
5 1 /1 2 8
5 1 /1 2 8
5 1 /1 2 8
5 1 /1 2 8
5 1 /1 2 8
5 2 /1 2 8
[P W M ] = 1 0 1
P W M
[P W M ] = 1 0 2
P W M
[P W M ] = 1 0 3
P W M
5 2 /1 2 8
P W M
m o d u la tio n p e r io d : 1 2 8 /fS
Y S
M o d u la tio n c y c le 0
M o d u la tio n c y c le 1
P W M
c y c le : 2 5 6 /fS
M o d u la tio n c y c le 0
Y S
7+1 PWM 模式
b 7
b 0
P W M , P W M 0 , P W M 1 R e g is te r s
A C
D C
(7 + 1 ) M o d e
v a lu e
v a lu e
7+1 模式 PWM 寄存器
PWM 输出控制
此系列所有单片机,PWM 输出与 PD0 或 PD1 端口引脚共用。要使某个引脚作为 PWM 输出而非普通
,以确
的 I/O 引脚,必须选择正确的 PWM 配置选项。I/O 端口控制寄存器 PDC 中相应的位也必须写“0”
保所需要的 PWM 输出引脚设置为输出状态。
在完成这两个初始化步骤,以及将所要求的 PWM 值写入 PWM
寄存器之后,将“1”写入到 PD 输出数据寄存器的相应位,则 PWM 数据就会出现在引脚上。将“0”写
入到 PD 输出数据寄存器的相应位,则会除能 PWM 输出功能并强制输出低电平。通过这种方式,PD 数据
输出寄存器作为 PWM 功能的开/关控制来使用。假如配置选项已经选择 PWM 功能,但是在 PDC 控制寄
存器中相应的位又写入“1”,使其成为输入引脚,则此引脚仍是作为带上拉电阻的正常输入端使用。
PWM 应用范例
下面的范例程序表明如何设置和控制 PWM 输出。在使用相应 PWM 输出前需要在配置选项中使能
PWM 输出。
clr
pdc.0
;set pin PD0 as output
clr
pdc.1
;set pin PD1 as output
set
mov
pd.0
a,64h
;pd.0=1;enable pin “PD0/PWM0” to be the PWM channel 0
; PWM0=100D=64H
Rev. 1.40
42
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
mov
pwm0,a
set
mov
mov
pd.1
a,65h
pwm1,a
;pd.1=1;enable pin “PD1/PWM1” to be the PWM channel 1
; PWM1=101D=65H
clr
clr
pd.0
pd.1
; disable the PWM0 output – PD.0 will remain low
; disable the PWM1 output – PD.1 will remain low
A/D 转换器
对于大多数电子系统而言,处理现实世界中模拟信号是共同的需求。为了完全由单片机来处理这些信
号,首先必须通过 A/D 转换器将模拟信号转换成数字信号。将 A/D 转换器电路集成入单片机,可有效的
减少外部器件,随之而来,具有降低成本和减少器件空间需求的优势。
A/D 简介
此系列每款单片机都包含了四个通道的 A/D 转换器,它们可以直接接入外部模拟信号(来自传感器或
其它控制信号)并直接将这些信号转换成 8 位或 9 位的数字量。
单片机型号
HT46F46E
HT46F47E
HT46F48E
HT46F49E
输入通道
4
4
4
4
转换位数
8
9
9
9
输入引脚
PB0~PB3
PB0~PB3
PB0~PB3
PB0~PB3
下图显示了 A/D 转换器整个内部结构和相关的寄存器。
A D C
fS
S o u rc e
/2
C lo c k D iv id e
R a tio
A C S R
¸ N
Y S
V
P B 0
P B 1
P B 2
P B 3
/A N
/A N
/A N
/A N
0
1
3
P in C o n fig u r a tio n
B its
A /D
r e fe r e n c e v o lta g e
A D R
A D C
2
P C R 0 ~ P C R 2
D D
R e g is te r
o r
A D R L
A D R H
S T A R T
A D C S 0 ~ A D C S 2
C h a n n e l S e le c t
B its
E O C B
A /D D a ta
R e g is te r s
A D C R
R e g is te r
S ta r t B it E n d o f
C o n v e r s io n B it
A/D 转换器结构
A/D 转换器数据寄存器 — ADR,
,ADRL,
,ADRH
对于具有 8 位 A/D 转换器的 HT46F46E,使用寄存器 ADR 保存模数转换值;对于其它具有 9 位 A/D
转换器的芯片,则需要两个寄存器,一个高字节寄存器 ADRH 和一个低字节寄存器 ADRL。在 A/D 转换
完毕后,单片机可以直接读取这些寄存器以获得转换结果。对于具有 2 个 A/D 转换结果寄存器的单片机,
要注意的是,只有高位寄存器 ADRH 完全利用了 8 位。而低位寄存器 ADRL 只利用了 8 位中的 1 位,它
包含的只是 9 位转换值中低的 1 位。
Rev. 1.40
43
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
在下表中,D0~D8 是 A/D 换转数据结果位。
寄存器
ADR
Bit7
D7
Bit6
D6
Bit5
D5
Bit4
D4
Bit3
D3
Bit2
D2
Bit1
D1
Bit0
D0
Bit2
-
D3
Bit1
-
D2
Bit0
-
D1
A/D 数据寄存器 — HT46F
HT46F46E
46E
寄存器
ADRL
ADRH
Bit7
D0
D8
Bit6
-
D7
Bit5
-
D6
Bit4
-
D5
Bit3
-
D4
A/D 数据寄存器 — 其它型号
A/D 转换控制寄存器
转换控制寄存器 − ADCR
寄存器 ADCR 用来控制 A/D 转换器的功能和操作。这个 8 位的寄存器所定义的功能包括选择哪一个
模拟通道连接至内部 A/D 转换器,哪个引脚是模拟输入,哪个引脚是正常 I/O,并控制和监视 A/D 转换器
的开始和复位功能。
寄存器 ADCR 包含 ACS2~ACS0 位,它们定义通道的编号。由于每个单片机只包含一个实际的模数转
换电路,因此这 4 个模拟输入中的每一个都必须分别被发送到转换器。ADCR 寄存器中 ACS2~ACS0 位的
。
功能正是决定哪个模拟通道真正连接到内部 A/D 转换器。需要注意的是, ACS2 位必须保持为“0”
ADCR 寄存器中的 PCR2~PCR0 位,用来定义 PB 端口上哪些引脚为 A/D 转换器的模拟输入,哪些引
脚为正常的 I/O。如果 PCR2~PCR0 这 3 位地址的值等于或大于“100”
,也就是 AN0、AN1、AN2 和 AN3
都将被设定为模拟输入。注意的是,如果 PCR2~PCR0 全都设为“0”
,则所有 PB 端口的引脚都被设定为
正常的 I/O,这时内部 A/D 转换器电路的电源将被关闭以减少功耗。
ADCR 寄存器中的 START 位,用于打开和复位 A/D 转换器。当单片机设定此位从逻辑低到逻辑高,
然后再到逻辑低,就会开始一个模数转换周期。当 START 位从逻辑低到逻辑高,但不再回到逻辑低时,
ADCR 寄存器中的 EOCB 位置“1”,复位模数转换器。START 位用于控制内部模数换转器的开/关动作。
ADCR 寄存器中的 EOCB 位用于表明模数转换过程的完成。在转换周期结束后,EOCB 位会被单片机
自动地置为“0”
。此外,也会置位中断控制寄存器内相应的 A/D 中断请求标志位,如果中断使能,就会产
生适当的内部中断信号。A/D 内部中断信号将引导程序到相应的 A/D 内部中断入口。如果 A/D 内部中断
被禁止,单片机会轮询 ADCR 寄存器中的 EOCB 位,检查此位是否被清除,以作为另一种侦测 A/D 转换
周期结束的方法。
Rev. 1.40
44
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
b 7
S T A R T E O C B
P C R 2
P C R 1
P C R 0
A C S 2
A C S 1
b 0
A C S 0
A D C R
R e g is te r
S e le c t A /D c h a n n e l
A C S 1
A C S 2
A C S 0
0
0
0
0
0
1
1
0
0
1
0
1
X
1
X
P o rt B A /D c h a n n e l
P C R 2 P C R 1 P
0
0
0
0
1
0
1
0
X
1
c o n fig
C R 0
0
1
0
1
X
: A N
: A N
: A N
: A N
: u n
0
1
2
3
d e fin e d , m u s t n o t b e u s e d
u r a tio n s
: P o
: P B
: P B
: P B
: P B
rt
0
0
0
0
B A
e n a
~ P B
~ P B
~ P B
/D
b
1
2
3
c h a n n
le d a s A
e n a b le
e n a b le
e n a b le
e ls
N 0
d a
d a
d a
- a ll o ff
s A N 0 ~ A N 1
s A N 0 ~ A N 2
s A N 0 ~ A N 3
E n d o f A /D c o n v e r s io n fla g
1 : n o t e n d o f A /D c o n v e r s io n - A /D c o n v e r s io n w a itin g o r in p r o g r e s s
0 : e n d o f A /D c o n v e r s io n - A /D c o n v e r s io n e n d e d
S ta r t th e A /D c o n v e r s io n
0 ® 1 ® 0 : S ta rt
0 ® 1 : R e s e t A /D c o n v e rte r a n d s e t E O C B to "1 "
A/D 转换控制寄存器
A/D 转换时钟源寄存器 − ACSR
A/D 转换器时钟源为系统时钟 fSYS 的分频,分频系数由 ACSR 寄存器中的 ADCS1 和 ADCS0 位决定。
虽然 A/D 时钟源是由系统时钟 fSYS、ADCS1 和 ADCS0 决定,但可选择的最大 A/D 时钟源速度则有
一些限制。对于 HT46F46E 允许的 A/D 时钟周期 tAD 的最小值为 0.5µs,因此,当系统时钟速度超过 4MHz
时,ADCS1 和 ADCS0 位不能设为“00”
。而对于其它芯片则为 1µs,当系统时钟速度超过 2MHz 时,ADCS1
和 ADCS0 位不能设为“00”
,否则将会产生不准确的 A/D 转换值。参考下面表格中的一些例子,被标上星
号*的数值是不允许的,因为它们的 A/D 时钟周期小于规定的最小值。
b 7
T E S T
b 0
A D C S 1 A D C S 0
A C S R R e g is te r
S e le c t A /D c o n v e r te r
A D C S 1
A D C S 0
0
0
:
:
0
1
1
0
:
1
1
:
c lo c k s o u r c e
s y s
s y s
s y s
u n d
te m
te m
te m
e fin
N o t im p le m e n te d , r e a d a s " 0 "
c lo c k /2
c lo c k /8
c lo c k /3 2
e d
F o r te s t m o d e u s e o n ly
A/D 转换时钟控制寄存器
fSYS
1MHz
2MHz
4MHz
8MHz
12MHz
A/D 时钟周期(t
时钟周期 AD)
ADCS1, ADCS0=00 ADCS1, ADCS0=01 ADCS1, ADCS0=10 ADCS1, ADCS0=11
(fSYS/2)
(fSYS/8)
(fSYS/32)
2µs
8µs
32µs
未定义
1µs
4µs
16µs
未定义
500ns*
2µs
8µs
未定义
250ns*
1µs
4µs
未定义
166.67ns*
0.67µs
2.67µs
未定义
A/D 时钟周期范例
Rev. 1.40
45
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
A/D 输入引脚
所有的 A/D 模拟输入引脚都与 PB 端口的 I/O 引脚共用。ADCR 寄存器中的 PCR2~PCR0 位,决定是
将输入引脚设置为普通的 PB 输入/输出引脚,还是将它们设置为模拟输入引脚,而不是由配置选项来决定。
通过这种方式,引脚的功能可由程序来控制,从普通 I/O 操作功能到模拟输入,反过来也一样。当输入引
脚作为普通 I/O 引脚使用时,可通过配置选项设置上拉电阻,若设置为 A/D 输入,则上拉电阻会自动断开。
请注意,PB 端口控制寄存器并不需要为使能 A/D 输入,而先设定 A/D 引脚为输入引脚,当 PCR2~PCR0
位使能 A/D 输入时,不考虑端口控制寄存器的状态。电源脚 VDD 为 A/D 转换器的参考电压,模拟输入电
压不可超过此电压值。另外须适当的量测 VDD,以确保该电压的稳定及减少噪声。
A/D 转换初始化
内部的 AD 转换器必须经过一个特殊的方法初始化。当 PB 端口转换通道选择位被改变,AD 转换器
必须重新初始化。如果通道选择位改变后没有重新初始化,那么 EOCB 标志位可能会处于不确定的状态,
这样可能会导致一个错误的转换结束信号。当通道选择位改变后,寄存器 ADCR 中的 START 位必须在 1~10
个指令周期内先置位再立即清零。这样可以保证 EOCB 被正确的置位。
A/D 转换步骤
下面总结实现 A/D 转换过程的各个步骤。
步骤 1
通过 ACSR 寄存器中的 ADCS1 和 ADCS0 位,选择所需的 A/D 转换时钟。
步骤 2
通过 ADCR 寄存器中的 ACS2~ACS0 位,选择连接至内部 A/D 转换器的通道。
步骤 3
通过 ADCR 寄存器中的 PCR2~PCR0 位,选择 PB 端口的 A/D 输入引脚,并将它们设置为 A/D 输
入引脚。此步骤也可在第二步写 ADCR 寄存器时完成。
步骤 4
如果要使用中断,则中断控制寄存器必须正确地设置,以确保 A/D 功能的动作。中断控制寄存器
INTC 里总中断控制位 EMI 必须置位为“1”
,A/D 转换器的中断使能位 EADI 也必须置位为“1”
。
步骤 5
通过设定 ADCR 寄存器中的 START 位从“0”到“1”再回到“0”
,可以开始模数转换的过程。
该位需初始化为“0”
。
步骤 6
可以轮询 ADCR 寄存器中的 EOCB 位,检查模数转换过程是否完成。当此位成为逻辑低时,表
示转换过程已经完成。转换完成后,可读取 A/D 数据寄存器 ADRL 和 ADRH 获得转换后的值。
另一种方法是,若中断使能且堆栈未满,则转换完成后,程序会进入 A/D 中断服务子程序。
注意:若使用轮询 ADCR 寄存器中 EOCB 位的状态的方法来检查转换过程是否结束时,步骤 4 可以省略。
Rev. 1.40
46
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
下列时序图表示模数转换过程中不同阶段的图形与时序。
S T A R T b it s e t h ig h w ith in o n e to te n in s tr u c tio n c y c le s a fte r th e P C R 0 ~ P C R 2 b its c h a n g e s ta te
S T A R T
A /D
E O C B
P C R 2 ~
P C R 0
A C S 2 ~
A C S 0
s a m p lin g tim e
3 2 tA
0 0 0 B
A /D
1 0 0 B
0 0 0 B
0 0 1 B
S ta rt o f A /D
c o n v e r s io n
S ta rt o f A /D
c o n v e r s io n
R e s e t A /D
c o n v e rte r
E n d o f A /D
c o n v e r s io n
1 : D e fin e P B c o n fig u r a tio n
2 : S e le c t a n a lo g c h a n n e l
A /D
Y S
D
0 1 0 B
R e s e t A /D
c o n v e rte r
c lo c k m u s t b e fS
s a m p lin g tim e
3 2 tA
D
S ta rt o f A /D
c o n v e r s io n
0 0 0 B
A /D
s a m p lin g tim e
3 2 tA
0 1 1 B
P o w e r-o n
R e s e t
N o te :
A /D
D
/2 , fS
tA
D C
c o n v e r s io n tim e
Y S
/8 o r fS
Y S
0 0 0 B
1 . P B p o rt s e tu p a s I/O s
2 . A /D c o n v e r te r is p o w e r e d o ff
to r e d u c e p o w e r c o n s u m p tio n
D o n 't c a r e
R e s e t A /D
c o n v e rte r
E n d o f A /D
c o n v e r s io n
A /D
tA
D C
c o n v e r s io n tim e
E n d o f A /D
c o n v e r s io n
A /D
tA
D C
c o n v e r s io n tim e
/3 2
A/D 转换时序图
A/D 转换器没有对应的配置选项,它的功能设定与操作完全由应用程序控制。由应用程序控制开始
A/D 转换过程后,单片机的内部硬件就会开始进行转换,在这个过程中,程序可以继续其它功能。A/D 转
换时间取决于使用的单片机型号,下表为 A/D 转换所需要的周期数。
型号
A/D 转换时间
HT46F46E
64tAD
其它
76tAD
A/D 转换时间
编程注意事项
在编写程序时,必须特别注意寄存器 ADCR 中的 AD 转换通道选择位。如果这些全部为零,那么没有
外部引脚连接到 AD 转换器上,此时的外部引脚可作为普通的 IO 口使用。这样可以减少 AD 转换部分的功
耗,也降低了整个芯片的工作电流。关闭 AD 转换器以降低功耗,这一点对电池供电的系统非常重要。
另一个编程注意事项是,当 AD 转换通道选择位改变后,AD 转换器必须重新初始化。当通道选择位改
变后,给寄存器 ADCR 的 START 位一个脉冲即可初始化 AD 转换器。当选择位全部被清零,由于不需要进
行 AD 转换,可以不重新初始化 AD 转换器。
Rev. 1.40
47
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
A/D 转换应用范例
下面两个范例程序用来说明怎样使用 A/D 转换。第一个范例是轮询 ADCR 寄存器中的 EOCB 位来判
断 A/D 转换是否完成;第二个范例则使用中断的方式判断。
范例:使用 EOCB 轮询方法侦测转换的结束,此范例适用于 HT46F46E
clr EADI
mov a,00000001B
mov ACSR,a
mov a,00100000B
mov ADCR,a
:
:
Start_conversion:
clr START
set START
clr START
Polling_EOC:
sz EOCB
jmp polling_EOC
mov a,ADR
mov adr_buffer,a
:
:
jmp Start_conversion
; disable ADC interrupt
; setup the ACSR register to select fSYS/8 as the A/D clock
; setup ADCR register to configure Port PB0~PB3
; as A/D inputs and select AN0 to be
; connected to the A/D converter
; As the Port B channel bits have changed the following
; START signal (0-1-0) must be issued within 10 instruction cycles
; reset the A/D
; start the A/D
; poll the ADCR register EOCB bit to detect end of A/D conversion
; continue polling
; read conversion result high byte value from ADR register
; save result to user defined memory
; start next A/D conversion
范例:使用中断方式侦测转换的结束,此范例适用于 HT46F46E
clr EADI
mov a,00000001B
mov ACSR,a
mov a,00100000B
mov ADCR,a
:
:
Start_conversion:
clr START
set START
clr START
clr ADF
set EADI
set EMI
Rev. 1.40
; disable ADC interrupt
; setup the ACSR register to select fSYS/8 as the A/D clock
; setup ADCR register to configure Port PB0~PB3
; as A/D inputs and select input AN0 to be
; connected to the A/D converter
; As the Port B channel bits have changed the following
; START signal (0-1-0) must be issued within 10 instruction cycles
; reset the A/D
; start the A/D
; clear ADC interrupt request flag
; enable ADC interrupt
; enable global interrupt
48
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
:
:
ADC_ISR:
mov acc_stack,a
mov a,STATUS
mov status_stack,a
:
:
mov a,ADR
mov adr_buffer,a
:
:
EXIT_INT_ISR:
mov a,status_stack
mov STATUS,a
mov a,acc_stack
reti
Rev. 1.40
; ADC interrupt service routine
; save ACC to user defined memory
; save STATUSto user defined memory
; read conversion result value from the ADR register
; save result to user defined register
;restore STATUS from user difined memory
;restore ACC from user difined memory
49
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
A/D 转换功能
HT46F46E 单片机含有一组 8 位的 A/D 转换器,它们转换的最大值可达 0FFH。由于模拟输入最大值
等于 VDD 的电压值,因此每一位可表示 VDD/256 的模拟输入值。而对于其它型号单片机均含有一组 9 位
的 A/D 转换器,它们转换的最大值可达 1FFH,每一位表示 VDD/512 的模拟输入值。
下图显示 A/D 转换器模拟输入值和数字输出值之间理想的转换功能。
1 .5 L S B
F F H
F E H
F D H
A /D C o n v e r s io n
R e s u lt
0 .5 L S B
0 3 H
0 2 H
0 1 H
1
0
2
3
2 5 3 2 5 4
A n a lo g In p u t V o lta g e
2 5 5
V
(
2 5 6
D D
)
D D
)
2 5 6
理想的 A/D 转换功能 − HT46F
HT46F46E
1 .5 L S B
1 F F H
1 F E H
1 F D H
A /D C o n v e r s io n
R e s u lt
0 .5 L S B
0 3 H
0 2 H
0 1 H
0
1
2
3
5 0 9 5 1 0
A n a lo g In p u t V o lta g e
5 1 1
5 1 2
(
V
5 1 2
理想的 A/D 转换功能 − 其它型号
注意的是,为了减少量化错误,A/D 转换器输入端会加入 0.5LSB 的偏移量。除了数字化数值 0,其
后的数字化数值会在精确点之前的 0.5LSB 处改变,而数字化数值的最大值将在 VDD 之前的 1.5 LSB 处改
变。
Rev. 1.40
50
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
中断
中断是单片机一个重要功能。当外部中断或内部中断如定时/计数器和 A/D 转换有效,系统会中止当
前的程序,而转到相对应的中断服务程序。此系列每一款单片机均提供一个外部中断和两个内部中断,外
部中断与 INT 引脚相关,而内部中断与定时/计数器和 A/D 转换相关。
中断寄存器
所有中断允许和请求标志均由 INTC 寄存器控制。通过控制相应的中断允许位使能或禁止相关的中断。
当发生中断,相应有中断请求标志将被置位。总中断请求标志清零将禁止所有中断允许。
b 7
A D F
T F
E IF
E A D I
E T I
E E I
b 0
E M I
IN T C
R e g is te r
M a s te r In te r r u p t G lo b a l E n a b le
1 : g lo b a l e n a b le
0 : g lo b a l d is a b le
E x te r n a l In te r r u p t E n a b le
1 : e n a b le
0 : d is a b le
T im e r /E v e n t C o u n te r In te r r u p t E n a b le
1 : e n a b le
0 : d is a b le
A /D C o n v e r te r In te r r u p t E n a b le
1 : e n a b le
0 : d is a b le
E x te r n a l In te r r u p t R e q u e s t F la g
1 : a c tiv e
0 : in a c tiv e
T im e r /E v e n t C o u n te r In te r r u p t R e q u e s t F la g
1 : a c tiv e
0 : in a c tiv e
A /D C o n v e r te r In te r r u p t R e q u e s t F la g
1 : a c tiv e
0 : in a c tiv e
F o r te s t m o d e u s e o n ly .
M u s t b e w r itte n a s " 0 " o th e r w is e m a y
r e s u lt in u n p r e d ic ta b le o p e r a tio n
中断控制寄存器
中断操作
如果相应的中断允许,定时/计数器溢出、A/D 转换结束或外部中断引脚下降沿都会产生一个中断请求,
系统将下条指令的地址压入堆栈,相应的中断向量地址加载至 PC 中,并从此向量取下条指令。中断向量
处通常为跳转指令,以跳转到相应的中断服务程序。中断服务程序必须以 RETI 指令返回,将堆栈中先前
的 PC 值恢复,以继续执行中断发生处的主程序。
各个中断使能位以及相应的请求标志位,以优先级的顺序如下图所示。
A u to m a tic a lly D is a b le d b y IS R
C a n b e E n a b le d M a n u a lly
A u to m a tic a lly C le a r e d b y IS R
M a n u a lly S e t o r C le a r e d b y S o ftw a r e
E x te rn a l In te rru p t
R e q u e s t F la g E IF
E E I
T im e r /E v e n t C o u n te r
In te r r u p t R e q u e s t F la g T F
E T I
A /D C o n v e rte r
In te r r u p t R e q u e s t F la g A D F
E M I
P r io r ity
H ig h
In te rru p t
P o llin g
E A D I
L o w
中断结构图
Rev. 1.40
51
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
一旦中断子程序被响应,所有其它的中断将被屏蔽(系统自动清除 EMI 位)
。这个方式可以防止任何
进一步的中断嵌套。其它的中断请求可能发生在此期间,但只有中断请求标志位会被记录。如果某个中断
服务子程序正在执行,此时有另一个中断要求响应,EMI 位和 INTC 相关的位可以被置位,以允许此中断
被响应。如果堆栈已满,即使此中断使能,中断请求也不会被响应,直到 SP 减少为止。如果要求立刻动
作,则堆栈必须避免成为储满状态。
中断优先级
中断发生在两个连续的 T2 脉冲上升沿之间,如果相应的中断请求被允许,中断将在后一个 T2 脉冲响
应。下表指出在同时提出请求的情况下所提供的优先级。这个可以通过重新设定 EMI 位来加以屏蔽。
中断源
优先级
外部中断
1
定时/计数溢出中断
2
A/D 转换中断
3
假使外部中断和内部中断均被使能,且同时发生,则外部中断永远优先处理,首先被响应。使用 INTC
寄存器适当地屏蔽个别中断,可以防止中断同时发生的情况。
外部中断
要使外部中断发生,总中断控制位 EMI、外部中断使能位 EEI 必须先被置位。外部中断通过 INT 端口
由高到低的电平跳变来触发,相应的中断请求标志位 EIF 被设定。外部中断与 PA5 共用引脚, INTC 中相
应允许位被置位,此引脚将被作为外部中断使用,此时必须通过 PAC.5 将其设为输入。当中断使能、堆栈
未满且外部中断产生时,将调用位于地址 04H 处的子程序。当响应外部中断服务子程序时,中断请求标志
位 EIF,EMI 位会被清零以除能其它中断。外部中断使能时此引脚的上拉电阻选项仍然有效。
定时/计数器中断
定时 计数器中断
要使定时/计数器中断发生,总中断控制位 EMI、定时/计数器中断使能位 ETI 必须先置位。当定时/
计数器发生溢出,相应的中断请求标志位 TF 将置位并触发定时/计数器中断。若中断使能,堆栈未满,当
发生定时/计数器中断时,将调用位于地址 08H 处的子程序。当响应定时/计数器中断服务子程序时,中断
请求标志位 TF,EMI 位会被清零以除能其它中断。
A/D 转换中断
要使 A/D 转换中断发生,总中断控制位 EMI、A/D 转换中断使能位 EADI 必须先被置位。当 A/D 转
换结束,相应的中断请求标志位 ADF 将置位并触发 A/D 转换中断。若中断使能,堆栈未满,当发生 A/D
转换中断时,将调用位于地址 0CH 处的子程序。当响应 AD 转换中断服务子程序时,中断请求标志位 ADF,
EMI 位会被清零以禁止其它中断。
Rev. 1.40
52
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
编程注意事项
通过除能中断使能位,可以屏蔽中断请求,然而,一旦中断请求标志位被设定,它们会被保留在 INTC
寄存器内,直到相应的中断服务子程序执行或被软件指令清除。
建议在中断服务子程序中不要使用“CALL 子程序”指令。中断通常发生在不可预料的情况或是需要
立刻执行的某些应用。假如只剩下一层堆栈且没有控制好中断,当“CALL 子程序”在中断服务子程序中
执行时,将破坏原来的控制序列。
在暂停模式下所有中断都具有唤醒功能。
当进入中断服务程序,系统只会将程序计数器的内容压入堆栈。如果有破坏主程序流程的寄存器或状
态寄存器被中断服务程序改变,应事先将这些数据保存起来。
复位和初始化
复位功能是任何单片机中基本的部分,使得单片机可以设定一些与外部参数无关的先置条件。最重要
的是,复位条件在初次提供电源给单片机后,经短暂延迟,内部电路将使得单片机被定义在良好的状态且
准备执行第一条程序语句。上电复位之后,在程序未开始执行前,部分重要的内部寄存器将会被预先设定
状态。程序计数器就是其中之一,它会被清除为零,使得单片机从最低的程序存储器地址开始执行程序。
除了上电复位外,即使单片机正在执行状态,有些情况的发生也迫使单片机必须加以复位。其中一个
例子是当提供电源给单片机以执行程序后, RES引脚被强制拉至低电平。这个例子为正常操作复位,单片
机中只有一些寄存器受影响,而大部分寄存器不受影响,以便复位引脚回复至高电平后,单片机仍可以正
常操作。复位的另一种形式是看门狗定时器溢出而复位单片机,所有复位操作类型导致不同的寄存器条件
被加以设定。
另外一种复位以低电压复位,即 LVR 的型态存在,在电源提供电压低于某一临界值的情况下,一种
和 RES引脚复位类似的完全复位将会被执行。
复位
通过内部与外部事件触发复位,单片机共有五种复位方式:
上电复位
这是最基本且不可避免的复位,发生在单片机上电后。除了保证程序存储器会从起始地址开始执
行,上电复位也使得其它寄存器被设定在预设条件,所有的输入/输出端口寄存器和输入/输出端口控
制寄存器在上电复位时会保持高电平,以确保上电后所有引脚被设为输入状态。
虽然单片机有一个内部 RC 复位功能,如果电源上升缓慢或刚上电时电源不稳定,内部 RC 振荡
可能会导致芯片复位不良,所以推荐使用和 RES 引脚连接的外部 RC 电路。由 RC 电路所造成的时间
延迟使得 RES 引脚在电源供应稳定前的一段延长周期内保持在低电平。在这段时间内,单片机的正常
操作是被禁止的。 RES 引脚达到一定电压值后,再经过延迟时间 tRSTD,单片机可开始进行正常操作。
下图中 SST 是系统延迟周期 System Start-up Timer 的缩写。
Rev. 1.40
53
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
V D D
0 .9 V
R E S
tR
S S T T im e - o u t
D D
S T D
In te rn a l R e s e t
上电复位时序图
在许多应用场合,可以在 VDD 与 RES之间连接电阻,而在 RES与 VSS 之间连接电容作为复位电
路,为了减少干扰影响,至 RES引脚的连线应尽量短。
V D D
1 0 0 k W
R E S
0 .1 m F
V S S
基本复位电路
当系统在较强干扰的场合工作时,强烈建议使用增强型复位电路。
0 .0 1 m F
1 0 0 k W
V D D
R E S
1 0 k W
0 .1 m F
V S S
增强型复位电路
增强型复位电路
欲知更多外部复位电路的相关信息可参考 HOLTEK 网站应用范例 HA0075S。
RES 引脚复位
当单片机正常工作,而 RES引脚通过外部硬件(如外部开关)被强迫拉至低电平时,此种复位形式
即会发生。这种复位形式与其它复位的例子一样,程序计数器会被清除为零且程序从头开始执行。
R E S
0 .4 V
D D
0 .9 V
S S T T im e - o u t
tR
D D
S T D
In te rn a l R e s e t
RES引脚复位时序图
Rev. 1.40
54
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
低电压复位
单片机具有低电压复位电路,用来监测它的电源电压,可通过配置选项进行选择。例如在更换电
池的情况下,单片机供应的电压可能会落在 0.9V~VLVR 的范围内,这时 LVR 将会自动复位单片机。
有效的 LVR 信号,即在 0.9V~VLVR 的低电压状态的时间,必须超过交流电气特性中 tLVR 参数的值。如
果低电压存在时间不超过此值,则 LVR 将会忽略它且不会执行复位功能。
L V R
tR
S S T T im e - o u t
S T D
In te rn a l R e s e t
低电压复位时序图
正常操作时看门狗溢出复位
除了看门狗溢出标志位 TO 将被设为 1 之外,正常操作时看门狗溢出复位和 RES 复位相同。
W D T T im e - o u t
tR
S S T T im e - o u t
S T D
In te rn a l R e s e t
正常操作时看门狗溢出复位时序图
暂停时看门狗溢出复位
暂停时看门狗溢出复位和其它种类的复位有些不同,除了程序计数器与堆栈指针将被清除为 0 及
TO 标志位被设为 1 外,绝大部份的条件保持不变。图中 tSST 的详细说明请参考交流电气特性。
W D T T im e - o u t
tS
S S T T im e - o u t
S T
暂停时看门狗溢出复位时序图
复位初始状态
不同的复位形式以不同的途径影响复位标志位。这些标志位,即 PDF 和 TO,被放在状态寄存器中,
由如暂停功能或看门狗计数器等几种控制器操作控制。复位标志位如下所示:
TO
0
u
1
1
PDF
0
u
u
1
复位条件
上电时的 RES 复位
正常运行时的 RES 复位或 LVR 低电压复位
正常运行时的 WDT 溢出复位
暂停时的 WDT 溢出复位
注意:
“u”代表不改变
在单片机上电复位之后,各功能单元初始化的情形,列于下表。
Rev. 1.40
55
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
项 目
程序计数器
中断
看门狗定时器
定时/计数器
预分频器
输入/输出口
堆栈指针
复位后情况
清除为零
所有中断被禁止
WDT 清除并重新计时
定时/计数器关闭
定时/计数器之预分频器内容清除
所有 I/O 设为输入模式
堆栈指针指向堆栈顶端
不同的复位形式以不同的途径影响单片机中的内部寄存器。为保证复位发生后程序的正常执行,在特
定的复位发生后,了解单片机内的情况是非常重要的。下表描述了不同的复位如何影响单片机的内部寄存
器。若芯片有多种封装类型,表格反映较大的封装的情况。
HT46F46E
MP0
MP1
BP
ACC
RES复位
RES或 LVR 复位
(上电时
上电时)
上电时
1xxx xxxx 1 u u u u u u u
1xxx xxxx 1 u u u u u u u
xxxx xxx0 x x x x x x x 0
xxxx xxxx u u u u u u u u
WDT 溢出复位
(正常
正常运行时
正常运行时)
运行时
1uuu uuuu
1uuu uuuu
xxxx xxx0
uuuu uuuu
WDT 溢出复位
溢出复位
(暂停模式
暂停模式)
暂停模式
1uuu uuuu
1uuu uuuu
xxxx xxxu
uuuu uuuu
PCL
TBLP
TBLH
STATUS
INTC
TMR
TMRC
PA
PAC
PB
PBC
PD
PDC
PWM
ADR
ADCR
ACSR
EECR
0000
xxxx
−−xx
−−00
−000
xxxx
00−0
1111
1111
−−−−
−−−−
− − −−
− − −−
xxxx
xxxx
0100
1−−−
1000
0000
uuuu
−−uu
−−1u
−000
xxxx
00−0
1111
1111
−−−−
−−−−
−−−−
−−−−
xxxx
xxxx
0100
1−−−
1000
0000
uuuu
−−uu
−−11
−uuu
uuuu
uu−u
uuuu
uuuu
−−−−
−−−−
−−−−
−−−−
uuuu
uuuu
uuuu
u−−−
uuuu
寄存器
0000
xxxx
xxxx
xxxx
0000
xxxx
1000
1111
1111
1 1 11
1 1 11
−− − 1
−− − 1
xxxx
xxxx
0000
−−00
−−−−
0000
uuuu
−−uu
−−uu
−000
xxxx
00−0
1111
1111
−−−−
−−−−
−−−−
−−−−
xxxx
xxxx
0100
1−−−
1000
0000
uuuu
uuuu
uuuu
0000
xxxx
1000
1111
1111
1111
1111
−−−1
−−−1
xxxx
xxxx
0000
−−00
−−−−
0000
uuuu
uuuu
uuuu
0000
xxxx
1000
1111
1111
1111
1111
−−−1
−−−1
xxxx
xxxx
0000
−−00
−−−−
0000
uuuu
uuuu
uuuu
uuuu
uuuu
uuuu
uuuu
uuuu
uuuu
uuuu
−−−u
−−−u
uuuu
uuuu
uuuu
−−uu
−−−−
“u”表示不变化
“x”表示不确定
“−”表示不存在
Rev. 1.40
56
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
HT46F47E
MP0
MP1
BP
ACC
RES复位
RES或 LVR 复位
(上电时
上电时)
上电时
1xxx xxxx 1 u u u u u u u
1xxx xxxx 1 u u u u u u u
xxxx xxx0 x x x x x x x 0
xxxx xxxx u u u u u u u u
WDT 溢出复位
(正常
正常运行时
正常运行时)
运行时
1uuu uuuu
1uuu uuuu
xxxx xxx0
uuuu uuuu
WDT 溢出复位
(暂停模式
暂停模式)
暂停模式
1uuu uuuu
1uuu uuuu
xxxx xxxu
uuuu uuuu
PCL
TBLP
TBLH
STATUS
INTC
TMR
TMRC
PA
PAC
PB
PBC
PD
PDC
PWM
ADRL
0000
xxxx
−−xx
−−00
−000
xxxx
00−0
1111
1111
−−−−
−−−−
− − −−
− − −−
xxxx
x−−−
0000
xxxx
xxxx
xxxx
0000
xxxx
1000
1111
1111
1 1 11
1 1 11
−− − 1
−− − 1
xxxx
− −− −
0000
uuuu
−−uu
−−uu
−000
xxxx
00−0
1111
1111
−−−−
−−−−
−−−−
−−−−
xxxx
x−−−
0000
uuuu
uuuu
uuuu
0000
xxxx
1000
1111
1111
1111
1111
−−−1
−−−1
xxxx
−−−−
0000
uuuu
−−uu
−−1u
−000
xxxx
00−0
1111
1111
−−−−
−−−−
−−−−
−−−−
xxxx
x−−−
0000
uuuu
uuuu
uuuu
0000
xxxx
1000
1111
1111
1111
1111
−−−1
−−−1
xxxx
−−−−
0000
uuuu
−−uu
−−11
−uuu
uuuu
uu−u
uuuu
uuuu
−−−−
−−−−
−−−−
−−−−
uuuu
u−−−
0000
uuuu
uuuu
uuuu
uuuu
uuuu
uuuu
uuuu
uuuu
uuuu
uuuu
−−−u
−−−u
uuuu
−−−−
ADRH
ADCR
ACSR
EECR
xxxx
0100
1−−−
1000
xxxx
0000
−−00
−−−−
xxxx
0100
1−−−
1000
xxxx
0000
−−00
−−−−
xxxx
0100
1−−−
1000
xxxx
0000
−−00
−−−−
uuuu
uuuu
u−−−
uuuu
uuuu
uuuu
−−uu
−−−−
寄存器
“u”表示不变化
“x”表示不确定
“−”表示不存在
Rev. 1.40
57
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
HT46F48E
MP0
MP1
BP
ACC
RES复位
RES或 LVR 复位
(上电时
上电时)
上电时
1xxx xxxx 1 u u u u u u u
1xxx xxxx 1 u u u u u u u
xxxx xxx0 x x x x x x x 0
xxxx xxxx u u u u u u u u
WDT 溢出复位
(正常
正常运行时
正常运行时)
运行时
1uuu uuuu
1uuu uuuu
xxxx xxx0
uuuu uuuu
WDT 溢出复位
(暂停模式
暂停模式)
暂停模式
1uuu uuuu
1uuu uuuu
xxxx xxxu
uuuu uuuu
PCL
TBLP
TBLH
STATUS
INTC
TMR
TMRC
PA
PAC
PB
PBC
PC
0000
xxxx
−−xx
−−00
−000
xxxx
00−0
1111
1111
1111
1111
−−−−
0000
xxxx
xxxx
xxxx
0000
xxxx
1000
1111
1111
1111
1111
− − 11
0000
uuuu
−−uu
−−uu
−000
xxxx
00−0
1111
1111
1111
1111
−−−−
0000
uuuu
uuuu
uuuu
0000
xxxx
1000
1111
1111
1111
1111
− − 11
0000
uuuu
−−uu
−−1u
−000
xxxx
00−0
1111
1111
1111
1111
−−−−
0000
uuuu
uuuu
uuuu
0000
xxxx
1000
1111
1111
1111
1111
−−11
0000
uuuu
−−uu
−−11
−uuu
uuuu
uu−u
uuuu
uuuu
uuuu
uuuu
−−−−
0000
uuuu
uuuu
uuuu
uuuu
uuuu
uuuu
uuuu
uuuu
uuuu
uuuu
−−uu
PCC
PD
PDC
PWM
ADRL
−−−−
− − −−
− − −−
xxxx
x−−−
− − 11
−− − 1
−− − 1
xxxx
− −− −
−−−−
−−−−
−−−−
xxxx
x−−−
− − 11
−−−1
−−−1
xxxx
−−−−
−−−−
−−−−
−−−−
xxxx
x−−−
−−11
−−−1
−−−1
xxxx
−−−−
−−−−
−−−−
−−−−
uuuu
u−−−
−−uu
−−−u
−−−u
uuuu
−−−−
ADRH
ADCR
ACSR
EECR
xxxx
0100
1−−−
1000
xxxx
0000
−−00
−−−−
xxxx
0100
1−−−
1000
xxxx
0000
−−00
−−−−
xxxx
0100
1−−−
1000
xxxx
0000
−−00
−−−−
uuuu
uuuu
u−−−
uuuu
uuuu
uuuu
−−uu
−−−−
寄存器
“u”表示不变化
“x”表示不确定
“−”表示不存在
Rev. 1.40
58
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
HT46F49E
MP0
MP1
BP
ACC
RES复位
RES或 LVR 复位
(上电时
上电时)
上电时
xxxx xxxx u u u u u u u u
xxxx xxxx u u u u u u u u
xxxx xxx0 x x x x x x x 0
xxxx xxxx u u u u u u u u
WDT 溢出复位
(正常
正常运行时
正常运行时)
运行时
uuuu uuuu
uuuu uuuu
xxxx xxx0
uuuu uuuu
WDT 溢出复位
(暂停模式
暂停模式)
暂停模式
uuuu uuuu
uuuu uuuu
xxxx xxxu
uuuu uuuu
PCL
TBLP
TBLH
STATUS
INTC
TMR
TMRC
PA
PAC
PB
PBC
PC
0000
xxxx
−xxx
−−00
−000
xxxx
00−0
1111
1111
1111
1111
−−−1
0000
xxxx
xxxx
xxxx
0000
xxxx
1000
1111
1111
1111
1111
1 1 11
0000
uuuu
−uuu
−−uu
−000
xxxx
00−0
1111
1111
1111
1111
−−−1
0000
uuuu
uuuu
uuuu
0000
xxxx
1000
1111
1111
1111
1111
1111
0000
uuuu
−uuu
−−1u
−000
xxxx
00−0
1111
1111
1111
1111
−−−1
0000
uuuu
uuuu
uuuu
0000
xxxx
1000
1111
1111
1111
1111
1111
0000
uuuu
−uuu
−−11
−uuu
uuuu
uu−u
uuuu
uuuu
uuuu
uuuu
−−−u
0000
uuuu
uuuu
uuuu
uuuu
uuuu
uuuu
uuuu
uuuu
uuuu
uuuu
uuuu
PCC
PD
PDC
PWM0
PWM1
ADRL
−−−1
−−−−
−−−−
xxxx
xxxx
x−−−
1 1 11
− − 11
− − 11
xxxx
xxxx
− −− −
−−−1
−−−−
−−−−
xxxx
xxxx
x−−−
1111
− − 11
− − 11
xxxx
xxxx
−−−−
−−−1
−−−−
−−−−
xxxx
xxxx
x−−−
1111
−−11
−−11
xxxx
xxxx
−−−−
−−−u
−−−−
−−−−
uuuu
uuuu
u−−−
uuuu
−−uu
−−uu
uuuu
uuuu
−−−−
ADRH
ADCR
ACSR
EECR
xxxx
0100
1−−−
1000
xxxx
0000
−−00
−−−−
xxxx
0100
1−−−
1000
xxxx
0000
−−00
−−−−
xxxx
0100
1−−−
1000
xxxx
0000
−−00
−−−−
uuuu
uuuu
u−−−
uuuu
uuuu
uuuu
−−uu
−−−−
寄存器
“u”表示不变化
“x”表示不确定
“−”表示不存在
Rev. 1.40
59
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
振荡器
不同的振荡器选择可以让使用者在不同的应用需求中获得更多范围的功能。有两种系统时钟可供选
择,而看门狗定时器又有多种时钟源选项,提供了使用者最大的灵活性。所有的振荡器选项都是通过配置
选项来完成。
系统时钟的产生有两种方法:
外部晶体/陶瓷振荡器
外部 RC 振荡器
系统时钟的设置可以通过配置选项来选择。
欲知更多振荡器电路的相关信息可参考 HOLTEK 网站应用范例 HA0075S。
外部晶体/谐振器
外部晶体 谐振器
对于晶体振荡器的结构配置,只要简单地将晶体连接至 OSC1 和 OSC2,则会产生所需的相移及反馈,
而不需其它外部的器件。然而为了保证起振和精确频率的产生,某些晶体振荡器和所有谐振器,建议使用
两个小容量电容 C1 和 C2,具体数值与客户选择的晶体/谐振器有关。在许多应用场合,外部并联反馈 Rp
并不一定需要,但在某些应用中可能需要帮助振荡器的起振。
C 1
O S C 1
R f
R p
C b
O S C 2
C 2
In te r n a l
O s c illa to r
C ir c u it
C a
T o in te r n a l
c ir c u its
N o te : 1 . R p is n o r m a lly n o t r e q u ir e d .
2 . A lth o u g h n o t s h o w n O S C 1 /O S C 2 p in s h a v e a p a r a s itic
c a p a c ita n c e o f a r o u n d 7 p F .
外部晶体/
外部晶体/谐振器
谐振器
内部 Ca,Cb,Rf 的典型值@5V,25℃
Ca
Cb
Rf
11~13pF
13~15pF
470kΩ
振荡器内部元件参数值
晶体振荡器 C1 和 C2 参数值
晶体频率
C1
C2
CL
8MHz
TBD
TBD
TBD
4MHz
TBD
TBD
TBD
1MHz
TBD
TBD
TBD
注:1、C1,C2 值仅作为参考。
2、CL 是晶体振荡器制造商指定负载电容值。
晶体振荡器推荐电容参数值
Rev. 1.40
60
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
谐振器 C1 和 C2 参数值
谐振器频率
C1
C2
3.58MHz
TBD
TBD
1MHz
TBD
TBD
455KHz
TBD
TBD
注:C1,C2 值仅作为参考。
谐振器推荐电容参数值
外部 RC 振荡器
使用外部 RC 电路作为系统振荡器,需要在 OSC1 和 VDD 之间连接一个阻值约在 15KΩ到 750KΩ之
间的电阻,OSC1 与地之间连接一个电容。产生的系统时钟 4 分频后提供给 OSC2 作输出,以达到与外部
同步化的目的。由于 OSC2 为 NMOS 开漏输出,测量 RC 振荡频率时,则需要加上拉电阻。虽然此振荡器
配置成本较低,但振荡频率会因 VDD、温度和芯片本身的制成而改变,因此不适合用来做计时严格或需
要精确振荡器频率的场合。对于外部电阻 ROSC 的阻值,请参考附录章节中典型 RC 振荡器对温度以及对
VDD 特性曲线分析。注意:内部电容和外部电阻 ROSC 共同作用决定频率值,图中显示的外部电容并不会影
响振荡器的频率值。
V
R
D D
O S C
4 7 0 p F
fS
Y S
/4 N M O S O p e n D r a in
O S C 1
O S C 2
RC 振荡器
看门狗定时振荡器
WDT 振荡器是一个完全独立且自由动作的内建振荡器,它在 5V 时的周期时间典型值为 65µs,且不
需外部的器件搭配。WDT 振荡器通过配置选项进行选择。当选择 WDT 振荡器,芯片进入暂停模式后,系
统时钟停止振荡,但 WDT 振荡器仍继续工作,看门狗功能有效。然而,由于看门狗的工作使得系统在暂
停模式下功耗增加,所以在低功耗应用场合,WDT 振荡器可以通过配置选项来关闭。
暂停模式下的暂停和唤醒
暂停模式
所有 HOLTEK 单片机都具有暂停功能,即 HALT 模式或者睡眠模式。当单片机进入此模式,由于系
统停止振荡,芯片的工作电流会降到极低静态模式。由于单片机保存了当前工作的一些内部条件,它可以
被唤醒并继续运行,而不需要重新进行复位。这个特性对于电池供电系统等供电容量受限但需要单片机保
存当前工作状态的应用场合特别重要。
Rev. 1.40
61
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
进入暂停模式
进入暂停模式
单片机进入暂停模式仅能通过应用程序执行“HALT”指令实现,且造成如下结果:
系统振荡器将被关闭,应用程序将停止在“HALT”指令处。
在 RAM 芯片和寄存器上的内容保持不变。
如果 WDT 时钟源是来自 WDT 振荡器,则 WDT 将被清除然后再重新计数;若来源于系统时钟,
则停止计数。
所有输入/输出端口状态保持不变。
STATUS 寄存器中 PDF 标志位被置位而 TO 标志位被清零。
静态电流注意事项
静态电流注意事项
要使系统静态电流降到最小,为毫安级,除了需要单片机进入 HALT 模式,还要考虑到电路的设计,
特别要注意输入/输出口的状态。所有高阻抗输入引脚必须接高电平或低电平,否则会造成引脚浮空而引起
内部振荡。这同样适用于芯片具有不同封装类型的场合,将未引出的引脚必须设置为输出或带上拉电阻的
输入。另外还需要注意单片机输出端口上的负载,当外部电路为 CMOS 输入时,可设置为拉电流。也要注
意若内部看门狗振荡器使能,也将消耗部分额外的电流。
唤醒
当系统进入 HALT 模式,可以通过以下几种方式唤醒:
外部复位
PA 口下降沿
系统中断
WDT 溢出
若由外部复位引脚唤醒,系统会经过完全复位的过程。若由 WDT 溢出唤醒,则看门狗计数器将被复
位清零。这两种唤醒方式都会使系统复位,可以通过状态寄存器中 TO 和 PDF 位来判断它的唤醒源。系统
上电或执行清除看门狗的指令,PDF 被清零;执行 HALT 指令,PDF 将被置位。看门狗计数器溢出将会置
位 TO 标志并唤醒系统,同时复位程序计数器和堆栈指针,其它标志保持原有状态。
端口 PA 中的每个位都可以通过配置选项独立选择唤醒功能。PA 端口唤醒后,程序将在“HALT”指
令后继续执行。
如果系统是通过中断唤醒,则有两种可能发生,假如中断除能或中断使能但堆栈已满,程序将在 HALT
指令下一条处继续执行,但相应的中断服务程序只有在中断使能或堆栈空闲后被执行;假如中断使能且堆
栈未满,则正常的中断响应将会发生。假设在进入暂停模式之前外部中断请求标志位被设为“1”
,则相关
中断的唤醒功能将无效。
无论何种唤醒源,一旦唤醒事件发生,回到正常运行将需要 1024 个系统时钟周期。如果唤醒由中断
发生,则真实的中断子程序执行将延迟一个或数个周期。如果唤醒后接着去执行“HALT”下一条指令,
则它将在 1024 个系统时钟周期结束后立刻执行。
Rev. 1.40
62
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
看门狗计数器
看门狗定时器的功能在于防止如电的干扰等外部不可控制事件,所造成的程序不正常动作或跳转到未
知的地址。当 WDT 溢出时,它产生一个芯片复位的动作。WDT 时钟通过选择配置选项中两个时钟源之一
提供:单片机内建 WDT 振荡器或指令时钟(系统时钟 4 分频)
。要注意的是假如 WDT 配置选项设为除能,
则任何相关的指令将无效。
在此系列单片机中,所有看门狗定时器的选项,如使能/除能、WDT 时钟源和清除看门狗指令条数都
是通过配置选项来选择。没有与 WDT 相关的内部寄存器。WDT 的时钟源之一是内部振荡器,在供应电压
为 5V 时周期近似为 65µs。必须注意的是,这个内部时钟的周期可以随着 VDD、温度和制作工艺而改变。
另一个 WDT 时钟源选项是系统时钟的四分频。无论 WDT 时钟源是来自它内部的 WDT 振荡器或是来自指
令时钟,都经过 213~216 分频(通过配置选项获得 WDT 溢出周期)
。当设置 216 时,可使溢出周期最大为
4.3S。溢出周期可以随着温度、VDD 和制作工艺而改变。由于清除指令只复位计数链的最后一级,因此实
际的分频系数和相应的 WDT 溢出时间会有因数为 2 的变化。看门狗精确的分频系数可以根据清除 WDT
指令到 WDT 计满所需的时间确定。必须明白没有单独的内部寄存器或配置选项与看门狗溢出时间相应,
WDT 溢出时间完全取决于 fSYS/4 或内部 WDT 振荡器。
C L R
W D T 1 F la g
C L R
W D T 2 F la g
C le a r W D T T y p e
C o n fig u r a tio n O p tio n
1 o r 2 In s tr u c tio n s
fS
Y S
/4
W D T O s c illa to r
W D T C L o c k S o u rc e
C o n fig u r a tio n O p tio n
C L R
1 6 - b it C o u n te r
C o n fig O p tio n
W D T T im e - o u t
(2 13/fS , 2 14/fS , 2 15/fS o r 2
1 6
/fS )
看门狗定时器
注意的是,如果使用指令时钟作为时钟源,当系统进入暂停模式后,指令时钟会停止且 WDT 将失去
其保护目的。在这种情况下,系统只能通过外部逻辑重新复位。当系统操作在干扰严重的环境时,建议使
用内部 WDT 振荡器。
系统在正常运行状态下,WDT 溢出将导致芯片复位,并置位 TO 状态标志位。然而如果系统处于暂停
模式,当发生 WDT 溢出时,状态寄存器中的 TO 位将被置位,同时仅复位程序计数器和 SP。有三种方法
可以用来清除 WDT 的内容。第一种是外部硬件复位( RES引脚低电平),第二种是通过软件指令,而第三种
是通过执行 HALT 指令。
使用软件指令有两种方法去清除看门狗寄存器,必须由配置选项选择。第一种选择是使用单一“CLR
WDT”指令,而第二种是使用“CLR WDT1”和“CLR WDT2”两个指令。对于第一种选择,只要执行“CLR
WDT”便清除 WDT。而第二种选择,必须交替执行“CLR WDT1”和“CLR WDT2”两者才能成功的清
除 WDT。关于第二种选择要注意的是,如果“CLR WDT1”正被使用来清除 WDT,接着再执行这条指令
将是无效的,只有执行“CLR WDT2”指令才能清除 WDT。同样的“CLR WDT2”指令已经执行后,只
有接着执行“CLR WDT1”指令才可以清除看门狗定时器。
Rev. 1.40
63
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
配置选项
配置选项
配置选项在烧写程序时写入芯片。通过 HT-IDE 的软件开发环境,使用者在开发过程中可以选择配置
选项。当配置选项烧入单片机后,无法再通过应用程序修改。所有位必须按系统的需要定义,具体内容可
参考下表:
编号
1
2
3
4
5
6
7
8
9
10
11
选项
WDT 时钟源:WDT OSC 或 fSYS/4
WDT 功能:使能或禁止
WDT溢出周期:213/fS,214/fS,215/fS或216/fS
CLR WDT 指令条数:1 或 2 条指令
OSC 类型选择: 晶体或 RC
PA、PB 和 PD 上拉电阻:有或无
PC 上拉电阻:有或无 — 仅对于 HT46F48E 和 HT46F49E 有效
PWM:使能或禁止 — HT46F49E 除外
PWM0、PWM1:使能或禁止 — 仅对 HT46F49E 有效
PWM 模式:选择 6+2 或者 7+1 模式
PA0~PA7:唤醒使能或除能 — 位选项
PFD:正常输入/输出或 PFD 输出
LVR 功能:使能或禁止
LVR 电压:2.1V,3.15V,4.2V
外部中断 INT 触发沿:除能,上升,下降,或双向(上升或下降)
应用电路
V
D D
V D D
R e s e t
C ir c u it
1 0 0 k W
0 .1 m F
P A 0 ~ P A 2
R E S
0 .1 m F
V S S
O S C
C ir c u it
S e e O s c illa to r
S e c tio n
Rev. 1.40
O S C 1
P A 3 /P F D
P A 4 /T M R
P A 5 /IN T
P A 6 ~ P A 7
P B 0 /A N 0 ~ P B 3 /A N 3
P B 4 ~ P B 7
P C 0 ~ P C 4
P D 0 /P W M
O S C 2
64
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
指令集
简介
任何单片机成功运作的核心在于它的指令集,此指令集为一组程序指令码,用来指导单片机如何去执
行指定的工作。在盛群单片机中,提供了丰富且灵活的指令,共超过六十条,程序设计者可以事半功倍地
实现他们的应用。
为了更加容易理解各种各样的指令码,接下来按功能分组介绍它们。
指令周期
大部分的操作均只需要一个指令周期来执行。分支、调用或查表则需要两个指令周期。一个指令周期
相当于四个系统时钟周期,因此如果在 8MHz 的系统时钟振荡器下,大部分的操作将在 0.5µs 中执行完成,
而分支或调用操作则将在 1µs 中执行完成。虽然需要两个指令周期的指令通常指的是 JMP、CALL、RET、
RETI 和查表指令,但如果牵涉到程序计数器低字节寄存器 PCL 也将多花费一个周期去加以执行。即指令
改变 PCL 的内容进而导致直接跳转至新地址时,需要多一个周期去执行,例如“CLR PCL”或“MOV PCL,
A”指令。对于跳转指令必须注意的是,如果比较的结果牵涉到跳转动作将多花费一个周期,如果没有则
需一个周期即可。
数据的传送
单片机程序中数据传送是使用最为频繁的操作之一,使用三种 MOV 的指令,数据不但可以从寄存器
转移至累加器(反之亦然),而且能够直接移动立即数到累加器。数据传送最重要的应用之一是从输入端口
接收数据或者传送数据到输出端口。
算术运算
算术运算和数据处理是大部分单片机应用所必需具备的能力,在盛群单片机内部的指令集中,可直接
实现加与减的运算。当加法的结果超出 255 或减法的结果少于 0 时,要注意正确的处理进位和借位的问题。
INC、INCA、DEC 和 DECA 指令提供了对一个指定地址的值加一或减一的功能。
逻辑和移位运算
标准逻辑运算例如 AND、OR、XOR 和 CPL 全都包含在盛群单片机内部的指令集中。大多数牵涉到
数据运算的指令,数据的传送必须通过累加器。在所有逻辑数据运算中,如果运算结果为零,则零标志位
将被置位,另外逻辑数据运用形式还有移位指令,例如 RR、RL、RRC 和 RLC 提供了向左或向右移动一
位的方法。不同的移位指令可满足不同的应用需要。移位指令常用于串行端口的程序应用,数据可从内部
寄存器转移至进位标志位,而此位则可被检验,移位运算还可应用在乘法与除法的运算组成中。
分支和控制的转换
程序分支是采取使用 JMP 指令跳转至指定地址或使用 CALL 指令调用子程序的形式,两者之不同在
于当子程序被执行完毕后,程序必须马上返回原来的地址。这个动作是由放置在子程序里的返回指令 RET
来实现,它可使程序跳回 CALL 指令之后的地址。在 JMP 指令中,程序则只是跳到一个指定的地址而已,
并不需如 CALL 指令般跳回。一个非常有用的分支指令是条件跳转,跳转条件是由数据存储器或指定位来
加以决定。遵循跳转条件,程序将继续执行下一条指令或略过且跳转至接下来的指令。这些分支指令是程
序走向的关键,跳转条件可能是外部开关输入,或者是内部数据位的值。
Rev. 1.40
65
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
位运算
提供数据存储器中单个位的运算指令是盛群单片机的特性之一。这特性对于输出端口位的设置尤其有
用,其中个别的位或端口的引脚可以使用“SET [m].i”或“CLR [m].i”指令来设定其为高位或低位。如果
没有这特性,程序设计师必须先读入输出口的 8 位数据,处理这些数据,然后再输出正确的新数据。这种
读入-修改-写出的过程现在则被位运算指令所取代。
查表运算
数据的储存通常由寄存器完成,然而当处理大量固定的数据时,它的存储量常常造成对个别存储器的
不便。为了改善此问题,盛群单片机允许在程序存储器中建立一个表格作为数据可直接存储的区域,只需
要一组简易的指令即可对数据进行查表。
其它运算
除了上述功能指令外,其它指令还包括用于省电的“HALT”指令和使程序在极端电压或电磁环境下
仍能正常工作的看门狗定时器控制指令。这些指令的使用则请查阅相关的章节。
Rev. 1.40
66
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
指令集概要
下列表格根据功能描述了指令集的分类,利用下表列出的惯例可以作为基本的指令参考。
表格惯例:
x:立即数
m:数据存储器地址
A:累加器
i:第 0~7 位
addr:程序存储器地址
助记符
算术运算
ADD
A,[m]
ADDM A,[m]
ADD
A,x
ADC
A,[m]
ADCM A,[m]
SUB
A,x
SUB
A,[m]
SUBM A,[m]
SBC
A,[m]
SBCM A,[m]
DAA
[m]
逻辑运算
AND
A,[m]
OR
A,[m]
XOR
A,[m]
ANDM A,[m]
ORM
A,[m]
XORM A,[m]
AND
A,x
OR
A,x
XOR
A,x
CPL
[m]
CPLA
[m]
递增和递减
INCA
[m]
INC
[m]
DECA
[m]
DEC
[m]
Rev. 1.40
说明
指令周期
影响标志位
ACC 与数据存储器相加,结果放入 ACC
ACC 与数据存储器相加,结果放入数据存储器
ACC 与立即数相加,结果放入 ACC
ACC 与数据存储器、进位标志相加,结果放入 ACC
ACC 与数据存储器、进位标志相加,结果放入数据存储器
ACC 与立即数相减,结果放入 ACC
ACC 与数据存储器相减,结果放入 ACC
ACC 与数据存储器相减,结果放入数据存储器
ACC 与数据存储器、进位标志的反相减,结果放入 ACC
ACC 与数据存储器、进位标志相减,结果放入数据存储器
将加法运算中放入 ACC 的值调整为十进制数,并将结果放
入数据存储器
1
注
1
1
1
注
1
1
1
注
1
1
注
1
Z,C,AC,OV
Z,C,AC,OV
Z,C,AC,OV
Z,C,AC,OV
Z,C,AC,OV
Z,C,AC,OV
Z,C,AC,OV
Z,C,AC,OV
Z,C,AC,OV
Z,C,AC,OV
注
C
ACC 与数据存储器做“与”运算,结果放入 ACC
ACC 与数据存储器做“或”运算,结果放入 ACC
ACC 与数据存储器做“异或”运算,结果放入 ACC
ACC 与数据存储器做“与”运算,结果放入数据存储器
ACC 与数据存储器做“或”运算,结果放入数据存储器
ACC 与数据存储器做“异或”运算,结果放入数据存储器
ACC 与立即数做“与”运算,结果放入 ACC
ACC 与立即数做“或”运算,结果放入 ACC
ACC 与立即数做“异或”运算,结果放入 ACC
对数据存储器取反,结果放入数据存储器
对数据存储器取反,结果放入 ACC
1
1
1
注
1
注
1
注
1
1
1
1
注
1
1
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
Z
递增数据存储器,结果放入 ACC
递增数据存储器,结果放入数据存储器
递减数据存储器,结果放入 ACC
递减数据存储器,结果放入数据存储器
1
注
1
1
注
1
Z
Z
Z
Z
67
1
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
助记符
移位
RRA
[m]
RR
[m]
RRCA
[m]
RRC
[m]
RLA
[m]
RL
[m]
RLCA
[m]
RLC
[m]
数据传送
MOV
A,[m]
MOV
[m],A
MOV
A,x
位运算
CLR
[m].i
SET
[m].i
转移
JMP
addr
SZ
[m]
SZA
[m]
SZ
[m].i
SNZ
[m].i
SIZ
[m]
SDZ
[m]
SIZA
[m]
SDZA
[m]
CALL addr
RET
RET A,x
RETI
查表
TABRDC [m]
TABRDL [m]
其它指令
NOP
CLR
[m]
SET
[m]
CLR
WDT
CLR
WDT1
CLR
WDT2
SWAP
[m]
SWAPA [m]
HALT
说明
指令周期
影响标志位
数据存储器右移一位,结果放入 ACC
数据存储器右移一位,结果放入数据存储器
带进位将数据存储器右移一位,结果放入 ACC
带进位将数据存储器右移一位,结果放入数据存储器
数据存储器左移一位,结果放入 ACC
数据存储器左移一位,结果放入数据存储器
带进位将数据存储器左移一位,结果放入 ACC
带进位将数据存储器左移一位,结果放入数据存储器
1
注
1
1
注
1
1
注
1
1
注
1
无
无
C
C
无
无
C
C
将数据存储器送至 ACC
将 ACC 送至数据存储器
将立即数送至 ACC
1
注
1
1
无
无
无
清除数据存储器的位
置位数据存储器的位
1
注
1
注
无
无
无条件跳转
如果数据存储器为零,则跳过下一条指令
数据存储器送至 ACC,如果内容为零,则跳过下一条指令
如果数据存储器的第 i 位为零,则跳过下一条指令
如果数据存储器的第 i 位不为零,则跳过下一条指令
递增数据存储器,如果结果为零,则跳过下一条指令
递减数据存储器,如果结果为零,则跳过下一条指令
递增数据存储器,将结果放入 ACC,如果结果为零,则跳
过下一条指令
递减数据存储器,将结果放入 ACC,如果结果为零,则跳
过下一条指令
子程序调用
从子程序返回
从子程序返回,并将立即数放入 ACC
从中断返回
2
注
1
注
1
注
1
注
1
注
1
注
1
无
无
无
无
无
无
无
1
注
无
1
注
无
读取当前页的 ROM 内容,并送至数据存储器和 TBLH
读取最后页的 ROM 内容,并送至数据存储器和 TBLH
2
注
2
无
无
空指令
清除数据存储器
置位数据存储器
清除看门狗定时器
预清除看门狗定时器
预清除看门狗定时器
交换数据存储器的高低字节,结果放入数据存储器
交换数据存储器的高低字节,结果放入 ACC
进入暂停模式
1
注
1
注
1
1
1
1
注
1
1
1
无
无
无
TO,PDF
TO,PDF
TO,PDF
无
无
TO,PDF
无
无
无
无
2
2
2
2
注
注: 1、对跳转指令而言,如果比较的结果牵涉到跳转即需 2 个周期,如果没有发生跳转,则只需一个周期。
2、任何指令若要改变 PCL 的内容将需要 2 个周期来执行。
3、对于“CLR WDT1”或“CLR WDT2”指令而言,TO 和 PDF 标志位也许会受执行结果影响,
“CLR WDT1”和 “
WDT2”被连续地执行后,TO 和 PDF 标志位会被清除,除此之外 TO 和 PDF 标志位保持不变。
Rev. 1.40
68
2009-09-14
CLR
HT46F46E/HT46F47E/HT46F48E/HT46F49E
指令定义
ADC
A, [m] Add data memory and carry to the accumulator
说明:
将指定的数据存储器、累加器内容以及进位标志相加,结果存放到累加器。
运算过程:
ACCACC+[m]+C
影响标志位:
OV、Z、AC、C
ADCM A, [m]
说明:
运算过程:
影响标志位:
ADD
A, [m]
说明:
运算过程:
影响标志位:
ADD
A, x
说明:
运算过程:
影响标志位:
ADDM A, [m]
说明:
运算过程:
影响标志位:
Add the accumulator and carry to the accumulator
将指定的数据存储器、累加器内容和进位标志位相加,结果存放到指定的数据存储器。
[m]ACC+[m]+C
OV、Z、AC、C
Add data memory to the accumulator
将指定的数据存储器和累加器内容相加,结果存放到累加器。
ACCACC+[m]
OV、Z、AC、C
Add immediate data to the accumulator
将累加器和立即数相加,结果存放到累加器。
ACCACC+x
OV、Z、AC、C
Add the accumulator to the data memory
将指定的数据存储器和累加器内容相加,结果存放到指定的数据存储器。
[m]ACC+[m]
OV、Z、AC、C
Logical AND accumulator with data memory
AND
A, [m]
说明:
运算过程:
影响标志位:
将累加器中的数据和指定数据存储器内容做逻辑与,结果存放到累加器。
ACCACC “AND” [m]
Z
AND
Logical AND immediate data to the accumulator
A, x
说明:
运算过程:
影响标志位:
将累加器中的数据和立即数做逻辑与,结果存放到累加器。
ACCACC “AND” x
Z
ANDM A, [m]
说明:
运算过程:
影响标志位:
Logical AND data memory with the accumulator
将指定数据存储器内容和累加器中的数据做逻辑与,结果存放到数据存储器。
[m]ACC “AND” [m]
Z
Rev. 1.40
69
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
CALL addr
说明:
运算过程:
影响标志位:
Subroutine call
无条件的调用指定地址的子程序,此时程序计数器先加 1 获得下一个要执行的指令地址
并压入堆栈,接着载入指定地址并从新地址执行程序。由于指令需要额外的运算,所以
此指令为 2 个周期。
StackProgram Counter+1
Program Counter addr
无
Clear data memory
CLR
[m]
说明:
运算过程:
影响标志位:
将指定数据存储器的内容清零。
[m] 00H
无
CLR
[m] . i
说明:
运算过程:
影响标志位:
Clear bit of data memory
将指定数据存储器的 i 位内容清零。
[m].i 0
无
CLR
WDT
说明:
运算过程:
Clear Watchdog Timer
WDT 计数器、暂停标志位 PDF 和看门狗溢出标志位 TO 清零。
WDT 00H
PDF & TO 0
TO、PDF
影响标志位:
CLR
说明:
WDT1
运算过程:
影响标志位:
Preclear Watchdog Timer
PDF 和 TO 标志位都被清 0。必须配合 CLR WDT2 一起使用清除 WDT 计时器。当程序
仅执行 CLR WDT1,而没有执行 CLR WDT2 时,PDF 与 TO 保留原状态不变。
WDT 00H
PDF & TO 0
TO、PDF
CLR
WDT2 Preclear Watchdog Timer
说明:
PDF 和 TO 标志位都被清 0。必须配合 CLR WDT1 一起使用清除 WDT 计时器。当程序
仅执行 CLR WDT2,而没有执行 CLR WDT1 时,PDF 与 TO 保留原状态不变。
运算过程:
WDT 00H
PDF & TO 0
影响标志位:
TO、PDF
CPL
说明:
[m]
运算过程:
影响标志位:
Rev. 1.40
Complement data memory
将指定数据存储器中的每一位取逻辑反,相当于从 1 变 0 或从 0 变 1。
[m] [ m ]
Z
70
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
CPLA [m]
说明:
Complement data memory
将指定数据存储器中的每一位取逻辑反,相当于从 1 变 0 或从 0 变 1,结果被存放回累
加器且数据寄存器的内容保持不变。
运算过程:
影响标志位:
ACC [ m ]
Z
DAA
说明:
影响标志位:
Decimal-Adjust accumulator for addition
将累加器中的内容转换为 BCD(二进制转成十进制)码。如果低四位的值大于“9”或
AC=1,那么 BCD 调整就执行对原值加“6”
,否则原值保持不变;如果高四位的值大于
“9”或 C=1,那么 BCD 调整就执行对原值加“6”
。BCD 转换实质上是根据累加器和
标志位执行 00H,06H,60H 或 66H 的加法运算,结果存放到数据存储器。只有进位标
志位 C 受影响,用来指示原始 BCD 的和是否大于 100,并可以进行双精度十进制数的
加法运算。
[m] ACC+00H 或 [m] ACC+06H
[m] ACC+60H 或 [m] ACC+66H
C
DEC
[m]
说明:
运算过程:
影响标志位:
Decrement data memory
将指定数据存储器的内容减 1。
[m] [m]-1
Z
DECA [m]
说明:
运算过程:
影响标志位:
Decrement data memory and place result in the accumulator
将指定数据存储器的内容减 1,把结果存放回累加器并保持指定数据存储器的内容不变。
ACC [m]-1
Z
HALT
说明:
影响标志位:
Enter power down mode
此指令终止程序执行并关掉系统时钟,RAM 和寄存器的内容保持原状态,WDT 计数器
和分频器被清“0”
,暂停标志位 PDF 被置位 1,WDT 溢出标志位 TO 被清 0。
PDF 1
TO 0
TO、PDF
INC
Increment data memory
[m]
操作:
运算过程:
[m]
说明:
运算过程:
影响标志位:
将指定数据存储器的内容加 1。
[m] [m]+1
Z
INCA
[m]
说明:
运算过程:
影响标志位:
Increment data memory and place result in the accumulator
将指定数据存储器的内容加 1,结果存放回累加器并保持指定的数据存储器内容不变。
ACC [m]+1
Z
Rev. 1.40
71
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
运算过程:
影响标志位:
Directly jump
程序计数器的内容无条件地由被指定的地址取代,程序由新的地址继续执行。当新的地
址被加载时,必须插入一个空指令周期,所以此指令为 2 个周期的指令。
PC addr
无
MOV
A, [m]
说明:
运算过程:
影响标志位:
Move data memory to the accumulator
将指定数据存储器的内容复制到累加器。
ACC [m]
无
MOV
A, x
说明:
运算过程:
影响标志位:
Move immediate data to the accumulator
将 8 位立即数载入累加器。
ACC x
无
MOV
[m], A
说明:
运算过程:
影响标志位:
Move the accumulator data to memory
将累加器的内容复制到指定的数据存储器。
[m] ACC
无
NOP
说明:
运算过程:
影响标志位:
No operation
空操作,顺序执行下一条指令。
PC PC+1
无
OR
A, [m]
说明:
运算过程:
影响标志位:
Logical OR accumulator with data memory
将累加器中的数据和指定的数据存储器内容逻辑或,结果存放到累加器。
ACCACC “OR” [m]
Z
OR
A, x
说明:
运算过程:
影响标志位:
Logical OR immediate data to the accumulator
将累加器中的数据和立即数逻辑或,结果存放到累加器。
ACCACC “OR” x
Z
ORM
A, [m]
说明:
运算过程:
影响标志位:
Logical OR data memory with accumulator
将存在指定数据存储器中的数据和累加器逻辑或,结果放到数据存储器。
[m]ACC “OR” [m]
Z
RET
说明:
运算过程:
影响标志位:
Return from subroutine
将堆栈寄存器中的程序计数器值恢复,程序由取回的地址继续执行。
PC Stack
无
JMP
说明:
Rev. 1.40
addr
72
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
RET
说明:
A, x
运算过程:
影响标志位:
Return from interrupt
RETI
说明:
运算过程:
影响标志位:
RL
[m]
说明:
运算过程:
影响标志位:
RLA
[m]
说明:
运算过程:
影响标志位:
RLC
[m]
说明:
运算过程:
影响标志位:
RLCA
说明:
[m]
运算过程:
影响标志位:
Rev. 1.40
Return and place immediate data in the accumulator
将堆栈寄存器中的程序计数器值恢复且累加器载入指定的立即数,程序由取回的地址继
续执行。
PC Stack
ACC x
无
将堆栈寄存器中的程序计数器值恢复且中断功能通过设置 EMI 位重新使能。EMI 是控制
中断使能的主控制位。如果在执行 RETI 指令之前还有中断未被相应,则这个中断将在
返回主程序之前被相应。
PC Stack
EMI 1
无
Rotate data memory left
将指定数据存储器的内容左移 1 位,且第 7 位移到第 0 位。
[m].(i+1) [m].i (i=0~6)
[m].0 [m].7
无
Rotate data memory left and place result in the accumulator
将指定数据存储器的内容左移 1 位,且第 7 位移到第 0 位,结果送到累加器,而指定数
据存储器的内容保持不变。
ACC.(i+1) [m].i (i=0~6)
ACC.0 [m].7
无
Rotate data memory left through carry
将指定数据存储器的内容连同进位标志左移 1 位,第 7 位取代进位标志且原本的进位标
志移到第 0 位。
[m].(i+1) [m].i (i=0~6)
[m].0 C
C [m].7
C
Rotate left through carry and place result in the accumulator
将指定数据存储器的内容连同进位标志左移 1 位,第 7 位取代进位标志且原本的进位标
志移到第 0 位,移位结果送回累加器,但是指定数据寄存器的内容保持不变。
ACC.(i+1) [m].i (i=0~6)
ACC.0 C
C [m].7
C
73
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
RR
[m]
说明:
运算过程:
影响标志位:
RRA
说明:
[m]
运算过程:
影响标志位:
RRC
说明:
[m]
运算过程:
影响标志位:
RRCA
说明:
[m]
运算过程:
影响标志位:
SBC
说明:
A,[m]
Rotate data memory right
将指定数据存储器的内容循环右移 1 位且第 0 位移到第 7 位。
[m].i [m].(i+1) (i=0~6)
[m].7 [m].0,
无
Rotate right and place result in the accumulator
将指定数据存储器的内容循环右移 1 位,第 0 位移到第 7 位,移位结果存放到累加器,
而指定数据存储器的内容保持不变。
ACC.i [m].(i+1) (i=0~6)
ACC.7 [m].0
无
Rotate data memory right through carry
将指定数据存储器的内容连同进位标志右移 1 位,第 0 位取代进位标志且原本的进位标
志移到第 7 位。
[m].i [m].(i+1) (i=0~6)
[m]. 7 C
C [m].0
C
Rotate right through carry and place result in the accumulator
将指定数据存储器的内容连同进位标志右移 1 位,第 0 位取代进位标志且原本的进位标
志移到第 7 位,移位结果送回累加器,但是指定数据寄存器的内容保持不变。
ACC.i [m].(i+1) (i=0~6)
ACC.7 C
C [m].0
C
Subtract data memory and carry from the accumulator
将累加器减去指定数据存储器的内容以及进位标志的反,结果存放到累加器。如果结果
为负,C 标志位清除为 0,反之结果为正或 0,C 标志位设置为 1。
运算过程:
ACCACC-[m]- C
影响标志位:
OV、Z、AC、C
SBCM
说明:
Subtract data memory and carry from the accumulator
将累加器减去指定数据存储器的内容以及进位标志的反,结果存放到数据存储器。如果
结果为负,C 标志位清除为 0,反之结果为正或 0,C 标志位设置为 1。
A,[m]
运算过程:
ACCACC-[m]- C
影响标志位:
OV、Z、AC、C
Rev. 1.40
74
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
SDZ
说明:
[m]
运算过程:
影响标志位:
SDZA
说明:
[m]
运算过程:
影响标志位:
Skip if decrement data memory is 0
将指定的数据存储器的内容减 1,判断是否为 0,若为 0 则跳过下一条指令,由于取得下
一个指令时会要求插入一个空指令周期,所以此指令为 2 个周期的指令。如果结果不为
0,则程序继续执行下一条指令。
[m] [m] -1,如果[m]=0 跳过下一条指令执行
无
Decrement data memory and place result in ACC,skip if 0
将指定数据存储器内容减 1,判断是否为 0,如果为 0 则跳过下一条指令,此结果将存放
到累加器,但指定数据存储器内容不变。由于取得下一个指令时会要求插入一个空指令
周期,所以此指令为 2 个周期的指令。如果结果不为 0,则程序继续执行下一条指令。
ACC [m]-1,如果 ACC=0 跳过下一条指令执行
无
SET
[m]
说明:
运算过程:
影响标志位:
Set data memory
将指定数据存储器的每一位设置为 1。
[m] FFH
无
SET
[m]. i
说明:
运算过程:
影响标志位:
Set bit of data memory
将指定数据存储器的第 i 位设置为 1。
[m].i 1
无
SIZ
说明:
[m]
运算过程:
影响标志位:
SIZA
[m]
说明:
运算过程:
影响标志位:
SNZ
说明:
[m]. i
运算过程:
影响标志位:
Rev. 1.40
Skip if increment data memory is 0
将指定的数据存储器的内容加 1,判断是否为 0,若为 0 则跳过下一条指令。由于取得下
一个指令时会要求插入一个空指令周期,所以此指令为 2 个周期的指令。如果结果不为
0,则程序继续执行下一条指令。
[m] [m]+1,如果[m]=0 跳过下一条指令执行
无
Increment data memory and place result in ACC,skip if 0
将指定数据存储器的内容加 1,判断是否为 0,如果为 0 则跳过下一条指令,此结果会被
存放到累加器,但是指定数据存储器的内容不变。由于取得下一个指令时会要求插入一
个空指令周期,所以此指令为 2 个周期的指令。如果结果不为 0,则程序继续执行下一
条指令。
ACC [m]+1,如果 ACC=0 跳过下一条指令执行
无
Skip if bit I of the data memory is not 0
判断指定数据存储器的第 i 位,若不为 0,则程序跳过下一条指令执行。由于取得下一个
指令时会要求插入一个空指令周期,所以此指令为 2 个周期的指令。如果结果为 0,则
程序继续执行下一条指令。
如果[m].i≠0,跳过下一条指令执行
无
75
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
SUB
说明:
A, [m]
运算过程:
影响标志位:
SUBM
说明:
A, [m]
运算过程:
影响标志位:
SUB
说明:
A, x
Subtract data memory from the accumulator
将累加器的内容减去指定的数据存储器的数据,把结果存放到累加器。如果结果为负,
C 标志位清除为 0,反之结果为正或 0,C 标志位设置为 1。
ACCACC-[m]
OV、Z、AC、C
Subtract data memory from the accumulator
将累加器的内容减去指定数据存储器的数据,结果存放到指定的数据存储器。如果结果
为负,C 标志位清除为 0,反之结果为正或 0,C 标志位设置为 1。
[m]ACC-[m]
OV、Z、AC、C
Subtract immediate data from the accumulator
运算过程:
影响标志位:
将累加器的内容减去立即数,结果存放到累加器。如果结果为负,C 标志位清除为 0,
反之结果为正或 0,C 标志位设置为 1。
ACCACC-x
OV、Z、AC、C
SWAP [m]
说明:
运算过程:
影响标志位:
Swap nibbles within the data memory
将指定数据存储器的低 4 位和高 4 位互相交换。
[m].3~[m].0 ↔[m].7~[m].4
无
SWAPA
说明:
[m]
运算过程:
影响标志位:
SZ
说明:
[m]
运算过程:
影响标志位:
SZA
[m]
说明:
运算过程:
影响标志位:
Rev. 1.40
Swap data memory and place result in the accumulator
将指定数据存储器的低 4 位和高 4 位互相交换,再将结果存放到累加器且指定数据寄存
器的数据保持不变。
ACC.3~ACC.0 [m].7~[m].4
ACC.7~ACC.4 [m].3~[m].0
无
Skip if data memory is 0
判断指定数据存储器的内容是否为 0,若为 0,则程序跳过下一条指令执行。由于取得下
一个指令时会要求插入一个空指令周期,所以此指令为 2 个周期的指令。如果结果不为
0,则程序继续执行下一条指令。
如果[m] = 0, 跳过下一条指令执行
无
Move data memory to ACC,skip if 0
将指定数据存储器内容复制到累加器,并判断指定数据存储器的内容是否为 0,若为 0
则跳过下一条指令。由于取得下一个指令时会要求插入一个空指令周期,所以此指令为
2 个周期的指令。如果结果不为 0,则程序继续执行下一条指令。
ACC[m],如果[m] = 0,跳过下一条指令执行
无
76
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
SZ
[m]. i
说明:
运算过程:
影响标志位:
TABRDC [m]
说明:
运算过程:
影响标志位:
TABRDL [m]
说明:
运算过程:
影响标志位:
XOR
A, [m]
说明:
运算过程:
影响标志位:
Skip if bit I of the data memory is 0
判断指定数据存储器的第 i 位是否为 0,若为 0,则跳过下一条指令。由于取得下一个指
令时会要求插入一个空指令周期,所以此指令为 2 个周期的指令。如果结果不为 0,则
程序继续执行下一条指令。
如果[m].i = 0,跳过下一条指令执行
无
Move the ROM code(current page) to TBLH and data memory
将表格指针 TBLP 所指的程序代码低字节(当前页)移至指定的数据存储器且将高字节
移至 TBLH。
[m] 程序代码(低字节)
TBLH程序代码(高字节)
无
Move the ROM code(last page) to TBLH and data memory
将表格指针 TBLP 所指的程序代码低字节(最后一页)移至指定的数据存储器且将高字
节移至 TBLH。
[m] 程序代码(低字节)
TBLH程序代码(高字节)
无
Logical XOR accumulator with data memory
将累加器的数据和指定的数据存储器内容逻辑异或,结果存放到累加器。
ACCACC “XOR” [m]
Z
Logical XOR data memory with accumulator
XORM A, [m]
说明:
运算过程:
影响标志位:
将累加器的数据和指定的数据存储器内容逻辑异或,结果放到数据存储器。
[m]ACC “XOR” [m]
Z
XOR
A, x
说明:
运算过程:
影响标志位:
Logical XOR immediate data to the accumulator
将累加器的数据与立即数逻辑异或,结果存放到累加器。
ACCACC “XOR” x
Z
Rev. 1.40
77
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
封装信息
16-pin NSOP(150mil)外形尺寸
外形尺寸
A
1 6
9
B
8
1
C
C '
G
D
a
F
E
H
·MS-012
符号
A
B
C
C’
D
E
F
G
H
α
Rev. 1.40
最小
228
150
12
386
—
—
4
16
7
0°
尺寸 (单位:
)
单位:mil)
典型
—
—
—
—
—
50
—
—
—
—
78
最大
244
157
20
394
69
—
10
50
10
8°
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
18-pin DIP(300mil)外形尺寸
外形尺寸
A
B
A
1 8
1 0
1
9
B
1 8
1 0
1
9
H
H
C
C
D
D
E
F
E
I
G
Fig1. Full Lead Packages
F
I
G
Fig2. 1/2 Lead Packages
·MS-001d(见
见 fig1)
符号
A
B
C
D
E
F
G
H
I
最小
880
240
115
115
14
45
—
300
—
尺寸 (单位:
)
单位:mil)
典型
—
—
—
—
—
—
100
—
—
最大
920
280
195
150
22
70
—
325
430
最小
845
240
115
115
14
45
—
300
—
尺寸 (单位:
)
单位:mil)
典型
—
—
—
—
—
—
100
—
—
最大
880
280
195
150
22
70
—
325
430
·MS-001d(见
见 fig1)
符号
A
B
C
D
E
F
G
H
I
Rev. 1.40
79
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
·MO-095a(见
见 fig2)
符号
A
B
C
D
E
F
G
H
I
Rev. 1.40
最小
845
275
120
110
14
45
—
300
—
尺寸 (单位:
)
单位:mil)
典型
—
—
—
—
—
—
100
—
—
80
最大
885
295
150
150
22
60
—
325
430
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
18-pin SOP(300mil)外形尺寸
外形尺寸
1 0
1 8
B
A
9
1
C
C '
G
H
D
E
a
F
·MS-013
符号
A
B
C
C’
D
E
F
G
H
α
Rev. 1.40
最小
393
256
12
447
—
—
4
16
8
0°
尺寸 (单位:
)
单位:mil)
典型
—
—
—
—
—
50
—
—
—
—
81
最大
419
300
20
463
104
—
12
50
13
8°
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
20-pin SSOP(150mil)外形尺寸
外形尺寸
1 1
2 0
A
B
1
1 0
C
C '
G
D
E
符号
A
B
C
C’
D
E
F
G
H
α
Rev. 1.40
a
F
最小
228
150
8
335
49
—
4
15
7
0°
H
尺寸(
)
尺寸(单位:
单位:mil)
典型
—
—
—
—
—
25
—
—
—
—
82
最大
244
158
12
347
65
—
10
50
10
8°
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
24-pin SKDIP(300mil)外形尺寸
外形尺寸
A
A
1 3
2 4
B
1 3
2 4
B
1 2
1
1 2
1
H
H
C
D
C
E
F
D
I
G
Fig1. Full Lead Packages
E
F
I
G
Fig2. 1/2 Lead Packages
·MS-001d(见
见 fig1)
符号
A
B
C
D
E
F
G
H
I
最小
1230
240
115
115
14
45
—
300
—
尺寸 (单位:
)
单位:mil)
典型
—
—
—
—
—
—
100
—
—
最大
1280
280
195
150
22
70
—
325
430
最小
1160
240
115
115
14
45
—
300
—
尺寸 (单位:
)
单位:mil)
典型
—
—
—
—
—
—
100
—
—
最大
1195
280
195
150
22
70
—
325
430
·MS-001d(见
见 fig2)
符号
A
B
C
D
E
F
G
H
I
Rev. 1.40
83
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
·MO-095a(见
见 fig2)
符号
A
B
C
D
E
F
G
H
I
Rev. 1.40
最小
1145
275
120
110
14
45
—
300
—
尺寸 (单位:
)
单位:mil)
典型
—
—
—
—
—
—
100
—
—
84
最大
1185
295
150
150
22
60
—
325
430
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
24-pin SOP(300mil)外形尺寸
外形尺寸
1 3
2 4
A
B
1 2
1
C
C '
G
D
E
H
a
F
·MS-013
符号
A
B
C
C’
D
E
F
G
H
α
Rev. 1.40
最小
393
256
12
598
—
—
4
16
8
0°
尺寸(
)
尺寸(单位:
单位:mil)
典型
—
—
—
—
—
50
—
—
—
—
85
最大
419
300
20
613
104
—
12
50
13
8°
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
24-pin SSOP(150mil)外形尺寸
外形尺寸
1 3
2 4
A
B
1 2
1
C
C '
G
D
E
符号
A
B
C
C’
D
E
F
G
H
α
Rev. 1.40
a
F
最小
228
150
8
335
54
—
4
22
7
0°
H
尺寸(
)
尺寸(单位:
单位:mil)
典型
—
—
—
—
—
25
—
—
—
—
86
最大
244
157
12
346
60
—
10
28
10
8°
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
28-pin SKDIP(300mil)外形尺寸
外形尺寸
A
B
2 8
1 5
1
1 4
H
C
D
E
符号
A
B
C
D
E
F
G
H
I
Rev. 1.40
F
最小
1375
278
125
125
16
50
—
295
—
I
G
尺寸 (单位:
)
单位:mil)
典型
—
—
—
—
—
—
100
—
—
87
最大
1395
298
135
145
20
70
—
315
375
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
28-pin SOP(300mil)外形尺寸
外形尺寸
2 8
1 5
A
B
1
1 4
C
C '
G
D
E
H
a
F
·MS-013
符号
A
B
C
C’
D
E
F
G
H
α
Rev. 1.40
最小
393
256
12
697
—
—
4
16
8
0°
尺寸(
)
尺寸(单位:
单位:mil)
典型
—
—
—
—
—
50
—
—
—
—
88
最大
419
300
20
713
104
—
12
50
13
8°
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
28-pin SSOP(150mil)外形尺寸
外形尺寸
1 5
2 8
A
B
1 4
1
C
C '
G
D
E
符号
A
B
C
C’
D
E
F
G
H
α
Rev. 1.40
a
F
最小
228
150
8
386
54
—
4
22
7
0°
H
尺寸(
)
尺寸(单位:
单位:mil)
典型
—
—
—
—
—
25
—
—
—
—
89
最大
244
157
12
394
60
—
10
28
10
8°
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
包装带和卷轴规格
卷轴尺寸
D
T 2
A
C
B
T 1
Rev. 1.40
SOP 16N (150mil)
符号
说明
A
卷轴外圈直径
B
卷轴内圈直径
C
轴心直径
D
缝宽
T1
轮缘宽
T2
卷轴宽
尺寸(
)
尺寸(单位:
单位:mm)
330.0±1.0
100.0±1.5
13.0+0.5/-0.2
2.0±0.5
16.8+0.3/-0.2
22.2±0.2
SOP 18W
符号
A
B
C
D
T1
T2
尺寸(
)
尺寸(单位:
单位:mm)
330.0±1.0
100.0±1.5
13.0+0.5/-0.2
2.0±0.5
24.8+0.3/-0.2
30.2±0.2
说明
卷轴外圈直径
卷轴内圈直径
轴心直径
缝宽
轮缘宽
卷轴宽
90
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
Rev. 1.40
SSOP 20S (150mil)
符号
说明
A
卷轴外圈直径
B
卷轴内圈直径
C
轴心直径
D
缝宽
T1
轮缘宽
T2
卷轴宽
尺寸(
)
尺寸(单位:
单位:mm)
330.0±1.0
100.0±1.5
13.0+0.5/-0.2
2.0±0.5
16.8+0.3/-0.2
22.2±0.2
SOP 24W
符号
A
B
C
D
T1
T2
尺寸(
)
尺寸(单位:
单位:mm)
330.0±1.0
100.0±1.5
13.0+0.5/-0.2
2.0±0.5
24.8+0.3/-0.2
30.2±0.2
说明
卷轴外圈直径
卷轴内圈直径
轴心直径
缝宽
轮缘宽
卷轴宽
SSOP 24S (150mil)
符号
说明
A
卷轴外圈直径
B
卷轴内圈直径
C
轴心直径
D
缝宽
T1
轮缘宽
T2
卷轴宽
尺寸(
)
尺寸(单位:
单位:mm)
330.0±1.0
100.0±1.5
13.0+0.5/-0.2
2.0±0.5
16.8+0.3/-0.2
22.2±0.2
SOP 28W (300mil)
符号
说明
A
卷轴外圈直径
B
卷轴内圈直径
C
轴心直径
D
缝宽
T1
轮缘宽
T2
卷轴宽
尺寸(
)
尺寸(单位:
单位:mm)
330.0±1.0
100.0±1.5
13.0+0.5/-0.2
2.0±0.5
24.8+0.3/-0.2
30.2±0.2
SSOP 28S (150mil)
符号
说明
A
卷轴外圈直径
B
卷轴内圈直径
C
轴心直径
D
缝宽
T1
轮缘宽
T2
卷轴宽
尺寸(
)
尺寸(单位:
单位:mm)
330.0±1.0
100.0±1.5
13.0+0.5/-0.2
2.0±0.5
16.8+0.3/-0.2
22.2±0.2
91
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
运输带尺寸
P 0
D
P 1
t
E
F
W
D 1
P
C
B 0
K 0
A 0
R e e l H o le
IC p a c k a g e p in 1 a n d th e r e e l h o le s
a r e lo c a te d o n th e s a m e s id e .
Rev. 1.40
SOP 16N (150mil)
符号
说明
W
运输带宽
P
空穴间距
E
穿孔位置
F
空穴至穿孔距离(宽度)
D
穿孔直径
D1
空穴中之小孔直径
P0
穿孔间距
P1
空穴至穿孔距离(长度)
A0
空穴长
B0
空穴宽
K0
空穴深
t
传输带厚度
C
覆盖带宽度
尺寸(
)
尺寸(单位:
单位:mm)
16.0±0.3
8.0±0.1
1.75±0.1
7.5±0.1
1.55+0.1/-0.0
1.50+0.25/-0.0
4.0±0.1
2.0±0.1
6.5±0.1
10.3±0.1
2.1±0.1
0.30±0.05
13.3±0.1
SOP 18W
符号
W
P
E
F
D
D1
P0
P1
A0
B0
K0
t
C
尺寸(
)
尺寸(单位:
单位:mm)
24.0+0.3/-0.1
16.0±0.1
1.75±0.1
11.5±0.1
1.5±0.1
1.50+0.25/-0.00
4.0±0.1
2.0±0.1
10.9±0.1
12.0±0.1
2.8±0.1
0.30±0.05
21.3±0.1
说明
运输带宽
空穴间距
穿孔位置
空穴至穿孔距离(宽度)
穿孔直径
空穴中之小孔直径
穿孔间距
空穴至穿孔距离(长度)
空穴长
空穴宽
空穴深
传输带厚度
覆盖带宽度
92
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
Rev. 1.40
SSOP 20S (150mil)
符号
说明
W
运输带宽
P
空穴间距
E
穿孔位置
F
空穴至穿孔距离(宽度)
D
穿孔直径
D1
空穴中之小孔直径
P0
穿孔间距
P1
空穴至穿孔距离(长度)
A0
空穴长
B0
空穴宽
K0
空穴深
t
传输带厚度
C
覆盖带宽度
尺寸(
)
尺寸(单位:
单位:mm)
16.0+0.3/-0.1
8.0±0.1
1.75±0.10
7.5±0.1
1.5+0.1/-0.0
1.50+0.25/-0.00
4.0±0.1
2.0±0.1
6.5±0.1
9.0±0.1
2.3±0.1
0.30±0.05
13.3±0.1
SOP 24W
符号
W
P
E
F
D
D1
P0
P1
A0
B0
K0
t
C
说明
运输带宽
空穴间距
穿孔位置
空穴至穿孔距离(宽度)
穿孔直径
空穴中之小孔直径
穿孔间距
空穴至穿孔距离(长度)
空穴长
空穴宽
空穴深
传输带厚度
覆盖带宽度
尺寸(
)
尺寸(单位:
单位:mm)
24.0±0.3
12.0±0.1
1.75±0.1
11.5±0.1
1.55+0.10/-0.00
1.50+0.25/-0.00
4.0±0.1
2.0±0.1
10.9±0.1
15.9±0.1
3.1±0.1
0.35±0.05
21.3±0.1
SSOP 24S (150mil)
符号
说明
W
运输带宽
P
空穴间距
E
穿孔位置
F
空穴至穿孔距离(宽度)
D
穿孔直径
D1
空穴中之小孔直径
P0
穿孔间距
P1
空穴至穿孔距离(长度)
A0
空穴长
B0
空穴宽
K0
空穴深
t
传输带厚度
C
覆盖带宽度
尺寸(
)
尺寸(单位:
单位:mm)
16.0+0.3/-0.1
8.0±0.1
1.75±0.10
7.5±0.1
1.5+0.1/-0.0
1.50+0. 25/-0.00
4.0±0.1
2.0±0.1
6.5±0.1
9.5±0.1
2.1±0.1
0.30±0.05
13.3±0.1
93
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
Rev. 1.40
SOP 28W (300mil)
符号
说明
W
运输带宽
P
空穴间距
E
穿孔位置
F
空穴至穿孔距离(宽度)
D
穿孔直径
D1
空穴中之小孔直径
P0
穿孔间距
P1
空穴至穿孔距离(长度)
A0
空穴长
B0
空穴宽
K0
空穴深
t
传输带厚度
C
覆盖带宽度
尺寸(
)
尺寸(单位:
单位:mm)
24.0±0.3
12.0±0.1
1.75±0.10
11.5±0.1
1.5+0.1/-0.0
1.50+0.25/-0.00
4.0±0.1
2.0±0.1
10.85±0.10
18.34±0.10
2.97±0.10
0.35±0.01
21.3±0.1
SSOP 28S (150mil)
符号
说明
W
运输带宽
P
空穴间距
E
穿孔位置
F
空穴至穿孔距离(宽度)
D
穿孔直径
D1
空穴中之小孔直径
P0
穿孔间距
P1
空穴至穿孔距离(长度)
A0
空穴长
B0
空穴宽
K0
空穴深
t
传输带厚度
C
覆盖带宽度
尺寸(
)
尺寸(单位:
单位:mm)
16.0±0.3
8.0±0.1
1.75±0.10
7.5±0.1
1.55+0.10/-0.00
1.50+0.25/-0.00
4.0±0.1
2.0±0.1
6.5±0.1
10.3±0.1
2.1±0.1
0.30±0.05
13.3±0.1
94
2009-09-14
HT46F46E/HT46F47E/HT46F48E/HT46F49E
盛群半导体股份有限公司(
盛群半导体股份有限公司(总公司)
总公司)
新竹市科学工业园区研新二路 3 号
电话: 886-3-563-1999
传真: 886-3-563-1189
网站: www.holtek.com.tw
盛群半导体股份有限公司(
盛群半导体股份有限公司(台北业务处)
台北业务处)
台北市南港区园区街 3 之 2 号 4 楼之 2
电话: 886-2-2655-7070
传真: 886-2-2655-7373
传真: 886-2-2655-7383 (International sales hotline)
盛扬半导体有限公司(
盛扬半导体有限公司(上海业务处
上海业务处)
业务处)
上海宜山路 2016 号合川大厦 1 号楼 3 楼 G 室
电话: 021-5422-4590
传真: 021-5422-4605
网站: www.holtek.com.cn
201103
盛扬半导体有限公司(
盛扬半导体有限公司(深圳业务处
深圳业务处)
业务处)
深圳市南山区科技园科技中三路与高新中二道交汇处生产力大楼 A 单元五楼 518057
电话: 0755-8616-9908,8616-9308
传真: 86-755-8616-9722
盛扬半导体有限公司(
盛扬半导体有限公司(北京业务处
北京业务处)
业务处)
北京市西城区宣武门西大街甲 129 号金隅大厦 1721 室 100031
电话: 010-6641-0030, 6641-7751, 6641-7752
传真: 010-6641-0125
盛扬半导体有限公司(
盛扬半导体有限公司(成都业务处
成都业务处)
业务处)
成都市东大街 97 号香槟广场 C 座 709 室 610016
电话: 028-6653-6590
传真: 028-6653-6591
Holmate Semiconductor, Inc.(
(北美业务处)
北美业务处)
46712 Fremont Blvd., Fremont, CA 94538
电话: 510-252-9880
传真: 510-252-9885
网站: http://www.holtek.com
Copyright  2009 by HOLTEK SEMICONDUCTOR INC.
使用指南中所出现的信息在出版当时相信是正确的,然而盛群对于说明书的使用不负任何责任。文中提
到的应用目的仅仅是用来做说明,盛群不保证或表示这些没有进一步修改的应用将是适当的,也不推荐
它的产品使用在会由于故障或其它原因可能会对人身造成危害的地方。盛群产品不授权使用于救生、维
生器件或系统中做为关键器件。盛群拥有不事先通知而修改产品的权利,对于最新的信息,请参考我们
的网址 http://www.holtek.com.tw
Rev. 1.40
95
2009-09-14