Holtek HT46CU67 100-pin lqfp Datasheet

HT46RU67/HT46CU67
A/D+LCD 型八位单片机
技术相关信息
· 工具信息
· FAQs
· 应用范例
- HA0003S HT48 & HT46 MCU 与 HT93LC46 EEPROM 的通信
- HA0004S HT48 & HT46 MCU UART 的软件实现方法
- HA0005S HT48 & HT46 MCU 用软件执行 I2C 总线的控制功能的方法
- HA0047S HT46 MCU 的 PWM 的应用范例
- HA0075S MCU 重置电路及振荡电路应用
特性
•
•
•
•
•
•
•
•
•
•
•
•
工作电压:
fSYS=4MHz:2.2V~5.5V
fSYS=8MHz:3.3V~5.5V
32 个双向输入/输出口
2 个外部中断输入
2 个 16 位定时/计数器,具有 PFD(可编程分频
器)功能
1 个 8 位定时/计数器,带时钟预分频器
47×3 或 46×4 段的 LCD 驱动(SEG0~SEG23 可
由配置选项设置为逻辑输出)
32K×16 程序存储器
768×8 数据存储器
通用异步接收/发送器(UART)
具有 PFD 功能,可用于发声
实时时钟(RTC)
8 位实时时钟预分频器
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
看门狗定时器
蜂鸣器输出
内置晶体、RC 和 32768Hz 晶体振荡电路
HALT 和唤醒功能可降低功耗
16 层硬件堆栈
8 通道 12 位分辨率的 A/D 转换器
4 通道 PWM 输出与输入/输出口共用引脚
同步串行通讯功能(SIO)
位操作指令
查表指令,表格内容字长 16 位
系统频率为 8MHz 时,指令周期为 0.5μs
63 条指令
指令执行时间为 1 或 2 个指令周期
低电压复位/检测功能
100-pin LQFP 封装
概述
HT46RU67/HT46CU67 是 8 位高性能精简指令集单片机,专门为需要 A/D 转换和 LCD 显示的产品而
设计。Mask 版本 HT46CU67 与 OTP 版本 HT46RU67 引脚和功能完全相同。
低功耗、I/O 使用灵活、计数器、振荡类型选择、多通道 A/D 转换、PWM、UART,串行输入/输出接
口,暂停和唤醒功能,以及 LCD 显示功能,使这款单片机可以广泛应用于需要 A/D 转换和 LCD 显示的产
品中,例如电子测量仪器、环境监控、手持式测量工具、马达控制等工业和家庭应用系统。
Rev. 1.30
1
2014-6-10
HT46RU67/HT46CU67
方框图
Rev. 1.30
2
2014-06-10
HT46RU67/HT46CU67
引脚图
Rev. 1.30
3
2014-06-10
HT46RU67/HT46CU67
引脚说明
引脚名称
输入/输出
配置选项
PA0/BZ
PA1/ BZ
PA2
PA3/PFD
PA4~PA7
输入/输出
上拉电阻
唤醒功能
蜂鸣器
PFD
PB0/AN0~
PB7/AN7
输入/输出
上拉电阻
PC0/TMR2
PC1/SDI
PC2/SDO
PC3/SCK
PC4/ SCS
PC5
PC6/TX
PC7/RX
PD0/PWM0
PD1/PWM1
PD2/PWM2
PD3/PWM3
PD4/ INT0
PD5/ INT1
PD6/TMR0
PD7TMR1
输入/输出
8 位双向输入/输出口。每一位可由配置选项设置
为唤醒输入。可由软件设置为 CMOS 输出、带或
不带上拉电阻(由上拉电阻选项决定)的斯密特触
发输入。TMR2、SDI、SDO、SCK、SCS,TX 和
RX 分别与 PC0、PC1、PC2、PC3、PC4,PC6 和
PC7 引脚共用。
上拉电阻
输入/输出
上拉电阻
PWM
中断
OSC1
OSC2
输入
输出
晶体或 RC
OSC3
OSC4
VLCD
VMAX
V1,V2,C1,C2
输入
输出
—
—
输入
SEG0~SEG7
输出
SEG8~SEG15
输出
SEG16~SEG23
输出
SEG24~SEG45
输出
COM0~COM2
COM3 / SEG46
输出
1/3 或 1/4 Duty
COM3 或 SEG46
VREF
输入
—
Rev. 1.30
说明
8 位双向输入/输出口。每一位可由配置选项设置
为唤醒输入。可由软件设置为 CMOS 输出、带或
不带上拉电阻(由上拉电阻位选项决定)的斯密特
触发输入。BZ、 BZ 和 PFD 分别与 PA0、PA1 和
PA3 共用引脚,对应功能由配置选项设置。
8 位双向输入/输出口。可由软件设置为 CMOS 输
出、带或不带上拉电阻(由上拉电阻位选项决定)
的斯密特触发输入或 A/D 输入。一旦 PB 口软件
设置为 A/D 输入,则其输入/输出功能和上拉电阻
会自动失效。
8 位双向输入/输出口。可由软件设置为 CMOS 输
出、带或不带上拉电阻(由上拉电阻位选项决定)
的 斯 密 特 触 发 输 入 。 PWM0~PWM3 分 别 与
PD0~PD3 引脚共用,每个引脚功能由 PWM 选项
决定。INT0 和 INT1 分别与 PD4 和 PD5 引脚共用,
配置选项决定使能/禁止中断以及设置上升沿/下
降沿触发中断。
TMR0 和 TMR1 分别与 PD6 和 PD7
引脚共用。
OSC1、OSC2 连接 RC 或晶体(由配置选项确定)
以产生内部系统时钟。在 RC 振荡方式下,OSC2
是系统时钟四分频的输出口。系统时钟也可以选
择为 RTC 振荡,如果选择 RTC 振荡作为系统时
钟,则这两个引脚可以空接。
OSC3、OSC4 连接 32768Hz 的晶体振荡器,用于
提供实时时钟或系统时钟(由配置选项确定)。
LCD 电源。
IC 最高电压,接至 VDD、VLCD 或 V1。
LCD 电压泵。
LCD 驱动的 Segment 输出。SEG0~SEG7 可配置
设置为 Segment 输出或 CMOS 输出。
LCD 驱动的 Segment 输出。SEG8~SEG15 可配
置设置为 Segment 输出或 CMOS 输出。
LCD 驱动的 Segment 输出。SEG16~SEG23 每一
位可配置设置为 Segment 输出或 CMOS 输出。
LCD 驱动的 Segment 输出。
SEG46 可由配置选项设置为 LCD 显示的 Segment
或 Common 输出端。COM0~COM2 是 LCD 驱动
的 Common 输出。
基准电压输入。
RTC 或系统时钟
—
—
—
SEG0~SEG7
或 CMOS 输出
SEG8~SEG15
或 CMOS 输出
SEG16~SEG23
或 CMOS 输出
—
4
2014-06-10
HT46RU67/HT46CU67
RES
VDD
VSS
AVDD
AVSS
输入
—
—
输入
输入
—
—
—
—
—
斯密特触发复位输入,低电平有效。
正电源。
负电源,接地。
模拟电压正电源输入。
模拟电压负电源输入,接地。
注: PA 上的每个引脚可通过配置选项被设定成具有唤醒功能。
Segment 引脚 SEG0-SEG15 和 SEG35-SEG45 仅在 100-pin LQFP 封装中引出。
极限参数
电源供应电压………….VSS-0.3V~VSS+6.0V
端口输入电压………….VSS-0.3V~VDD+0.3V
IOL 总电流…………. ………. ……….150mA
总功耗………. ………. …………….500mW
储存温度………….-50℃~125℃
工作温度………..….-40℃~85℃
IOH 总电流…………... …. -100mA
注:这里只强调额定功率,超过极限参数所规定的范围将对芯片造成损害,无法预期芯片在上述标示范围外的工作状态,而
且若长期在标示范围外的条件下工作,可能影响芯片的可靠性。
Rev. 1.30
5
2014-06-10
HT46RU67/HT46CU67
直流电气特性
符号
VDD
AVDD
IDD1
IDD2
IDD3
IDD4
IDD5
Ta=25℃
参数
工作电压
模拟电路工作电压
(见注释 5)
工作电流
(晶体振荡、RC 振荡)
工作电流
(晶体振荡,RC 振荡)
工作电流
(晶体振荡,RC 振荡)
工作电流
(晶体振荡,RC 振荡)
工作电流
(fSYS=32768Hz)
VDD
—
ISTB7
Rev. 1.30
静态电流
(*fS=WDT 振荡)
5.5
V
—
VREF =AVDD
3.0
—
5.5
V
3V
5V
无负载, fSYS=4MHz,
ADC 关闭,UART 关闭
—
—
1
3
2
5
mA
mA
3V
无 负 载 , fSYS=4MHz ,
ADC 关闭,UART 打开
—
1.5
3
mA
—
3
6
mA
—
4
8
mA
—
5
10
mA
—
—
—
0.3
1
—
0.6
1.9
1
mA
mA
μA
—
—
2
μA
—
2.5
5
μA
—
10
20
μA
—
2
5
μA
—
6
10
μA
—
17
30
μA
—
34
60
μA
—
13
25
μA
—
28
50
μA
—
14
25
μA
—
26
50
μA
—
10
20
μA
—
19
40
μA
5V
5V
5V
3V
5V
3V
3V
ISTB6
—
V
静态电流
(*fS=WDT 振荡)
静态电流
(*fS=WDT 振荡)
2.2
5.5
3V
ISTB5
单位
—
静态电流
(*fS=RTC 振荡)
静态电流
(*fS=RTC 振荡)
最大
3.3
ISTB2
ISTB4
典型
fSYS=8MHz
静态电流
(*fS=T1)
静态电流
(*fS=RTC 振荡)
最小
—
ISTB1
ISTB3
测试条件
条件
fSYS=4MHz
5V
5V
5V
3V
5V
3V
5V
3V
5V
3V
5V
无负载,fSYS=8MHz ,
ADC 关闭,UART 关闭
无负载,fSYS=8MHz,
ADC 关闭,UART 打开
无 负 载 , ADC 关 闭 ,
UART 关闭
无负载,系统 HALT,
HALT 时 LCD 关闭,
UART 关闭
无负载,系统 HALT,
HALT 时 LCD 打开
电容型偏压,UART 关闭
无负载,系统 HALT,
HALT 时 LCD 打开,
电容型偏压,UART 关闭
无负载,系统 HALT,
HALT 时 LCD 打开,
电阻型偏压,1/2bias,
VLCD=VDD,UART 关闭
(选择低电流偏压)
无负载,系统 HALT,
HALT 时 LCD 打开,
电阻型偏压,1/3bias,
VLCD=VDD,UART 关闭
(选择低电流偏压)
无负载,系统 HALT,
HALT 时 LCD 打开,
电阻型偏压,1/2bias,
VLCD=VDD,UART 关闭
(选择低电流偏压)
无负载,系统 HALT,
HALT 时 LCD 打开,
电阻型偏压,1/3bias,
VLCD=VDD,UART 关闭
(选择低电流偏压)
6
2014-06-10
HT46RU67/HT46CU67
输入/输出口、TMR0、
TMR1、INT0 、INT1 的
低电平输入电压
输入/输出口、TMR0、
TMR1、INT0 、INT1 的
高电平输入电压
RES 低电平输入电压
RES 高电平输入电压
VIL1
VIH1
VIL2
VIH2
—
—
0
—
0.3VDD
V
—
—
0.7VDD
—
VDD
V
—
—
—
—
0
0.9 VDD
1.98
2.98
3.98
2.1
3.15
4.2
0
1.3
1.5
6
10
-2
-5
210
350
-80
-180
20
10
—
—
—
—
2.1
3.15
4.2
2.2
3.3
4.4
—
—
—
12
25
-4
-8
420
700
-160
-360
60
30
0.5
1.5
0.4VDD
VDD
2.22
3.32
4.42
2.31
3.46
4.62
VREF
AVDD
AVDD
—
—
—
—
—
—
—
—
100
50
1
3
V
V
V
V
V
V
V
V
V
V
V
mA
mA
mA
mA
µA
µA
µA
µA
kΩ
kΩ
mA
mA
—
—
±2
LSB
—
±2.5
±4
LSB
—
—
12
Bits
VLVR
低电压复位
—
VLVD
低电压检测
—
VAD
A/D 转换输入电压
—
VREF
AD 转换基准电压
—
IOL1
输入/输出口灌电流
IOH1
输入/输出口源电流
LCD Com 和 Segment
电流
LCD Com 和 Segment
电流
输入/输出口、INT0 和
INT1 上拉电阻
A/D 转换打开时增加
的系统功耗
3V
5V
3V
5V
3V
5V
3V
5V
3V
5V
3V
5V
DNL
AD 转换微分非线性
—
INL
AD 转换积分非线性
—
RESOLU
分辨率
—
IOL2
IOH2
RPH
IADC
2.1V 选项
3.15V 选项
4.2V 选项
2.2V 选项
3.3V 选项
4.4V 选项
100LQFP
AVDD=3V
AVDD=5V
VOL=0.1VDD
VOH=0.9VDD
VOL=0.1VDD
VOH=0.9VDD
—
—
tAD =1µs
AVDD =5V, VREF = AVDD
tAD=1µs
AVDD =5V, VREF = AVDD
tAD=1µs
—
注: 1."fS"说明可参阅 WDT 的时钟选择。
2. ISTB1=WDT 关闭,ISTB2~ISTB7=WDT 打开
3. AVDD 与 VDD 电压必须相同
Rev. 1.30
7
2014-06-10
HT46RU67/HT46CU67
交流电气特性
符号
fSYS1
fSYS2
Ta=25℃
参数
系统时钟
(晶体振荡,RC 振荡)
系统时钟
(32768Hz 晶体振荡)
VDD
—
—
—
fRTCOSC
RTC 频率
—
fTIMER
定时器输入频率
(TMR0/TMR1)
tWDTOSC
看门狗振荡器周期
tRES
tSST
tLVR
tINT
tAD
tADC
tADCS
外部复位低电平脉宽
系统启动延迟时间
低电压复位时间
中断脉冲宽度
A/D 时钟周期
A/D 转换时间
A/D 采样时间
—
—
3V
5V
—
—
—
—
—
—
—
测试条件
条件
2.2V~5.5V
3.3V~5.5V
最小
典型
最大
单位
400
400
—
—
4000
8000
kHz
—
32768
—
Hz
—
—
32768
—
Hz
—
—
—
上电或从 HALT 状态唤醒
—
—
—
—
—
0
0
45
32
1
—
0.25
1
1
—
—
—
—
90
65
—
1024
1
—
—
80
32
4000
8000
180
130
—
—
2
—
—
—
—
2.2V~5.5V
2.2V~5.5V
3.3V~5.5V
kHz
μs
μs
tSYS
ms
μs
μs
tAD
tAD
注:tSYS =1/fSYS1 或 1/fSYS2
Rev. 1.30
8
2014-06-10
HT46RU67/HT46CU67
系统功能说明
指令执行时序
单片机的系统时钟由晶体振荡器或 RC 振荡器或 32768Hz 的晶体振荡器产生。该时钟在芯片内部被分
成四个互不重叠的时钟周期。一个指令周期包括四个系统时钟周期。
指令的读取和执行是以流水线方式进行的, 这种方式在一个指令周期进行读取指令操作,而在下一个
指令周期进行解码与执行该指令。因此,流水线方式使多数指令能在一个周期内执行完成。但如果渉及到
的指令要改变程序计数器的值,就需要花两个指令周期来完成这一条指令。
T1
T2
T3
T4
T1
T2
T3
T4
T1
T2
T3
T4
System Clock
OSC2 (RC only)
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
15 位的程序计数器控制程序存储器 ROM 中指令执行的顺序,它可寻址整个 ROM 范围 32768×16
位的地址。
取得指令码以后,程序计数器会自动加一,指向下一个指令码的地址。
当执行的指令要求跳转到非连续的地址时,如跳转指令、子程序调用、中断或复位等,单片机通过载
入所需的地址到程序计数器来控制程序。对于条件跳转指令,一旦条件符合,下一条在现在指令执行时所
取得的指令即会被摒弃,而由一个空指令周期来加以取代。
程序计数器
模式
*14 *13 *12 *11 *10 *9 *8 *7
*6
*5
*4
*3 *2 *1
*0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
初始化复位
外部中断 0 或
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
AD 转换中断
外部中断 1 或
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
串行通讯中断
定时/计数器 0
0
0
0
0
0
0
0
0
0
0
0
1
1
0
0
溢出中断
定时/计数器 1
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
溢出中断
UART 中 断 或
0
0
0
0
0
0
0
0
0
0
1
0
1
0
0
串行通讯中断
0
0
0
0
0
0
0
0
0
0
1
1
0
0
0
多功能中断
条件跳转
PC+2(当前 bank 范围)
*14 *13 *12 *11 *10 *9 *8 @7 @6 @5 @4 @3 @2 @1 @0
装载 PCL
跳转、子程序调
BP.6 BP.5 #12 #11 #10 #9 #8 #7
#6
#5
#4
#3 #2 #1
#0
用
S14 S13 S12 S11 S10 S9 S8 S7
S6 S5
S4 S3 S2 S1
S0
子程序返回
程序计数器
注:
*14 ~ *0 :程序计数器位
S14~ S0 :堆栈寄存器位
#12 ~ #0 :指令代码位
Rev. 1.30
@7 ~ @0 :PCL 位
9
2014-06-10
HT46RU67/HT46CU67
程序计数器低字节寄存器 PCL,可以通过程序控制取得,且它是可以读取和写入的寄存器。通过直接
传送数据到这寄存器,一个程序短跳转可以直接被执行,然而由于只有低字节寄存器可以有效执行,因此
跳转被限制在同页存储器,即 256 个存储器地址的范围内,当这样一个程序跳转要执行时,需注意会插入
一个空指令周期。
由于程序存储器在两个 BANK 中,程序中可通过 BP 指针第 5 位选择正确的 BANK。下图描述了 BP
指针如何控制程序计数器 PC 地址最高位。
程序存储器
程序存储器用来存放要执行的指令代码,以及一些数据、
表格和中断入口。程序存储器有 32768×16 位组成,程序存储
器空间可以用程序计数器或表格指针进行寻址。程序存储器空
间被分为两个区块,即 Bank0 和 Bank1。每个 Bank 区块容量
为 8192×16,可通过 Bank 指针位 BP.5 和 BP.6 选择。当
BP=000XXXXXB 时,选择 Bank0;当 BP=001XXXXXB 时,
选 择 Bank1 ; 当 BP=010XXXXXB 时 , 选 择 Bank2 ; 当
BP=011XXXXXB 时,选择 Bank3。指令 JMP 和 CALL 只包含
13 位地址,其跳转范围为一个 bank(即 8K)。当执行 JMP 或
CALL 指令,必须设置 Bank 指针 BP.5 和 BP.6,以确保程序正
确执行。若从中断或子程序返回时,14 位 PC 将从堆栈弹出,
所以在执行 RET 或 RETI 指令时不需要改变 BP.5 值。
某些程序存储器地址是系统专为特殊用途而保留:
· 地址 000H
该地址为程序初始化保留。系统复位后,程序总是从 000H
开始执行。
· 地址 004H
该地址为外部中断 0 或 AD 转换中断服务程序保留。当
程序存储器
INT0 引脚有触发信号输入或 AD 转换结束,如果中断允许且堆
栈未满,则程序会跳转到 004H 地址开始执行。
· 地址 008H
该地址为外部中断 1 或串行通讯中断服务程序保留。当 INT1 引脚有触发信号输入或串行接口的 8 位数
据接收/发送完成,如果中断允许且堆栈未满,则程序会跳转到 008H 地址开始执行。
· 地址 00CH
该地址为定时/计数器 0 中断服务程序保留。当定时/计数器 0 溢出,如果中断允许且堆栈未满,则程
序会跳转到 00CH 地址开始执行。
· 地址 010H
该地址为定时/计数器 1 中断服务程序保留。当定时/计数器 1 溢出,如果中断允许且堆栈未满,则程
序会跳转到 010H 地址开始执行。
· 地址 014H
该地址为 UART 或串行通讯中断服务程序保留,可通过配置选项进行设置。当 UART 发送或接收完成
或串行接口的 8 位数据接收/发送完成触发中断,如果中断允许且堆栈未满,则程序会跳转到 014H 地址开
始执行。
· 地址 018H
该地址为多功能中断服务程序保留。当定时/计数器 2 计数溢出、RTC 或时基触发中断,如果中断允
许且堆栈未满,则程序会跳转到 018H 地址开始执行。
Rev. 1.30
10
2014-06-10
HT46RU67/HT46CU67
· 表格区
程序存储器空间的任何地址都可作为查表使用。查表指令“TABRDC [m]”(页由 TBHP 指定,查当前
页表格,1 页=256 个字)和“TABRDL [m]”(查最后页表格),把表格内容低字节传送给指定数据寄存器[m],
而表格内容高字节传送给 TBLH 寄存器(08H)。只有表格内容的低字节被传送到目标地址,其余位被传送
到表格内容高字节寄存器 TBLH 低位部分。表格内容高字节寄存器 TBLH 是只读寄存器。表格指针 TBHP
(1FH)和 TBLP(07H)是可读/写寄存器,用来指明表格地址。在查表之前,要先将表格地址写入 TBHP
和 TBLP 中。所有与表格有关的指令都需要两个指令周期的执行时间。这里提到的表格区都可以做为正常
的程序存储器来使用。
指令
TABRDC[m]
TABRDL[m]
*14 ~ *8
TBHP
1111111
*7
@7
@7
*6
@6
@6
表格区
*5
*4
@5 @4
@5 @4
*3
@3
@3
*2
@2
@2
*1
@1
@1
*0
@0
@0
表格区
注:*14 ~ *0 :表格地址字节
TBHP :表格指针高位
@7 ~ @0 :表格指针低位(TBLP)
堆栈寄存器 — STACK
堆栈寄存器是特殊的存储器空间,用来保存 PC 的值。HT46xU67 有 16 层堆栈,堆栈寄存器既不是数
据存储器的一部分,也不是程序存储器的一部分,而且它既不能读出,也不能写入。堆栈使用的层数是通
过堆栈指针 SP 来指示,也不能读出或写入。当发生子程序调用或中断响应时,程序计数器 PC 的值会被压
入堆栈;在子程序调用结束或中断响应结束时(执行指令 RET 或 RETI),堆栈将原先压入堆栈的内容弹出,
重新装入程序计数器中。在系统复位后,堆栈指针会指向堆栈顶部。
如果堆栈已满,并且发生了不可屏蔽的中断,那么只有中断请求标志会被记录下来,而中断响应会被
禁止,直到堆栈指针(执行 RET 或 RETI 指令)发生递减,中断才会被响应。这个功能可以防止堆栈溢出,
使得程序员易于使用这种结构。同样,如果堆栈已满,并且发生了子程序调用,那么堆栈会发生溢出,首
先进入堆栈的内容将会丢失,只有最近的 16 个返回地址会被保留。
数据存储器 — RAM
数据存储器由 812×8 位组成,分为两个功能区块。特殊功能寄存器(44×8)和通用数据存储器(Bank 0:
192×8,Bank 2:192×8、Bank 3:192×8 和 Bank 4:192×8)
,数据存储器单元大多数是可读/写的,但
有些为只读。特殊功能寄存器在所有区块中的地址重叠。
数据寄存器中 40H 之前的空间保留为系统以后扩展使用,读取这些地址的返回值为“00H”
。数据存
储器每个区块中 40H 之前的地址重叠。而在通用数据寄存器地址从 40H 到 FFH(Bank 0:BP=0、Bank 2:
BP=2,Bank3:BP=3 或 Bank4:BP=4),用来存储数据和控制信息。所有的数据存储器单元都能直接执行
算术、逻辑、递增、递减和移位操作。除了一些特殊位外,数据存储器的每一位都可由“SET[m].i”置位
或由“CLR[m].i”复位。而且都可以通过间接寻址指针(MP0:01H/MP1:03H)进行间接寻址。
Rev. 1.30
11
2014-06-10
HT46RU67/HT46CU67
数据存储器
Rev. 1.30
12
2014-06-10
HT46RU67/HT46CU67
间接寻址寄存器
地址 00H 和 02H 是间接寻址寄存器,并无实际的物理区存在。任何对[00H]和[02H]的读/写操作,都
是访问由 MP0 和 MP1 所指向的 RAM 单元。读取 00H 或 02H 地址将返回 00H,写入此地址将不会产生任
何操作。
间接寻址寄存器之间不支持数据传送功能。间接寻址指针 MP0 和 MP1 是 8 位寄存器。MP0 只能用于
寻址 Bank0 内数据寄存器,而 MP1 能用于寻址所有数据寄存器。
累加器
累加器(ACC)与算术逻辑单元(ALU)有密切关系,对应于 RAM 地址 05H,可以与立即数进行运算。存
储器之间的数据传送必须经过累加器。
算术逻辑单元 — ALU
·
·
·
·
·
算术逻辑单元(ALU)是执行 8 位算术、逻辑运算的电路,它提供有以下功能:
算术运算(ADD,ADC,SUB,SBC,DAA)
逻辑运算(AND,OR,XOR,CPL)
移位运算(RL,RR,RLC,RRC)
递增和递减(INC,DEC)
分支判断(SZ,SNZ,SIZ,SDZ 等)
ALU 不仅可以储存数据运算的结果,还会改变状态寄存器的值。
状态寄存器 — STATUS
8 位的状态寄存器(0AH),由进位标志位(C)、辅助进位标志位(AC)、零标志位(Z)、溢出标志位(OV)、
暂停标志位(PDF)和看门狗定时器溢出标志位(TO)组成。该寄存器不仅记录状态信息,而且还控制程序执
行时序。
位
符号
0
C
1
AC
2
Z
3
OV
4
PDF
5
TO
6,7
—
功能
如果在加法运算中结果产生了进位或在减法运算中结果不产生借位,
则 C 被置位;反之,C 被清除。它也可被循环移位指令影响。
如果在加法运算中低 4 位产生了进位或减法运算中低 4 位不产生借
位,则 AC 被置位;反之,AC 被清除。
如果算术或逻辑运算的结果为零,则 Z 被置位;反之,Z 被清除。
如果运算结果向最高位进位,但最高位并不产生进位输出,则 OV 被
置位;反之,OV 被清除。
系统上电或执行“CLR WDT”指令,PDF 被清除;执行“HALT”指
令,PDF 被置位。
系统上电、执行“CLR WDT”或“HALT”指令,TO 被清除;WDT
定时溢出,TO 被置位。
未用,读出为“0”
STATUS(0AH)寄存器
除了 PDF 和 TO 标志外,状态寄存器的其它位都可以用指令改变。任何对状态寄存器的写操作都不会
改变 PDF 和 TO 的值。对状态寄存器的操作可能会导致与预期不一样的结果。TO 和 PDF 标志位只受看门
狗溢出、系统上电或清除看门狗定时器和执行“HALT” 指令影响。标志位 Z、OV、AC 和 C 反映最近一
次操作的状态。
在进入中断程序或子程序调用时,状态寄存器不会被自动压入堆栈。如果状态寄存器的内容是重要的,
而且子程序会影响状态寄存器的内容,那么程序员必须事先将 STATUS 的值保存好。
Rev. 1.30
13
2014-06-10
HT46RU67/HT46CU67
中断— INTC0,INTC1,MFIC
HT46xU67 提供 2 个外部中断、1 个 AD 中断、2 个内部定时/计数器中断、1 个 UART 中断,SIO 中断
和 1 个多功能中断。多功能中断包含 1 个定时/计数器 2 中断、RTC 中断和时基中断。中断控制寄存器
0(INTC0:0BH)、中断控制寄存器 1(INTC1:1EH)和多功能中断控制寄存器(MFIC:2FH)包含了中断控
制位和中断请求标志,中断控制位用来设置中断允许/禁止。
只要有中断子程序被服务,其余的中断全部都被自动禁止(通过清除 EMI 位),这种做法的目的在于防
止中断嵌套。这时如果有其它中断发生,只有中断请求标志会被记录下来。如果在中断服务程序中有另一
个中断需要响应,程序员可以置位 EMI、INTC0、INTC1 和 MFIC 所对应的位,以便进行中断嵌套。如果
堆栈已满,则中断并不会被响应,一直到堆栈指针 SP 发生递减后才会响应。如果需要中断立即得到响应,
应避免堆栈饱和。
位
符号
功
能
0
EMI
总中断控制位(1=允许;0=禁止)
外部中断 0 控制位(1=允许;0=禁止)或 AD
1
EEI0 或 EADI
转换控制位(1=允许;0=禁止)
外部中断 1 控制位(1=允许;0=禁止)或串行
2
EEI1 或 ESII
通讯中断控制位(1=允许;0=禁止)
3
ET0I
定时/计数器 0 中断控制位(1=允许;0=禁止)
外部中断 0 请求标志(1=有;0=无)或 AD 转
4
EIF0 或 ADF
换请求标志(1=有;0=无)
外部中断 1 请求标志(1=有;0=无)或串行通
5
EIF1 或 SIF
讯请求标志(1=有;0=无)
6
T0F
定时/计数器 0 中断请求标志(1=有;0=无)
只作内部测试用
7
—
使用时必须写入‘0’;否则会发生不可预知
的错误
INTC0(0BH)寄存器
位
0
符号
ET1I
1
EURI 或 ESII
2
3,7
4
EMFI
—
T1F
5
URF 或 SIF
6
MFF
功
能
定时/计数器 1 中断控制位(1=允许;0=禁止)
UART 中断控制位(1=允许;0=禁止)或串行通
讯中断控制位(1=允许;0=禁止)
多功能中断控制位(1=允许;0=禁止)
未用,读出为“0”
定时/计数器 1 中断请求标志(1=有;0=无)
UART 中断请求标志(1=有;0=无)或串行数据
发送/接收完成中断请求标志
多功能中断请求标志(1=有;0=无)
INTC1(1EH)寄存器
位
0
1
2
3,7
4
5
6
符号
ET2I
ETBI
ERTI
—
T2F
TBF
RTF
功
能
定时/计数器 2 中断控制位(1=允许;0=禁止)
时基中断控制位(1=允许;0=禁止)
RTC 中断控制位(1=允许;0=禁止)
未用,读出为“0”
定时/计数器 2 中断请求标志(1=有;0=无)
时基中断请求标志(1=有;0=无)
RTC 中断请求标志(1=有;0=无)
MFIC(2FH)寄存器
Rev. 1.30
14
2014-06-10
HT46RU67/HT46CU67
所有的中断都具有唤醒能力。当有中断被服务,系统会将程序计数器的内容压入堆栈,然后再跳转至
中断服务程序的入口。但只有程序计数器的内容被压入堆栈,如果其它寄存器或状态寄存器的内容会被中
断程序改变,从而会破坏主程序的控制流程的话,程序员应该事先将这些数据保存起来。
外部中断是由 INT0 或 INT1 引脚电平变化触发,可由配置选项设置为上升沿触发、下降沿触发或两者
皆可触发,其中断请求标志位(EIF0/EIF1;INTC0 的第 4、5 位)会被置位。如果中断允许,且堆栈未满,
当发生外部中断时,
会产生地址 004H/008H 的子程序调用;
而中断请求标志 EIF0/EIF1 和总中断控制位 EMI
会被清除,以禁止其它中断响应。
程序存储器 004H 地址为 INT0 外部中断程序入口,与 AD 转换中断共享,具体可通过配置选项进行设
置。如果设置为 AD 转换器中断, INT0 引脚任何边沿触发将不会产生外部中断,这种情况下,当 AD 转换
完成,如果 EMI 和 EADI 使能,且堆栈未满,会产生地址 004H 的子程序调用。
内部定时/计数器 0 中断是由定时/计数器 0 溢出触发的,其中断请求标志(T0F;INTC0 的第 6 位)会被
置位。如果中断允许,且堆栈未满,当发生定时/计数器 0 中断时,会产生地址 00CH 的子程序调用;而中
断请求标志 T0F 和总中断控制位 EMI 会被清除,以禁止其它中断响应。
内部定时/计数器 1 和定时/计数器 2 的运作方式与之相同,定时/计数器 1 的中断请求标志位是
T1F(INTC1 的第 4 位),而它的子程序调用的地址是 010H 单元。定时/计数器 2 的中断请求标志位是 MFF
(INTC1 的第 6 位)和 T2F(MFIC 的第 4 位),它的子程序调用的地址是 018H 单元。中断请求标志 T1F、
MFF 和总中断控制位 EMI 会被清除,以禁止其它中断响应。中断请求标志 T2F 不会自动清除,必须由程
序员用软件清除。
UART 中断是由发送数据寄存器为空(TXIF)
、接收到有效数据(RXIF)
、发送缓存器空闲(TIDLE)、
过速出错(OERR)或匹配地址侦测触发,其中断请求标志(URF;INTC1 的第 5 位)会被置位。如果中
断允许,且堆栈未满,当 TXIF、RXIF、TIDLE 或 OERR 被置位或侦测到匹配地址,会产生地址 014H 的
子程序调用;而中断请求标志 URF 和总中断控制位 EMI 会被清除,以禁止其它中断响应。
多功能中断是由定时/计数器 2 溢出(T2F;MFIC 的第 4 位)
、RTC 溢出(RTF;MFIC 的第 6 位)或
时基溢出(TBF;MFIC 的第 5 位)触发,其中断请求标志位(MFF;INTC1 的第 6 位)会被置位。如果
中断允许,且堆栈未满,当 MFF 被置位,会产生地址 018H 的子程序调用;而中断请求标志 MFF 和总中
断控制位 EMI 会被清除,以禁止其它中断响应。T2F、TBF 和 RTF 表明发生了定时/计数器 2、时基或 RTC
中断,中断标志 T2F、TBF 和 RTF 不会自动清除,必须由程序员用软件清除。
串行通讯中断是由串行接口的 8 位数据接收或发送完成触发,其中断请求标志(SIF;INTC0 和 INTC1
的第 5 位)会被置位。如果中断允许,且堆栈未满,当 SIF 被置位,会产生地址 008H 或 014H 的子程序调
用;而中断请求标志 SIF 和总中断控制位 EMI 会被清除,以禁止其它中断响应。
在执行中断子程序期间,其它的中断请求会被保存,直到执行 RETI 指令或 EMI 和相关中断控制位被
置位(当然,此时堆栈未满)。如果要从中断子程序返回,只要执行 RET 或 RETI 指令即可。其中,RETI
指令会自动置位 EMI,以允许中断服务,而 RET 则不会。
中断发生在两个连续的 T2 脉冲的上升沿之间,如果中断响应允许,那么在后一个 T2 脉冲之间,该
中断会被响应。如果同时发生中断请求,其优先级如下表,这些中断都可以通过清除 EMI 位来进行屏蔽。
中断源
通过 配置选项设置 外部中
断 0 或 AD 转换器中断
外部中断 1 或串行通讯中断
定时/计数器 0 溢出中断
定时/计数器 1 溢出中断
UART 中断或串行通讯中断
多功能中断
(定时/计数器 2、
RTC 或时基溢出)
优先
级
中断向量
1
004H
2
3
4
5
008H
00CH
010H
014H
6
018H
EMI、EEI0、EEI1、EE0I、EE1I、EURI、EADI,ESII 和 EMFI 用来控制中断的允许/禁止。这些控制
位可以用来禁止请求的中断被执行。一旦中断请求标志(EIF0、EIF1、T0F、T1F、URF、ADF、ESII,MFF)
被置位,会一直保存在 INTC0 和 INTC1 寄存器中,直到中断被响应或用软件指令清除为止。
Rev. 1.30
15
2014-06-10
HT46RU67/HT46CU67
定时/计数器 2 溢出中断标志(T2F;MFIC 的第 4 位)
、RTC 溢出中断标志(RTF;MFIC 的第 6 位)
和时基溢出中断标志(TBF;MFIC 的第 5 位)用来表明发生的相应的中断。这些位不会自动清除,必须
由程序员用软件清除。此外 MFIC(2FH)寄存器还包括定时/计数器 2 中断允许位(ET2I)、时基中断允许
位(ETBI)和 RTC 中断允许位(ERTI)
。
建议不要在中断服务程序中使用“CALL”指令来调用子程序。因为中断随时都可能发生,而且需要
立刻给予响应。如果只剩下一层堆栈,而中断不能被很好地控制,原先的控制序列很可能因为在中断子程
序中执行“CALL”指令而使堆栈溢出,从而发生混乱。
振荡电路
HT46xU67 有三种振荡方式可以作为系统时钟。外部 RC 振荡、外部晶体振荡和外部 32768Hz 晶体振
荡,可以通过配置选项设定。当选择外部 RC 振荡或外部晶体振荡时,HALT 模式会停止系统运行,忽视
任何外部信号以降低功耗。如果选择 32768Hz 振荡作为系统振荡,在 HALT 模式下系统振荡保持运行,但
指令会停止运行。由于 32768Hz 的晶体振荡还可以用来定时,即使进入 HALT 模式,这些内部计数器(RTC、
时基、WDT)还会继续工作。
VDD
OSC3
OSC1
OSC4
OSC2
32768Hz Crystal/RTC Oscillator
Crystal Oscillator
470pF
OSC1
fSYS/4
OSC2
RC Oscillator
系统振荡器
注:32768Hz 晶体振荡器使能条件:用作 WDT 时钟或内部系统时钟源
当使用 32768Hz 的晶振振荡器时,外部的电阻电容不是必须的。但在 RTC 精确频率的应用场合,电阻
电容可以用来补偿晶振制造带来的误差。
如果选择三种振荡方式中的外部 RC 振荡作为系统振荡器,则需要在 OSC1 和 VSS 之间连接一个阻值
约在 24k到 1M之间的电阻,OSC2 输出为系统时钟 4 分频,用来同步外部逻辑,可通过 OSC2 引脚添
加上拉电阻的方式监测系统时钟。虽然外部 RC 振荡方式成本最为经济,但振荡频率会因 VDD、温度和芯
片本身的制程而改变,因此不适合用来做计时严格或需要精确振荡器频率的场合。
如果选用晶体振荡方式,在 OSC1 和 OSC2 之间需要连接一个晶体,用来提供晶体振荡器所需的反馈
和相移,除此之外,不再需要其它外部元件。另外,在 OSC1 和 OSC2 之间也可使用谐振器来取代晶体振
荡器,但是在 OSC1 和 OSC2 需要多连接两个接地电容。
另外一个专为实时时钟或 RTC 设计的振荡电路,提供 32.768kHz 的固定频率。如果使用 RTC 振荡,
那么只要在 OSC3 与 OSC4 之间接一个 32.768kHz 的晶体。
RTC 振荡电路可以通过“QOSC”(RTCC 的第 4 位)设置快速起振。为了降低系统功耗,建议在系统上
电时开启快速振荡,并在 2 秒钟后关闭。
WDT 振荡是一个独立的内置振荡电路,不需要外接器件。当系统进入省电模式,系统振荡会停止,
但 WDT 振荡会继续作用,系统工作在 5V 条件下其振荡周期一般为 65μs。为了降低系统功耗,WDT 振荡
器可以由配置选项设置为关闭。
Rev. 1.30
16
2014-06-10
HT46RU67/HT46CU67
看门狗定时器 — WDT
WDT 的时钟源可由配置选项设置为内部 WDT 振荡、指令时钟(系统时钟 4 分频)或 RTC 振荡。WDT
主要用来防止程序运行故障和程序跳入未知地址而导致不可预测的结果。WDT 可由配置选项设置为禁止,
如果在禁止状态,所有与 WDT 有关的指令操作都是没有作用的。
System Clock/4
RTC
32768Hz
OSC
WDT
OSC
ROM
Code
Option
fS
Divider
fS/28
WDT
Prescaler
Mask Option
12kHz
CK T
R
WDT Clear
CK T
R
Time-out Reset
fS/215~fS/216
fS/214~fS/215
fS/213~fS/214
fS/212~fS/213
看门狗定时器
WDT 时钟源经过 212~215 的分频,具体数值由配置选项进行设置。对于 WDT 内部振荡器,最小的溢
出周期大约是 300ms~600ms。但溢出时间会因为温度、VDD 以及芯片参数的变化而变化。如果使用 WDT
预分频器,则可以得到更长的溢出周期。当 WDT 的溢出时间选为 215 分频,最大的溢出时间周期为 215~216,
可达到 2.1s~4.3s 溢出时间。如果内部 WDT 振荡器禁止,WDT 时钟源可以设置为指令时钟,看门狗仍以
同样的方式工作,但在 HALT 状态时,WDT 会停止计数而失去保护功能;此时只能靠外部逻辑复位来重
新启动系统。如果系统运用在强干扰的环境中,建议选用内部 WDT 振荡器,因为 HALT 模式会使系统时
钟停止,看门狗也就失去了保护的功能。
在正常运行时,WDT 溢出会使系统复位并置位 TO 标志;但在 HALT 模式下,WDT 溢出只产生“热
复位”
,只有程序计数器 PC 和堆栈指针 SP 被复位。清除 WDT 的值有三种方法,外部复位(低电平输入到
、
“CLR WDT2”
RES 引脚)、清除看门狗指令或 HALT 指令。清除看门狗指令有“CLR WDT”和“CLR WDT1”
二组指令。这两组指令中,只能选择其中一组,由配置选项决定。如果选择“CLR WDT”,那么只要执行
“CLR WDT” 指令就会清除 WDT。如果选择“CLR WDT1”和“CLR WDT2”
,那么二条指令要交替使
用才会清除 WDT,否则,WDT 会由于溢出而使系统复位。
多功能定时器
系统为 WDT、时基和 RTC 提供了具有不同溢出周期的多功能定时器。多功能定时器由一个 8 级分频
器和一个 7 位预分频器组成,其时钟源可以是 WDT OSC、RTC OSC 或指令时钟(系统时钟四分频)
。多
功能定时器还为 LCD 驱动电路提供可选择的频率信号(范围从 fs/22~fs/28),并为蜂鸣器输出电路提供可
选择的频率信号(范围从 fs/22~fs/29)
,频率由配置选项决定。为了正确地显示,建议选择 4kHZ 左右的信
号作为 LCD 驱动信号。
时基 — Time Base
时基指的是用一个周期性的溢出来产生一个有规律的内部中断。溢出周期的范围为 212/ fs~215/ fs,由
配置选项确定。当时基发生溢出,其中断请求标志(TBF;MFIC 的第 5 位、MFF;INTC1 的第 6 位)会被置
位,如果中断允许,且堆栈未满,那么就会产生一个地址 018H 的子程序调用。时基溢出信号可作为定时/
计数器 1 时钟源,以便得到更长的时间溢出周期。
fs
Prescaler
Divider
ROM Code Option
ROM
Code
Option
LCD Driver (fS/22~fS/28)
Buzzer (fS/22~fS/29)
Time Base Interrupt
fS/212~fS/215
时基
Rev. 1.30
17
2014-06-10
HT46RU67/HT46CU67
实时时钟 — RTC
实时时钟 RTC 的工作情况和时基一样,用来提供一个有规律的内部中断。它的溢出周期范围为 fs/28~
fs/215,具体数值可通过软件编程实现。写数据到 RTCC 寄存器中 RT2、RT1、RT0 位将产生多种溢出周期。
当 RTC 发生溢出,其中断请求标志(RTF;MFIC 的第 6 位、MFF;INTC1 的第 6 位)被置位,如果中断允
许,且堆栈未满,那么就会产生一个地址 018H 的子程序调用。RTC 溢出可作为定时/计数器 0 时钟源,以
便得出更长的时间溢出周期。
fS
Divider
RT2
RT1
RT0
Prescaler
28/fS~215/fS
RTC Interrupt
8 to 1 MUX
实时时钟
RT2
RT1
RT0
RTC 实时时钟分频系数
0
0
0
28*
0
0
1
29*
0
1
0
210*
0
1
1
211*
1
0
0
212
1
0
1
213
1
1
0
214
1
1
1
215
注:
“*”不建议使用
暂停模式 — HALT
暂停模式由执行 HALT 指令来实现,暂停模式时系统状态如下:
· 系统振荡器停振,但 WDT 振荡器会继续振荡(如果选择 WDT 振荡或 RTC 振荡)。
· RAM 和寄存器内容保持不变。
· WDT 被清除并重新开始计数(如果 WDT 时钟来源选择 WDT 振荡或 RTC 振荡)。
· 所有输入/输出口都保持其原有状态。
· PDF 标志置位,TO 标志清除。
· LCD 驱动器仍然运行(如果选择 WDT OSC 或 RTC OSC)
。
外部复位、中断、PA 口下降沿信号或看门狗定时器溢出可使系统离开暂停模式。其中,外部复位会
使系统初始化,WDT 溢出则会产生“热复位”。通过检测 TO 和 PDF 标志,即可了解系统复位的原因。PDF
标志位可由系统上电或执行“CLR WDT”指令清除,由 HALT 指令置位。WDT 溢出置位 TO 标志位,同
时产生唤醒,但只有程序计数器 PC 和堆栈指针 SP 被复位,其它都保持其原有的状态。
PA 口唤醒和中断唤醒可作为正常运行的继续。PA 口的每一位都可以由配置选项设置为唤醒功能。如
果是由输入/输出口唤醒,程序会从下一条指令开始运行。如果是由中断唤醒,可能会发生两种情况,如果
中断禁止或中断允许但堆栈已满,程序将会从下一条指令开始运行;如果中断允许且堆栈未满,则会产生
一般的中断响应。
如果在进入 HALT 模式之前,中断请求标志位已被置“1”
,则中断唤醒功能被禁止。
当发生唤醒,系统需要额外花费 1024tSYS(系统时钟周期)的时间,才能重新正常运行,也就是说,唤
醒之后会插入一个等待周期。如果唤醒是由中断产生的话,则实际中断子程序的执行会延迟一个以上的周
期。如果唤醒导致下一条指令执行,那么在等待周期执行完成之后,会立即执行该指令。
为减小功耗,在进入暂停模式之前,应小心处理所有的输入/输出口状态。
Rev. 1.30
18
2014-06-10
HT46RU67/HT46CU67
复位
系统有多种方法产生复位状态:
正常运行时 RES 复位
上电复位
暂停模式时 RES 复位
正常运行时看门狗定时器溢出复位
暂停模式时看门狗定时器溢出复位
暂停模式时的看门狗定时器溢出与其它系统复位状况不同,因为
看门狗定时器溢出会执行“热复位”
,只有程序计数器 PC 和堆栈指
针 SP 被复位,而系统其它部分都保持原有状态。在其它复位状态下,
某些寄存器不会改变。在初始复位时,大部分寄存器会复位成初始的
状态。通过检测 PDF 和 TO 标志,即可判断出各种不同的复位原因。
·
·
·
·
·
TO
0
u
0
1
1
PDF
0
u
1
u
1
复位电路
注:一般应用场合可使用基本复位电
路,而在强干扰环境中,建议使用高
抗干扰复位电路
复位原因
上电时 RES 复位
正常运行时 RES 复位
暂停模式时 RES 唤醒
正常运行时 WDT 溢出
暂停模式时 WDT 溢出
注:
“u”表示不变
为了保证系统振荡器起振并稳定运行,系统上电复位或由暂停状态唤醒时,系统启动定时器(SST)提
供了一个额外的延迟时间,共 1024 个系统时钟周期。
系统复位时各功能单元的状态如下所示:
PC
中断
预分频器、分频器
WDT、RTC、时基
定时/计数器
输入/输出口
堆栈指针 SP
000H
禁止
清除
清除,在主系统复位后,WDT 开始计数
关闭
输入模式
指向堆栈顶部
HALT
Warm Reset
WDT
WDT
Time-out
Reset
External
RES
VDD
RES
tSST
OSC1
SST
10-bit Ripple
Counter
Cold
Reset
SST Time-out
Power-on Detection
Chip Reset
复位时序图
Rev. 1.30
复位配置
19
2014-06-10
HT46RU67/HT46CU67
有关寄存器状态概述:
寄存器
MP0
MP1
BP
ACC
PC
TBLP
TBLH
RTCC
STATUS
INTC0
TMR0H
TMR0L
TMR0C
TMR1H
TMR1L
TMR1C
PA
PAC
PB
PBC
PC
PCC
PD
PDC
PWM0
PWM1
PWM2
PWM3
INTC1
TBHP
SBCR
SBDR
ADRL
ADRH
ADCR
ACSR
TMR2
TMR2C
MFIC
USR
UCR1
UCR2
TXR/RXR
BRG
复位
(上电复位)
xxxx xxxx
xxxx xxxx
0000 0000
xxxx xxxx
0000H
xxxx xxxx
xxxx xxxx
--00 0111
--00 xxxx
0000 0000
xxxx xxxx
xxxx xxxx
00-0 1000
xxxx xxxx
xxxx xxxx
0000 1--1111 1111
1111 1111
1111 1111
1111 1111
1111 1111
1111 1111
1111 1111
1111 1111
xxxx xxxx
xxxx xxxx
xxxx xxxx
xxxx xxxx
-000 -000
xxxx xxxx
0110 0000
xxxx xxxx
xxxx ---xxxx xxxx
0100 0000
1--- --00
xxxx xxxx
00-0 1000
-000 -000
0000 1011
0000 00x0
0000 0000
xxxx xxxx
xxxx xxxx
WDT 溢出
(正常运行)
uuuu uuuu
uuuu uuuu
0000 0000
uuuu uuuu
0000H
uuuu uuuu
uuuu uuuu
--00 0111
--lu uuuu
0000 0000
xxxx xxxx
xxxx xxxx
00-0 1000
xxxx xxxx
xxxx xxxx
0000 1--1111 1111
1111 1111
1111 1111
1111 1111
1111 1111
1111 1111
1111 1111
1111 1111
xxxx xxxx
xxxx xxxx
xxxx xxxx
xxxx xxxx
-000 -000
uuuu uuuu
0110 0000
xxxx xxxx
xxxx ---xxxx xxxx
0100 0000
1--- --00
xxxx xxxx
00-0 1000
-000 -000
0000 1011
0000 00x0
0000 0000
xxxx xxxx
xxxx xxxx
RES 端复位
(正常运行)
uuuu uuuu
uuuu uuuu
0000 0000
uuuu uuuu
0000H
uuuu uuuu
uuuu uuuu
--00 0111
--uu uuuu
0000 0000
xxxx xxxx
xxxx xxxx
00-0 1000
xxxx xxxx
xxxx xxxx
0000 1--1111 1111
1111 1111
1111 1111
1111 1111
1111 1111
1111 1111
1111 1111
1111 1111
xxxx xxxx
xxxx xxxx
xxxx xxxx
xxxx xxxx
-000 -000
uuuu uuuu
0110 0000
xxxx xxxx
xxxx ---xxxx xxxx
0100 0000
1--- --00
xxxx xxxx
00-0 1000
-000 -000
0000 1011
0000 00x0
0000 0000
xxxx xxxx
xxxx xxxx
RES 端复位
(暂停模式)
uuuu uuuu
uuuu uuuu
0000 0000
uuuu uuuu
0000H
uuuu uuuu
uuuu uuuu
--00 0111
--01 uuuu
0000 0000
xxxx xxxx
xxxx xxxx
00-0 1000
xxxx xxxx
xxxx xxxx
0000 1--1111 1111
1111 1111
1111 1111
1111 1111
1111 1111
1111 1111
1111 1111
1111 1111
xxxx xxxx
xxxx xxxx
xxxx xxxx
xxxx xxxx
-000 -000
uuuu uuuu
0110 0000
xxxx xxxx
xxxx ---xxxx xxxx
0100 0000
---- --00
xxxx xxxx
00-0 1000
-000 -000
0000 1011
0000 00x0
0000 0000
xxxx xxxx
xxxx xxxx
WDT 溢出
(暂停模式)*
uuuu uuuu
uuuu uuuu
00u0 00uu
uuuu uuuu
0000H
uuuu uuuu
uuuu uuuu
--uu uuuu
--11 uuuu
uuuu uuuu
uuuu uuuu
uuuu uuuu
uu-u uuuu
uuuu uuuu
uuuu uuuu
uuuu u--uuuu uuuu
uuuu uuuu
uuuu uuuu
uuuu uuuu
uuuu uuuu
uuuu uuuu
uuuu uuuu
uuuu uuuu
uuuu uuuu
uuuu uuuu
uuuu uuuu
uuuu uuuu
-uuu -uuu
uuuu uuuu
uuuu uuuu
uuuu uuuu
uuuu ---uuuu uuuu
uuuu uuuu
u--- --uu
uuuu uuuu
uu-u uuuu
-uuu -uuu
uuuu uuuu
uuuu uuuu
uuuu uuuu
uuuu uuuu
uuuu uuuu
注: “*”表示“热复位
“u”表示不变化
“x”表示不确定
Rev. 1.30
20
2014-06-10
HT46RU67/HT46CU67
定时/计数器
HT46xU67 提供三个定时/计数器。TMR0 是一个 16 位可编程的向上计数器,其时钟源可以是外部信
号源或内部时钟(fSYS)。TMR1 是一个 16 位可编程向上计数器,其时钟源可以是外部信号源或内部时钟
(fSYS/4 或 32768Hz 振荡,由配置选项设置)。TMR2 是一个 8 位可编程向上计数器,其时钟源可以是外部信
号源或内部时钟(fSYS)。外部信号源可以用来计数外部事件、测量时间间隔、测量脉冲宽度或产生一个精确
的时基信号。
定时/计数器 0
定时/计数器 1
定时/计数器 2
PFD 信号源选择
总共有 8 个与定时/计数器 0;TMR0H(0CH)、TMR0L(0DH)、TMR0C(0EH)和定时/计数器 1;TMR1H
(0FH)、TMR1L(10H)、TMR1C(11H)和定时/计数器 2;TMR2(2DH)和 TMR2C(2EH)相关的寄存器。写入
TMR0L(TMR1L)只能将数据写到低字节缓冲器(8 位)
,而写入 TMR0H(TMR1H)会把指定数据和低字节缓
冲器的数据写到 TMR0H(TMR1H)和 TMR0L(TMR1L)寄存器。
定时 /计数 器 0/1 预置寄存器的内容只有在写 入 TMR0H(TMR1H)寄存器时才会被改变。读 取
Rev. 1.30
21
2014-06-10
HT46RU67/HT46CU67
TMR0H(TMR1H)寄存器会把内容分别送至目标单元和低字节缓冲器。读 TMR0L(TMR1L)寄存器将读取低
字节缓冲器的内容。写 TMR2 会将初始值装载到定时/计数器 2 预置寄存器,而读 TMR2 则会取得定时/计
数器 2 的内容。TMR0C(TMR1C、TMR2C)寄存器是定时/计数器 0(1、2)的控制寄存器,被用来定义定
时/计数器的工作模式,使能或禁止以及有效的边沿触发。
T0M0、T0M1(TMR0C),T1M0、T1M1(TMR1C)和 T2M0、T2M1(TMR2C)用来定义定时/计数器的
工作模式。外部事件计数模式是用来记录外部事件,其时钟源为外部 TMR0/TMR1/TMR2 引脚输入。定时
器模式是一个常用模式,其时钟源为内部时钟。脉宽测量模式可以测量 TMR0/TMR1/TMR2 引脚高/低电平
的脉冲宽度,其时钟源为内部时钟。
无论是定时模式还是外部事件计数模式,一旦开始计数,定时/计数器 0/1 会从寄存器当前值向上计到
0FFFFH;定时/计数器 2 会从寄存器当前值向上计到 0FFH。一旦发生溢出,定时/计数器会从预置寄存器
中重新加载初值,并开始计数;同时置位中断请求标志(T0F,INTC0 的第 6 位;T1F,INTC1 的第 4 位;
T2F,MFIC 的第 4 位;MFF,INTC1 的第 6 位)。
在脉宽测量模式,工作模式选择位全部设置为逻辑高。当 TMR0/TMR1/TMR2 引脚有一个上升沿信号
(如果 T0E/T1E/T2E 是逻辑低,则为下降沿信号),定时/计数器就会开始计数,直到 TMR0/TMR1/TMR2 脚
电平恢复,同时 T0ON/T1ON/T2ON 被复位。
即使有效沿触发再次发生,测量的结果也会保存在寄存器中。换句话说,一次只能测量一个脉冲宽度。
重新置位 T0ON/T1ON/T2ON 后,可以继续测量。注意,在该模式下,定时/计数器开始计数是根据沿触发
而不是电平触发。当计数器溢出时,定时/计数器会从预置寄存器中重新加载初值,并置位中断请求标志,
这与其它两种模式一样。
要启动计数器,只要置位 T0ON/T1ON/T2ON(TMR0C/TMR1C/TMR2C 的第 4 位)。在脉宽测量模式下,
T0ON/T1ON/T2ON 在测量结束后会被自动清除;但在另外两种模式中,T0ON/T1ON/T2ON 只能由指令来
清除。定时/计数器 0/1/2 的溢出信号是系统唤醒源的一种。当配置选项设置 PA3 为 PFD 或可编程分频输
出时,也可使用定时/计数器 0/1。PA3 通过配置选项设置为一个 PFD 输出(PFD0 或 PFD1)
。不管什么模
式,只要写 0 到 ET0I、ET1I 或 ET2I 即可禁止定时/计数器中断服务。当使用 PFD 功能时,执行“SET [PA].3”
将使能 PFD 输出,执行“CLR [PA].3”则禁止 PFD 输出。
位
符号
0
1
2
T0PSC0
T0PSC1
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
定义定时/计数器 TMR0 的触发方式
在事件计数模式(T0M1,T0M0)=(0,1)
:
1:在下降沿计数
0:在上升沿计数
在脉冲宽度测量模式(T0M1,T0M0)=(1,1)
:
1:在上升沿开始计数,下降沿停止计数
0:在下降沿开始计数,上升沿停止计数
打开/关闭定时/计数器(0=关闭,1=打开)
未用,读出为“0”
定义工作模式(T0M1,T0M0):
01=事件计数模式(外部时钟)
10=定时模式(内部时钟)
11=脉冲宽度测量模式
00 =未用
TMR0C(0EH)寄存器
位
Rev. 1.30
符号
功能
22
2014-06-10
HT46RU67/HT46CU67
0~2
—
3
T1E
4
5
T1ON
T1S
6
7
T1M0
T1M1
未用,读出为“0”
定义定时/计数器 TMR1 的触发方式
在事件计数模式(T1M1,T1M0)=(0,1)
:
1:在下降沿计数
0:在上升沿计数
在脉冲宽度测量模式(T1M1,T1M0)=(1,1)
:
1:在上升沿开始计数,下降沿停止计数
0:在下降沿开始计数,上升沿停止计数
打开/关闭定时/计数器(1=打开,0=关闭)
定义 TMR1 时钟源(0=fSYS/4,1=32768Hz)
定义工作模式(T1M1,T1M0):
01=外部事件计数模式(外部时钟)
10=定时模式(内部时钟)
11=脉冲宽度测量模式
00 =未用
TMR1C(11H)寄存器
位
符号
0
1
2
T2PSC0
T2PSC1
T2PSC2
3
T2E
4
5
T2ON
—
6
7
T2M0
T2M1
功能
定义预分频器级数,T2PSC2,T2PSC1,T2PSC0=
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
定义定时/计数器 TMR2 的触发方式
在事件计数模式(T2M1,T2M0)=(0,1)
:
1:在下降沿计数
0:在上升沿计数
在脉冲宽度测量模式(T2M1,T2M0)=(1,1)
:
1:在上升沿开始计数,下降沿停止计数
0:在下降沿开始计数,上升沿停止计数
打开/关闭定时/计数器(0=关闭,1=打开)
未用,读出为“0”
定义工作模式(T2M1,T2M0):
01=事件计数模式(外部时钟)
10=定时模式(内部时钟)
11=脉冲宽度测量模式
00 =未用
TMR2C(2EH)寄存器
当定时/计数器停止计数时,写数据到定时/计数器的预置寄存器,同时会将该数据写入到定时/计数器。
但如果定时/计数器在运行,数据只能写入到预置寄存器,直到发生溢出时才会将数据从预置寄存器加载到
定时/计数器寄存器。
定时/计数器初始化完成后,可通过定时/计数控制寄存器中使能位打开/关闭定时/计数器。注意的是,
将使能为设置为逻辑高,打开定时/计数器之前必须设置好定时/计数器的工作模式。使用单个指令设置,
同时打开定时/计数器可能导致错误的运行。
读取定时/计数器时,计数时钟将停止以避免发生错误;程序员必须注意时钟停止导致的计数错误。
由于系统上电时 TMR0/TMR1/TMR2 寄存器处于未知状态,在打开定时/计数器进行相关操作时,建
议将数据先写入 TMR0/TMR1/TMR2 寄存器中。由于定时/计数器的这种结构,程序中无论何时使用定时/
计数器功能,程序员都必须首先禁止,然后使能的方式避免定时/计数器发生不可预测的结果,从而保证定
时/计数器工作正常。
TMR0C/TMR2C 的第 0~2 位用来定义内部时钟预分频级数。
定时/计数器的溢出信号可作为 PFD 输出。
定时/计数器预分频级数同样适用于 PWM 计数器。
Rev. 1.30
23
2014-06-10
HT46RU67/HT46CU67
输入/输出口
HT46xU67 有 32 位双向输入/输出口,记为 PA、PB、PC 和 PD,其分别对应 RAM 地址[12H] ,[14H] ,
[16H]和[18H] ,所有端口都可以进行输入/输出操作。输入时,端口没有锁存功能,输入信号必须在 MOV
A,[m](m=12H、14H、16H 或 18H)指令的 T2 上升沿到来前准备好;输出时,端口有锁存功能,端口上的
数据会保持不变直到执行下一个写入操作。
每个输入/输出口都有一个控制寄存器(PAC,PBC,PCC,PDC),用来控制输入/输出状态。利用控制
寄存器,可对 CMOS 输出、带或不带上拉电阻的斯密特触发输入通过软件动态地进行改变。作为输入时,
对应的控制寄存器应设置为“1”
。输入信号来源也取决于控制寄存器,如果控制寄存器的值为“1”
,那么
读取的是引脚状态;如控制寄存器的值为“0”,则读取的是内部锁存器的值。后者可能会在‘读-修改-写’
指令中发生。
作为输出时,只能采用 CMOS 输出。控制寄存器对应 RAM 地址 13H、15H、17H 和 19H。
输入/输出口
PC6/TX 输入/输出口
Rev. 1.30
24
2014-06-10
HT46RU67/HT46CU67
PC7/RX 输入/输出口
系统复位之后,这些输入/输出口默认是高电平或浮空状态(由上拉电阻选项决定)。每一个输入/输出锁
存位都能用“SET [m].i”或“CLR [m].i”指令置位或清除。
有些指令会先输入数据,然后进行输出操作。例如:“SET [m].i”,“CLR [m].i”,“CPL [m]”,
“CPLA[m]”这些指令会先将整个端口状态读入 CPU 中,接着执行所定义的位操作运算,然后将结果写入
锁存器或累加器中。
PA 的每一个口都具有唤醒系统的能力。
所有的输入/输出口都有上拉电阻选项。一旦选择了上拉电阻选项,输入/输出口就加了上拉电阻。如
果不选择上拉电阻,必须注意在输入模式下,若输入/输出口会产生浮空状态。
PA0、PA1、PA3、PD4、PD5、PD6 和 PD7 分别与 BZ、 BZ 、PFD、 INT0 、 INT1 、TMR0 和 TMR1
共用引脚。PC0、PC6 和 PC7 分别与 TMR2、TX 和 RX 共用引脚。
PA0、PA1 与 BZ、 BZ 共用引脚,如果选择 BZ/ BZ 功能,则 PA0/PA1 在输出模式时的输出信号将是由
内部多功能定时器产生的蜂鸣器信号,而在输入模式始终保持其原来的功能。一旦选择 BZ/ BZ 功能,蜂鸣
器的输出信号只受 PA0 数据寄存器控制。PA0/PA1 的输入/输出功能如下所示:
PAC 寄存器 PAC 寄存器 PA 寄存器
PA 寄存器
输出
PAC0
PAC1
PA0
PA1
0
0
0
0
1
1
1
注:
0
0
1
1
0
0
1
1
0
1
0
1
0
X
X
X
X
X
X
X
X
PA0=BZ,PA1= BZ
PA0=0,PA1=0
PA0=BZ,PA1=input
PA0=0,PA1=input
PA0=input,PA1= BZ
PA0=input,PA1=0
PA0=input,PA1=input
“X”任意值
“D”代表数据“0”或“1”
PA3 与 PFD 共用引脚,如果选择 PFD 功能,则 PA3 在输出模式时的输出信号将是由定时/计数器的溢
出信号产生的 PFD 信号,而在输入模式始终保持其原来的功能。一旦选择 PFD 功能,PFD 的输出信号只
受 PA3 数据寄存器控制。向 PA3 数据寄存器写入“1”,则输出 PFD 信号;向 PA3 数据寄存器写入“0”,
则 PA3 输出为“0”
。 PA3 的输入/输出功能如下所示:
I/O 模式
I/P(正常)
O/P(正常)
I/P(PFD)
PA3
逻辑输入
逻辑输出
逻辑输入
O/P(PFD)
PFD
(打开定时/计数器)
注:PFD 的输出频率是定时/计数器溢出频率的 2 分频。
Rev. 1.30
25
2014-06-10
HT46RU67/HT46CU67
PB 口可以用作 A/D 转换输入。PWM 功能与 PD0/PD1/PD2/PD3 共用引脚。如果使能 PWM 功能,
PD0/PD1/PD2/PD3 工作在输出模式,则 PD0/PD1/PD2/PD3 引脚为 PWM0/PWM1/PWM2/PWM3 信号输出。
向 PD0~PD3 数据寄存器写入“1”
,则输出 PWM 信号;而向 PD0~PD3 数据寄存器写入“0”
,则 PD0~PD3
输出保持为“0”
。PD0~PD3 的输入/输出功能如下所示:
I/O 模式
I/P(正常)
O/P(正常)
I/P(PWM)
O/P(PWM)
PD0~PD3
PWM0~PWM3
逻辑输入
逻辑输出
逻辑输入
建议用软件将未使用和没有引出的输入/输出口设置为输出模式,以防止这些端口在输入浮空时增加系
统的功耗。
PFD 的控制信号和输出频率如下所示:
定时/计数器
关闭
关闭
打开
打开
注:
Rev. 1.30
定时/计数
器预置值
X
X
N
N
PA3 数据
寄存器
0
1
0
1
PA3 引脚
状态
0
U
0
PFD
PFD 输出频率
X
X
X
fTMR/[2×(M-N)]
“X”表示未定义
“U”表示未知
对于 PFD0 或 PFD1,
“M”等于“65536”
“N”定时/计数器初始值
“fTMR”定时/计数器输入频率
26
2014-06-10
HT46RU67/HT46CU67
PWM
HT46xU67 有 3 个或 4 个 PWM 输出通道,取决于所选用的封装片。通过改变 PWM 寄存器值,使脉
宽调制器输出频率固定但占空比变化的信号,可用于马达控制。
每个 PWM 通道都有一个寄存器相对应。对于有 3 个通道的寄存器为 PWM0、PWM1 和 PWM2;对于
有 4 个通道的寄存器为 PWM0、PWM1、PWM2 和 PWM3。8 位数据寄存器表示输出波形中每个调制周期
的占空比。为了提高 PWM 调制频率,每一个调制周期被调制 2 个或 4 个独立的调制子区段,即 7+1 模式
或 6+2 模式,所需工作模式通过配置选项进行设置。此设置适应于所有的 PWM 输出。注意的是,当使用
PWM 时,只要将所需的值写入对应寄存器内,单片机的内部硬件会自动地将波形细分为子调制周期。
对所有单片机而言,PWM 时钟源就是系统时钟 fSYS。
封装
100-pin
通道
4
PWM 模式
6+2 或 7+1
输出引脚
PD0/PD1/PD2/PD3
PWM 寄存器
PWM0/PWM1/PWM2/PWM3
PWM 功能表
将原始调制周期分成 2 个或 4 个子周期的方法,使产生更高的 PWM 频率成为可能,这样可以提供更
广泛的应用。只要产生的 PWM 脉冲周期小于负载的时间常数,PWM 输出就比较合适,这是因为长时间
常数负载将会平均 PWM 输出的脉冲。使用者必须理解 PWM 频率与 PWM 调制频率的不同之处。当 PWM
时钟为系统时钟 fSYS,而 PWM 值为 8 位时,整个 PWM 周期的频率为 fSYS/256。然而工作在 7+1 模式时,
PWM 调制频率将会是 fSYS/128;工作在 6+1 模式时,PWM 调制频率将会是 fSYS/64。
PWM 调制频率
fSYS/64(6+2 模式)
fSYS/128(7+1 模式)
PWM 周期频率
PWM 占空比
fSYS/256
[PWM]/256

