Holtek HT46RB50 28-pin sop/skdipï¼ 48-pin ssop Datasheet

HT46RB50
内置 SPI 的 A/D 型 USB 8-Bit 单片机
特性
•
•
•
•
•
•
•
•
•
•
•
工作电压:
fSYS=6MHz:2.2V~5.5V
fSYS=12MHz:2.7V~5.5V
USB 总线电压:4.5V~5.5V
最多可有 38 个双向输入/输出口
1 个与输入/输出口共用引脚的外部中断输入
16 位可编程定时/计数器,具有溢出中断
8 位可编程定时/计数器,具有溢出中断和 7 级
预分频系数
晶体振荡(6MHz 或 12MHz)
看门狗定时器
4096×15 程序存储器 ROM
192×8 数据存储器 RAM
HALT 和唤醒功能可降低功耗
在 VDD=5V,系统频率为 12MHz 时,指令周期
为 0.33μs
•
•
•
•
•
•
•
•
•
•
•
•
•
•
6 层硬件堆栈
8 通道 10 位解析度的 A/D 转换器
2 通道 8 位的 PWM 输出,与输入/输出口共用
引脚
SIO(同步串行口)功能
支持中断,控制和批量传输
兼容 USB 2.0 全速模式
支持 4 个端点(包括端点 0)
88 个字节 FIFO(EP0 到 EP3 分别为 8、8、8
和 64)
位操作指令
查表指令,表格内容字长 15 位
63 条指令
指令执行时间为 1 或 2 个指令周期
低电压复位功能
28-pin SOP/SKDIP,48-pin SSOP 封装
概述
HT46RB50 是 8 位高性能精简指令集单片机,专门为 USB 产品而设计。尤其适用于 USB 或 SPI 接
口触控面板、USB 或 SPI 接口触控按键、PS2 摇杆、XBOX 摇杆、USB 鼠标键盘和摇杆。暂停模式可用
于降低功耗。
Rev. 1.50
1
2014-07-28
HT46RB50
方框图
USBD+
V33O
USBD-
TMR0C
USB1.1
Full Speed
TMR0
Interrupt
Circuit
TMR1C
STACK
Program
ROM
Program
Counter
TMR1
INTC
M
U
X
Prescaler
M
U
X
fSYS/4
fSYS
PC1/TMR0
PC2/TMR1
EN/DIS
WDTS
Instruction
Register
WDT Prescaler
M
U
X
MP
DATA
Memory
PAC
Port A
WDT
M
U
X
fSYS/4
WDT OSC
PA0~PA7
PA
Instruction
Decoder
MUX
PBC
ALU
Timing
Generator
STATUS
Shifter
OSC1
RES
VDD
VSS
AVDD
AVSS
PB0/AN0~PB7/AN7
A/D Converter
PCC
OSC2
Port B
PB
Port C
PC
ACC
PDC
Port D
PD
PC0/INT
PC3~PC7
PD0/PWM0~PD1/PWM1,
PD2~PD7
PWM
PEC
Port E
PE
Serial
Interface
Rev. 1.50
2
PE4~PE5
PE0/SCS
PE1/CLK
PE2/SDI
PE3/SDO
2014-07-28
HT46RB50
引脚图
PA3
1
48
PA4
PA2
2
47
PA5
PA1
3
46
PA6
PA0
4
45
PA7
PD3
5
44
PD4
PD2
6
43
PD5
PD1/PWM1
7
42
PD6
PD0/PWM0
8
41
PD7
PB7/AN7
9
40
RES
PB6/AN6
10
39
AVDD
PA3
1
28
PA4
PB5/AN5
11
38
VDD
PA2
2
27
PA5
PB4/AN4
12
37
AVSS
PA1
3
26
PA6
PC7
13
36
VSS
PA0
4
25
PA7
PC6
14
35
OSC1
PD1/PWM1
5
24
RES
PC5
15
34
OSC2
PD0/PWM0
6
23
VDD/AVDD
PC4
16
33
PE4
PB5/AN5
7
22
VSS/AVSS
PB3/AN3
17
32
PE5
PB4/AN4
8
21
OSC1
PB2/AN2
18
31
V33O
PB3/AN3
9
20
OSC2
PB1/AN1
19
30
UDP
PB2/AN2
10
19
V33O
PB0/AN0
20
29
UDN
PB1/AN1
11
18
UDP
PE3/SDO
21
28
PC0/INT
PB0/AN0
12
17
UDN
PE2/SDI
22
27
PC1/TMR0
PE3/SDO
13
16
PC0/INT
PE1/CLK
23
26
PC2/TMR1
PE2/SDI
14
15
PE1/CLK
PE0/SCS
24
25
PC3
HT46RB50
28 SOP-A/SKDIP-A
HT46RB50
48 SSOP-A
引脚说明
引脚名称
输入/输出
配置选项
上拉电阻
(位选择)
唤醒
(位选择)
PA0~PA7
输入/输出
PB0/AN0~
PB7/AN7
输入/输出
上拉电阻
(位选择)
PC0/ INT
PC1/TMR0
PC2/TMR1
PC3~PC7
输入/输出
上拉电阻
(半字节选择)
PD0/PWM0
PD1/PWM1
PD2~PD7
输入/输出
上拉电阻
(半字节选择)
PE0/ SCS
输入/输出
上拉电阻
(半字节选择)
PE1/CLK
输入/输出
上拉电阻
(半字节选择)
PE2/SDI
输入/输出
上拉电阻
(半字节选择)
Rev. 1.50
功能说明
8 位双向输入/输出口。每一位可由配置选项设置为唤醒输
入。输入/输出模式由控制寄存器 PAC(PA 控制寄存器:
位选择)决定。上拉电阻选项:PA0~PA7,位选择;唤醒
选项:PA0~PA7。
8 位双向输入/输出口。可由软件设置为 CMOS 输出、带
或不带上拉电阻(由上拉电阻选项决定:位选择)的斯密
特触发输入。PB 口可作为 AD 转换输入。
双向输入/输出口。可由软件设置为 CMOS 输出、带或不
带上拉电阻(由上拉电阻选项决定:半字节选择)的斯密
特触输入。 INT 、TMR0 和 TMR1 分别与 PC0、PC1 和
PC2 共用引脚。
双向输入/输出口。可由软件设置为 CMOS 输出、带或不
带上拉电阻(由上拉电阻选项决定:半字节选择)的斯密
特触输入。
PWM0 和 PWM1 分别与 PD0 和 PD1 共用引脚。
双向输入/输出口。可由软件设置为 CMOS 输出、带或不
带上拉电阻(由上拉电阻选项决定:半字节选择)的斯密
特触输入。SCS 与 PE0 共用引脚。SCS 为串行接口芯片选
择引脚,主模式为输出,从模式为输入。
双向输入/输出口。可由软件设置为 CMOS 输出、带或不
带上拉电阻(由上拉电阻选项决定:半字节选择)的斯密
特触输入。CLK 与 PE1 共用引脚。CLK 为串行接口时钟
输入/输出引脚(初始化为输入)
。
双向输入/输出口。可由软件设置为 CMOS 输出、带或不
带上拉电阻(由上拉电阻选项决定:半字节选择)的斯密
特触输入。SDI 与 PE2 共用引脚。SDI 为串行接口输入引
脚。
3
2014-07-28
HT46RB50
引脚名称
输入/输出
配置选项
PE3/SDO
输入/输出
上拉电阻
(半字节选择)
PE4~PE5
输入/输出
上拉电阻
(半字节选择)
RES
VSS
AVSS
VDD
输入
—
—
—
—
—
—
—
AVDD
—
—
OSC1
OSC2
V33O
输入
输出
输出
UDP
输入/输出
—
UDN
输入/输出
—
晶体或 RC
—
功能说明
双向输入/输出口。可由软件设置为 CMOS 输出、带或不
带上拉电阻(由上拉电阻选项决定:半字节选择)的斯密
特触输入。SDO 与 PE3 共用引脚。SDO 为串行接口输出
引脚。
双向输入/输出口。可由软件设置为 CMOS 输出、带或不
带上拉电阻(由上拉电阻选项决定:半字节选择)的斯密
特触输入。
斯密特触发复位输入,低电平有效。
负电源,接地。
ADC 负电源,接地。
正电源。
ADC 正源
28-pin:必外接 VDD。
48-pin:可连接到外部电源。
OSC1、OSC2 连接 6M 或 12M 的晶体振荡器/谐振器以产
生内部系统时钟。
3.3V 参考源输出。
UDP 为 USBD+引脚
USB 功能可通过软件控制。
UDN 为 USBD-引脚
USB 功能可通过软件控制。
极限参数
电源供应电压………….VSS-0.3V~VSS+6.0V
端口输入电压………….VSS-0.3V~VDD+0.3V
IOL 总电流…………. ………. ……….150mA
总消耗电流………. ………. ……….500mW
储存温度………….-50℃~125℃
工作温度………….-40℃~85℃
IOH 总电流…………. …. -100mA
注:这里只强调额定功率,超过极限参数所规定的范围将对芯片造成损害,无法预期芯片在上述标示范围外的工作状态,
而且若长期在标示范围外的条件下工作,可能影响芯片的可靠性。
Rev. 1.50
4
2014-07-28
HT46RB50
直流电气特性
符号
Ta=25℃
参数
VDD
工作电压
VUSB
USB SIE 工作电压
VDD
—
—
—
IDD1
工作电流(6M 晶振)
5V
IDD2
工作电流(12M 晶振)
ISTB1
ISTB2
ISTB3
5V
3V
静态电流(看门狗打开)
5V
3V
静态电流(看门狗关闭)
5V
静态电流(看门狗关闭) 5V
VIL2
VIH2
输入/输出口的低电平
输入电压
输入/输出口的高电平
输入电压
低电平输入电压( RES )
高电平输入电压( RES )
IOL
输入/输出口灌电流
IOH
输入/输出口源电流
RPH
上拉电阻
VIL1
VIH1
VLVR
VV33O
EAD
Rev. 1.50
3V
低电压复位
3.3V 参考电压输出
A/D 转换误差
测试条件
条件
fSYS=6MHz
fSYS=12MHz
—
无负载,fSYS=6MHz
无负载,fSYS=12MHz
无负载,系统 HALT
USB 挂起
无负载,系统 HALT
USB 挂起
无负载,系统 HALT
USB 发送
3.3V 参考电压打开
最小
典型
最大
单位
2.2
2.7
4.5
—
—
—
5.5
5.5
5.5
—
6.5
12
V
V
V
mA
mA
—
3.6
10
mA
—
—
—
—
—
7.5
—
—
—
—
16
5
10
1
2
mA
μA
μA
μA
μA
—
150
200
μA
—
—
0
—
0.3 VDD
V
—
—
0.7VDD
—
VDD
V
0
0.9 VDD
4
10
-2
-5
20
10
2.7
3
—
—
—
8
20
-4
-10
60
30
3
3.3
±0.5
0.4 VDD
VDD
—
—
—
—
100
50
3.3
3.6
±1
V
V
mA
mA
mA
mA
kΩ
kΩ
V
V
LSB
—
—
3V
5V
3V
5V
3V
5V
—
5V
—
—
—
VOL=0.1VDD
VOL=0.1VDD
VOH=0.9VDD
VOH=0.9VDD
—
—
配置选项为 3.0V
IV33O =-5mA
—
5
2014-07-28
HT46RB50
交流电气特性
符号
Ta=25℃
参数
fSYS
系统时钟
fTIMER
定 时 器 输 入 频 率
(TMR)
tWDTOSC
看门狗振荡器
tRES
tSST
tINT
tAD
tADC
tADCS
外部复位低电平脉宽
系统启动延迟时间
中断脉冲宽度
A/D 时钟周期
A/D 转换时间
A/D 采样时间
VDD
—
—
—
—
3V
5V
—
—
—
—
—
—
测试条件
条件
2.2V~5.5V
3.3V~5.5V
2.2V~5.5V
3.3V~5.5V
—
—
—
从 HALT 状态唤醒
—
—
—
—
最小
典型
最大
单位
400
400
0
0
45
32
1
—
1
1
—
—
—
—
—
—
90
65
—
1024
—
—
76
32
6000
12000
6000
12000
180
130
—
—
—
—
—
—
kHz
kHz
kHz
kHz
μs
μs
μs
*tSYS
μs
μs
tAD
tAD
注:*tSYS =1/fSYS
上电复位特性
Ta=25℃
符号
参数
VPOR
RRPOR
上电复位电压
上电复位电压速率
VDD 保持为 VPOR 的最小
时间
tPOR
Rev. 1.50
VDD
—
—
测试条件
条件
—
—
—
—
6
最小
典型
最大
单位
—
0.035
—
—
100
—
mV
V/ms
1
—
—
ms
2014-07-28
HT46RB50
系统功能说明
指令执行时序
单片机的系统时钟由晶体振荡器产生。该时钟在芯片内部被分成四个互不重叠的时钟周期。一个指
令周期包括四个系统时钟周期。
指令的读取和执行是以流水线方式进行的, 这种方式在一个指令周期进行读取指令操作,而在下一
个指令周期进行解码与执行该指令。因此,流水线方式使多数指令能在一个周期内执行完成。但如果渉
及到的指令要改变程序计数器的值,就需要花两个指令周期来完成这一条指令。
T1
T2
T3
T1
T4
T2
T3
T4
T1
T2
T3
T4
System Clock
PC
PC
PC+1
Fetch INST (PC)
Execute INST (PC-1)
PC+2
Fetch INST (PC+1)
Execute INST (PC)
Fetch INST (PC+2)
Execute INST (PC+1)
指令执行时序
程序计数器 — PC
程序计数器(PC)控制程序存储器 ROM 中指令执行的顺序,它可寻址整个 ROM 的范围。
取得指令码以后,程序计数器会自动加一,指向下一个指令码的地址。但如果执行跳转、条件跳跃、
向 PCL 赋值、子程序调用、初始化复位、内部中断、外部中断、子程序返回等操作时,PC 会载入与指
令相关的地址而非下一条指令地址。
当遇到条件跳跃指令且符合条件时,当前指令执行过程中读取的下一条指令会被丢弃,取而代之的
是一个空指令周期,随后才能取得正确的指令。反之,就会顺序执行下一条指令。
程序计数器的低字节(PCL)是一个可读写的寄存器(06H)
。对 PCL 赋值将产生一个短跳转动作,
跳转的范围为当前页 256 个地址。
当遇到控制转移指令时,系统也会插入一个空指令周期。
模式
初始化复位
外部中断
定时/计数器 0 溢出
定时/计数器 1 溢出
USB 中断
A/D 转换中断
串口接口中断
条件跳跃
装载 PCL
跳转、子程序调用
从子程序返回
*11
0
0
0
0
0
0
0
*10
0
0
0
0
0
0
0
*9
0
0
0
0
0
0
0
*8
0
0
0
0
0
0
0
*7
0
0
0
0
0
0
0
*11
#11
S11
*10
#10
S10
*9
#9
S9
*8
#8
S8
@7
#7
S7
程序计数器
*6
*5
0
0
0
0
0
0
0
0
0
0
0
0
0
0
PC+2
@6 @5
#6
#5
S6
S5
*4
0
0
0
0
1
1
1
*3
0
0
1
1
0
0
1
*2
0
1
0
1
0
1
0
*1
0
0
0
0
0
0
0
*0
0
0
0
0
0
0
0
@4
#4
S4
@3
#3
S3
@2
#2
S2
@1
#1
S1
@0
#0
S0
程序计数器
注: *11 ~ *0 :程序计数器位
#11 ~ #0 :指令代码位
Rev. 1.50
S11 ~ S0 :堆栈寄存器位
@7 ~ @0 :PCL 位
7
2014-07-28
HT46RB50
程序存储器 — ROM
程序存储器用来存放要执行的指令代码,以及一些数据、 000H
Device Initialization Program
表格和中断入口。程序存储器有 4096×15 位,程序存储器空 004H
External Interrupt Subroutine
间可以用程序计数器或表格指针进行寻址。
008H
Timer/Event Counter 0 Interrupt Subroutine
以下列出的程序存储器地址是系统专为特殊用途而保留的:
00CH
· 地址 000H
Timer/Event Counter 1 Interrupt Subroutine
该地址为程序初始化保留。系统复位后,程序总是从 000H 010H
USB Interrupt Subroutine
开始执行。
014H
A/D Converter Interrupt Subroutine
Program
· 地址 004H
Memory
该地址为外部中断服务程序保留。当 INT 引脚有触发信号 018H
Serial Interface Interrupt Subroutine
输入,如果中断允许且堆栈未满,则程序会跳转到 004H
地址开始执行。
n00H
Look-up Table (256 words)
· 地址 008H
nFFH
该地址为定时/计数器 0 中断服务程序保留。当定时/计数
器 0 溢出,如果中断允许且堆栈未满,则程序会跳转到
008H 地址开始执行。
Look-up Table (256 words)
FFFH
· 地址 00CH
15 Bits
该地址为定时/计数器 1 中断服务程序保留。当定时/计数
Note: n ranges from 0 to F
器 1 溢出,如果中断允许且堆栈未满,则程序会跳转到
程序存储器
00CH 地址开始执行。
· 地址 010H
该地址为 USB 中断服务程序保留。当发生 USB 中断,如果中断允许且堆栈未满,则程序会跳转到
010H 地址开始执行。
· 地址 014H
该地址为 A/D 转换中断服务程序保留。当 A/D 转换完成,如果中断允许且堆栈未满,则程序会跳转
到 014H 地址开始执行。
· 地址 018H
该地址为串行接口中断服务程序保留。当 8 位数据接收或发送完成,如果中断允许且堆栈未满,则
程序会跳转到 018H 地址开始执。
· 表格区
ROM 空间的任何地址都可做为查表使用。查表指令“TABRDC [m]”(查当前页表格,1 页=256 个
字)和“TABRDL [m]”
(查最后页表格)
,会把表格内容低字节传送给[m],而表格内容高字节传送
到 TBLH 寄存器(08H)
。只有表格内容的低字节被传送到目标地址中,而高字节被传送到表格内容
高字节寄存器 TBLH,并且 TBLH 的最高位始终为“0”。表格内容高字节寄存器 TBLH 是只读寄存
器。表格指针(TBLP)是可读/写寄存器(07H),用来指明表格地址。在查表之前,要先将表格地
址写入 TBLP 中。所有与表格有关的指令都需要两个指令周期的执行时间。这里提到的表格区都可
以做为正常的程序存储器来使用。
指令
TABRDC[m]
TABRDL[m]
*11
P11
1
*10
P10
1
注:*11~*0:表格地址位
Rev. 1.50
*9
P9
1
*8
P8
1
表格区
*6
*5
@6
@5
@6
@5
*7
@7
@7
表格区
P11~P8:当前程序指针位
8
*4
@4
@4
*3
@3
@3
*2
@2
@2
*1
@1
@1
*0
@0
@0
@7~@0:表格指针位
2014-07-28
HT46RB50
00H
堆栈寄存器 — STACK
堆栈寄存器是特殊的存储器空间,用来保存 PC 的值。HT46RB50
有 6 层堆栈,堆栈寄存器既不是数据存储器的一部分,也不是程序
存储器的一部分,而且它既不能读出,也不能写入。堆栈的使用是
通过堆栈指针(SP)来实现的,堆栈指针也不能读出或写入。当发
生子程序调用或中断响应时,程序计数器(PC)的值会被压入堆栈;
在子程序调用结束或中断响应结束时(执行指令 RET 或 RETI)
,堆
栈将原先压入堆栈的内容弹出,重新装入程序计数器中。在系统复
位后,堆栈指针会指向堆栈顶部。
如果堆栈已满,并且发生了不可屏蔽的中断,那么只有中断请
求标志会被记录下来,而中断响应会被抑制,直到堆栈指针(执行
RET 或 RETI 指令)发生递减,中断才会被响应。这个功能可以防止
堆栈溢出,使得程序员易于使用这种结构。同样,如果堆栈已满,
并且发生了子程序调用,那么堆栈会发生溢出,首先进入堆栈的内
容将会丢失,只有最后的 6 个返回地址会被保留。
Indirect Addressing Register 0
01H
MP0
02H
Indirect Addressing Register 1
03H
MP1
04H
05H
ACC
06H
PCL
07H
TBLP
08H
TBLH
09H
0AH
STATUS
0BH
INTC0
0CH
0DH
TMR0
0EH
TMR0C
0FH
TMR1H
10H
TMR1L
11H
TMR1C
12H
PA
13H
PAC
14H
PB
数据存储器 — RAM
15H
PBC
16H
PC
数据存储器由 238×8 位组成,分为两个功能区间:特殊功能寄
存器(46×8)和通用数据存储器(192×8),数据存储器单元大多
数是可读/写的,但有些只读的。
在 40H 之前的空间保留给系统以后扩展使用,读取这些地址的
返回值为“00H”
。通用数据寄存器地址从 40H 到 FFH,用来存储数
据和控制信息。
所有的数据存储器单元都能直接执行算术、逻辑、递增、递减
和循环操作。除了一些特殊位外,数据存储器的每一位都可由
“SET[m].i”置位或由“CLR[m].i”复位。而且都可以通过间接寻址
指针(MP0;01H/MP1;03H)进行间接寻址。
17H
PCC
间接寻址寄存器
18H
PD
19H
PDC
1AH
PE
1BH
PEC
1CH
1DH
1EH
INTC1
Special Purpose
Data Memory
1FH
20H
USC
21H
USR
22H
UCC
23H
AWR
24H
STALL
25H
SIES
地址 00H 和 02H 是间接寻址寄存器,并无实际的物理区存在。
任何对[00H]或[02H]的读/写操作,都是访问由 MP0(01H)MP1(03H)
或所指向的 RAM 单元。间接读取地址 00H 或 02H 得到的值为 00H,
间接写入此地址,不会产生任何操作。间接寻址指针 MP0(01H)和
MP1(03H)是 8 位寄存器。
26H
MISC
27H
SETIO
28H
FIFO0
29H
FIFO1
2AH
FIFO2
2BH
FIFO3
累加器
2DH
累加器(ACC)与算术逻辑单元(ALU)有密切关系。它对应
于 RAM 地址 05H,做为运算的立即数据。存储器之间的数据传送必
须经过累加器。
2FH
2CH
2EH
算术逻辑单元 — ALU
算术逻辑单元(ALU)是执行 8 位算术、逻辑运算的电路,它
提供有以下功能:
· 算术运算(ADD,ADC,SUB,SBC,DAA)
· 逻辑运算(AND,OR,XOR,CPL)
· 移位运算(RL,RR,RLC,RRC)
· 递增和递减(INC,DEC)
· 分支判断(SZ,SNZ,SIZ,SDZ…)
ALU 不仅可以储存数据运算的结果,还会改变状态寄存器的值。
30H
ADRL
31H
ADRH
32H
ADCR
33H
ACSR
34H
PWM0
35H
PWM1
36H
37H
38H
SBCR
39H
3AH
SBDR
3FH
40H
General Purpose
Data Memory
(192 Bytes)
: Unused
Read as "00"
FFH
数据存储器
Rev. 1.50
9
2014-07-28
HT46RB50
状态寄存器 — STATUS
8 位的状态寄存器(0AH)
,由零标志位(Z)、进位标志位(C)、辅助进位标志位(AC)
、溢出标志
位(OV)
、暂停标志位(PDF)和看门狗定时器溢出标志位(TO)组成。该寄存器不仅记录状态信息,
而且还控制操作顺序。
除了 PDF 和 TO 标志外,状态寄存器的其它位都可以用指令改变。任何对状态寄存器的写操作都不
会改变 PDF 和 TO 的值。对状态寄存器的操作可能会导致与预期不一样的结果。TO 标志只受系统上电、
看门狗溢出、
“CLR WDT” 指令或“HALT” 指令的影响。PDF 标志只受系统上电、“CLR WDT” 指
令或“HALT” 指令的影响。
标志位 Z、OV、AC 和 C 反映的是最近一次操作的状态。
在进入中断程序或子程序调用时,状态寄存器不会被自动压入堆栈。如果状态寄存器的内容是重要的,
而且子程序会影响状态寄存器的内容,那么程序员必须事先将 STATUS 的值保存好。
符号
位
C
0
AC
1
Z
2
OV
3
PDF
4
TO
5
—
—
6
7
功能
如果在加法运算中结果产生了进位或在减法运算中结果不产生借位,
则 C 被置位;反之,C 被清除。它也可被循环移位指令影响。
如果在加法运算中低 4 位产生了进位或减法运算中低 4 位不产生借
位,则 AC 被置位;反之,AC 被清除。
如果算术或逻辑运算的结果为零,则 Z 被置位;反之,Z 被清除。
如果运算结果向最高位进位,但最高位并不产生进位输出,则 OV 被
置位;反之,OV 被清除
系统上电或执行“CLR WDT”指令,PDF 被清除;执行“HALT”指
令,PDF 被置位。
系统上电、执行“CLR WDT”或“HALT”指令,TO 被清除;WDT
定时溢出,TO 被置位。
未用,读出为“0”
未用,读出为“0”
STATUS(0AH) 寄存器
中断
HT46RB50 提供一个外部中断、两个内部定时/计数器中断、一个 A/D 转换中断、一个串行接口中断
和一个 USB 中断。中断控制寄存器 0(INTC0;0BH)和中断控制寄存器 1(INTC1;1EH)包含了中断
控制位和中断请求标志,中断控制位用来设置中断允许/禁止。
只要有中断子程序被服务,其余的中断全部都被自动禁止(通过清除 EMI 位),这种做法的目的在
于防止中断嵌套。这时如果有其它中断发生,只有中断请求标志会被记录下来。如果在中断服务程序中
有另一个中断需要响应,程序员可以置位 EMI、INTC0 和 INTC1 所对应的位,以便进行中断嵌套。如果
堆栈已满,则中断并不会被响应,一直到堆栈指针(SP)发生递减后才会响应。如果需要中断立即得到
响应,应避免堆栈饱和。
所有的中断都具有唤醒能力。当有中断被服务,系统会将程序计数器值压入堆栈,然后再跳转至中
断服务程序的入口。但这时只有程序计数器的内容被压入堆栈,如果其它寄存器和状态寄存器的内容会
被中断程序改变,从而会破坏主程序的控制流程的话,程序员应该事先将这些数据保存起来。
外部中断是由 INT 引脚下降沿信号触发的,其中断请求标志位(EIF;INTC0 的第 4 位)会被置位。
如果中断允许,且堆栈未满,当发生外部中断时,会产生地址 04H 的子程序调用;而中断请求标志 EIF
和总中断控制位 EMI 会被清除,以禁止其它中断响应。
内部定时/计数器 0 中断是由定时/计数器 0 溢出触发的,其中断请求标志(T0F;INTC0 的第 5 位)
会被置位。如果中断允许,且堆栈未满,当发生定时/计数器中断时,会产生地址 08H 的子程序调用;而
中断请求标志 T0F 和总中断控制位 EMI 会被清除,以禁止其它中断响应。
内部定时/计数器 1 中断是由定时/计数器 1 溢出触发的,其中断请求标志(T1F;INTC0 的第 6 位)
会被置位。如果中断允许,且堆栈未满,当发生定时/计数器中断时,会产生地址 0CH 的子程序调用;
而中断请求标志 T1F 和总中断控制位 EMI 会被清除,以禁止其它中断响应。
Rev. 1.50
10
2014-07-28
HT46RB50
位
0
1
2
3
4
5
6
7
符号
EMI
EEI
ETI
EADI
EIF
TF
ADF
—
功
能
总中断控制位(1=允许;0=禁止)
外部中断控制位(1=允许;0=禁止)
定时/计数器中断控制位(1=允许;0=禁止)
A/D 转换中断控制位(1=允许;0=禁止)
外部中断请求标志(1=有;0=无)
定时/计数器中断请求标志(1=有;0=无)
A/D 转换中断请求标志(1=有;0=无)
未用,读出为“0”
INTC0(0BH) 寄存器
位
0
1
2
3
4
5
6
7
符号
EUI
EADI
ESII
—
USBF
ADF
SIF
—
功
能
USB 中断允许位(1=允许;0=禁止)
AD 转换中断允许位(1=允许;0=禁止)
串行接口中断允许位(1=允许;0=禁止)
未用,读出为“0”
USB 中断请求标志(1=有;0=无)
AD 转换中断请求标志(1=有;0=无)
串行接口中断请求标志(1=有;0=无)
未用,读出为“0”
INTC1(1EH) 寄存器
USB 中断是由以下 USB 事件触发的,其中断请求标志(USBF;INTC1 的第 4 位)会被置位。
 PC 访问相应的 USB FIFO
 PC 发出挂起信号
 PC 发出恢复信号
 USB 复位