6+2 PWM 模式
通过一个 8 位的 PWM 寄存器控制,每个完整的 PWM 周期由 256 个时钟周期组成。在 6+2 PWM 模
式中,每个 PWM 周期又被分成 4 个独立的子周期,称为调制周期 0~调制周期 3,在表格中以“i”表示。
4 个子周期各包含 64 个时钟周期。在这个模式下,得到以 4 为因数增加的调制频率。8 位的 PWM 寄存器
被分成两个部分,这个寄存器的值表明整个 PWM 波形的占空比。第一部分包括第 2 位~第 7 位,表示 DC
值,第二部分为第 0 位~第 1 位,表示 AC 值。在 6+2 PWM 模式中,4 个调制子周期的占空比,分别如下
表所示。
参数
AC(0~3)
调制周期 i
(i=0~3)
i<AC
i≥AC
占空比
DC + 1
64
DC
64
6+2 模式调制周期值
6+2 模式 PWM 寄存器
Rev. 1.30
27
2014-06-10
HT46RU67/HT46CU67
下图表示 6+2 模式下 PWM 输出的波形。请特别注意单个的 PWM 周期是如何分成 4 个独立的调制周期以
及 AC 值与 PWM 值的关系。
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 0
Modulation cycle 1
Modulation cycle 2
Modulation cycle 3
Modulation cycle 0
PWM cycle : 256/fSYS
6+2 PWM 模式

7+1 PWM 模式
通过一个 8 位的 PWM 寄存器控制,每个完整的 PWM 周期由 256 个时钟周期组成。在 7+1 PWM 模
式中,每个 PWM 周期又被分成 2 个独立的子周期,称为调制周期 0~调制周期 1,在表格中以“i”表示。
2 个子周期各包含 128 个时钟周期。在这个模式下,得到以 2 为因数增加的调制频率。8 位的 PWM 寄存器
被分成两个部分,这个寄存器的值表明整个 PWM 波形的占空比。第一部分包括第 1 位~第 7 位,表示 DC
值,第二部分为第 0 位,表示 AC 值。在 7+1 PWM 模式中,2 个调制子周期的占空比,分别如下表所示。
参数
AC(0~1)
调制周期 i
(i=0~1)
i<AC
i≥AC
占空比
DC + 1
128
DC
128
7+1 模式调制周期值
7+1 模式 PWM 寄存器
下图表示 7+1 模式下 PWM 输出的波形。请特别注意单个的 PWM 周期是如何分成 2 个独立的调制周
期以及 AC 值与 PWM 值的关系。
Rev. 1.30
28
2014-06-10
HT46RU67/HT46CU67
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 模式

PWM 输出控制
对于所有单片机而言,PWM 与 PD 口共用引脚。如果选择 PWM 功能,而不是普通输入/输出功能,
配置选项必须正确设置。I/O 端口控制寄存器 PDC 相应位必须写 0,以确保所对应 PWM 输出引脚为输出
状态。在完成这两个初始化步骤,以及将所要求的 PWM 值写入相应寄存器之后,将 PD 数据寄存器中相
应位写 1,则 PWM 数据就会出现在引脚上;将 PD 数据寄存器中相应位写 0,则会禁止 PWM 输出功能并
强制输出低电平。也就是说,PD 数据寄存器作为 PWM 功能的开/关控制来使用。需要注意的是,即使配
置选项设置 PWM 功能,但 PDC 控制寄存器中相应的位又写入 1,使其成为输入引脚,则此引脚仍是作为
带上拉电阻的正常输入端使用。
下面的范例程序表明如何设置和控制 PWM 输出,应用时必须在配置选项中设置 PWM 功能。
clr PDC.0
; 设置 PD0 为输出
clr PDC.1
; 设置 PD1 为输出
clr PDC.2
; 设置 PD2 为输出
clr PDC.3
; 设置 PD3 为输出
set pd.0
; PD.0=1,允许 PD0/PWM0 通道输出 PWM 波形
mov a,64h
; PWM0=100D=64H
mov pwm0,a
set pd.1
; PD.1=1,允许 PD1/PWM1 通道输出 PWM 波形
mov a,65h
; PWM1=101D=65H
mov pwm1,a
set pd.2
; PD.2=1,允许 PD2/PWM2 通道输出 PWM 波形
mov a,66h
; PWM2=102D=66H
mov pwm2,a
set pd.3
; PD.3=1,允许 PD3/PWM3 通道输出 PWM 波形
mov a,67h
; PWM3=103D=67H
mov pwm3,a
clr pd.0
; 禁止 PWM0 输出 — PD.0 输出保持为低
clr pd.1
; 禁止 PWM1 输出 — PD.1 输出保持为低
clr pd.2
; 禁止 PWM2 输出 — PD.2 输出保持为低
clr pd.3
; 禁止 PWM3 输出 — PD.3 输出保持为低
Rev. 1.30
29
2014-06-10
HT46RU67/HT46CU67
A/D 转换
HT46xU67 有 8 个通道、12 位分辨率的 A/D 转换器,其参考电压为 VDD。有 4 个寄存器与 A/D 转换
器有关,为 ADRL(24H)、ADRH(25H)、ADCR(26H)和 ACSR(27H)。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 转换结束后,EOCB 位会被清除。ACSR 是 A/D 时钟控制寄
存器,用来选择 A/D 的时钟来源。
位
符号
0
1
ADCS0
ADCS1
2~6
7
—
TEST
功能
选择 A/D 转换时钟源
00=系统时钟/2
01=系统时钟/8
10=系统时钟/32
11=未定义
未用,读出为“0”
只作为内部测试用
ACSR(27H)寄存器
位
符号
0
1
2
ACS0
ACS1
ACS2
3
4
5
PCR0
PCR1
PCR2
6
EOCB
7
START
功能
ACS2,ACS1,ACS0:定义模拟输入通道
0,0,0:AN0
0,0,1:AN1
0,1,0:AN2
0,1,1:AN3
1,0,0:AN4
1,0,1:AN5
1,1,0:AN6
1,1,1:AN7
定义 PB 口的设置。如果 PCR0、PCR1 和 PCR2 都
为 0,则 A/D 转换电路被关闭以减小功耗
A/D 转换结束标志(0=A/D 转换结束)
每次 BIT3-5 状态的改变都必须通过 START 信号来
初始化 A/D 转换器,否则 EOCB 可能会处于不确定
状态,具体可参照“A/D 转换初始化注意事项”
A/D 转换启始控制位(0→1→0=开始;0→1=A/D
转换复位并且置 EOCB 为“1”
)
ADCR(26H)寄存器
A/D 转换控制寄存器用来控制 A/D 转换。ADCR 的第 2~0 位用来选择模拟输入通道,总共有 8 个通道
可以选择。ADCR 的第 5~3 位用来设置 PB 的工作模式,PB 可以作为模拟输入通道,或是输入/输出口,
由这 3 位来决定。一旦 PB 选择为模拟输入,则其输入/输出功能和上拉电阻将失效,而 A/D 转换电路会被
使能。EOCB 位(ADCR 的第 6 位)是 A/D 转换结束标志位,用来监测 A/D 转换是否结束。ADCR 的 START
位用来开启 A/D 转换,给 START 位一个上升沿信号和一个下降沿信号可以开始 A/D 转换。为了确保 A/D
转换顺利完成,START 位应保持为“0”
,直到 A/D 转换完成,EOCB 位变为“0”
。
ACSR 寄存器的第 7 位是内部测试用的,用户程序中不能作其他功能使用。ACSR 的第 1 位和第 0 位
用来选择 A/D 转换的时钟来源。
当 START 标志由“0”置为“1”时,EOCB 为“1”
。
Rev. 1.30
30
2014-06-10
HT46RU67/HT46CU67
A/D 转换初始化注意事项:
每次改变模拟通道选择位后都要注意初始化 A/D 转换器,否则 EOCB 可能处于不确定状态。在模拟
通道选择位改变的 10 个指令周期内将 START 置 1 后清 0 来初始化 A/D 转换器。注意的是,如果模拟通道
选择位都清 0,可以不初始化 A/D。
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 口设置
寄存器
ADRL
ADRH
Bit7
D3
D11
Bit6
D2
D10
Bit5
D1
D9
Bit4
D0
D8
Bit3
—
D7
Bit2
—
D6
Bit1
—
D5
Bit0
—
D4
注:D0~D11 是 A/D 转换结果的低位~高位
ADRL(24H) ADRH(25H)寄存器
A/D 转换时序图
Rev. 1.30
31
2014-06-10
HT46RU67/HT46CU67
下面范例说明如何设置和实现 A/D 转换,采用循环扫描 ADCR 寄存器中 EOCB 位的方法来判断 A/D 转换
是否完成;
例:通过循环扫描 EOCB 位判断 A/D 转换是否完成。
mov
a,00000001B
mov
ACSR,a
; 设置ACSR寄存器,选择fSYS/8做为A/D转换时钟
mov
a,00100000B
; 在ADCR寄存器中设置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
EOCB
; 扫描ADCR寄存器的EOCB位判断A/D转换是否完成
jmp
polling_EOC
; 继续扫描
mov
a,ADRH
; 从ADRH寄存器读取A/D转换结果的高位字节
mov
adrh_buffer,a
; 将结果放入用户定义的寄存器中
mov
a,ADRL
; 从ADRL寄存器读取A/D转换结果的低位字节
mov
adrl_buffer,a
; 将结果放入用户定义的寄存器中
:
:
jmp
start_conversion ; 开始下一次 A/D 转换
Rev. 1.30
32
2014-06-10
HT46RU67/HT46CU67
LCD 显示存储器
HT46xU67 内嵌数据存储区用来提供 LCD 显示。
这个数据存储区位于数据存储器区块 1 的 40H 到 6EH
单元。存储器指针 BP(RAM 中 04H 地址)是通用存储器和 LCD 显示存储器间切换的开关。当 BP 被置“1”,
任何数据写入 40H~6EH 将会影响 LCD 的显示。当 BP 被设置为“0”
,
“2”或“3”
,任何数据写入 40H~6EH
将映射到通用数据存储器。LCD 显示存储区能被读出和写入,但是只能通过 MP1 间接寻址模式来进行。
当数据被写入显示数据区,这些数据自动地被 LCD 驱动器读取来产生相应的 LCD 驱动信号。把“1”或
“0”写入显示存储器的相应位,可以控制显示或不显示。下图为显示存储器和 LCD 显示模块之间的映射
关系。
显示存储器
LCD 驱动输出
HT46xU67 LCD 驱动器的输出数目可以由配置选项确定为 47×2、47×3 或 46×4,对应为 1/2、1/3
或 1/4 占空比。LCD 驱动器偏压产生方式可以分为“R”型或“C”型。如果选为“R”型,不需要外接
电容器;如果为“C”型,需要在 C1 和 C2 之间外接一个电容器。LCD 驱动器偏置电压值可以由配置选
项设置为 1/2 bias 或 1/3 bias。如果选择为 1/2 bias,则引脚 V2 到地需要接一个电容;如果选择为 1/3 bias,
则需要两个电容到地分别地接到引脚 V1、V2。相关可以参考应用范例的图表。
LCD Segment 作为逻辑输出
SEG0~SEG23 可配置选择为逻辑输出。一旦将 LCD Segment 设置为逻辑输出,LCD 存储区的 bit0 将
控制相关 Segment 口的输出状况。
SEG0~SEG7 和 SEG8~SEG15 的逻辑输出是通过配置选项按字节设置的,SEG16~SEG23 的逻辑输
出是按位设置的。
LCD 偏压方式
R 型偏压
C 型偏压
1/2bias
1/3bias
1/2bias
1/3bias
LCD 偏压类型
VMAX
Rev. 1.30
如果 VDD>VLCD,则 VMAX 接到
VDD,反之 VMAX 接到 VLCD
33
如果 VDD>
3
VLCD,则 VMAX
2
接到 VDD,反之 VMAX 接到 V1
2014-06-10
HT46RU67/HT46CU67
LCD 驱动输出(1/3duty,1/2bias,R/C 偏压)
Rev. 1.30
34
2014-06-10
HT46RU67/HT46CU67
LCD 驱动输出
Rev. 1.30
35
2014-06-10
HT46RU67/HT46CU67
低电压复位/检测功能
HT46xU67 具有低电压检测(LVD)和低电压复位(LVR)功能,可由配置选项设置为打开或关闭。如果
选择 LVD 功能,用户可以通过 RTCC.3 位(1/0)来打开/关闭低电压检测,通过 RTCC.5 位来读取低电压
检测的状态(0/1)
;否则,低电压检测无效。
RTCC 寄存器的定义如下表:
位
标号
0~2
RT0~RT2
3
LVDC*
4
QOSC
5
LVDO
6,7
—
功能
8 选 1 多路器控制输入为实时时钟预分频器输出
低电压检测打开/关闭(1/0)
32768Hz 晶振快速起振
0/1:快速/慢速
低电压检测输出(1/0)
1:检测到低电压,只读
未定义,读出为 0
注:
“*”一旦使能 LVD 功能,基准发生器也必须使能;否则基准发生器由 LVR 配置选项设置。
LVR 和 LVD 配置选项和 LVDC 之间关系如图所示。
RTCC(09H)寄存器
LVR 与外部复位信号有相同的功能,都会使芯片复位。在 HALT 状态下,LVR 和 LVD 功能无效。
LVR 功能说明如下:
·
低电压(0.9V~VLVR)的状态必须持续 1ms 以上。如果低电压的状态没有持续 1ms 以上,那么 LVR 会
忽视它而不去执行复位功能。
·
LVR 通过与外部 RES 信号的“或”的功能来执行系统复位。
VDD 与 VLVR 之间的关系如下所示:
VDD
VDD
5.5V
5.5V
VOPR
5.5V
LVR Detect Voltage
VLVR
VLVR
0.9V
3.0V
2.2V
0V
Reset Signal
0.9V
Reset
Normal Operation
*1
注:VOPR 是在系统时钟为 4MHz
时,使得芯片正常运行的电压值
Reset
*2
低电压复位
注:*1:为了保证系统振荡器起振并稳定运行,系统正常运行之前,SST 将提供额外的 1024 个系统时钟周期的延迟。
*2:由于低电压状态必须保持 1ms 以上,因此进入复位模式就有 1ms 的延迟。
Rev. 1.30
36
2014-06-10
HT46RU67/HT46CU67
异步串行口 — UART
HT46xU67 具有一个全双工的异步串行通信口,可以很方便地与其它具有串行口的芯片通讯。UART
具有许多功能特性,每次可以发送和接收一帧 8 位或 9 位的串行数据,可以检测数据传输过速或数据帧格
式错误等。UART 功能占用一个内部中断向量,当接收到数据或数据发送结束,触发 UART 中断。
·
UART 特性
UART 具有以下功能:
·全双工异步传输
·8 位或 9 位字符长度
·奇校验、偶校验或无校验选择
·1 位或 2 位停止位
·8 位预分频的波特率发生器
·奇偶校验、帧格式、噪声和过速检测
·支持地址匹配中断(最后一位字符=1)
·发送和接收允许独立使用
·两字节深度 FIFO 接收缓冲器
·发送和接收中断
·下列条件可触发中断
— 发送寄存器为空
— 发送寄存器空闲
— 接收寄存器已满
— 接收寄存器过速
— 地址匹配
· UART 外部引脚
UART 是通过两个外部引脚 TX 和 RX 与外部串行接口通讯。TX 引脚是 UART 的发送引脚。当 UCR2
寄存器的 TXEN 位清零,UART 发送功能被禁止时,TX 引脚可作为普通 IO 口使用。RX 引脚是 UART 的
接收引脚。同样的,当 UCR2 寄存器的 RXEN 位清零,UART 接收功能被禁止时,RX 引脚可作为普通 IO
口使用。若 UARTEN、TXEN 和 RXEN 置为 1,这些 IO 口将自动转换成相应 TX 输出和 RX 输入,并且
RX 脚的上拉电阻将无效。
· 数据发送图解
下图显示了 UART 数据传输的整体结构。需要发送的数据首先写入 TXR 寄存器,在波特率发生器的
控制下,发送移位寄存器中数据以低位在前的方式按位移到 TX 引脚。TXR 寄存器被映射到单片机的数据
存储器中,而发送移位寄存器没有实际地址,所以无法对发送移位寄存器直接操作。
UART 数据发送接收图
数据在波特率发生器的控制下,以低位在前方式从外部引脚 RX 进入接收移位寄存器。当数据移位寄
存器已满,数据从接收移位寄存器移入可被用户程序操作的 RXR 寄存器中。RXR 寄存器被映射到单片机
数据存储器中,而接收移位寄存器没有实际地址,所以无法对接收移位寄存器直接操作。
Rev. 1.30
37
2014-06-10
HT46RU67/HT46CU67
需要注意的是,虽然上述中数据的发送和接收分别由独立发送寄存器 TXR 和接收寄存器 RXR 实现,
但是数据寄存器中仅存在一个 TXR/RXR 共享寄存器,TXR/RXR 寄存器用来完成数据的发送和接收。
·
UART 状态和控制寄存器
有 5 个寄存器与 UART 功能相关。寄存器 USR、UCR1 和 UCR2 控制 UART 的所有操作,而寄存器
BRG 控制波特率,TXR/RXR 数据寄存器用来实现发送和接收的数据。
· USR 寄存器
寄存器 USR 是 UART 的状态寄存器,可以通过程序读取 USR 寄存器确定 UART 当前的状态。USR
寄存器
中所有位为只读。
USR 寄存器中每位详细解释如下:
· TXIF
TXIF 是发送数据寄存器为空标志。若 TXIF=0,表明数据还没有加载到发送移位寄存器中;若
TXIF=1,表明数据已从 TXR 寄存器加载到发送移位寄存器中。TXIF 标志位可通过读取 USR 寄存器
后再写 TXR 寄存器的方式清 0。当 TXEN 被置位,由于发送缓冲器未满,TXIF 也会被置位。
· TIDLE
TIDLE 是数据发送完成标志位。若只读标志位 TIDLE=0,表明数据正在传输。当 TXIF=1 且没有
数据发送或者暂停字被发送时,TIDLE 被置位。当标志位 TIDLE=1 时,TX 引脚空闲。TIDLE 标志位
可通过读取 USR 寄存器后再写 TXR 寄存器的方式清 0。当数据和暂停字排队准备发送时,此标志位
不变。
· RXIF
RXIF 是接收寄存器状态标志。若只读标志位 RXIF=0,表明 RXR 寄存器为空;当 RXIF=1 时,
表明 RXR 寄存器接收到新数据。当数据从移位寄存器加载到 RXR 寄存器中,如果 UCR2 寄存器中
RIE=1,则会触发中断。当检测到接收数据中一个或多个错误,相应标志位 NF、FERR 或 PERR 会在
同一周期内置位。读取 USR 寄存器后再读 RXR 寄存器,如果 RXR 寄存器中没有新的数据,那么将
清除 RXIF 标志。
· RIDLE
Rev. 1.30
38
2014-06-10
HT46RU67/HT46CU67
RIDLE 是接收状态标志。若只读标志位 RIDLE=0,表明正在接收数据;若 RIDLE=1,表明接收
器空闲。在接收到停止位和下一个数据的起始位之间,RIDLE 被置位,表明 UART 空闲。
· OERR
OERR 是过速错误标志,表明接收缓冲器是否溢出。若 OERR=0,表明没有数据溢出;若 OERR=1,
表明发生了过速错误,将禁止数据的接收。读取 USR 寄存器后再读 RXR 寄存器将清除此标志位。
· FERR
FERR 是帧错误标志位。若 FERR=0,表明没有帧错误发生;若 FERR=1,表明当前的数据发生了
帧错误。读取 USR 寄存器后再读 RXR 寄存器将清除此标志位。
· NF
NF 是噪声干扰标志。若 NF=0,表明没有受到噪声干扰;若 NF=1,表明 UART 接收数据时受到
噪声干扰。NF 与 RXIF 在同周期内置位,但不会与过速标志位同时置位。读取 USR 寄存器后再读 RXR
寄存器将清除此标志位。
· PERR
PERR 是奇偶校验出错标志。若 PERR=0,表明奇偶校验正确;若 PERR=1,表明接收到的数据发
生奇偶校验出错。只有使能了奇偶校验此位才有效。读取 USR 寄存器后再读 RXR 寄存器将清除此位。
· UCR1 寄存器
UCR1 和 UCR2 是 UART 的两个控制寄存器,用来定义各种 UART 功能,比如 UART 的开关控制、
奇偶校验控制和传输数据的长度等等。
详细解释如下:
· TX8
此位只有在传输数据为 9 位的格式中有效,用 TX8 存储发送数据的第 9 位。BNO 标志位是用来
控制传输位数是 8 位还是 9 位。
· RX8
此位只有在传输数据为 9 位的格式中有效,用 RX8 存储接收数据的第 9 位。BNO 标志位是用来
控制传输位数是 8 位还是 9 位。
· TXBRK
TXBRK 是暂停字发送控制位。若 TXBRK=0,表明没有暂停字要发送,TX 引脚正常操作;若
TXBRK=1,将会发送暂停字,发送器将发送逻辑 0。若 TXBRK=1,当缓冲器中数据发送完毕后,发
送器将至少保持 13 位宽的低电平直至 TXBRK 复位。
Rev. 1.30
39
2014-06-10
HT46RU67/HT46CU67
·
STOPS
此位用来设置停止位的长度为一位或两位。若 STOPS=1,表明有两位停止位;STOPS=0,表明只
有一位停止位。
· PRT
奇偶校验选择位。若 PRT=1,表明选择奇校验;若 PRT=0,表明选择偶校验。
· PREN
此位为奇偶校验使能位。若 PREN=1,表明使能奇偶校验;若 PREN=0,表明除能奇偶校验。
· BNO
BNO 用来定义数据长度格式,
选择为 8 位或 9 位数据。
若 BNO=1,表明传输数据为 9 位;
若 BNO=0,
表明传输数据为 8 位。若选择了 9 位数据长度格式,RX8 和 TX8 将分别存储接收和发送数据的第 9
位。
· UARTEN
此位为 UART 的使能位。若 UARTEN=0,UART 功能将除能,RX 和 TX 引脚可用作普通的输入
输出口;若 UARTEN=1,UART 功能将使能,TX 和 RX 引脚将分别由 TXEN 和 RXEN 控制。UART
除能将清除缓冲器,所有缓冲器中的数据将被忽略,另外波特率计数器、错误和状态标志位被复位,
TXEN、RXEN、TXBRK、RXIF、OERR、FERR 和 NF 将清零,而 TIDLE、TXIF 和 RIDLE 将置位,
UCR1、UCR2 和 BRG 寄存器中的其它位保持不变。若 UART 工作时 UARTEN 清零,所有发送和接
收将停止,模块也将复位成上述状态。当 UART 再次使能时,它将在上次配置下重新工作。
· UCR2 寄存器
UCR2 是 UART 的另一个控制寄存器,它的主要功能是使能或除能发送和接收以及允许 UART 的各种
中断。它也可用来控制波特率,使能接收唤醒和地址侦测。
详细解释如下:
· TEIE
此位为发送寄存器为空时中断的使能或除能位。若 TEIE=1,当发送寄存器为空,TXIF 置位时,
UART 的中断请求标志置位;若 TEIE=0,UART 中断请求标志不受 TXIF 的影响。
· TIIE
此位为发送器空闲时中断的使能或除能位。若 TIIE=1,当发送寄存器空闲,TIDLE 置位时,UART
的中断请求标志置位;若 TIIE=0,UART 中断请求标志不受 TIDLE 的影响。
Rev. 1.30
40
2014-06-10
HT46RU67/HT46CU67
· RIE
此位为接收中断使能或除能位。若 RIE=1,当 OERR 或 RXIF 置位时,UART 的中断请求标志置
位;若 RIE=0,UART 中断请求标志不受 OERR 和 RXIF 影响。
·
WAKE
此位为接收唤醒功能的使能和除能位。若 WAKE=1 且在暂停模式下,RX 引脚的下降沿触发将唤
醒单片机。若 WAKE=0 且在暂停模式下,RX 引脚的任何边沿触发都不能唤醒单片机。
· ADDEN
此位为地址检测使能和除能位。若 ADDEN=1,地址检测使能,此时数据的第 8 位(BON=0)或
第 9 位(BON=1)为高,那么接到的是地址而非数据。若相应的中断使能且接收到的数据最高位为 1,
那么中断请求标志将会被置位,若最高位为 0,那么将不会产生中断且收到的数据也会被忽略。
· BRGH
此位为波特率发生器高低速选择位,它和 BRG 寄存器一起控制 UART 的波特率。BRGH=1,为
高速模式;BRGH=0,为低速模式。
· RXEN
此位为接收使能位。若 RXEN=0,数据接收将被除能,接收器立刻停止工作。另外缓冲器将被复
位,此时 RX 引脚可作普通的输入输出端口使用。若 RXEN=1 且 UARTEN=1,则接收将被使能,RX
引脚将由 UART 来控制。在数据传输时清除 RXEN 将中止数据接收且复位接收器,此时 RX 引脚可作
为普通输入输出端口使用。
· TXEN
此位为发送使能位。若 TXEN=0,数据发送将被除能,发送器立刻停止工作。另外缓冲器将被复
位,此时 TX 引脚可作为普通的输入输出端口使用。若 TXEN=1 且 UARTEN=1,则发送将被使能,
TX 引脚将由 UART 来控制。在数据传输时清除 TXEN 将中止数据发送且复位发送器,此时 TX 引脚
可作为普通的输入输出口使用。
· 波特率发生器
UART 自身具有一个波特率发生器,通过它可以设定数据传输速率。波特率是由一个独立的内部 8 位
计数器控制,两个因素决定其周期。首先是 BRG 寄存器的设定值,其次是 UCR2 寄存器中 BRGH 位的值。
BRGH 是决定波特率发生器处于高速模式还是低速模式,从而决定计算公式的选用。BRG 寄存器的值 N
可根据下表中的公式计算,N 的范围是 0 到 255。
0
1
UCR2 的 BRGH
位
波特率
f SYS
64( N + 1)
f SYS
16( N + 1)
为得到相应的波特率,首先需要设置 BRGH 来选择相应的计算公式从而算出 BRG 的值。注意的是,
由于 BRG 的值不连续,所以实际波特率和理论值之间存在一定偏差。下面举例怎样计算 BRG 寄存器中的
值 N 和误差。
Rev. 1.30
41
2014-06-10
HT46RU67/HT46CU67
·
波特率和误差的计算
系统选用 4M 晶振且 BRGH=0,若期望的波特率为 4800,计算它的 BRG 寄存器的值 N,实际波
特率和误差。
f SYS
64( N + 1)
根据上表,波特率 BR =
转换后的公式
N=
f SYS
−1
BR * 64
代入参数
N=
4000000
− 1 =12.0208
4800 * 64
取最接近的值,将十进制数 12 写入 BRG 寄存器,实际波特率或计算值如下
BR =
4000000
= 4808
64(12 + 1)
4808 − 4800
= 0.16%
4800
误差
下面表格给出 BRGH 取不同值时的实际波特率和误差。
BRGH=0
波特率
fSYS=4MHz
fSYS=3.579545MHz
K/BPS
BRG
Kbaud
BRG
Kbaud
Error(%)
Error(%)
0.3
207
0.300
0.00
185
0.300
0.00
1.2
51
1.202
0.16
46
1.19
-0.83
2.4
25
2.404
0.16
22
2.432
1.32
4.8
12
4.808
0.16
11
4.661
-2.9
9.6
6
8.929
-6.99
5
9.321
-2.9
19.2
2
20.83
8.51
2
18.643
-2.9
38.4
1
1
57.6
0
62.5
8.51
0
55.93
-2.9
115.2
BRGH=0 时的波特率和误差
波特率
K/BPS
0.3
1.2
2.4
4.8
9.6
19.2
38.4
57.6
115.2
250
BRGH=1
f SYS =4MHz
BRG
207
103
51
25
12
6
3
1
0
Kbaud
1.202
2.404
4.808
9.615
19.231
35.714
62.5
125
250
f SYS =3.579545MHz
Error(%)
0.16
0.16
0.16
0.16
0.16
-6.99
8.51
8.51
0
BRG
185
92
46
22
11
5
3
1
-
Kbaud
1.203
2.406
4.76
9.727
18.643
37.286
55.930
111.86
-
Error(%)
0.23
0.23
-0.83
1.32
-2.9
-2.9
-2.9
-2.9
-
BRGH=1 时的波特率和误差
Rev. 1.30
42
2014-06-10
HT46RU67/HT46CU67
· UART 设置与控制
·
绪论
UART 采用标准的不归零码传输数据,这种方法通常被称为 NRZ 法。它由 1 位起始位,8 位或
9 位数据位和 1 位或者 2 位停止位组成。奇偶校验是由硬件自动完成的,可设置成奇校验、偶校验
和无校验三种格式。最常用的数据传输格式由 8 位数据位,无校验和 1 位停止位组成,用 8,N,1
表示,它是系统上电的默认格式。数据位数、停止位数和奇偶校验由 UCR1 寄存器的 BNO、PRT、
PREN 和 STOPS 设定。用于数据发送和接收的波特率由一个内部的 8 位定时器产生,数据发送和接
收时低位在前。尽管 UART 发送器和接收器在功能上相互独立,但它们使用相同的数据传输格式和
波特率,在任何情况下,停止位是必须的。
·
UART 的使能和除能
UART 功能是由 UCR1 寄存器的 UARTEN 位来使能和除能的。它的发送引脚 TX 和接收引脚
RX 分别与输入输出引脚复用,UARTEN 的一个基本功能就是控制这两个引脚。若 UARTEN、TXEN
和 RXEN 都为高,则 TX 和 RX 分别为 UART 的发送端口和接收端口,而不能作为普通的输入输出
端口使用。若没有数据发送,TX 引脚默认状态为高电平。
UARTEN 清零将除能 TX 和 RX,使其作为普通的输入输出端口使用。当 UART 被除能,缓冲
器将复位为空状态,所有缓冲器中的数据将被忽略,另外错误和状态标志位被复位,TXEN、RXEN、
TXBRK、RXIF、OERR、FERR,PERR 和 NF 清零,而 TIDLE、TXIF 和 RIDLE 置位,UCR1、UCR2
和 BRG 寄存器中的其它位保持不变。若 UART 工作时 UARTEN 清零,所有发送和接收都将停止,
模块也将复位成上述状态。当 UART 再次使能时,它将在上次配置下重新工作。
·
数据位、停止位数以及奇偶校验的选择
数据传输格式由数据长度、是否校验、校验类型,地址位以及停止位数组成,它们都由 UCR1
寄存器的各个位控制。
BNO 决定数传输数据是 8 位还是 9 位;
PRT 决定校验类型为奇校验或偶校验;
PRTEN 决定是否选择奇偶校验;而 STOPS 决定选用 1 位或 2 位停止位。下表列出了各种数据传输
格式。地址位用来确定此帧是否为地址。停止位为 1 位或两位与数据长度无关。
起始位
数据位
地址位
校验位
停止位
8 位数据格式
1
8
0
0
1
1
7
0
1
1
1
1
7
0
1
1
9 位数据格式
1
1
1
9
8
8
0
0
11
0
1
0
1
1
1
发送和接收数据格式
下图是传输 8 位和 9 位数据格式时的波形。
Rev. 1.30
43
2014-06-10
HT46RU67/HT46CU67
· UART 发送器
UCR1 寄存器的 BNO 位是控制传输数据的长度。当 BNO=1 时,其长度为 9 位,第 9 位为最高位,存
储在 UCR1 寄存器的 TX8 中。发送器的核心是发送移位寄存器 TSR,它的数据由发送寄存器 TXR 提供,
应用程序只须将发送数据写入 TXR 寄存器。上一组数据的停止位发出前,TSR 寄存器禁止写入。一旦停
止位发出,TSR 寄存器仍可从 TXR 寄存器加载新的发送数据。注意的是,TSR 寄存器不像其它寄存器一
样映射在数据存储器中,所以应用程序不能对其进行直接的读写操作。当 TXEN=1 时,发送使能,但若
TXR 寄存器没有数据或者波特率没有设置,发送器将不会工作。写 TXR 寄存器后再设置 TXEN 为高也会
启动发送。当发送器开始工作,若 TSR 寄存器为空,数据写入 TXR 寄存器将会直接加载到 TSR 寄存器中。
若数据发送过程中,TXEN 清零,发送器将立刻停止工作并且复位,此时 TX 引脚可作为普通的输入输出
口使用。
·
发送数据
当 UART 发送数据时,数据从移位寄存器中以低位在前的方式移到 TX 引脚。在发送模式中,TXR
寄存器在内部总线和发送移位寄存器间形成一个缓冲。注意的是,选择 9 位数据传输格式,最高位
MSB 数据存储在 UCR1 寄存器的 TX8 中。
发送器初始化可由如下步骤完成:
--正确设置 BNO、PRT、PREN 和 STOPS 位以确定数据长度、校验类型和停止位长度。
--设置 BRG 寄存器,选择期望的波特率。
--设置 TXEN 为高,使 TX 引脚作为 UART 的发送端而非普通的输入输出端口。
--读取 USR 寄存器,然后将待发数据写入 TXR 寄存器,注意此步骤会清除 TXIF 标志位。
--如果要发送多个数据只需重复上一步骤。
注意的是,当 TXIF=0 时,数据将禁止写入 TXR 寄存器。软件中可以通过以下步骤来清除 TXIF:
1. 读取 USR 寄存器
2. 写 TXR 寄存器
只读标志位 TXIF 由 UART 硬件置位。若 TXIF=1,表明 TXR 寄存器为空,其它数据可以写入而
不会覆盖以前的数据。若 TEIE=1,TXIF 标志位会产生中断。
在数据传输时,写 TXR 寄存器会将待发数据暂存在 TXR 寄存器中,当前数据发送完毕后,待发
数据被加载到发送移位寄存器中。当发送器空闲时,写 TXR 寄存器会将数据直接加载到 TSR 寄存器
中,数据传输立刻开始且 TXIF 置位。当一帧数据发送完毕(停止位或暂停字发出后)
,TIDLE 将被置
位。
可以通过以下步骤来清除 TIDLE:
1. 读取 USR 寄存器
2. 写 TXR 寄存器
清除 TXIF 和 TIDLE 软件执行次序相同。
·
发送暂停字
若 TXBRK=1,下一帧将会发送暂停字。暂停字包含一个起始位、13*N(N=1,2 等)位逻辑 0
以及停止位组成。如果要发送暂停字,首先在应用程序中将 TXBRK 置为高,而将 TXBRK 清 0 将产
生停止位,传输暂停字时不会产生中断。需要注意的是,暂停字至少 13 位宽。若 TXBRK 持续为高,
那么发送器会一直发送暂停字;当应用程序中将 TXBRK 清 0,发送器将传输最后一帧暂停字再加上
一位或者两位停止位。暂停字后的自动高电平保证了下一帧数据起始位的检测。
Rev. 1.30
44
2014-06-10
HT46RU67/HT46CU67
· UART 接收器
·
绪论
UART 接收器支持 8 位或 9 位数据的接收。若 BNO=1,数据长度为 9 位,而最高位 MSB 数据存
放在 UCR1 寄存器的 RX8 中。接收器的核心是串行移位寄存器 RSR。RX 引脚上的数据送入数据恢复
模块,它在 16 倍波特率的频率下工作,而串行移位器在正常波特率下工作。当在 RX 引脚上检测到停
止位,如果接收寄存器为空,数据将从 RSR 寄存器加载到 RXR 寄存器。RX 引脚上的每一位数据会
被采样三次以判断其逻辑状态。注意的是,RSR 不像其它寄存器一样映射在数据存储器,所以应用程
序中不能直接对其进行读写操作。
·
接收数据
当 UART 接收数据时,数据以低位在前方是连续地从 RX 引脚输入。RXR 寄存器在内部总线和接
收移位寄存器间形成一个缓冲。RXR 寄存器是一个两字节深度的 FIFO 缓冲器,它能保存两帧数据的
同时接收第三帧数据,注意的是,应用程序必须保证在接收完第三帧前读取 RXR 寄存器,否则将忽略
第三帧数据并且发生过速错误。
接收器的初始化可由如下步骤完成:
--正确设置 BNO、PRT、PREN 和 STOPS 位以确定数据长度、校验类型和停止位长度。
--设置 BRG 寄存器,选择期望的波特率。
--设置 TXEN 为高,使 RX 引脚作为 UART 的接收端而非普通的输入输出端口。
此时接收器被使能并等待起始位。
数据接收时将会发生如下事件:
--当 RXR 寄存器中有一帧以上的数据时,USR 寄存器中的 RXIF 位将会置位。
--若 RIE=1,数据从 RSR 寄存器加载到 RXR 寄存器中将产生中断。
--若接收过程中检测到帧错误、噪声干扰错误、奇偶出错或过速错误,相应的错误标志位置高。
可以通过如下步骤来清除 RXIF:
1. 读取 USR 寄存器
2. 读取 RXR 寄存器
·
接收暂停字
UART 接收到任何暂停字都会当作帧出错处理。接收器只根据 BNO 和 STOPS 位确定一帧数据的
长度。若暂停字位数比 13 大得多,当接收到 BNO 和 STOPS 位指定的长度时,接收器认为接收已完
毕,RXIF 和 FERR 置位,RXR 寄存器清 0,若相应的中断允许且 RIDLE 为高将会产生中断。若暂停
字较长,接收器收到起始位、数据位和有效停止位时,将会置位 FERR 标志,且在下一起始位前接收
器将等待有效的停止位。接收器不会将暂停字认为是下一帧数据的起始位,暂停字仅包含 0 同时 FERR
标志被置高。暂停字被加载到缓冲器中,在接收到停止位前不会再接收数据。注意的是,没有检测到
停止位也会置位只读标志位 RIDLE。
UART 接收到暂停字会产生以下事件:
--帧错误标志位 FERR 置位。
--RXR 寄存器清零。
--OERR、NF、PERR、RIDLE 或 RXIF 可能会置位。
·
空闲状态
当 UART 接收数据时,即在起始位和停止位之间,USR 寄存器中接收标志位 RIDLE 清零。在停
止位和下一帧数据的起始位之间,RIDLE 被置位,表示接收器空闲。
Rev. 1.30
45
2014-06-10
HT46RU67/HT46CU67
·
接收中断
USR 寄存器的只读标志位 RXIF 由接收器的边沿触发置位。若 RIE=1,数据从移位寄存器 RSR
加载到 RXR 寄存器时产生中断,同样地,过速也会产生中断。
· 接收错误处理
UART 会产生几种接收错误,下面部分将描述各种错误以及他们的处理。
· 过速出错——OERR 标志位
RXR 寄存器是一个两字节深度的 FIFO 缓冲器,它能保存两帧数据的同时接收第三帧数据,应用
程序必须保证在接收完第三帧前读取 RXR 寄存器,否则发生过速错误。
产生过速错误时将会发生以下事件:
--USR 寄存器中 OERR 被置位。
--RXR 寄存器中数据不会丢失。
--RSR 寄存器数据会被覆盖。
--若 RIE=1,将会产生中断。
读取 USR 寄存器后再读 RXR 寄存器将 OERR 标志位清 0。
·
噪声干扰——NF 标志位
数据恢复时多次采样可以有效鉴别噪声干扰。当检测数据受到噪声干扰时将会发生以下事件:
--在 RXIF 上升沿,USR 寄存器中 NF 置位。
--数据从 RSR 寄存器加载到 RXR 寄存器。
--不产生中断,此位置位的同时由 RXIF 请求中断。
读取 USR 寄存器后再读取 RXR 寄存器将复位 NF 标志位。
·
帧错误——FERR 标志位
若在停止位上检测到 0,USR 寄存器中 FERR 置位。若选择 2 位停止位,2 位停止都必须为高,
否则将置位 FERR。它同数据一起存储在缓冲器中,可被任何复位清除。
·
奇偶校验错误——PERR 标志位
若接收到的数据出现奇偶校验错误,USR 寄存器中 PERR 置位。只有使能了奇偶校验,PREN=1,
同时选择校验类型,此标志位才有效。它同数据一起存储在缓冲器中,可被任何复位清除。注意的是,
FERR 和 PERR 与相应的数据一起存储在缓冲器中,在读取数据之前必须先访问错误标志位。
· 接收中断图解
UART 拥有单独的内部中断和独立的中断变量。发送寄存器为空、发送器空闲、接收器数据有效、接
收过速,地址匹配和 RX 引脚唤醒都会产生中断。若 UART 中断允许且堆栈未满,程序将会跳转到相应的
中断向量执行中断服务程序,而后再返回主程序。上述四种中断条件中,若 UCR2 寄存器中相应中断允许
位被置位,USR 寄存器中标志位将会产生中断。发送器有两个相应的中断允许位而接收器两个中断共用一
个中断允许位。这些允许位可用于禁止个别的 UART 中断源。
地址匹配也是 UART 的一种中断源,它没有相应的标志位,若 UCR2 寄存器中 ADDEN=1,当检测到
匹配地址时将会产生 UART 中断。RX 引脚唤醒也可以产生 UART 中断,它没有相应的标志位,当 UXR2
中的 WAKE 和 RIE 位被置位,RX 引脚上触发下降沿可以唤醒单片机。注意的是,RX 唤醒中断发生时,
系统必须延时 1024 个系统时钟才能正常工作。
值得注意的是,USR 寄存器中标志位为只读,应用程序中无法清 0 或置 1,和其他中断一样,即使响
应对应中断服务程序时也无法清 0。当 UART 响应某种动作时,标志位会自动清 0,详细请参考 UART 寄
存器部分。INTC1 寄存器中 EURI 位用来打开/关闭 UART 中断,以禁止 UART 中断发生。
Rev. 1.30
46
2014-06-10
HT46RU67/HT46CU67
UART 中断框图
· 地址检测模式
置位 UCR2 寄存器中的 ADDEN 将启动地址检测模式。若 ADDEN 有效,只有在接收到有效数据时,
产生中断请求标志 RXIF。当 ADDEN 使能,仅在接收到有效数据最高位为 1 时,产生中断。中断允许位
EURI 和 EMI 也必须使能才会产生中断。地址的最高位为第 9 位(BNO=1)或第 8 位(BNO=0)
,若此位
为高,则接收到的是地址而非数据。只有接收的数据的最高位为 1 才会产生中断。若 ADDEN 除能,每接
收到一个有效数据便会置位 RXIF,而不用考虑数据的最高位。地址检测和奇偶校验在功能上相互排斥,
因此如果使能地址检测模式,必须保证操作的正确,同时必须将奇偶检验使能位清零,以除能奇偶校验。
ADDEN
位 9(BNO=1)
产生 UART 中断
位 8(BNO=0)
√
0
0
√
1
0
×
1
√
1
ADDEN 位功能
· 暂停模式下的 UART 功能
当 MCU 进入暂停模式,UART 将停止工作。当芯片进入暂停模式,模块的所有时钟关闭。当 UART
传送数据时,MCU 进入暂停模式,发送将停止并且 TX 引脚保持高电平。同样地,当 MCU 接收数据时进
入暂停模式,数据接收也会停止。当单片机进入暂停模式,USR、UCR1 和 UCR2、发送/接收寄存器、BRG
寄存器都不会受到影响。
UART 功能中包括了 RX 引脚的唤醒功能,由 UCR2 寄存器中 WAKE 位控制。进入暂停模式前,若该
标志位与 UART 允许位 UARTEN、接收器允许位 RXEN 和接收器中断位 RIE 都被置位,则 RX 引脚的下
降沿可唤醒单片机。注意的是,唤醒后系统需延时 1024 个系统时钟才能正常工作,在此期间,RX 引脚上
的任何数据将被忽略。
若要唤醒并产生 UART 中断,全局中断允许位 EMI 和 UART 中断允许 EURI 也必须置位;若这两标
志位没有被置位,那么,单片机将可以被唤醒但不会产生中断。同样唤醒后系统需延时 1024 个系统时钟
才能正常工作,然后才会产生 UART 中断。
Rev. 1.30
47
2014-06-10
HT46RU67/HT46CU67
串行接口
串行接口功能有 4 个基本信号线,包含 SDI(串行数据输入)
,SDO(串行数据输出),SCK(串行时钟)
。
和 SCS (从器件选择)
注:应用笔记中常将 SCS 取名为 CS 。
两个寄存器(SBCR 和 SBDR)用来定义串行接口的控制,状态和数据存储。