如果中断允许,且堆栈未满,当发生 USB 事件中断时,会产生地址 10H 的子程序调用;而中断请
求标志 USBF 和总中断控制位 EMI 会被清除,以禁止其它中断响应。当 PC 访问 HT46RB50 中 FIFO 时,
寄存器 USR 中相应的请求标志会被置位,
并触发 USB 中断。
程序员可以很方便判断 PC 访问了哪个 FIFO,
当相应的程序被服务过,相应的标志位必须由软件清除。当 HT46RB50 接收到 PC 发出挂起信号,挂起
标志(SUSP;USC 的第 0 位)被置位并触发中断。同样,HT46RB50 接收到 PC 发出恢复信号,恢复标
志(RESUME;USC 的第 3 位)被置位并触发中断。任何时候检测到 USB 复位信号都会触发 USB 中断。
A/D 转换中断是由 A/D 转换完成触发的,其中断请求标志(ADF;INTC1 的第 5 位)会被置位。如
果中断允许,且堆栈未满,当发生 A/D 转换中断时,会产生地址 0CH 的子程序调用;而中断请求标志
位 ADF 和总中断控制位 EMI 会被清除,以禁止其它中断响应。
串行接口中断是由接收到或发送完完整的 8 位数据触发的,其中断请求标志位(SIF;INTC1 的第 6
位)会被置位。如果中断允许,且堆栈未满,当发生串行接口中断时,会产生地址 18H 的子程序调用;
而中断请求标志位 SIF 和总中断控制位 EMI 会被清除,以禁止其它中断响应。
中断源
外部中断
定时/计数器 0 中断
定时/计数器 1 中断
USB 中断
AD 转换中断
串行接口中断
Rev. 1.50
优先级
1
2
3
4
5
6
11
中断向量
04H
08H
0CH
10H
14H
18H
2014-07-28
HT46RB50
在执行中断子程序期间,其它的中断请求会被屏蔽,直到执行 RETI 指令或 EMI 和相关中断控制位
被置位(当然,此时堆栈未满)
。如果要从中断子程序返回,只要执行 RET 或 RETI 指令即可。其中,
RETI 指令会自动置位 EMI,以允许中断服务,而 RET 则不会。
如果中断在两个连续的 T2 脉冲的上升沿之间发生,且中断响应允许,那么在下两个 T2 脉冲之间,
该中断会被服务。如果同时发生中断请求,其优先级如下表示;也可以通过设定各中断相关的控制位来
改变优先级。
建议不要在中断服务程序中使用“CALL”指令来调用子程序。因为中断随时都可能发生,而且需
要立刻给予响应。如果只剩下一层堆栈,而中断不能被很好地控制,原先的控制序列很可能因为在中断
子程序中执行“CALL”指令而使堆栈溢出,从而发生混乱。
振荡电路
HT46RB50 只有外部晶体振荡,其信号做为系统时钟。HALT 模式会
停止系统振荡器,并忽视任何外部信号以降低功耗。
晶体振荡方式需要在 OSC1 和 OSC2 之间连接一个晶体振荡器,用来
提供晶体振荡器所需的反馈和相移,除此之外,不再需要其它外部元件。
另外,在 OSC1 和 OSC2 之间也可使用谐振器来取代晶体振荡器,但是在
OSC1 和 OSC2 需要多连接两个电容。
WDT 振荡器是一个内部 RC 振荡器,并不需要连接任何外部元件。当系统进入暂停模式时,系统时
钟会停止,但 WDT 振荡器会继续工作。如果要降低功耗,可在配置选项中关闭 WDT 振荡器。
为了确保振荡器的稳定性及减少噪声和串扰的影响,晶体振荡器及其相关的电阻和电容以及他们之
间的连线都应尽可能的接近单片机。
看门狗定时器
看门狗定时器的时钟来源有两种:看门狗振荡器或指令时钟(系统时钟 4 分频),由配置选项设置。
看门狗定时器主要用来防止程序运行故障和程序跳入一死循环而导致不可预测的结果。看门狗定时器可
由配置选项设置为打开或关闭,如果在关闭状态,所有与 WDT 有关的指令操作都是没有作用的。
System Clock/4
ROM
Code
option
fWDT
Divider
fWDT/28
WDT Prescaler
WDT
OSC
(12kHz)
Mask Option
WDT Clear
CK T
R
CK T
R
Time-out Reset
fs/215 ~ fs/216
fs/214 ~ fs/215
fs/213 ~ fs/214
fs/212 ~ fs/213
看门狗定时器
如果 WDT 时钟源为内部 WDT 振荡(RC 振荡周期一般为 65μs),该频率可再加 212~215(通过配置选
项:WDT time out)的分频系数。最小的 WDT 溢出周期大约是 300mS~600mS。溢出时间会因为温度、
VDD 以及芯片参数的变化而变化。如果再用 WDT 预分频器,则可以得到更长的溢出周期。如果 WDT
的溢出时间(time out)选为 215,最大的溢出时间可达到 2.3s~4.7s(分频系数为 215~216)。
WDT 时钟源除了使用内部 WDT 振荡器输出外,还可以使用指令时钟(系统时钟 4 分频),只是在
HALT 时,WDT 会停止计数而失去保护功能;此时只能靠外部逻辑复位来重新启动系统。如果系统运用
在强干扰的环境中,建议选用内部 WDT 振荡器,因为 HALT 模式会使系统时钟停止,看门狗也就失去
了保护的功能。
在正常运行时,WDT 溢出会使系统复位并置位 TO 标志;但在 HALT 模式下,WDT 溢出只产生“热
复位”
,只有程序计数器 PC 和堆栈指针 SP 被复位。要清除 WDT 的值可以有三种方法:外部复位(低电
平输入到 RES 端)、清除看门狗指令或 HALT 指令。清除看门狗指令有“CLR WDT”和“CLR WDT1”、
“CLR WDT2”两组指令。这两组指令中,只能选择其中一组,由配置选项决定。如果选择“CLR WDT”
,
那么只要执行“CLR WDT” 指令就会清除 WDT。如果选择“CLR WDT1”和“CLR WDT2”
,那么两
条指令要交替使用才会清除 WDT,否则,WDT 会由于溢出而使系统复位。
如果 WDT 的分频系数选择 fS/212(由配置选项决定),则 WDT 的溢出周期为 fS/212~fS/213,因为“CLR
WDT”和“CLR WDT1”
、
“CLR WDT2”指令只能清除最后两级 WDT 分频器。
Rev. 1.50
12
2014-07-28
HT46RB50
暂停模式 — HALT
暂停模式是由 HALT 指令来实现的,暂停模式时系统状态如下:
系统振荡器停振,但 WDT 振荡器会继续振荡(若选 WDT 振荡器)。
RAM 和寄存器内容保持不变。
WDT 被清除并重新开始计数(若 WDT 时钟来源为 WDT 振荡器)。
所有输入/输出口都保持其原有状态。
置位 PDF 标志,清除 TO 标志。
以下操作可以使系统离开暂停模式:外部复位、中断、PA 口下降
复位电路
沿信号或看门狗定时器溢出。其中,外部复位会使系统初始化,WDT
注:在一般应用场合可使用基本复
溢出则会发生“热复位”
。通过检测 TO 和 PDF 标志,即可了解系统复
位电路,而在强干扰环境中,建议
位的原因。PDF 标志可由系统上电或执行“CLR WDT”指令清除,由
使用抗杂讯复位电路。
HALT 指令置位。TO 标志由 WDT 溢出置位,同时产生唤醒,但只有
程序计数器 PC 和堆栈指针 SP 被复位,其它都保持其原有的状态。
PA 口唤醒和中断唤醒可做为正常运行的继续。PA 口的每一位都可以由配置选项设置为唤醒功能。
如果是由输入/输出口唤醒,程序会从下一条指令开始运行。如果是由中断唤醒,可能会发生两种情况:
如果中断禁止或中断允许但堆栈已满,程序将会从下一条指令开始运行;如果中断允许且堆栈未满,则
会产生一般的中断响应。如果在进入 HALT 模式之前,中断请求标志位已被置“1”
,则中断唤醒功能被
禁止。
当发生唤醒,系统需要额外花费 1024tSYS(系统时钟周期)的时间,才能重新正常运行,也就是说,
唤醒之后会插入一个等待周期。如果唤醒是由中断产生的话,则实际中断子程序的执行会延迟一个以上
的周期。如果唤醒导致下一条指令执行,那么在等待周期执行完成之后,会立即执行该指令。
为减小功耗,在进入暂停模式之前,应小心处理所有的输入/输出口状态。
·
·
·
·
·
复位
总共有三种方法会产生初始复位:
正常运行时由 RES 引脚发生复位。
在暂停模式由 RES 引脚发生复位。
正常运行时由看门狗定时器溢出发生复位。
暂停模式中的看门狗定时器溢出与其它系统复位状况不同,因为看门狗定时器溢出会执行“热复位”,
只有程序计数器 PC 和堆栈指针 SP 被复位,而系统其它部分都保持原有状态。在其它复位状态下,某些
寄存器不会改变。在初始复位时,大部分寄存器会复位成初始的状态。通过检测 PDF 和 TO 标志,即可
判断出各种不同的复位原因。
·
·
·
TO
0
u
0
1
1
PDF
0
u
1
u
1
复位原因
上电时 RES 发生复位
正常运行时 RES 发生复位
暂停模式下 RES 发生复位
正常运行时 WDT 溢出
暂停模式下 WDT 溢出
注:
“u”表示不变
为了保证系统振荡器起振并稳定运行,系统复位(包括上电复位、WDT 溢出或由 RES 端复位)或由暂
停状态唤醒时,系统启动定时器(SST)提供了一个额外的延迟时间,共 1024 个系统时钟周期。
系统复位时,SST 会被加在复位延时中;由暂停模式唤醒也会加入 SST 延迟。
系统复位(包括上电复位、正常运行时 WDT 溢出或由 RES 端复位)需要额外增加一个加载配置选项
(Option)的时间。
系统复位时各功能单元的状态如下所示:
Rev. 1.50
13
2014-07-28
HT46RB50
PC
中断
WDT
定时/计数器
输入/输出口
堆栈指针 SP
000H
禁止
清除,在主系统复位后,WDT 开始计数
停止
输入模式
指向堆栈顶部
HALT
Warm Reset
WDT
RES
Cold
Reset
VDD
RES
OSC1
tSST
SST
10-bit Ripple
Counter
SST Time-out
System Reset
Chip Reset
复位时序
Rev. 1.50
复位电路结构
14
2014-07-28
HT46RB50
有关寄存器的状态如下:
寄存器
TMR0
TMR0C
TMR1H
TMR1L
TMR1C
PC
MP0
MP1
ACC
TBLP
TBLH
STATUS
INTC0
INTC1
PA
PAC
PB
PBC
PC
PCC
PD
PDC
PE
PEC
AWR
STALL
MISC
SETIO
FIFO0
FIFO1
FIFO2
FIFO3
USC
USR
UCC
SIES
ADRL
ADRH
ADCR
ACSR
PWM0
PWM1
SBCR
SBDR
复位
(上电复位)
xxxx xxxx
00-0 1000
xxxx xxxx
xxxx xxxx
00-0 1--000H
xxxx xxxx
xxxx xxxx
xxxx xxxx
xxxx xxxx
-xxx xxxx
--00 xxxx
-000 0000
-000 -000
1111 1111
1111 1111
1111 1111
1111 1111
1111 1111
1111 1111
1111 1111
1111 1111
1111 1111
1111 1111
0000 0000
---- 1110
0xx- -000
---- 1110
xxxx xxxx
xxxx xxxx
xxxx xxxx
xxxx xxxx
1-00 0000
--00 0000
-000 0000
0100 0000
xx-- ---xxxx xxxx
0100 0000
1--- --00
xxxx xxxx
xxxx xxxx
0110 0000
xxxx xxxx
WDT 溢出
(正常运行)
xxxx xxxx
00-0 1000
xxxx xxxx
xxxx xxxx
00-0 1--000H
uuuu uuuu
uuuu uuuu
uuuu uuuu
uuuu uuuu
-uuu uuuu
--lu uuuu
-000 0000
-000 –000
1111 1111
1111 1111
1111 1111
1111 1111
1111 1111
1111 1111
1111 1111
1111 1111
1111 1111
1111 1111
uuuu uuuu
---- uuuu
uxx- -uuu
---- uuuu
uuuu uuuu
uuuu uuuu
uuuu uuuu
uuuu uuuu
u-uu uuuu
--uu uuuu
-uuu uuuu
uuuu uuuu
xx-- ---xxxx xxxx
0100 0000
1--- --00
xxxx xxxx
xxxx xxxx
0110 0000
xxxx xxxx
注: 1.“*”表示“热复位;
Rev. 1.50
RES 复位
(正常运行)
xxxx xxxx
00-0 1000
xxxx xxxx
xxxx xxxx
00-0 1--000H
uuuu uuuu
uuuu uuuu
uuuu uuuu
uuuu uuuu
-uuu uuuu
--uu uuuu
-000 0000
-000 –000
1111 1111
1111 1111
1111 1111
1111 1111
1111 1111
1111 1111
1111 1111
1111 1111
1111 1111
1111 1111
0000 0000
---- 1110
0xx- -000
---- 1110
uuuu uuuu
uuuu uuuu
uuuu uuuu
uuuu uuuu
1-00 0000
--00 0000
-000 0000
0100 0000
xx-- ---xxxx xxxx
0100 0000
1--- --00
xxxx xxxx
xxxx xxxx
0110 0000
xxxx xxxx
RES 复位
(暂停模式)
xxxx xxxx
00-0 1000
xxxx xxxx
xxxx xxxx
00-0 1--000H
uuuu uuuu
uuuu uuuu
uuuu uuuu
uuuu uuuu
-uuu uuuu
--01 uuuu
-000 0000
-000 –000
1111 1111
1111 1111
1111 1111
1111 1111
1111 1111
1111 1111
1111 1111
1111 1111
1111 1111
1111 1111
0000 0000
---- 1110
0xx- -000
---- 1110
uuuu uuuu
uuuu uuuu
uuuu uuuu
uuuu uuuu
1-00 0000
--00 0000
-000 0000
0100 0000
xx-- ---xxxx xxxx
0100 0000
1--- --00
xxxx xxxx
xxxx xxxx
0110 0000
xxxx xxxx
2.“u”表示不变化;
15
WDT 溢出
(暂停模式)*
uuuu uuuu
uu-u uuuu
uuuu uuuu
uuuu uuuu
uu-u u--000H
uuuu uuuu
uuuu uuuu
uuuu uuuu
uuuu uuuu
-uuu uuuu
--11 uuuu
-uuu uuuu
-uuu -uuu
uuuu uuuu
uuuu uuuu
uuuu uuuu
uuuu uuuu
uuuu uuuu
uuuu uuuu
uuuu uuuu
uuuu uuuu
uuuu uuuu
uuuu uuuu
uuuu uuuu
---- uuuu
uxx- -uuu
---- uuuu
uuuu uuuu
uuuu uuuu
uuuu uuuu
uuuu uuuu
u-uu uuuu
--uu uuuu
-uuu uuuu
uuuu uuuu
uu-- ---uuuu uuuu
uuuu uuuu
u--- --uu
uuuu uuuu
uuuu uuuu
uuuu uuuu
uuuu uuuu
USB 复位
(正常运行)
xxxx xxxx
00-0 1000
xxxx xxxx
xxxx xxxx
00-0 1--000H
uuuu uuuu
uuuu uuuu
uuuu uuuu
uuuu uuuu
-uuu uuuu
--uu uuuu
-000 0000
-000 -000
1111 1111
1111 1111
1111 1111
1111 1111
1111 1111
1111 1111
1111 1111
1111 1111
1111 1111
1111 1111
0000 0000
---- 1110
000- -000
---- 1110
0000 0000
0000 0000
0000 0000
0000 0000
u-00 0100
--00 0000
-uu0 u000
0100 0000
xx-- ---xxxx xxxx
0100 0000
1--- --00
uuuu uuuu
uuuu uuuu
uuuu uuuu
uuuu uuuu
USB 复位
(暂停模式)
xxxx xxxx
00-0 1000
xxxx xxxx
xxxx xxxx
00-0 1--000H
uuuu uuuu
uuuu uuuu
uuuu uuuu
uuuu uuuu
-uuu uuuu
--01 uuuu
-000 0000
-000 -000
1111 1111
1111 1111
1111 1111
1111 1111
1111 1111
1111 1111
1111 1111
1111 1111
1111 1111
1111 1111
0000 0000
---- 1110
000- -000
---- 1110
0000 0000
0000 0000
0000 0000
0000 0000
u-00 0100
--00 0000
-uu0 u000
0100 0000
xx-- ---xxxx xxxx
0100 0000
1--- --00
uuuu uuuu
uuuu uuuu
uuuu uuuu
uuuu uuuu
3.“x”表示不确定。
2014-07-28
HT46RB50
定时/计数器
HT46RB50 提供两个定时/计数器(TMR0,TMR1)
。定时/计数器 0 是 8 位可编程向上计数的,其时
钟来源可以是外部信号或内部时钟,内部时钟为 fSYS。定时/计数器 1 是 16 位可编程向上计数的,其时钟
来源可以是外部信号或内部时钟,内部时钟为 fSYS/4。外部信号输入可以用来计数外部事件、测量时间间
隔、测量脉冲宽度或产生一个精确的时基信号。
PWM
(6+2) or (7+1)
Compare
fSYS
To PD0/PD1 Circuit
8-stage Prescaler
fINT
8-1 MUX
Data Bus
TM1
TM0
8-Bit Timer/Event Counter
Preload Register
T0D2~T0D0 TMR0
Reload
TE
TM1
TM0
TON
Pulse Width
Measurement
Mode Control
8-Bit Timer/Event Counter
(TMR0)
Overflow
to Interrupt
定时/计数器 0
fSYS/4
Data Bus
fINT
TM1
TM0
TMR1
16-Bit Timer/Event Counter
Preload Register
Reload
TE
TM1
TM0
TON
Pulse Width
Measurement
Mode Control
16-Bit Timer/Event Counter
(TMR1H/TMR1L)
Overflow
to Interrupt
定时/计数器 1
有五个与定时/计数器有关的寄存器,TMR0(0DH),TMR0C(0EH),TMR1H(0FH),TMR1L(10H)和
TMR1C(11H)。对于 16 位定时/计数器 1,写入 TMR1L 只能将数据写到低字节缓冲器(8 位), 而写入
TMR1H 会把指定数据和低字节缓冲器的数据分别写到 TMR1H 和 TMR1L 预置寄存器中,定时/计数器 1
预置寄存器的内容只有在写入 TMR1H 时才会被改变。读取 TMR1H 会把 TMR1H 的内容送至目标单元,
而 TMR1L 的值被送至低字节缓冲器中。读 TMR1L 将读取低字节缓冲器的值。TMR0C(TMR1C)是定
时/计数器 0(1)控制寄存器,用来定义定时/计数器一些选项。
T0M0、T0M1 和 T1M0、T1M1 用来定义定时/计数器的工作模式。外部事件计数模式是用来记录外
部事件的,其时钟来源为外部引脚输入(TMR0,TMR1)。定时器模式是一个常用模式,其时钟来源为内
部时钟 fINT。脉宽测量模式可以测量 TMR0 或 TMR1 引脚高/低电平的脉冲宽度,其时钟来源为内部时钟
fINT。
无论是定时模式还是外部事件计数模式,一旦开始计数,定时/计数器会从寄存器当前值向上计到
0FFFFH(16 位计到 0FFFFH,8 位计到 0FFH)。一旦发生溢出,定时/计数器会从预置寄存器中重新加载
初值,并开始计数;同时置位中断请求标志(T0F;INTC0 的第 5 位,T1F;INTC0 的第 6 位)。
在脉宽测量模式,当 T0ON/T1ON 与 T0E/T1E 都是 1 时,只要 TMR0(TMR1)引脚有一个上升沿信号
(如果 TE 是 0,则为下降沿信号),定时/计数器就会开始计数,直到 TMR0(TMR1)脚电平恢复,同时
T0ON/T1ON 被清零。测量的结果会保存在寄存器中,直到有新的测量开始。换句话说,一次只能测量
一个脉冲宽度。重新置位 T0ON/T1ON 后,可以继续测量。注意,在该模式下,定时/计数器是跳变触发
而不是电平触发。当计数器溢出时,定时/计数器会从预置寄存器中重新加载初值,并置位中断请求标志,
这与其它两种模式一样。
Rev. 1.50
16
2014-07-28
HT46RB50
位
符号(TMR0C)
0~2
T0PSC0~T0PSC2
3
T0E
4
5
T0ON
—
6
7
T0M0
T0M1
功能
定义预分频器级数,T0PSC2,T0PSC1,T0PSC0=
000:fINT=fSYS
001:fINT=fSYS/2
010:fINT=fSYS/4
011:fINT=fSYS/8
100:fINT=fSYS/16
101:fINT=fSYS/32
110:fINT=fSYS/64
111:fINT=fSYS/128
定义定时/计数器 TMR 的触发方式
0:上升沿计数
1:下降沿计数
打开/关闭定时/计数器( 1=打开,0=关闭)
未用,读出为“0”
定义工作模式:
01=事件计数模式(外部时钟)
10=定时模式(内部时钟)
11=脉冲宽度测量模式
00 =未用
TMR0C(0EH) 寄存器
位
符号(TMR1C)
0~2,5
—
3
T1E
4
T1ON
6
7
T1M0
T1M1
功能
未用,读出为“0”
定义定时/计数器 TMR 的触发方式
0:上升沿计数
1:下降沿计数
打开/关闭定时/计数器( 1=打开,0=关闭)
定义工作模式,T1M1,T1M0:
01=事件计数模式(外部时钟)
10=定时模式(内部时钟)
11=脉冲宽度测量模式
00 =未用
TMR1C(11H) 寄存器
要启动计数器,只要置位定时/计数器开关 (T0ON:TMR0C 的第 4 位;T1ON:TMR1C 的第 4 位)。
在脉宽测量模式下,T0ON/T1ON 在测量结束后会被自动清除;但在另外两种模式中,T0ON/T1ON 只能
由指令来清除。定时/计数器溢出可以做为唤醒信号。不管是什么模式,只要写 0 到 ET0I 或 ET1I 即可禁
止定时/计数器中断服务。
在定时/计数器停止计数时,写数据到定时/计数器的预置寄存器中,同时会将该数据写入到定时/计
数器。但如果在定时/计数器运行时这么做,数据只能写入到预置寄存器中,直到发生溢出时才会将数据
从预置寄存器加载到定时/计数器寄存器。读取定时/计数器时,计数会被停止,以避免发生错误;计数停
止会导致计数错误,程序员必须注意到这一点。建议在打开定时/计数器前,先将相应的值写入
TMR0/TMR1 寄存器内,否则定时/计数器将从不确定值开始计数。
TMRC 的第 0~2 位用来定义内部时钟预分频级数,定义如上表所示。
Rev. 1.50
17
2014-07-28
HT46RB50
输入/输出口
HT46RB50 有 38 个双向输入/输出口,记为 PA、PB、PC、PD 和 PE,其分别对应 RAM 地址[12H]、
[14H]、[16H]、[18H]和[1AH],所有端口都可以进行输入/输出操作。输入时,端口没有锁存功能,输入
信号必须在 MOV A,[m](m=12H、14H、16H、18H 和 1AH)指令的 T2 上升沿到来前准备好;输出时,
端口有锁存功能,端口上的数据会保持不变直到执行下一个写入操作。
VDD
Data Bus
Write Control Register
Control Bit
Q
D
PU
PA0~PA7
PB0/AN0~PB7/AN7
PC0/INT
PC1/TMR0
PC2/TMR1
PC3~PC7
PD0/PWM0~PD1/PWM1
PD2~PD7
PE0/SCS
PE1/CLK
PE2/SDI
PE3/SDO
PE4~PE5
CK Q
S
Chip Reset
Read Control Register
Write Data Register
Data Bit
D
Q
CK Q
S
M
U
X
PD0~PD3
PWM0~PWM3
Read Data Register
System Wake-up
(PA only)
M
U
X
Mask Option
Mask Option
INT for PC0
TMR0 for PC1
TMR1 for PC2
输入/输出口
每个输入/输出口都有一个控制寄存器(PAC,PBC,PCC,PDC,PEC),用来控制输入/输出状态。
利用控制寄存器,可对 CMOS 输出、带或不带上拉电阻的斯密特触发输入通过软件动态地进行改变。做
为输入时,对应的控制寄存器应设置为“1”。输入信号来源也取决于控制寄存器,如果控制寄存器的值
为“1”
,那么读取的是引脚状态;如控制寄存器的值为“0”,则读取的是内部锁存器的值。后者可能会
在‘读-修改-写’指令中发生。做为输出时,只能采用 CMOS 输出。控制寄存器对应 RAM 地址 13H、
15H、17H、19H 和 1BH。
系统复位之后,这些输入/输出口会是高电平或浮空状态(由上拉电阻选项决定)。每一个输入/输出锁
存位都能用“SET [m].i”或“CLR [m].i”指令置位或清除(m=12H、14H、16H、18H 或 1AH)
。
有些指令会先输入数据,然后进行输出操作。例如:“SET [m].i”,“CLR [m].i”,“CPL [m]”,
“CPLA[m]”这些指令会先将整个端口状态读入 CPU 中,接着执行所定义的运算(位操作),然后再将结果
写入锁存器或累加器中。
PA 的每一个口都具有唤醒系统的能力。
建议用软件将未使用和没有外接的输入/输出口设置为输出模式,以防止这些端口在输入浮空时增加
系统的功耗。
Rev. 1.50
18
2014-07-28
HT46RB50
PWM
HT46RB50 有 2 个通道(6+2)/(7+1)位的 PWM 输出(由配置选项决定),与 PD0/PD1 共用引脚。PWM
通道由数据寄存器 PWM0(1AH)和 PWM1(1BH)来控制输出。PWM 计数器的时钟来源为系统时钟(fSYS)。
PWM 有 2 个 8 位寄存器。PWM 的输出波形如图所示。一旦 PD0/PD1 选择为 PWM 输出,并且 PD0/PD1
为输出模式(PDC.0/PDC.1=“0”),则向 PD0/PD1 寄存器写“1”能够产生 PWM 输出,向 PD0/PD1 寄存
器写“0”会使 PD0/PD1 输出保持为“0”
。
fSYS/2
[PWM] =100
PWM
25/64
25/64
25/64
25/64
25/64
26/64
25/64
25/64
25/64
26/64
26/64
26/64
25/64
25/64
26/64
26/64
26/64
26/64
25/64
26/64
[PWM] =101
PWM
[PWM] =102
PWM
[PWM] =103
PWM
PWM modulation period : 64/fSYS
Modulation cycle 1
Modulation cycle 0
Modulation cycle 2
Modulation cycle 3
Modulation cycle 0
PWM cycle : 256/fSYS
(6+2)位模式 PWM
在(6+2)位 PWM 模式中,一个 PWM 周期被分为四个调制周期(调制周期 0~调制周期 3),每个调制
周期有 64 个 PWM 输入时钟。在(6+2)位 PWM 模式中,PWM 寄存器被分为 2 个部分。第一部分是直流
分量,由 PWM.7~PWM.2 控制;第二部分是交流分量,由 PWM.1~PWM.0 控制。
在(6+2)位 PWM 模式中,每个调制周期的占空比见下表:
Rev. 1.50
参数
AC(0~3)
调制周期 i
(i=0~3)
i<AC
i≥AC
19
占空比
DC + 1
64
DC
64
2014-07-28
HT46RB50
fSYS/2
[PWM] =100
PWM
50/128
50/128
50/128
51/128
50/128
51/128
51/128
51/128
51/128
51/128
52/128
[PWM] =101
PWM
[PWM] =102
PWM
[PWM] =103
PWM
52/128
PWM modulation period : 128/fSYS
Modulation cycle 0
Modulation cycle 1
Modulation cycle 0
PWM cycle : 256/fSYS
(7+1)位模式 PWM
在(7+1)位 PWM 模式中,一个 PWM 周期被分为两个调制周期(调制周期 0~调制周期 1),每个调制
周期有 128 个 PWM 输入时钟。在(7+1)位 PWM 模式中,PWM 寄存器被分为 2 个部分。第一部分是直
流分量,由 PWM.7~PWM.1 控制;第二部分是交流分量,由 PWM.0 控制。
在(7+1)位 PWM 模式中,每个调制周期的占空比见下表:
参数
AC(0~1)
调制周期 i
(i=0~1)
i<AC
i≥AC
占空比
DC + 1
128
DC
128
PWM 的调制频率、周期频率和占空比的关系总结如下:
PWM 调制频率
fSYS/64(6+2 模式)
fSYS/128(7+1 模式)
Rev. 1.50
PWM 周期频率
PWM 占空比
fSYS/256
[PWM]/256
20
2014-07-28
HT46RB50
A/D 转换
HT46RB50 有 8 个通道、10 位解析度(9 位精度)的 A/D 转换器。其参考电压为 VDD。与 A/D 转换有
关的寄存器有 4 个:ADRL(30H)、ADRH(31H)、ADCR(32H)和 ACSR(33H)。ADRH 和 ADRL 是 A/D 转
换结果的高字节和低字节寄存器,是只读寄存器。当完成 A/D 转换后,可从 ADRH 和 ADRL 读取 A/D
转换结果。ADCR 是 A/D 转换控制寄存器,用来定义 A/D 通道数量、模拟输入通道选择、A/D 转换开始
控制和完成标志。如果要进行 A/D 转换,要先定义好 PB 口的设置,选择转换的模拟通道,然后给 START
控制位一个上升沿信号和一个下降沿信号(0→1→0)。完成 A/D 转换后,EOC 位会被清除,并且产生 A/D
转换中断(如果 A/D 转换允许)。ACSR 是 A/D 时钟控制寄存器,用来选择 A/D 的时钟来源。
符号(ACSR)
位
ADCS0
ADCS1
0
1
—
TEST
2~6
7
功能
选择 A/D 转换时钟源:
00=系统时钟/2
01=系统时钟/8
10=系统时钟/32
11=未定义
未用,读出为“0”
只做为内部测试用
ACSR(33H) 寄存器
A/D 转换控制寄存器用来控制 A/D 转换。ADCR 的第 2~0 位用来选择模拟输入通道,总共有 8 个通
道可以选择。ADCR 的第 5~3 位用来设置 PB 的工作模式,PB 可以做为模拟输入通道,或是数字输入/
输出口,由这 3 位来决定。如果 PB 选择为模拟输入,则其输入/输出功能和上拉电阻将失效,而 A/D 转
换电路会被使能。 EOC 位(ADCR 的第 6 位)是 A/D 转换结束标志位。通过检测这个标志位可以知道 A/D
转换是否结束。ADCR 的 START 位用来开启 A/D 转换,给 START 位一个上升沿信号和一个下降沿信号
可以开始 A/D 转换。为了确保 A/D 转换顺利完成,START 位应保持为“0”
,直到 EOC 位变为“0”(A/D
转换完成信号)。
符号(ADCR)
位
功能
ACS0
0
ACS1
1
选择模拟输入通道
ACS2
2
定义 PB 口的设置
PCR0
3
PCR1
4
如果 PCR0、PCR1 和 PCR2 都为 0,则 A/D 转换电
PCR2
5
路被关闭以减小功耗
A/D 转换结束标志(0:A/D 转换结束)
每次 BIT3-5 状态的改变都必须通过 START 信号来
6
EOC
初始化 A/D 转换器,否则 EOC 可能会处于不确定状
态,具体可参照“A/D 转换初始化注意事项”
A/D 转换启始控制位
START
7
0→1→0:开始;
0→1:A/D 转换复位并且置 EOC 为“1”
ADCR(32H) 寄存器
ACS2
0
0
0
0
1
1
1
1
ACS1
0
0
1
1
0
0
1
1
ACS0
0
1
0
1
0
1
0
1
模拟通道
AN0
AN1
AN2
AN3
AN4
AN5
AN6
AN7
模拟输入通道选择
Rev. 1.50
21
2014-07-28
HT46RB50
PCR2
0
0
0
0
1
1
1
1
PCR1
0
0
1
1
0
0
1
1
PCR0
0
1
0
1
0
1
0
1
7
PB7
PB7
PB7
PB7
PB7
PB7
PB7
AN7
6
PB6
PB6
PB6
PB6
PB6
PB6
PB6
AN6
5
PB5
PB5
PB5
PB5
PB5
PB5
AN5
AN5
4
PB4
PB4
PB4
PB4
PB4
AN4
AN4
AN4
3
PB3
PB3
PB3
PB3
AN3
AN3
AN3
AN3
2
PB2
PB2
PB2
AN2
AN2
AN2
AN2
AN2
1
PB1
PB1
AN1
AN1
AN1
AN1
AN1
AN1
0
PB0
AN0
AN0
AN0
AN0
AN0
AN0
AN0
PB 口的设置
ACSR 的第 7 位是内部测试用的,用户不能使用。ACSR 的第 1 位和第 0 位用来选择 A/D 转换的时
钟来源。
当 A/D 转换完成时,A/D 中断请求标志被置位。当 START 标志由“0”置为“1”时, EOC 也置为
“1”
。
A/D 转换初始化注意事项:
每次改变模拟通道选择位后都要注意初始化 A/D 转换器,否则 EOC 可能处于不确定状态。在模拟通
道选择位改变的 10 个指令周期内将 START 置 1 后清 0 来初始化 A/D 转换器。模拟通道选择位都清 0,
可以不初始化 A/D。
寄存器
ADRL
ADRH
Bit7
D1
D9
Bit6
D0
D8
Bit5
—
D7
Bit4
—
D6
注:D0~D9 是 A/D 转换结果的低位~高位
ADRL(30H) 寄存器
Bit3
—
D5
Bit2
—
D4
Bit1
—
D3
Bit0
—
D2
ADRH(31H)寄存器
Minimum one instruction cycle needed, Maximum ten instruction cycles allowed
START
EOCB
A/D sampling time
tADCS
PCR2~
PCR0
000B
A/D sampling time
tADCS
A/D sampling time
tADCS
100B
100B
101B
000B
1. PB port setup as I/Os
2. A/D converter is powered off
to reduce power consumption
ACS2~
ACS0
000B
Power-on
Reset
010B
000B
001B
Start of A/D
conversion
Start of A/D
conversion
Start of A/D
conversion
Reset A/D
converter
1: Define PB configuration
2: Select analog channel
Reset A/D
converter
End of A/D
conversion
tADC
A/D conversion time
Reset A/D
converter
End of A/D
conversion
tADC
A/D conversion time
don't care
End of A/D
conversion
tADC
A/D conversion time
Note: A/D clock must be fSYS/2, fSYS/8 or fSYS/32
tADCS=32tAD
tADC=76tAD
A/D 转换时序
Rev. 1.50
22
2014-07-28
HT46RB50
下面举两个例子说明如何启动和实现 A/D 转换。第一个例子不断扫描 ADCR 寄存器的 EOC 位来判
断 A/D 转换是否完成;而第二个例子直接用中断的方法来判断 A/D 转换是否完成。
例 1:通过扫描 EOC 位判断 A/D 转换是否完成。
clr
EADI
;禁止A/D中断
mov
a,00000001B
mov
ACSR,a
; 设置ACSR寄存器,选择fSYS/8做为A/D转换时钟
mov
a,00100000B
; 在ADCR寄存器中设置Port PB0~PB3做为A/D输入
mov
ADCR,a
; 设置AN0进行A/D转换
:
:
:
; 当模拟通道选择位改变后,START信号(0-1-0)必须在10个
:
; 指令周期内发出
Start_conversion:
clr
START
set
START
; A/D转换复位
clr
START
; 开始A/D转换
Polling_EOC:
sz
jmp
mov
mov
mov
mov
jmp
Rev. 1.50
EOC
polling_EOC
a,ADRH
adrh_buffer,a
a,ADRL
adrl_buffer,a
:
:
start_conversion
;
;
;
;
;
;
扫描ADCR寄存器的 EOC 位判断A/D转换是否完成
继续扫描
从ADRH寄存器读取A/D转换结果的高位字节
将结果放入用户定义的寄存器中
从ADRL寄存器读取A/D转换结果的低位字节
将结果放入用户定义的寄存器中
; 开始下一次A/D转换
23
2014-07-28
HT46RB50
例 2:用中断方法判断 A/D 转换是否完成。
clr
EADI
; 禁止A/D中断
mov
a,00000001B
mov
ACSR,a
; 设置ACSR寄存器,选择fSYS/8做为A/D转换时钟
mov
a,00100000B
; 在ADCR寄存器中设置Port PB0~PB3做为A/D输入
mov
ADCR,a
; 设置AN0进行A/D转换
:
:
:
; 当模拟通道选择位改变后,START信号(0-1-0)必须在10个
:
; 指令周期内发出
start_conversion:
clr
START
set
START
; A/D转换复位
clr
START
; 开始A/D转换
clr
ADF
; 清除AD中断请求标志
set
EADI
; 打开 A/D 中断
set
EMI
; 打开总中断
:
:
; 中断服务子程序
ADC_ISR:
mov
acc_stack,a
; 将ACC保存到用户定义的寄存器中
mov
a,STATUS
mov
status_stack,a
; 将STATUS保存到用户定义的寄存器中
:
:
mov
a,ADRH
; 从ADRH寄存器读取A/D转换结果的高位字节
mov
adrh_buffer,a
; 将结果放入用户定义的寄存器中
mov
a,ADRL
; 从ADRL寄存器读取A/D转换结果的低位字节
mov
adrl_buffer,a
; 将结果放入用户定义的寄存器中
clr
START
set
START
; A/D转换复位
clr
START
; 开始A/D转换
:
:
EXIT_INT_ISR:
mov
a,status_stack
mov
STATUS,a
; 将STATUS从暂存器中读出
mov
a,acc_stack
; 将ACC从暂存器中读出
reti
Rev. 1.50
24
2014-07-28
HT46RB50
低电压复位—LVR
VDD
5.5V
为了监控器件的工作电压,HT46RB50 提供低电压复位功能。如果
器件的工作电压在 0.9V~VLVR 之间,例如电池电压的变化,那么 LVR
会自动使器件产生内部复位。
LVR 功能说明如下:
· 低电压(0.9V~VLVR)的状态必须持续 1ms 以上。如果低电压的状态
没有持续 1ms 以上,那么 LVR 会忽视它而不去执行复位功能。
· LVR 通过与外部 RES 信号的“或”的功能来执行系统复位。VDD 与
VLVR 之间的关系如下所示:
VDD
VOPR
5.5V
VLVR
3.0V
2.2V
0.9V
注:VOPR 是在系统时钟为 4MHz
时,使得芯片正常运行的电压值
5.5V
LVR Detect Voltage
VLVR
0.9V
0V
Reset Signal
Reset
*1
Normal Operation
Reset
*2
注:*1:要保证系统振荡器起振并稳定运行,在系统进入正常运行以前,SST 提供额外的 1024 个系统时钟周期的延
迟。
*2:因为低电压状态必须保持 1ms 以上,因此进入复位模式就要有 1ms 的延迟。
Rev. 1.50
25
2014-07-28
HT46RB50
串行接口
有四个与串行接口相关的信号线,SDI(串行数据输入线)、SDO(串行数据输出线)、SCK(串行时钟)
和 SCS (从模式片选)。
SCS
CLK
SDI
D7/D0
D6/D1
D5/D2
D4/D3
D3/D4
D2/D5
D1/D6
D0/D7
SDO
D7/D0
D6/D1
D5/D2
D4/D3
D3/D4
D2/D5
D1/D6
D0/D7
SBCR
DEFAULT
SBDR
DEFAULT
D7
D6
D5
D4
D3
D2
D1
D0
CKS
M1
M0
SBEN
MLS
CSEN
WCOL
TRF
SBCR : SERIAL BUS
0
1
1
0
0
0
0
0
D7
D6
D5
D4
D3
D2
D1
D0
SBDR : SERIAL BUS
U
U
U
U
U
U
U
U
DATA REGISTER
CONTROL REGISTER
Note: "U" means unchanged.
有两个与串行接口相关的寄存器,SBCR 和 SBDR。
 SBCR:串行接口控制寄存器