SBCR:串行接口控制寄存器
第 7 位(CKS)时钟源设置:CKS=0 时 fISO=fSYS/4;
第 6 位(M1)
,第 5 位(M0)主/从模式和波特率设置:
M1,M0:00→主模式,波特率=fISO;
01→主模式,波特率= fISO /4;
10→主模式,波特率= fISO /16;
11→从模式;

第 4 位(SBEN)→串行接口使能/禁止(1/0)

使能:
( SCS 取决于 CSEN 位)
)后等待数据写入 SBDR(TXRX 缓冲)
;
禁止→使能:SCK,SDI,SDO, SCS =0(SCKB=“0”
主模式:将数据写入 SBDR(TXRX 缓冲)后自动开始发送/接收;
主模式:数据发送完成后,系统将 TRF 标志位置 1;
从模式:当收到 SCK 信号( SCS 取决于 CSEN)时,TXRX 缓冲内数据按位移出的同时 SDI 引
脚上数据按位移进。

,SDI,SDO, SCS 浮空
禁止:SCK( SCK )
第 3 位(MLS)→最高位或最低位(1/0)首先移出控制位
第 2 位(CSEN)→串行接口使能/禁止设置信号( SCS )
,当 CSEN=0 时 SCSB 浮空
第 1 位(WCOL)→当数据传输时数据写入 SBDR(TXRX 缓冲),系统将 WCOL 位置 1,此时
数据写入 SBDR(TXRX 缓冲)将被忽略
第 0 位(TRF)→数据发送或接收时产生中断
注:当 MCU 工作在暂停模式,串行接口的数据接收保持工作。
Rev. 1.30
48
2014-06-10
HT46RU67/HT46CU67

SBDR:串行接口数据寄存器
数据写入 SBDR→仅将数据写入 TXRX 缓冲;
从 SBDR 读取数据→仅从 SBDR 读取数据;
工作模式概述:
主发送器:时钟发送和数据输入/输出通过写 SBDR 寄存器启动;
主发送器时钟通过写 SBDR 寄存器启动;
从发送器:数据输入/输出通过接收时钟启动;
从接收器:数据输入/输出通过接收时钟启动;
时钟极性=上升沿( CLK )或下降沿(CLK)
:1 或 0(配置选项设置)
模式
操作
⒈设置 CKS 和 M1,M0=00,01,10;
⒉设置 CSEN,MLS(从模式同样适用)
;
⒊设置 SBEN;
主模式
⒋将数据写入 SBDR→数据存入 TXRX 缓冲→输出 CLK(和 SCS )信号→跳至步骤 5→(SIO
内部操作→数据存入 TXRX 缓冲,SDI 数据移位写入 TXRX 缓冲→数据传输,TXRX 缓冲数据
锁存至 SBDR)
;
⒌检查 WCOL:WCOL=1→清除 WCOL,并跳至步骤 4;
WCOL=0→跳至步骤 6;
⒍检查 TRF 或等待 SBI(串行接口中断)
;
⒎从 SBDR 读取数据;
⒏清除 TRF;
⒐跳至步骤 4;
⒈忽略 CKS,并设置 M1,M0=11;
⒉设置 CSEN,MLS(主模式同样适用)
;
⒊设置 SBEN;
⒋将数据写入 SBDR→数据存入 TXRX 缓冲→等待主发送器时钟 CLK(和 SCS )信号→跳至步
从模式
骤 5→(SIO 内部操作→接收 CLK(和 SCS )信号→输出 TXRX 缓冲内数据并将 SDI 数据移位
写入 TXRX 缓冲→数据传输,TXRX 缓冲数据锁存至 SBDR)
;
⒌检查 WCOL:WCOL=1→清除 WCOL,并跳至步骤 4;
WCOL=0→跳至步骤 6;
⒍检查 TRF 或等待 SBI(串行接口中断)
;
⒎从 SBDR 读取数据;
⒏清除 TRF;
⒐跳至步骤 4;
串行接口操作
WCOL:系统工作在主/从模式下,数据传输(发送或接收)时,数据写入 SBDR 将置位 WCOL 为 1,此
时数据写入 SBDR(TXRX 缓冲)将被忽略。WCOL 功能的使能/禁止可通过配置选项设置,由串行接口设
置 WCOL 为 1,并由用户清除。
当 MCU 工作在暂停模式,串行接口的数据接收保持工作。
CPOL 用来设置时钟 CLK 的极性,由配置选项设置。
MLS:MSB 或 LSB 高位在前设置。
CSEN:芯片片选功能使能/禁止,CSEN=1→ SCS 信号有效。主模式时在 CLK 信号设置前必须输出 SCS 信
号,从模式时数据传输应该在收到 SCS 信号前(后)禁止(或使能)
。CSEN=0,SCS 信号并非必须,SCS
引脚(主和从)将浮空。CSEN 有两种设置,用来使能/禁止软件 CSEN 的功能。如配置选项中禁止 CSEN
Rev. 1.30
49
2014-06-10
HT46RU67/HT46CU67
功能,软件 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 由串行接口设置为 1,且有用户清 0。当数据传输(发送或接收)完成,TRF 被串行接口设置为 1,
并产生 SBI(串行接口中断)
。
Rev. 1.30
50
2014-06-10
HT46RU67/HT46CU67
配置选项
下表列出了所有配置选项。所有选项必须正确定义,以保证统正常运行。
配置选项
OSC 类型设置。
这个选项确定选择一个 RC 或晶体或 32768Hz 晶体来作为系统时钟。
WDT,RTC 和时基的时钟源设置。
有三种选择的方式:系统时钟四分频或 RTC OSC 或 WDT OSC。
WDT 打开/关闭设置。
由配置设置 WDT 打开或关闭。
WDT 溢出周期设置。
有四种选择的方式:WDT 时钟源的 212/fS ~213/fS、213/fS ~214/fS、214/fS ~215/fS 或 215/fS ~216/fS 分频。
CLR WDT 次数设置。
这个选项定义指令清除 WDT 的方法。
“One time”指用“CLR WDT”指令清除 WDT。
“Two times”
指必须要用 CLR WDT1 和 CLR WDT2 二条指令清除 WDT。
时基溢出周期设置。
时基溢出周期范围从 clock/212 ~ clock /215。
“clock”是由配置选项确定的时钟源频率。
蜂鸣器输出频率设置。
有八种输出频率供选择:clock /22 ~ clock /29。
“clock”是由配置选项确定的时钟源频率。
Wake-up 设置。
这个选项用来设置唤醒功能。外部的输入/输出 (仅 PA) 引脚的下降沿,具有将系统从 HALT 模式
唤醒的能力。
上拉电阻设置。
这个选项用来设置输入/输出口在输入模式时,是否带有内部上拉电阻。PA、PB,PC 和 PD 可以独
立设置(按位设置)。
输入/输出与其它功能共用引脚设置。
PA0/ BZ 、PA1/ BZ:PA0 和 PA1 可以设置为一般输入/输出口或蜂鸣器输出。
PA3/PFD:PA 可以设置为一般输入/输出口或 PFD 输出。
LCD Common 设置。
LCD Common 有三种选择:2Common(1/2 duty),3Common(1/3 duty)或 4Common(1/4 duty)。如果选
择了 4 Common,那么段输出引脚“SEG46”将被作为 Common 端输出。
LCD 偏压设置。LCD 偏压有二种选择:1/2 bias 或 1/3 bias。
LCD 偏压方式设置。这个选项确定是 R 型偏压还是 C 型偏压(低或高偏压方式电流选项)
。
LCD 驱动器时钟源设置。
LCD 驱动器时钟源有七种可选择:fs/22 ~ fs/28。
“fs”是由配置选项确定的时钟源频率。
LCD 在 HALT 模式开关设置。
LCD Segment 作为逻辑输出设置。(字节、字节、位、位、位、位、位、位、位、位选择)
[SEG0~SEG7]、[SEG8~SEG15]、SEG16、SEG17、SEG18、SEG19、SEG20、SEG21、SEG22、SEG23
LVR 设置。LVR 打开或关闭。
LVD 设置。LVD 打开或关闭。
PFD 选项。
如果 PA3 作为 PFD 输出,有二种选择;一种是 PFD0 作为 PFD 输出,另一种是 PFD1 作为 PFD 输
出。PFD0,PFD1 分别是定时/计数器 0 和定时/计数器 1 的定时器溢出信号。
PWM 设置:(7+1)或(6+2)模式
PD0:电平输出或 PWM0 输出
PD1:电平输出或 PWM1 输出
Rev. 1.30
51
2014-06-10
HT46RU67/HT46CU67
PD2:电平输出或 PWM2 输出
PD3:电平输出或 PWM3 输出
INT0 或 INT1 触发方式设置:禁止,上升沿触发,下降沿触发,或两者皆可触发
INT0 触发源设置。
INT0 触发源有两种选择,INT0 引脚或 A/D 转换结束。
中断向量设置。
08H: INT1 ,14H:UART 或 08H:SIO,14H:UART 或 08H: INT1 ,14H:SIO
SIO 设置。
SIO 打开或关闭选项。
SIO WCOL 设置。
SIO WCOL 打开或关闭选项。
SIO CSEN 设置。
SIO CSEN 打开或关闭选项。
SIO CPOL 设置。
SIO CPOL 打开或关闭选项。
应用电路
注: 1、晶体/谐振器
对于晶体振荡器来说,为了保证振荡频率,仅有少许晶体振荡器需要应用 C1 和 C2。 而对于谐振器来说,通常
情况下必须应用 C1 和 C2 以产生振荡。许多应用场合 R1 并非必须添加。当 LVR 禁止,如果系统需要在 VDD 低于单
片机的最低工作电压的时候确保关闭振荡,建议添加 R1。C1 和 C2 的数值必须参考晶体/谐振器厂商规格书进行选择。
2、复位电路
复位电路电阻和电容值选取的原则是使 VDD 保持稳定并在 RES 置为高以前把工作电压保持在允许的范围内。为
了避免噪声干扰,连接 RES 引脚的线请尽可能地短。
3、当应用电路中复位电路受到噪声干扰及需要振荡电路外部元件的详细资料时,可参考应用范例 HA0075S。
Rev. 1.30
52
2014-06-10
HT46RU67/HT46CU67
指令集
简介
任何单片机成功运作的核心在于它的指令集,此指令集为一组程序指令码,用来指导单片机如何去执
行指定的工作。在盛群单片机中,提供了丰富且灵活的指令,共超过六十条,程序设计者可以事半功倍地
实现他们的应用。
为了更加容易理解各种各样的指令码,接下来按功能分组介绍它们。
指令周期
大部分的操作均只需要一个指令周期来执行。分支、调用或查表则需要两个指令周期。一个指令周期
相当于四个系统时钟周期,因此如果在 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.30
53
2014-06-10
HT46RU67/HT46CU67
位运算
提供数据存储器中单个位的运算指令是盛群单片机的特性之一。这特性对于输出端口位的设置尤其有
用,其中个别的位或端口的引脚可以使用“SET [m].i”或“CLR [m].i”指令来设定其为高位或低位。如果
没有这特性,程序设计师必须先读入输出口的 8 位数据,处理这些数据,然后再输出正确的新数据。这种
读入-修改-写出的过程现在则被位运算指令所取代。
查表运算
数据的储存通常由寄存器完成,然而当处理大量固定的数据时,它的存储量常常造成对个别存储器的
不便。为了改善此问题,盛群单片机允许在程序存储器中建立一个表格作为数据可直接存储的区域,只需
要一组简易的指令即可对数据进行查表。
其它运算
除了上述功能指令外,其它指令还包括用于省电的“HALT”指令和使程序在极端电压或电磁环境下
仍能正常工作的看门狗定时器控制指令。这些指令的使用则请查阅相关的章节。
Rev. 1.30
54
2014-06-10
HT46RU67/HT46CU67
指令集概要
惯例
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.30
说明
指令周期
影响标志位
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
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
55
1
注
C
2014-06-10
HT46RU67/HT46CU67
助记符
移位
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
无
无
无
无
无
无
无
注
无
注
无
读取当前页的 ROM 内容,并送至数据存储器和 TBLH
读取最后页的 ROM 内容,并送至数据存储器和 TBLH
2
注
2
无
无
空指令
清除数据存储器
置位数据存储器
清除看门狗定时器
预清除看门狗定时器
预清除看门狗定时器
交换数据存储器的高低字节,结果放入数据存储器
交换数据存储器的高低字节,结果放入 ACC
进入暂停模式
1
注
1
注
1
1
1
1
注
1
1
1
无
无
无
TO,PDF
TO,PDF
TO,PDF
无
无
TO,PDF
1
1
无
无
无
无
2
2
2
2
注
注: 1、对跳转指令而言,如果比较的结果牵涉到跳转即需 2 个周期,如果没有发生跳转,则只需一个周期。
2、任何指令若要改变 PCL 的内容将需要 2 个周期来执行。
3、对于“CLR WDT1”或“CLR WDT2”指令而言,TO 和 PDF 标志位也许会受执行结果影响,
“CLR WDT1”和
“CLR WDT2”被连续地执行后,TO 和 PDF 标志位会被清除,除此之外 TO 和 PDF 标志位保持不变。
Rev. 1.30
56
2014-06-10
HT46RU67/HT46CU67
指令定义
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
Logical AND immediate data to the accumulator
A, x
说明:
运算过程:
影响标志位:
将累加器中的数据和立即数做逻辑与,结果存放到累加器。
ACCACC “AND” x
Z
ANDM A, [m]
说明:
运算过程:
影响标志位:
Logical AND data memory with the accumulator
将指定数据存储器内容和累加器中的数据做逻辑与,结果存放到数据存储器。
[m]ACC “AND” [m]
Z
Rev. 1.30
57
2014-06-10
HT46RU67/HT46CU67
CALL addr
说明:
运算过程:
影响标志位:
Subroutine call
无条件的调用指定地址的子程序,此时程序计数器先加 1 获得下一个要执行的指令地址
并压入堆栈,接着载入指定地址并从新地址执行程序。由于指令需要额外的运算,所以
此指令为 2 个周期。
StackProgram Counter+1
Program Counter  addr
无
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
影响标志位:
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.30
Complement data memory
将指定数据存储器中的每一位取逻辑反,相当于从 1 变 0 或从 0 变 1。
[m]  [ m ]
Z
58
2014-06-10
HT46RU67/HT46CU67
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.30
59
2014-06-10
HT46RU67/HT46CU67
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
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
Rev. 1.30
60
2014-06-10
HT46RU67/HT46CU67
影响标志位:
无
RET
说明:
Return and place immediate data in the accumulator
将堆栈寄存器中的程序计数器值恢复且累加器载入指定的立即数,程序由取回的地址继
续执行。
PC  Stack
ACC  x
无
A, x
运算过程:
影响标志位:
RETI
说明:
运算过程:
影响标志位:
RL
[m]
说明:
运算过程:
影响标志位:
RLA
[m]
说明:
运算过程:
影响标志位:
RLC
[m]
说明:
运算过程:
影响标志位:
RLCA
说明:
[m]
运算过程:
影响标志位:
Rev. 1.30
Return from interrupt
将堆栈寄存器中的程序计数器值恢复且中断功能通过设置 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
61
2014-06-10
HT46RU67/HT46CU67
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。
运算过程:
ACCACC-[m]- C
影响标志位:
OV、Z、AC、C
SBCM
说明:
Subtract data memory and carry from the accumulator
将累加器减去指定数据存储器的内容以及进位标志的反,结果存放到数据存储器。如果
结果为负,C 标志位清除为 0,反之结果为正或 0,C 标志位设置为 1。
A,[m]
运算过程:
ACCACC-[m]- C
影响标志位:
OV、Z、AC、C
Rev. 1.30
62
2014-06-10
HT46RU67/HT46CU67
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.30
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,跳过下一条指令执行
无
63
2014-06-10
HT46RU67/HT46CU67
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]
运算过程:
影响标志位:
SZ
说明:
[m]
运算过程:
影响标志位:
SZA [m]
说明:
运算过程:
影响标志位:
Rev. 1.30
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,跳过下一条指令执行
无
64
2014-06-10
HT46RU67/HT46CU67
SZ
[m]. i
说明:
运算过程:
影响标志位:
TABRDC [m]
说明:
运算过程:
影响标志位:
TABRDL [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程序代码(高字节)
无
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
Rev. 1.30
65
2014-06-10
HT46RU67/HT46CU67
封装信息
请注意,这里提供的封装信息仅作为参考。由于这个信息经常更新,提醒用户咨询Holtek 网站以获取
最新版本的封装信息。
封裝信息的相关内容如下所示,点击可链接至 Holtek 网站相关信息页面。



Rev. 1.30
封装信息(包括外形尺寸、包装带和卷轴规格)
封装材料信息
纸箱信息
66
2014-06-10
HT46RU67/HT46CU67
100-pin LQFP (14mm×14mm)外形尺寸
符号
A
B
C
D
E
F
G
H
I
J
K
α
符号
A
B
C
D
E
F
G
H
I
J
K
α
Rev. 1.30
最小
—
—
—
—
—
0.007
0.053
—
0.002
0.018
0.004
0°
尺寸(单位:inch)
正常
0.630 BSC
0.551 BSC
0.630 BSC
0.551 BSC
0.020 BSC
0.009
0.055
—
—
0.024
—
—
最大
—
—
—
—
—
0.011
0.057
0.063
0.006
0.030
0.008
7°
最小
—
—
—
—
—
0.17
1.35
—
0.05
0.45
0.09
0°
尺寸(单位:mm)
正常
16 BSC
14 BSC
16 BSC
14 BSC
0.50 BSC
0.22
1.40
—
—
0.60
—
—
最大
—
—
—
—
—
0.27
1.45
1.60
0.15
0.75
0.20
7°
67
2014-06-10
HT46RU67/HT46CU67
Copyright  2014 by HOLTEK SEMICONDUCTOR INC.
使用指南中所出现的信息在出版当时相信是正确的,然而盛群对于说明书的使用不负任何责任。文中提到的应用目
的仅仅是用来做说明,盛群不保证或表示这些没有进一步修改的应用将是适当的,也不推荐它的产品使用在会由于
故障或其它原因可能会对人身造成危害的地方。盛群产品不授权使用于救生、维生器件或系统中做为关键器件。盛
群拥有不事先通知而修改产品的权利,对于最新的信息,请参考我们的网址 http://www.holtek.com.tw
Rev. 1.30
68
2014-06-10
Similar pages