第 7 位(CKS),时钟源选择:fSIO = fSYS /4,选择为 0
第 6 位(M1),第 5 位(M0):主从模式及波特率选择
00 → 主模式,波特率为 fSIO
01 → 主模式,波特率为 fSIO /4
10 → 主模式,波特率为 fSIO /16
11 → 从模式
第 4 位(SBEN),串行接口使能/禁止位(1/0)
使能:( SCS 取决于 CSEN)
禁止→使能:SCK、SDI、SDO、 SCS =0(SCKB=“0”),等待数据写入 SBDR 寄存器
主模式:当数据写入 SBDR 寄存器,硬件会自动将数据发送出去
主模式:当数据发送完毕,置位 TRF
从模式:当检测到有数据需要接收时,SDI 引脚上数据在 SCK 作用下移入缓冲器
禁止:SCK、SDI、SDO、 SCS 处于浮空状态
第 3 位(MLS),高位前导(MSB)或低位前导(LSB)控制位(1/0)
第 2 位(CSEN),串行接口片选功能使能/禁止( SCS ),当 CSEN=0,SCSB 浮空
第 1 位(WCOL),当数据写入 SBDR 寄存器且正在发送时置位,正在发送数据时,写 SBDR 将被忽
略
第 0 位(TRF),数据发送或接收用于产生中断
注意:系统进入 HALT,串行接收电路仍处于工作状态。
 SBDR:串行接口数据寄存器
写 SBDR 寄存器,数据将被加载到 TXRX 寄存器;读 SBDR 寄存器,将返回 SBDR 寄存器值。
操作模式描述:
主发送模式:写 SBDR 寄存器将触发数据的发送
从发送模式:接收到有效的时钟将触发发送
Rev. 1.50
26
2014-07-28
HT46RB50
从接收模式:接收到有效的时钟将触发接收
时钟极性=上升沿( CLK )下降沿(CLK):1 或 0
模式
操作
1、 选择 CKS 和 M1,M0=00,01,10
2、 选择 CSEN、MLS(同从模式)
3、 置位 SBEN
4、 写数据至 SBDR 寄存器 → 数据存储在 TXRX 寄存器中 → 输出 CLK 信
号→ 到第 5 步 → (SIO 内部操作 → 数据存储在 TXRX 缓冲器中,SDI
上数据信号移入 TXRX 寄存器 → 数据传输完毕,TXRX 缓冲器数据加载
到 SBDR 寄存器
主模式
5、 检查 WCOL;WCOL=1 → 清除 WCOL 并且跳转到第 4 步;WCOL=0 →
跳到第 6 步
6、 检查 TRF 或等待 SBI(串行接口中断)
7、 从 SBDR 寄存器读取数据
8、 清除 TRF
9、 跳转到第 4 步
1、 选择 M1,M0=11
2、 选择 CSEN、MLS(同从模式)
3、 置位 SBEN
4、 写数据至 SBDR 寄存器 → 数据存储在 TXRX 寄存器中 → 等待主机时钟
( 和 SCS ):
CLK → 跳转到第 5 步 → (SIO 内部操作 → CLK()接收 → 输
出数据存储在 TXRX 寄存器内,SDI 上数据移位到 TXRX 缓冲器内 → 数
从模式
据发送完毕,TXRX 缓冲器数据加载到 SBDR 寄存器
5、 检查 WCOL;
WCOL=1 → 清除 WCOL 并且跳转到第 4 步;
WCOL=0 → 跳
到第 6 步
6、 检查 TRF 或等待 SBI(串行接口中断)
7、 从 SBDR 寄存器读取数据
8、 清除 TRF
9、 跳转到第 4 步
WCOL:主/从模式下,若正在发送数据或接收数据,写 SBDR 寄存器将会置位 WCOL,且写入数据
被忽略。WCOL 功能可由配置选项使能或禁止。WCOL 由硬件置位,软件清 0。
系统进入 HALT,串行接收和发送电路仍处于工作状态。
CPOL 用于选择 CLK 极性,可通过配置选项设定。
MLS:MSB 或 LSB 选择位。
CSEN:串行接口片选功能使能/禁止。若 CSEN=1, SCS 功能有效。主模式下,在 CLK 信号输出前
先输出 SCS 信号;而在从模式下,接收到 SCS 信号前(后),数据传输被禁止(使能)。若 CSEN=0, SCS 功
能无效,SCS (主模式和从模式)引脚必须浮空。有两个选项与 CSEN 相关:CSEN 功能可由配置选项使能
/禁止。若 CSEN 由配置选项禁止,寄存器中 CSEN 将无效;若 CSEN 由配置选项使能,寄存器中 CSEN
有效。
当 SBEN=1,串行接口作于工作状态;SCS (CSEN=1)=1;SCS =浮空(CSEN=0);SDI=浮空;SDO=1;
主模式下 CLK=1/0(取决于 CPOL 配置选项),从模式下 CLK=浮空。
当 SBEN=0,串行接口禁止; SCS =SDI=SDO=CLK=浮空。
TRF 由 SIO 置位,由用户软件清 0。当数据传输(发送和接收)完毕,TRF 将置位并触发串行接口中
断。
Rev. 1.50
27
2014-07-28
HT46RB50
SBEN= 1, CSEN= 0 and write data to SBDR (if pull-highed)
SBEN= CSEN= 1 and write data to SBDR
SCS
CLK
SDI
D7/D0 D6/D1 D5/D2 D4/D3 D3/D4 D2/D5 D1/D6 D0/D7
SDO
D7/D0 D6/D1 D5/D2 D4/D3 D3/D4 D2/D5 D1/D6 D0/D7
CLKB
SBCR
Default
SBDR
Default
D7
CKS
0
D7
u
D6
M1
1
D6
u
D5
M0
1
D5
u
D4
SBEN
0
D4
u
D3
MLS
0
D3
u
D2
CSEN
0
D2
u
D1
WCOL
0
D1
u
D0
TRF
0
D0
u
Note: "u" means unchanged.
Data Bus
SBDR (Received Data Register)
D7 D6 D5 D4 D3 D2 D1 D0
M
U
X
SDO Buffer
SBEN
MLS
M
U
X
Internal Baud Rate Clock
and, start
EN
CLK
Clock Polarity
SDO
SDI
M
U
X
and, start
C0 C1 C2
Master or Slave
Internal Busy Flag
SBEN
WCOL Flag
Write SBDR
Write SBDR Enable/Disable
SBEN
and, start
EN
TRF
AND
Write SBDR
SCS
Master or Slave
SBEN
CSEN
WCOL: set by SIO cleared by users
CSEN: enable/disable chip selection function pin
1. master mode 1/0: with/without SCSB output function
2. slave mode 1/0: with/without SCSB input control function
SBEN : enable/disable serial bus (0: initialize all status flags)
1. When SBEN= 0, all status flags should be initialized
2. When SBEN= 0, all SIO related function pins should stay at floating state
TRF 1: data transmitted or received, 0: data is transmitting or still not received
CPOL 1/0 : clock polarity rising/falling edge : mask option
Rev. 1.50
28
2014-07-28
HT46RB50
唤醒
如果总线上 3ms 没有信号,HT46RB50 会进入挂起模式(消耗电流为 500μA),挂起标志位(USC 寄
存器第 0 位)将被置位,并触发 HT46RB50 产生 USB 中断。
为达到 500μA 的挂起电流,程序必须清除 USBCKEN(UCC 寄存器第 3 位)以禁止 USB 时钟,此时
挂起电流为 400μA。
通过置位 SUSP2(UCC 寄存器第 4 位),可将挂起电流进一步降至 250μA。但是如果 SUSP2 置位,必
须保证配置选项中 LVR 功能关闭,否则 HT46RB50 将发生复位。
当检测到主机发出的恢复信号,HT46RB50 被唤醒,恢复标志位(USC 寄存器第 3 位)被置位并且触
发 USB 中断。
为使 HT46RB50 正常工作,
程序必须置位 USBCKEN(UCC 寄存器第 3 位)和清除 SUSP2(UCC
寄存器第 4 位)。恢复标志位会在挂起信号发出前清为“0”
。当 MCU 检测到有挂起信号时,恢复信号也
必须注意。
当恢复信号完全发出,挂起标志位将被清零并触发 USB 中断,其时序图如下:
SUSPEND
USB Resume Signal
USB_INT
HT46RB50 可以通过 RMWK(USC 的第 1 位)发送信号来唤醒 USB 主机。当 USB 主机接收到
HT46RB50 发送的远程唤醒信,它会发出一个恢复位信号给设备。其时序图如下:
SUSPEND
Min. 1 USB CLK
RMWK
Min.2.5ms
USB Resume Signal
USB_INT
Rev. 1.50
29
2014-07-28
HT46RB50
USB 接口
HT46RB50 有 4 个端点(EP0~EP3)。EP0~EP2 支持中断型传输,EP3 支持批量型传输。
有 12 个与 USB 功能相关的寄存器,它们分别为 USC(20H)、USR(21H)、UCC(22H) 、AWR(23H) 、
STALL(24H) 、SIES(25H) 、MISC(26H) 、SETIO(27H) 、FIFO0(28H) 、FIFO1(29H) 、FIFO2(2AH)
和 FIFO3(2BH)。
其 FIFO 大小分别为 8 字节(FIFO0)、8 字节(FIFO1)、8 字节(FIFO2)、64 字节(FIFO3),共 88 个字节。
URD(USC 的第 7 位)是 USB 复位信号控制位。
位
标号
R/W
0
SUSP
R
1
RMWK
R/W
2
URST
R/W
3
RESUME
R
4
5
6
V33C
PLL
—
R/W
R/W
—
7
URD
R/W
功能
只读,USB 挂起标志。当 USB 进入挂起状态,此位会被
SIE 置位。此位的任何变化都会触发中断。
USB 远程唤醒命令。MCU 可置位此位,使 USB 主机离
开挂起状态。置位 RMWK 使能远程唤醒。为确保 SIE
接收到命令,置位 RMWK 后必须有 2μs 延时。
USB 复位标志。此位是由 SIE 置位/清除。若 URST 位被
置位,表明发生了 USB 复位并且会触发 USB 中断。
USB 恢复标志。当 USB 离开挂起状态,此位会被 SIE 置
位并且持续 20ms,等待 MCU 检测。当 RESUME 位被
SIE 置位,MCU 会产生中断并唤醒 MCU。为了检测到
挂起状态,MCU 必须置 USBCKEN 位和 SUSP2 位以使
能 SIE 检测功能。SUSP 位清零同时 RESUME 也会被清
除。当 MCU 检测 SUSP 时,必须考虑 RESUME 位。
0/1:关闭/打开 V33O 输出
0:打开 PLL(默认值);1:关闭 PLL
未用,读出为“0”
USB 复位信号控制位
1:USB 复位将复位 MCU
0:USB 复位不复位 MCU
USC(20H) 寄存器
USR(端点中断状态寄存器)寄存器,用来表明哪个端点被访问过。端点请求标志位(EP0IF、EP1IF、
EP2IF 和 EP3IF)用来表明哪个端点被访问过。如果一个端点被访问过,相关的端点请求标志位被置“1”
并触发 USB 中断,当 USB 中断被服务时,相应的端点请求标志位必须清零。
位
标号
R/W
0
EP0IF
R/W
1
EP1IF
R/W
2
EP2IF
R/W
3
EP3IF
R/W
4~7
—
—
功能
若此位被 SIE 置位,表明端点 0 被访问过并且触发 USB
中断。当进入中断服务程序,必须通过程序清除此位。
若此位被 SIE 置位,表明端点 1 被访问过并且触发 USB
中断。当进入中断服务程序,必须通过程序清除此位。
若此位被 SIE 置位,表明端点 2 被访问过并且触发 USB
中断。当进入中断服务程序,必须通过程序清除此位。
若此位被 SIE 置位,表明端点 3 被访问过并且触发 USB
中断。当进入中断服务程序,必须通过程序清除此位。
未用,读出为“0”
USR(21H) 寄存器
HT46RB50 还提供了一个系统时钟控制寄存器。它包括 USB 时钟控制位(USBCKEN)、挂起模式控
制位(SUSP2)和系统时钟选择位(SYSCLK)。
可以通过下表中 EPS2、EPS1 和 EPS0 位选择端点。
Rev. 1.50
30
2014-07-28
HT46RB50
位
标号
R/W
0~2
EPS0~EPS2
R/W
3
USBCKEN
R/W
4
SUSP2
R/W
5
fSYS
(24MHz)
R
6
SYSCLK
R/W
7
—
—
功能
选择所需操作的 FIFO,EPS2、EPS1、EPS0:
000:选择端点 0 的 FIFO
001:选择端点 1 的 FIFO
010:选择端点 2 的 FIFO
011:选择端点 3 的 FIFO
100:保留给以扩展,不能使用
101:保留给以扩展,不能使用
110:保留给以扩展,不能使用
111:保留给以扩展,不能使用
若选择的端点不存在,相关的功能无效。
USB 时钟控制位。若此位置位,表示打开 USB 时钟;否
则将关闭 USB 时钟。
在挂起模式中,可以通过此位进一步降低功耗。
正常模式,清除此位(默认值)
在暂停模式,置起此位可以降低功耗。
此位用于定义 MCU 系统时钟是来自外部振荡器还是来
自 PLL 输出的 24MHz。
0:来自外部振荡器
1:来自 PLL 输出的 24MHz
此位用于表明 MCU 使用的晶振频率。若使用 6M 晶振,
必须置位;若使用 12M 晶振,必须清零(默认值)。
未用,读出为“0”
UCC(22H) 寄存器
AWR 寄存器由当前地址和远程唤醒功能控制位组成。AWR 寄存器的初始值为“00H”
。写 AWR 寄
存器直到 SETUP 阶段结束才会生效。
位
0
7~1
标号
WKEN
AD6~AD0
R/W
R/W
R/W
功能
远程唤醒功能打开/关闭
USB 设备地址
AWR(23H) 寄存器
STALL 寄存器用于表明相应的端点工作是否正常。若端点工作存在异常,STALL 寄存器相应的位必
须置“1”
。USB 复位将会清除 STALL 寄存器。
位
标号
R/W
3~0
STL3~STL0
R/W
7~4
—
—
功能
当相关 USB 端点停顿时,这些位由用户设置。通过 USB
复位信号及 Setup Token 事件来清零。
未用,读出为“0”
STALL(24H) 寄存器
Rev. 1.50
31
2014-07-28
HT46RB50
位
标号
R/W
0
ASET
R/W
1
ERR
R/W
2
OUT
R/W
3
IN
R
4
NAK
R/W
5
CRCF
R/W
6
EOT
R
7
NMI
R/W
功能
SIE 自动从 AWR 寄存器中加载设备地址控制位。若此位
由程序置位,当主机成功地从设备中读取到数据时,SIE
将会从 AWR 寄存器中加载地址。否则,若此位清零,写
入 AWR 寄存器中地址将会立即生效。所以,当接收到
SETUP 封包,程序必须清除此位。
访问 FIFO0 时出现错误。由 SIE 置位,软件清零。
接收到 OUT 封包(除 0 封包)。读取 OUT 数据后,由程序
清除此位。在 SIE 接收到下次有效的 SETUP 封包也会清
除此位。
接收到 IN 封包。(1=IN 封包;0=没有 IN 封包)
在 IN 和 OUT 的状态阶段,SIE 返回 NAK 信号给主机。
(1=NAK 信号;0=没有 NAK 信号)
CRC、PID 和未接收到完整的封包标志位。CRCF 标志由
SIE 置位,软件清零。
封包标志位,低有效。
NAK 封包中断控制位。若此位置位,当设备发送 NAK
封包给主机,将不会触发中断。否则,当设备发送 NAK
封包给主机,将触发中断。
SIES(25H) 寄存器
MISC 寄存器由命令和状态组成,用于控制端点 FIFO 的读写并反映 FIFO 的状态。USB 复位将清除
MISC 寄存器。
位
标号
R/W
0
REQUEST
R/W
1
TX
R/W
2
3~4
CLEAR
—
R/W
—
5
SETCMD
R/W
6
READY
R
7
LED0
R/W
功能
选择所需端点并将此位置高,便可访问相应的 FIFO。操
作相应的 FIFO 后,此位必须清零。
方向控制位。若置位,MCU 可以写数据到 FIFO 内,操
作相应的 FIFO 后,必须在清除 REQUEST 位前将其清零;
若清零,MCU 可以从 FIFO 内读取数据,同样在清除
REQUEST 位前需将其清零。
用于清除所选择的 FIFO,即使 FIFO 尚未准备好。
保留
表示 FIFO 内数据为 SETUP 命令。此位将会保持到下次
FIFO 被访问。(1=SETCMD 封包;0=没有 SETCMD 封包)
所选择 FIFO 已准备好。
(1=已准备好;0=未准备好)
表示主机发送了 0 封包给 MCU。读取相应的 FIFO 后必
须清零。(1=主机发送了 0 封包)
MISC(26H) 寄存器
Rev. 1.50
32
2014-07-28
HT46RB50
读写 FIFO 时必须按照一定时序进行。通过设定 MISC 寄存器位,MCU 对 FIFO 可以执行读、写和
清除动作。下表为一些读、写和清除 FIFO 的时序。
动作
读 FIFO0 时序
写 FIFO0 时序
检查 FIFO0 是否可读
检查 FIFO0 是否可写
从 FIFO0 内读取 0 封包
写 0 封包到 FIFO0 内
MISC 设置和状态
00H→01H→延时 2μs,检查是否为 41H(准备好)或 01H(未准备
好)→从 FIFO0 寄存器读取*→03H→02H
02H→03H→延时 2μs,检查是否为 43H(准备好)或 03H(未准备
好)→写数据到 FIFO0 寄存器*→01H→00H
00H→01H 延时 2μs,检查是否为 41H(准备好)或 01H(未准备好)
→00H
02H→03H 延时 2μs,检查是否为 43H(准备好)或 03H(未准备好)
→02H
00H→01H→延时 2μs,检查是否为 81H→读取(01H) →03H→
02H
02H→03H→延时 2μs,检查是否为 03H→07H→06H→00H
读或写 FIFO
注意:*:在两次读与写之间必须存在 2μs 延时
Req.
Req.
Tx
Tx
Ready
Ready
Write FIFO Timing
Read FIFO Timing
位
0
1
2
3
4~7
标号
DATATG*
SETIO1**
SETIO2**
SETIO3**
—
R/W
R/W
R/W
R/W
R/W
—
功能
触发此位,所有 DATA 封包都会从 DATA0 开始
设置端点 1 为输入或输出(1/0),默认为输入(1)
设置端点 2 为输入或输出(1/0),默认为输入(1)
设置端点 3 为输入或输出(1/0),默认为输入(1)
未用,读出为“0”
SETIO(27H) 寄存器
注意:*USB 设置:当主机发出“set Configuration”
,数据管道会先发出 DATA0。所以,当设备接收到“set Configuration”
封包,必须设置此位以确保数据从 DATA0 开始。
**必须设置数据管道为输入管道还是输出管道。主要用于防止主机错误的发送 IN 或 OUT 封包或禁止端点。
Rev. 1.50
33
2014-07-28
HT46RB50
配置选项
下表列出了所有配置选项。所有选项必须正确定义,以保证统正常运行。
编号
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17*
选项
PA0~PA7 上拉电阻使能位(按位定义)
PB0~PB7 上拉电阻使能位(按位定义)
PC0~PC7 上拉电阻使能位(半字节定义)
PD0~PD7 上拉电阻使能位(半字节定义)
PE0~PE7 上拉电阻使能位(半字节定义)
LVR 使能或禁止位
PWM 选择:(7+1)或(6+2)模式
PD0:电平输出或 PWM 输出
PD1:电平输出或 PWM 输出
SIO(串行接口)使能或禁止(若 SIO 使能,PE0~PE3 输入/输出功能将禁止)
SIO_CPOL:时钟极性 1/0:上升沿有效或下降沿有效
SIO_WCOL:使能/禁止
SIO_CSEN:使能/禁止,CSEN 选项用于使能或/禁止 CSEN 功能。
WDT 使能/禁止
WDT 时钟源:fS /4 或看门狗振荡器
WDT 预分频选择:212/ fS~213/ fS、
、213/ fS~214/ fS 、214/ fS~215/ fS 和 215/ fS~216/ fS
清除看门狗指令条数:1 条或 2 条
PA0~PA7 唤醒使能/禁止(按位定义)
EP1~EP3 数据管道使能:EP1、EP2、EP3 使能/禁止。(默认为使能)
注意:*:此配置选项可用于使能/禁止相关的端点。
Rev. 1.50
34
2014-07-28
HT46RB50
应用电路
注: 电阻和电容值选取的原则是使 VDD 保持稳定并在 RES 置为高以前把工作电压保持在允许的范围内。
X1 可使用 6MHz 或 12MHz,X1 尽量靠近 OSC1 和 OSC2
“*”为了避免噪声干扰,连接 RES 引脚的线请尽可能地短
若使用谐振器必须连接 22pF 的电容
Rev. 1.50
35
2014-07-28
HT46RB50
指令集概要
下表中说明了按功能分类的指令集,用户可以将该表作为基本的指令参考。
惯例
x:立即数
m:数据存储器地址
A:累加器
i:第 0~7 位
助记符
addr:程序存储器地址
说明
指令
周期
影响标志位
Z,C,AC,OV
算术运算
ADD
A,[m]
ACC 与数据存储器相加,结果放入 ACC
1
ADDM
A,[m]
ACC 与数据存储器相加,结果放入数据存储器
1
ADD
A,x
ACC 与立即数相加,结果放入 ACC
1
ADC
A,[m]
ACC 与数据存储器、进位标志相加,结果放入 ACC
1
ADCM
A,[m]
ACC 与数据存储器、进位标志相加,结果放入数据存储器
1
SUB
A,x
ACC 与立即数相减,结果放入 ACC
1
SUB
A,[m]
ACC 与数据存储器相减,结果放入 ACC
1
SUBM
A,[m]
ACC 与数据存储器相减,结果放入数据存储器
1
SBC
A,[m]
ACC 与数据存储器、进位标志的反相减,结果放入 ACC
1
SBCM
A,[m]
ACC 与数据存储器、进位标志相减,结果放入数据存储器
1
DAA
[m]
将加法运算中放入 ACC 的值调整为十进制数,并将结果放入数
据存储器
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
注
C
逻辑运算
AND
A,[m]
ACC 与数据存储器做“与”运算,结果放入 ACC
1
Z
OR
A,[m]
ACC 与数据存储器做“或”运算,结果放入 ACC
1
Z
XOR
A,[m]
ACC 与数据存储器做“异或”运算,结果放入 ACC
1
ANDM
A,[m]
ACC 与数据存储器做“与”运算,结果放入数据存储器
1
Z
注
Z
注
Z
注
Z
ORM
A,[m]
ACC 与数据存储器做“或”运算,结果放入数据存储器
1
XORM
A,[m]
ACC 与数据存储器做“异或”运算,结果放入数据存储器
1
AND
A,x
ACC 与立即数做“与”运算,结果放入 ACC
1
Z
OR
A,x
ACC 与立即数做“或”运算,结果放入 ACC
1
Z
XOR
A,x
ACC 与立即数做“异或”运算,结果放入 ACC
1
CPL
[m]
对数据存储器取反,结果放入数据存储器
1
CPLA
[m]
对数据存储器取反,结果放入 ACC
1
递增数据存储器,结果放入 ACC
1
Z
注
Z
Z
递增和递减
INCA
[m]
INC
[m]
递增数据存储器,结果放入数据存储器
1
DECA
[m]
递减数据存储器,结果放入 ACC
1
DEC
[m]
递减数据存储器,结果放入数据存储器
1
[m]
数据存储器右移一位,结果放入 ACC
1
Z
注
Z
Z
注
Z
移位
RRA
RR
[m]
数据存储器右移一位,结果放入数据存储器
1
RRCA
[m]
带进位将数据存储器右移一位,结果放入 ACC
1
RRC
[m]
Rev. 1.50
2014-07-28
带进位将数据存储器右移一位,结果放入数据存储器
36
1
无
注
无
C
注
C
HT46RB50
助记符
说明
指令
周期
影响标志位
无
RLA
[m]
数据存储器左移一位,结果放入 ACC
1
RL
[m]
数据存储器左移一位,结果放入数据存储器
1
RLCA
[m]
带进位将数据存储器左移一位,结果放入 ACC
1
RLC
[m]
带进位将数据存储器左移一位,结果放入数据存储器
1
A,[m]
将数据存储器送至 ACC
1
注
无
C
注
C
数据传送
MOV
MOV
[m],A
将 ACC 送至数据存储器
1
MOV
A,x
将立即数送至 ACC
1
[m].i
清除数据存储器的位
1
无
注
无
无
位运算
CLR
SET
[m].i
置位数据存储器的位
1
addr
无条件跳转
2
注
无
注
无
转移
JMP
SZ
[m]
SZA
[m]
如果数据存储器为零,则跳过下一条指令
1
数据存储器送至 ACC,如果内容为零,则跳过下一条指令
1
SZ
[m].i
如果数据存储器的第 i 位为零,则跳过下一条指令
1
SNZ
[m].i
如果数据存储器的第 i 位不为零,则跳过下一条指令
1
SIZ
[m]
SDZ
[m]
SIZA
[m]
SDZA
[m]
CALL
addr
RET
RET
A,x
RETI
递增数据存储器,如果结果为零,则跳过下一条指令
1
递减数据存储器,如果结果为零,则跳过下一条指令
1
递增数据存储器,将结果放入 ACC,如果结果为零,则跳过下
一条指令
递减数据存储器,将结果放入 ACC,如果结果为零,则跳过下
一条指令
1
1
无
注
无
注
无
注
无
注
无
注
无
注
无
注
无
注
无
子程序调用
2
无
从子程序返回
2
无
从子程序返回,并将立即数放入 ACC
2
无
从中断返回
2
无
读取特定页的 ROM 内容,并送至数据存储器和 TBLH
2
查表
TABRD
[m]
TABRDC [m]
TABRDL [m]
读取当前页的 ROM 内容,并送至数据存储器和 TBLH
2
读取最后页的 ROM 内容,并送至数据存储器和 TBLH
2
注
无
注
无
注
无
其它指令
空指令
NOP
无
1
清除数据存储器
注
无
CLR
[m]
SET
[m]
置位数据存储器
1
CLR
WDT
清除看门狗定时器
1
TO,PDF
CLR
CLR
SWAP
SWAPA
HALT
WDT1
WDT2
[m]
[m]
预清除看门狗定时器
预清除看门狗定时器
交换数据存储器的高低字节,结果放入数据存储器
交换数据存储器的高低字节,结果放入 ACC
进入暂停模式
1
1
注
1
1
1
TO,PDF
TO,PDF
无
无
TO,PDF
1
注
无
注:1、对跳转指令而言,如果比较的结果牵涉到跳转即需 2 个周期,如果没有发生跳转,则只需一个周期。
2、任何指令若要改变 PCL 的内容将需要 2 个周期来执行。
3、对于“CLR WDT1”或“CLR WDT2”指令而言,TO 和 PDF 标志位也许会受执行结果影响,“CLR WDT1”和“CLR
WDT2”被连续地执行后,TO 和 PDF 标志位会被清除,否则 TO 和 PDF 标志位保持不变。
Rev. 1.50
2014-07-28
37
HT46RB50
指令定义
ADC
A, [m]
说明:
运算过程:
影响标志位:
Add data memory and carry to the accumulator
将指定的数据存储器、累加器内容以及进位标志相加,结果存放到累加器。
ACCACC+[m]+C
OV、Z、AC、C
ADCM A, [m]
说明:
运算过程:
影响标志位:
Add the accumulator and carry to the accumulator
将指定的数据存储器、累加器内容和进位标志位相加,结果存放到指定的数据存
储器。
[m]ACC+[m]+C
OV、Z、AC、C
ADD
A, [m]
说明:
运算过程:
影响标志位:
Add data memory to the accumulator
将指定的数据存储器和累加器内容相加,结果存放到累加器。
ACCACC+[m]
OV、Z、AC、C
ADD
A, x
说明:
运算过程:
影响标志位:
Add immediate data to the accumulator
将累加器和立即数相加,结果存放到累加器。
ACCACC+x
OV、Z、AC、C
ADDM A, [m]
说明:
运算过程:
影响标志位:
Add the accumulator to the data memory
将指定的数据存储器和累加器内容相加,结果存放到指定的数据存储器。
[m]ACC+[m]
OV、Z、AC、C
AND
A, [m]
说明:
运算过程:
影响标志位:
Logical AND accumulator with data memory
将累加器中的数据和指定数据存储器内容做逻辑与,结果存放到累加器。
ACCACC “AND” [m]
Z
AND
A, x
说明:
运算过程:
影响标志位:
Logical AND immediate data to the accumulator
将累加器中的数据和立即数做逻辑与,结果存放到累加器。
ACCACC “AND” x
Z
ANDM A, [m]
说明:
运算过程:
影响标志位:
Logical AND data memory with the accumulator
将指定数据存储器内容和累加器中的数据做逻辑与,结果存放到数据存储器。
[m]ACC “AND” [m]
Z
CALL
说明:
Subroutine call
无条件的调用指定地址的子程序,此时程序计数器先加 1 获得下一个要执行
的指令地址并压入堆栈,接着载入指定地址并从新地址执行程序。由于指令需要
额外的运算,所以此指令为 2 个周期。
StackProgram Counter+1
Program Counter  addr
无
addr
运算过程:
影响标志位:
Rev. 1.50
2014-07-28
38
HT46RB50
CLR
[m]
Clear data memory
说明:
将指定数据存储器的内容清零。
运算过程:
[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
CPL
[m]
说明:
运算过程:
影响标志位:
Complement data memory
将指定数据存储器中的每一位取逻辑反,相当于从 1 变 0 或从 0 变 1。
[m]  [ m ]
Z
CPLA
说明:
Complement data memory
将指定数据存储器中的每一位取逻辑反,相当于从 1 变 0 或从 0 变 1,结果被存
放回累加器且数据寄存器的内容保持不变。
ACC  [ m ]
Z
[m]
运算过程:
影响标志位:
DAA
说明:
[m]
操作:
影响标志位:
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]
运算过程:
影响标志位:
Rev. 1.50
2014-07-28
Decrement data memory and place result in the accumulator
将指定数据存储器的内容减 1,把结果存放回累加器并保持指定数据存储器的内
容不变。
ACC  [m]-1
Z
39
HT46RB50
HALT
说明:
影响标志位:
Enter power down mode
此指令终止程序执行并关掉系统时钟,RAM 和寄存器的内容保持原状态,WDT
计数器和分频器被清“0”,暂停标志位 PDF 被置位 1,WDT 溢出标志位 TO 被清
0。
TO  0
PDF  1
TO、PDF
INC
[m]
说明:
运算过程:
影响标志位:
Increment data memory
将指定数据存储器的内容加 1。
[m]  [m]+1
Z
INCA
说明:
Increment data memory and place result in the accumulator
将指定数据存储器的内容加 1,结果存放回累加器并保持指定的数据存储器内容
不变。
ACC  [m]+1
Z
运算过程:
[m]
运算过程:
影响标志位:
JMP
说明:
addr
运算过程:
影响标志位:
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
将累加器中的数据和指定的数据存储器内容逻辑或,结果存放到累加器。
ACCACC “OR” [m]
Z
Rev. 1.50
2014-07-28
40
HT46RB50
OR
A, x
说明:
运算过程:
影响标志位:
Logical OR immediate data to the accumulator
将累加器中的数据和立即数逻辑或,结果存放到累加器。
ACCACC “OR” x
Z
ORM
A, [m]
说明:
运算过程:
影响标志位:
Logical OR data memory with accumulator
将存在指定数据存储器中的数据和累加器逻辑或,结果放到数据存储器。
[m]ACC “OR” [m]
Z
RET
说明:
运算过程:
影响标志位:
Return from subroutine
将堆栈寄存器中的程序计数器值恢复,程序由取回的地址继续执行。
PC  Stack
无
RET
说明:
A, x
运算过程:
影响标志位:
RETI
说明:
Return from interrupt
将堆栈寄存器中的程序计数器值恢复且中断功能通过设置 EMI 位重新使能。EMI
是控制中断使能的主控制位。如果在执行 RETI 指令之前还有中断未被相应,则
这个中断将在返回主程序之前被相应。
PC  Stack
EMI  1
无
运算过程:
影响标志位:
RL
[m]
说明:
运算过程:
Rotate data memory left
将指定数据存储器的内容左移 1 位,且第 7 位移到第 0 位。
[m].(i+1) [m].i (i=0~6)
[m].0 [m].7
无
影响标志位:
RLA
说明:
[m]
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
无
[m]
Rotate data memory left through carry
将指定数据存储器的内容连同进位标志左移 1 位,第 7 位取代进位标志且原本的
进位标志移到第 0 位。
[m].(i+1) [m].i (i=0~6)
[m].0 C
C  [m].7
C
运算过程:
影响标志位:
RLC
说明:
运算过程:
影响标志位:
Rev. 1.50
2014-07-28
Return and place immediate data in the accumulator
将堆栈寄存器中的程序计数器值恢复且累加器载入指定的立即数,程序由取回的
地址继续执行。
PC  Stack
ACC  x
无
41
HT46RB50
RLCA
说明:
[m]
运算过程:
影响标志位:
RR
[m]
说明:
运算过程:
影响标志位:
RRA
说明:
[m]
运算过程:
影响标志位:
RRC
说明:
[m]
运算过程:
影响标志位:
RRCA
说明:
[m]
运算过程:
影响标志位:
SBC
说明:
A,[m]
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
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。
运算过程:
影响标志位:
ACCACC-[m]- C
OV、Z、AC、C
SBCM
说明:
Subtract data memory and carry from the accumulator
将累加器减去指定数据存储器的内容以及进位标志的反,结果存放到数据存储
器。如果结果为负,C 标志位清除为 0,反之结果为正或 0,C 标志位设置为 1。
A,[m]
运算过程:
影响标志位:
Rev. 1.50
2014-07-28
[m]ACC-[m]- C
OV、Z、AC、C
42
HT46RB50
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
说明:
Skip if increment data memory is 0
将指定的数据存储器的内容加 1,判断是否为 0,若为 0 则跳过下一条指令。由
于取得下一个指令时会要求插入一个空指令周期,所以此指令为 2 个周期的指
令。如果结果不为 0,则程序继续执行下一条指令。
[m] [m]+1,如果[m]=0 跳过下一条指令执行
无
[m]
运算过程:
影响标志位:
SIZA
说明:
[m]
运算过程:
影响标志位:
SNZ
说明:
[m]. i
运算过程:
影响标志位:
Rev. 1.50
2014-07-28
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,跳过下一条指令执行
无
43
HT46RB50
SUB
说明:
A, [m]
运算过程:
影响标志位:
SUBM
说明:
A, [m]
运算过程:
影响标志位:
SUB
说明:
A, x
Subtract data memory from the accumulator
将累加器的内容减去指定的数据存储器的数据,把结果存放到累加器。如果结果为负,
C 标志位清除为 0,反之结果为正或 0,C 标志位设置为 1。
ACCACC-[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。
ACCACC-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]
说明:
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
无
运算过程:
影响标志位:
SZ
说明:
[m]
运算过程:
影响标志位:
SZA
说明:
[m]
运算过程:
影响标志位:
Rev. 1.50
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,跳过下一条指令执行
无
44
2014-07-28
HT46RB50
SZ
说明:
[m]. i
运算过程:
影响标志位:
TABRD [m]
说明:
Move the ROM code(specific page) to TBLH and data memory
将表格指针 TBLP 和 TBHP 所指的程序代码低字节(特定页)移至指定的数据存储器
且将高字节移至 TBLH。
[m] 程序代码(低字节)
TBLH程序代码(高字节)
无
运算过程:
影响标志位:
TABRDC
说明:
Skip if bit I of the data memory is 0
判断指定数据存储器的第 i 位是否为 0,若为 0,则跳过下一条指令。由于取得下一
个指令时会要求插入一个空指令周期,所以此指令为 2 个周期的指令。如果结果不为
0,则程序继续执行下一条指令。
如果[m].i = 0,跳过下一条指令执行
无
[m]
Move the ROM code(current page) to TBLH and data memory
将表格指针 TBLP 所指的程序代码低字节(当前页)移至指定的数据存储器且将高字
节移至 TBLH。
[m] 程序代码(低字节)
TBLH程序代码(高字节)
无
[m]
影响标志位:
Move the ROM code(last page) to TBLH and data memory
将表格指针 TBLP 所指的程序代码低字节(最后一页)移至指定的数据存储器且将高
字节移至 TBLH。
[m] 程序代码(低字节)
TBLH程序代码(高字节)
无
XOR
A, [m]
说明:
运算过程:
影响标志位:
Logical XOR accumulator with data memory
将累加器的数据和指定的数据存储器内容逻辑异或,结果存放到累加器。
ACCACC “XOR” [m]
Z
XORM A, [m]
说明:
运算过程:
影响标志位:
Logical XOR data memory with accumulator
将累加器的数据和指定的数据存储器内容逻辑异或,结果放到数据存储器。
[m]ACC “XOR” [m]
Z
XOR
A, x
说明:
运算过程:
影响标志位:
Logical XOR immediate data to the accumulator
将累加器的数据与立即数逻辑异或,结果存放到累加器。
ACCACC “XOR” x
Z
运算过程:
影响标志位:
TABRDL
说明:
运算过程:
Rev. 1.50
45
2014-07-28
HT46RB50
封装尺寸
请注意,这里提供的封装信息仅作为参考。由于这个信息经常更新,提醒用户咨询 Holtek 网站以获
取最新版本的封装信息。
封裝信息的相关内容如下所示,点击可链接至 Holtek 网站相关信息页面。
• 封装信息(包括外形尺寸、包装带和卷轴规格)
•
封装材料信息
•
纸箱信息
Rev. 1.50
46
2014-07-28
HT46RB50
28-pin SOP (300mil)外形尺寸
28
15
A
B
1
14
C
C'
G
H
D
E
符号
A
B
C
C’
D
E
F
G
H
α
符号
A
B
C
C’
D
E
F
G
H
α
Rev. 1.50
α
F
最小
—
—
0.012
—
—
—
0.004
0.016
0.008
0°
尺寸 (单位:inch)
典型
0.406 BSC
0.295 BSC
—
0.705 BSC
—
0.050 BSC
—
—
—
—
最大
—
—
0.020
—
0.104
—
0.012
0.050
0.013
8°
最小
—
—
0.31
—
—
—
0.10
0.40
0.20
0°
尺寸 (单位:mm)
典型
10.30 BSC
7.50 BSC
—
17.90 BSC
—
1.27 BSC
—
—
—
—
最大
—
—
0.51
—
2.65
—
0.30
1.27
0.33
8°
47
2014-07-28
HT46RB50
28-pin SKDIP (300mil)外形尺寸
A
B
28
15
1
14
H
C
D
E
符号
A
B
C
D
E
F
G
H
I
符号
A
B
C
D
E
F
G
H
I
Rev. 1.50
F
α
G
I
最小
1.380
0.280
0.060
0.125
0.015
0.045
—
0.300
—
尺寸 (单位:inch)
典型
—
—
—
—
—
—
0.100 BSC
—
—
最大
1.420
0.310
0.130
0.200
0.022
0.065
—
0.325
0.400
最小
35.05
7.11
1.52
3.18
0.38
1.14
—
7.62
—
尺寸 (单位:mm)
典型
—
—
—
—
—
—
2.54 BSC
—
—
最大
36.07
7.87
3.30
5.08
0.56
1.65
—
8.26
10.16
48
2014-07-28
HT46RB50
48-pin SSOP (300mil)外形尺寸
48
25
A
B
24
1
C
C'
G
H
D
E
符号
A
B
C
C’
D
E
F
G
H
α
符号
A
B
C
C’
D
E
F
G
H
α
Rev. 1.50
F
α
最小
0.395
0.291
0.008
0.620
0.095
—
0.008
0.020
0.005
0°
尺寸 (单位:inch)
典型
—
0.295
—
0.625
0.102
0.025 BSC
0.012
—
—
—
最大
0.420
0.299
0.014
0.630
0.110
—
0.016
0.040
0.010
8°
最小
10.03
7.39
0.20
15.75
2.41
—
0.20
0.51
0.13
0°
尺寸 (单位:mm)
典型
—
7.49
—
15.88
2.59
0.64 BSC
0.30
—
—
—
最大
10.67
7.59
0.34
16.00
2.79
—
0.41
1.02
0.25
8°
49
2014-07-28
HT46RB50
Copyright  2014 by HOLTEK SEMICONDUCTOR INC.
使用指南中所出现的信息在出版当时相信是正确的,然而盛群对于说明书的使用不负任何责任。文中提
到的应用目的仅仅是用来做说明,盛群不保证或表示这些没有进一步修改的应用将是适当的,也不推荐
它的产品使用在会由于故障或其它原因可能会对人身造成危害的地方。盛群产品不授权使用于救生、维
生器件或系统中做为关键器件。盛群拥有不事先通知而修改产品的权利,对于最新的信息,请参考我们
的网址 http://www.holtek.com.tw
Rev. 1.50
50
2014-07-28
Similar pages