HOLTEK HT46R47, HT46R22, HT46R23, HT46R24 Service Manual

HT46R47HT46R22
HT46R23HT46R24
A/D 型单片机
使用手册
本使用手册版权为盛群半导体股份有限公司所有,非经盛群半导体股份有限公司书面授权同意,不得通过任
何形式复制、储存或传输。
目录
第一部份 单片机概论 .................................................................. 1
第一章 硬件结构........................................................................................ 3
简介..............................................................................................................3
特性..............................................................................................................4
技术特性.............................................................................................. 4
内核特性.............................................................................................. 4
周边特性.............................................................................................. 5
选择表..........................................................................................................5
系统框线图..................................................................................................6
引脚分配......................................................................................................7
引脚说明......................................................................................................8
极限参数....................................................................................................12
直流电气特性............................................................................................13
交流电气特性............................................................................................14
系统结构....................................................................................................15
时序和流水线结构(Pipelining) .........................................................15
程序计数器........................................................................................ 17
堆栈.................................................................................................... 19
算术及逻辑单元 – ALU ...................................................................20
程序存储器................................................................................................21
结构.................................................................................................... 21
特殊向量............................................................................................ 22
查表.................................................................................................... 23
查表程序范例.................................................................................... 23
数据存储器................................................................................................25
结构.................................................................................................... 25
通用数据存储器................................................................................ 26
专用数据存储器................................................................................ 27
i
A/D 型单片机使用手册
特殊功能寄存器........................................................................................28
间接寻址寄存器 – IAR, IAR0, IAR1...............................................28
间接寻址指针 – MP, MP0, MP1 ......................................................28
储存区指针 BP..............................................................................29
累加器 – ACC ...................................................................................29
程序计数器低字节寄存器 – PCL ....................................................30
表格寄存器 – TBLP, TBLH.............................................................. 30
状态寄存器 – STATUS.....................................................................30
中断控制寄存器 – INTC, INTC0, INTC1 .......................................31
定时/计数寄存器 ...............................................................................31
输入/输出端口和控制寄存器 ........................................................... 32
脉冲宽度调制寄存器 PWM, PWM0, PWM1, PWM2, PWM3....32
2
C 总线寄存器 HADR, HCR, HSR, HDR...................................32
I
A/D 转换寄存器 ADRL, ADRH, ADCR, ADSR ..........................32
输入/输出端口...........................................................................................33
上拉电阻............................................................................................ 33
PA 口的唤醒 ......................................................................................33
输入/输出端口控制寄存器 ...............................................................34
引脚共用功能.................................................................................... 34
编程注意事项.................................................................................... 38
定时/计数器 ..............................................................................................39
配置定时/计数器输入时钟源 ...........................................................40
定时/计数寄存器 – TMR,TMRL/TMRH,
TMR0L/TMR0H, TMR1L/TMR1H...................................................41
定时/计数控制寄存器 – TMRC, TMR0C, TMR1C.........................42
定时器模式........................................................................................ 44
事件计数器模式................................................................................ 44
脉冲宽度测量模式............................................................................ 45
可编程分频器(PFD).......................................................................... 46
预分频器(Prescaler)........................................................................... 46
输入/输出接口 ...................................................................................47
编程注意事项.................................................................................... 47
脉冲宽度调制器........................................................................................48
6+2 PWM 模式 ..................................................................................50
7+1 PWM 模式 ..................................................................................51
PWM 输出控制..................................................................................52
模数转换器................................................................................................53
A/D 转换器数据寄存器 – ADRL/ADRH ........................................ 53
A/D 转换器控制寄存器 – ADCR.....................................................54
A/D 转换器时钟源寄存器 – ACSR ................................................. 56
A/D 输入引脚 .................................................................................... 57
A/D 转换的步骤 ................................................................................ 57
A/D 转换功能 .................................................................................... 61
ii
I2C 总线串行接口 .....................................................................................63
2
I
C 总线从地址寄存器 – HADR......................................................64
2
C 总线输入/输出数据寄存器 – HDR ...........................................64
I
2
C 总线控制寄存器 – HCR.............................................................64
I
2
C 总线状态寄存器 – HSR ............................................................. 65
I
2
C 总线通讯...................................................................................... 66
I
中断............................................................................................................70
外部中断............................................................................................ 73
定时/计数器中断 ...............................................................................73
A/D 中断 ............................................................................................ 73
2
C 中断.............................................................................................. 74
I
中断优先权........................................................................................ 74
编程注意事项.................................................................................... 75
复位和初始化............................................................................................76
复位.................................................................................................... 76
振荡器........................................................................................................83
系统时钟配置.................................................................................... 83
系统晶体/陶瓷振荡器 .......................................................................83
系统电阻电容振荡器........................................................................ 84
看门狗定时振荡器............................................................................ 84
暂停模式下的暂停和唤醒........................................................................85
看门狗定时器............................................................................................86
掩膜选项....................................................................................................88
应用电路....................................................................................................89
第二部份 程序语言 .................................................................... 93
第二章 指令集介绍.................................................................................. 95
指令集........................................................................................................95
指令周期............................................................................................ 95
数据的传送........................................................................................ 96
算术运算............................................................................................ 96
逻辑和移位运算................................................................................ 96
分支和控制的转换............................................................................ 96
位运算................................................................................................ 96
查表运算............................................................................................ 97
其它运算............................................................................................ 97
指令设定一览表........................................................................................97
惯例.................................................................................................... 97
iii
A/D 型单片机使用手册
第三章 指令定义.................................................................................... 101
第四章 汇编语言和编译器.....................................................................115
常用符号..................................................................................................115
语句语法..................................................................................................116
名称.................................................................................................. 116
操作项.............................................................................................. 116
操作数项.......................................................................................... 116
注解.................................................................................................. 116
编译伪指令..............................................................................................117
条件编译伪指令.............................................................................. 117
文件控制伪指令.............................................................................. 118
程序伪指令...................................................................................... 120
数据定义伪指令.............................................................................. 124
宏伪指令.......................................................................................... 126
汇编语言指令..........................................................................................130
名称.................................................................................................. 130
助记符.............................................................................................. 130
操作数、运算子和表达式.............................................................. 130
其它..........................................................................................................133
前置引用.......................................................................................... 133
局部标号.......................................................................................... 133
汇编语言保留字.............................................................................. 134
编译器选项..............................................................................................135
编译列表文件格式..................................................................................135
源程序列表...................................................................................... 135
编译总结.......................................................................................... 136
其它.................................................................................................. 136
第三部份 开发工具 .................................................................. 139
第五章 单片机开发工具........................................................................ 141
HT-IDE 集成开发环境............................................................................141
盛群单片机仿真器(HT-ICE) ..................................................................143
HT-ICE 接口卡 ................................................................................143
OTP 烧录器......................................................................................143
OTP 适配卡......................................................................................143
系统配置..................................................................................................144
HT-ICE 接口卡设定 ........................................................................145
安装..........................................................................................................146
系统需求.......................................................................................... 146
硬件安装.......................................................................................... 146
软件安装.......................................................................................... 147
iv
第六章 快速开始.................................................................................... 151
步骤一:建立一个新项目.............................................................. 151
步骤二:将源程序文件加到项目中 ..............................................151
步骤三:建立项目.......................................................................... 151
步骤四:烧录 OTP 单片机.............................................................152
步骤五:传送程序与掩膜选项单至 Holtek ..................................152
附录 ..............................................................................................153
附录A 特性曲线图.................................................................................. 155
附录B 封装信息...................................................................................... 165
v
A/D 型单片机使用手册
vi
前言
自从盛群半导体公司成立以来,即致力于单片机产品的设计与开发。虽然盛群 半导体提供给客户各式各样的半导体器件,但其中单片机仍是盛群的主要关键 产品,未来盛群半导体仍将继续扩展单片机产品系列完整性与功能性。通过长 期累积的单片机研发经验与技术,盛群半导体能为各式各样的应用范围开发出 高性能且低价位的单片机芯片。许多连接到外部感应器的重要应用需要处理模 拟信号,所有的这些应用,在它们可以被单片机处理之前需要通过一个 A/D 转 换器做模数信号的转换。为了满足这些需求,盛群开发出 A/D 系列的单片机, 除了拥有 I/O 系列的所有特性和功能外,还含有集成的多通道 A/D 转换器,它
2
的解析度和通道个数可调。而 PWM 功能和 I 列单片机的功能和应用的可行性。
C 接口,则进一步增加了 A/D
为了使用者阅读方便,本手册分成三部份。关于一般的单片机的规格信息可在 第一部份中找到。与单片机程序相关的信息,如指令集、指令定义和汇编语言 编译伪指令,可在第二部份找到。第三部份则是关于盛群半导体的开发工具有 关如何安装和使用的相关信息。
希望客户通过这本 A/D 型单片机使用手册,能以一种简单、有效、且完整的方 法,实现他们在单片机上的各种应用。由于盛群半导体将单片机规格、程序规 划和开发工具等信息结合在一本使用手册上,相信客户可充分利用盛群半导体 各种单片机的特性,获取最大的产品优势。盛群半导体也欢迎客户提供宝贵的 意见和建议,以作为我们未来的改进参考。
vii
A/D 型单片机使用手册
viii
第一部份
单片机概论
第一部份 单片机概论
1
A/D 型单片机使用手册
2
第一章
硬件结构
本章主要为 A/D 型单片机的规格信息,并且包含了所有参数和相关的硬件信 息,这些信息提供设计者此类单片机的主要硬件特性细节,结合程序部份的信 息将能够让使用者快速且成功地实现各种单片机的应用。参考本章中的相关部 份,也保证使用者可以充分利用 A/D 型单片机。
1
简介
HT46R47/HT46C47HT46R22/HT46C22HT46R23/HT46C23 HT46R24/ HT46C24 8 位高性能、高效益的 RISC 结构单片机,用于直接处理模拟信号,
例如直接连接传感器。该系列单片机包含一个集成的多通道模数转换器,以及 一个或多个脉冲宽度调制输出。同时也增强了单片机的其它内部特性,如暂停、 唤醒功能、振荡器选择和可编程分频器等,增加了单片机的使用灵活度,而这 些特性也同时保证实际应用时只需要最少的外部器件,进而降低了整个产品的 成本。有了集成的 A/D PWM 功能的优势,再加上低功耗、高性能、灵活控 制的输入/输出和低成本等特性,此系列单片机广泛被应用在传感器信号处理、 马达驱动、工业控制、消费性产品和子系统控制器等场合。该系列所有的单片 机都具有相同的特性,主要的不同在于 I/O 引脚数目,RAM ROM 的容量, 定时器数目和大小,A/D 通道和 PWM 输出等方面。
HT46R47HT46R22、HT46R23 和 HT46R24 都是属于一次可编程(One-Time Programmable, OTP)单片机,当配合使用盛群半导体的程序开发工具时,可简
单有效的更新程序,这提供了设计者快速有效的开发途径。而对于那些已经设 计成熟的应用,Mask 版的 HT46C47HT46C22HT46C23 HT46C24 则可 满足大量生产和低成本的需求。由于和 OTP 版的功能完全兼容,Mask 版对于 已经设计完成而想要降低成本的产品,提供了一个理想的解决方案。
3
特性
A/D 型单片机使用手册
技术特性
高性能 RISC 结构
低功率完全静态 CMOS 设计
工作电压:
4MHz 下,由 2.2V 5.5V 8MHz 下,由 3.3V 5.5V
功率损耗:
5V/4MHz 下,典型值为 2mA(针对 ADC 除能时的晶体振荡器) 不使用看门狗定时器时,3V 下静态(standby)电流小于 1µA
温度范围:
工作温度40°C 85°C(工业级规格) 储存温度50°C 125°C
内核特性
程序存储器
2K×14 OTP/Mask ROM (HT46R47/HT46C47 , HT46R22/HT46C22) 4K×15 OTP/Mask ROM (HT46R23/HT46C23) 8K×16 OTP/Mask ROM (HT46R24/HT46C24)
数据存储器
64×8 SRAM (HT46R47/HT46C47 , HT46R22/HT46C22) 192×8 SRAM (HT46R23/HT46C23) 384×8 SRAM (HT46R24/HT46C24)
表格读取功能
多层硬件堆栈
6-level (HT46R47/HT46C47, HT46R22/HT46C22) 8-level (HT46R23/HT46C23) 16-level (HT46R24/HT46C24)
直接和间接数据寻址模式
位操作指令
63 条强大的指令
大多数指令执行时间只需要一个指令周期
4
周边特性
13 个到 40 个具有上拉功能的双向输入输出口
9 10 位多通道 A/D 转换器
脉冲宽度调制输出
PA 端口具有唤醒功能
外部中断输入
事件计数输入
具有预分频器(Prescaler)及中断功能的定时器
看门狗定时器(WDT)
暂停与唤醒特性可以节省功耗
PFD 输出
2
I
C 接口(除 HT46R47/HT46C47 外)
芯片内置晶体及电阻电容振荡器
具有低电压复位(LV R )特性
具有烧录电路接口及程序代码保护功能
掩膜版单片机适用于大量生产
提供高效的软硬支持工具
选择表
这系列的 A/D 型单片机拥有广泛的功能特性,其中有些是普通的,有些则是独 有的。大部份的特性对该系列所有的单片机来说是共通的,主要的区别在于程 序存储器和数据存储器的容量,I/O 数目和定时器功能,A/D 通道和 PWM 输 出。为了帮助使用者在应用时能选择适当的单片机,以下表格提供了各个单片 机主要的特性概述。
型号 电源
HT46R47 HT46C47
HT46R22 HT46C22
HT46R23 HT46C23
HT46R24 HT46C24
2.2V~5.5V 2K×14 64×8138-bit×1 3 9-bit×48-bit×1 — 6
2.2V~5.5V 2K×14 64×8198-bit×1 4 9-bit×88-bit×1 √ 6
2.2V~5.5V 4K×15 192×8
2.2V~5.5V 8K×16 384×8
注意: 型号部份包含“C”的为 Mask 版本,而“R”则是 OTP 版。
程序
存储器数据存储器
I/O 定时器 中断 A/D PWM I2C 堆栈 封装种类
19 8-bit×1
16-bit×1 4 10-bit×8
23
23 8-bit×2
16-bit×2 5 10-bit×8
40
8-bit×2
8-bit×4
8
16
18DIP, 18SOP
24SKDIP,
24SOP
24SKDIP,
24SOP
28SKDIP,
28SOP
28SKDIP,
28SOP
48SSOP
5
系统框线图
以下的系统框线图为 A/D 型单片机系列的主要功能模块。
A/D 型单片机使用手册
P r o g r a m M e m o r y
L o o k - u p
R e g i s t e r
C o n f i g .
R e g i s t e r
T a b l e
A d d r e s s D e c o d e r
I n t e r r u p t
C i r c u i t
L o o k - u p
T a b l e
P o i n t e r
C o n f i g .
R e g i s t e r
P r o g r a m
C o u n t e r
S t a c k
S t a c k P o i n t e r
I / O
P o r t s
T o P r o g r a m
M e m o r y
P r o g r a m m i n g
C o n f i g u r a t i o n
O p t i o n
D e v i c e
C i r c u i t r y
S y s t e m R C /
X ' t a l O s c i l l a t o r
A / D
C o n v e r t e r
W D T
O s c i l l a t o r
R e s e t &
L V R
T i m i n g
G e n e r a t o r
D a t a
M e m o r y
C o n f i g .
I2C
R e g i s t e r
I n s t r u c t i o n
D e c o d e r
A d d r e s s D e c o d e r
M U X
B a n k
P o i n t e r
C o n f i g .
P W M
R e g i s t e r
M e m o r y
P o i n t e r
W a t c h d o g
T i m e r
I n s t r u c t i o n
R e g i s t e r
M U X
S h i f t e r
C o n f i g .
R e g i s t e r
A L U
A C C
T i m e r ( s ) /
C o u n t e r
P F D
注意: 本系统框线图为 OTP 单片机,至于 Mask 型单片机则没有 Device Programming Circuitry
HT46R47/HT46C47 不包含 I2C 接口。只有 HT46R24/HT46C24 才有储存区指针。
6
引脚分配
P A 3 / P F D
P B 3 / A N 3
P B 2 / A N 2
P B 1 / A N 1
P B 0 / A N 0
1
P A 2
2
P A 1
3
4
P A 0
5
6
7
8
9
V S S
H T 4 6 R 4 7 / H T 4 6 C 4 7
1 8 D I P - A / S O P - A
P B 5 / A N 5
P B 4 / A N 4
P A 3 / P F D
P B 3 / A N 3
P B 2 / A N 2
P B 1 / A N 1
P B 0 / A N 0
1
2
3
P A 2
4
P A 1
5
P A 0
6
7
8
9
1 0
V S S
1 1
P C 0
1 2
P C 1
1 3
P C 2
1 4
H T 4 6 R 2 3 / H T 4 6 C 2 3 2 8 S K D I P - A / S O P - A
1 8
1 7
1 6
1 5
1 4
1 3
1 2
1 1
1 0
2 8
2 7
2 6
2 5
2 4
2 3
2 2
2 1
2 0
1 9
1 8
1 7
1 6
1 5
P A 4 / T M R
P A 5 / I N T
P A 6
P A 7 O S C 2
O S C 1
V D D
R E S
P D 0 / P W M
P B 6 / A N 6
P B 7 / A N 7
P A 4 / T M R
P A 5 / I N T
P A 6 / S D A
P A 7 / S C L
O S C 2
O S C 1
V D D
R E S
P D 1 / P W M 1
P D 0 / P W M 0
P C 4
P C 3
P B 5 / A N 5
P B 4 / A N 4
P A 3 / P F D
P B 3 / A N 3
P B 2 / A N 2
P B 1 / A N 1
P B 0 / A N 0
1
2
3
P A 2
4
P A 1
5
P A 0
6
7
8
9
1 0
V S S
1 1
P C 0
1 2
H T 4 6 R 2 2 / H T 4 6 C 2 2
2 4 S K D I P - A / S O P - A
P B 5 / A N 5
P B 4 / A N 4
P A 3 / P F D
P B 3 / A N 3
P B 2 / A N 2
P B 1 / A N 1
P B 0 / A N 0
1
2
3
P A 2
4
P A 1
5
P A 0
6
7
8
9
1 0
V S S
1 1
P C 0
1 2
P C 1
1 3
P C 2
1 4
H T 4 6 R 2 4 / H T 4 6 C 2 4 2 8 S K D I P - A / S O P - A
P B 6 / A N 6
2 4
P B 7 / A N 7
2 3
P A 4 / T M R
2 2
P A 5 / I N T
2 1
P A 6 / S D A
2 0
P A 7 / S C L
1 9
O S C 2
1 8
O S C 1
1 7
V D D
1 6
R E S
1 5
P D 0 / P W M
1 4
P C 1
1 3
P B 6 / A N 6
2 8
P B 7 / A N 7
2 7
P A 4
2 6
P A 5 / I N T
2 5
P A 6 / S D A
2 4
P A 7 / S C L
2 3
O S C 2
2 2
O S C 1
2 1
V D D
2 0
R E S
1 9
P D 1 / P W M 1 / T M R 1
1 8
P D 0 / P W M 0
1 7
P C 4
1 6
P C 3
1 5
P B 5 / A N 5
P B 4 / A N 4
P A 3 / P F D
P B 3 / A N 3
P B 2 / A N 2
P B 1 / A N 1
P B 0 / A N 0
1
2
3
P A 2
4
P A 1
5
P A 0
6
7
8
9
1 0
V S S
1 1
P C 0
1 2
H T 4 6 R 2 3 / H T 4 6 C 2 3
2 4 S K D I P - A / S O P - A
P B 5 / A N 5
P B 4 / A N 4
P A 3 / P F D
P B 3 / A N 3
P B 2 / A N 2
P B 1 / A N 1
P B 0 / A N 0
V S S
T M R 0
1
2
3
P A 2
4
P A 1
5
P A 0
6
7
8
9
1 0
N C
1 1
P F 3
1 2
P F 2
1 3
P F 1
1 4
P D 7
1 5
P D 6
1 6
P D 5
1 7
P D 4
1 8
1 9
P F 0
2 0
2 1
P C 0
2 2
P C 1
2 3
P C 2
2 4
H T 4 6 R 2 4 / H T 4 6 C 2 4
4 8 S S O P - A
2 4
2 3
2 2
2 1
2 0
1 9
1 8
1 7
1 6
1 5
1 4
1 3
4 8
4 7
4 6
4 5
4 4
4 3
4 2
4 1
4 0
3 9
3 8
3 7
3 6
3 5
3 4
3 3
3 2
3 1
3 0
2 9
2 8
2 7
2 6
2 5
P B 6 / A N 6
P B 7 / A N 7
P A 4 / T M R
P A 5 / I N T
P A 6 / S D A
P A 7 / S C L
O S C 2
O S C 1
V D D
R E S
P D 0 / P W M 0
P C 1
P B 6 / A N 6
P B 7 / A N 7
P A 4
P A 5 / I N T
P A 6 / S D A
P A 7 / S C L
P F 4
P F 5
P F 6
P F 7
O S C 2
O S C 1
V D D
R E S
T M R 1
P D 3 / P W M 3
P D 2 / P W M 2
P D 1 / P W M 1
P D 0 / P W M 0
P C 7
P C 6
P C 5
P C 4
P C 3
注意: SKDIP/SOP 封装的单片机的引脚具有兼容特性,使其在硬件应用时以最小的
改变去提供设备直接升级到更高的功能。
7
引脚说明
A/D 型单片机使用手册
HT46R47/HT46C47
引脚名称 I/O 掩膜选项 说明
PA0 ~ PA2
PA3 / PF D
PA4 / TM R
PA5 /
INT
PA6 ~ PA7
PB0/AN0
PB1/AN1
PB2/AN2
PB3/AN3
PD0/PWM I/O
OSC1
OSC2
I 斯密特触发器复位输入。低电平有效。
RES VDD 正电源供应。
VSS 负电源供应,接地。
I/O
I/O Pull-high
I
O
Pull-high
Wake-up
PA3 or PFD
Pull-high
I/O or PWM
Crystal or RC
8 位双向输入/输出口,每个位可由掩膜选项设置成唤醒输入。
软件指令决定引脚是 CMOS 输出或斯密特触发器输入。掩膜 选项决定端口上哪个位带上拉电阻。PA3 PA4 PA5 分别 与 PFDTMR
4 位双向输入/输出口。软件指令决定引脚是 CMOS 输出或斯 密特触发器输入。掩膜选项决定端口上哪个位带上拉电阻。 PB A/D 输入引脚共用。A/D 输入通过软件指令选择,一 但被选择作为 A/D 输入,I/O 功能和上拉电阻功能将自动无 效。
1 位双向输入/输出口。软件指令决定引脚是 CMOS 输出或斯 密特触发器输入。掩膜选项决定此引脚是否带上拉电阻。通 过掩膜选项选择 PWM 输出,PWM 输出与 PD0 引脚共用。
OSC1、OSC2 连接外部 RC 电路或晶体振荡器(由掩膜选项决 定) 作为内部系统时钟。在 RC 模式下,OSC2 的输出端信号 是系统时钟四分频。
引脚共用。
INT
注意:1. PA 上的每个引脚可通过掩膜选项被设定成具有唤醒功能。
2. 每个端口上的引脚可单独的配置带上拉电阻。
8
HT46R22/HT46C22
引脚名称 I/O 掩膜选项 说明
PA0 ~ PA2
PA3 / PF D
PA4 / TM R
PA5 /
INT
PA6 / SD A
PA7 / SC L
PB0/AN0
PB1/AN1
PB2/AN2
PB3/AN3
PB4/AN4
PB5/AN5
PB6/AN6
PB7/AN7
PC0~PC1 I/O Pull-high
PD0/PWM I/O
OSC1
OSC2
I
RES
VDD 正电源供应。 VSS 负电源供应,接地。
I/O
I/O Pull-high
I
O
Pull-high
Wake-up
PA3 or PFD
PA6 /PA7 or
SDA/SCL
Pull-high
I/O or PWM
Crystal or RC
斯密特触发器复位输入。低电平有效。
位双向输入/输出口,每个位可由掩膜选项设置成唤醒输入。
8
软件指令决定引脚是 选项决定端口上哪个位带上拉电阻。 与
PFDTMR
SCL 引脚共用,实现 I2C 总线功能。
位双向输入/输出口。软件指令决定引脚是 CMOS 输出或斯
8
密特触发器输入。掩膜选项决定所有引脚是否带上拉电阻。
PB A/D 输入引脚共用。A/D 输入通过软件指令选择,一
但被选择作为 效。
位双向输入/输出口。软件指令决定引脚是 CMOS 输出或斯
2
密特触发器输入。掩膜选项决定在端口上的引脚是否有上拉 电阻。
位双向输入/输出口。软件指令决定引脚是 CMOS 输出或斯
1
密特触发器输入。掩膜选项决定此引脚是否带上拉电阻。通 过掩膜选项选择
OSC2 连接 RC 电路或外部晶体振荡器(由掩膜选项决
OSC1
)作为内部系统时钟。在 RC 模式下,OSC2 的输出端信号
是系统时钟四分频。
CMOS 输出或斯密特触发器输入。掩膜
引脚共用。PA6 PA 7 分别与 SDA
INT
A/D 输入,I/O 功能和上拉电阻功能将自动无
PWM 输出,PWM 输出与 PD0 引脚共用。
PA3 PA 4 PA 5 分别
注意:1. PA 上的每个引脚可通过掩膜选项被设定成具有唤醒功能。
2. PA 上的引脚可单独的选择带上拉电阻,而 PB 和 PC 上的引脚不可以单独选择。如果选
择了上拉配置,则该这些端口所有的输入引脚都将被连接到上拉电阻。
9
A/D 型单片机使用手册
HT46R23/HT46C23
引脚名称 I/O 掩膜选项 说明
PA0 ~ PA2
PA3 / PF D
PA4 / TM R
PA5 /
INT
PA6 / SD A
PA7 / SC L
PB0/AN0
PB1/AN1
PB2/AN2
PB3/AN3
PB4/AN4
PB5/AN5
PB6/AN6
PB7/AN7
PC0~PC4 I/O Pull-high
PD0/PWM0
PD1/PWM1
OSC1
OSC2
I
RES
VDD 正电源供应。 VSS 负电源供应,接地。
I/O
I/O Pull-high
I/O
I
O
Pull-high
Wake-up
PA3 or PFD
PA6 /PA7 or
SDA/SCL
Pull-high
I/O or PWM
Crystal or RC
斯密特触发器复位输入。低电平有效。
8 位双向输入/输出口,每个位可由掩膜选项设置成唤醒输入。
软件指令决定引脚是 选项决定端口上哪个位带上拉电阻。 与
PFDTMR
SCL 引脚共用,实现 I2C 总线功能
位双向输入/输出口。软件指令决定引脚是 CMOS 输出或斯
8
密特触发器输入。掩膜选项决定所有引脚是否带上拉电阻。
PB A/D 输入引脚共用。A/D 输入通过软件指令选择,一
但被选择作为 效。
位双向输入/输出口。软件指令决定引脚是 CMOS 输出或斯
5
密特触发器输入。掩膜选项决定端口上的所有引脚是否带上 拉电阻。
2
密特触发器输入。掩膜选项决定端口上的引脚是否带上拉电 阻。通过掩膜选项选择 共用,
OSC1
定 是系统时钟四分频。
位双向输入/输出口。软件指令决定引脚是 CMOS 输出或斯
PWM1 输出与 PD1 引脚共用。
OSC2 连接外部 RC 电路或晶体振荡器(由掩膜选项决
)作为内部系统时钟。在 RC 模式下,OSC2 的输出端信号
CMOS 输出或斯密特触发器输入。掩膜
引脚共用。PA6 PA 7 分别与 SDA
INT
A/D 输入,I/O 功能和上拉电阻功能将自动无
PWM 输出,PWM0 输出与 PD0 引脚
PA3 PA 4 PA 5 分别
注意: 1. PA 上的每个引脚可通过掩膜选项被设定成具有唤醒功能。
2. PA 上的引脚可单独的选择带上拉电阻,而 PB、PC 和 PD 上的引脚不可以单独选 择。
如果选择了上拉配置,则该这些端口所有的输入引脚都将被连接到上拉电阻。
3. 此引脚说明表格基于 28-pin 的封装。由于封装的限制,在 24-pin 的封装中可能有些引脚
不存在。
10
HT46R24/HT46C24
引脚名称 I/O 掩膜选项 说明
PA0 ~ PA2
PA3 / PF D
PA4
PA5 /
INT
PA6 / SD A
PA7 / SC L
PB0/AN0
PB1/AN1
PB2/AN2
PB3/AN3
PB4/AN4
PB5/AN5
PB6/AN6
PB7/AN7
PC0~PC7 I/O Pull-high
PD0/PWM0
PD1/PWM1
PD2/PWM2
PD3/PWM3
PD4~PD7
PF0~PF7 I/O Pull-high
TMR0 I 定时/计数器 0 斯密特触发器输入。没有连接上拉电阻。 TMR1 I 定时/计数器 1 斯密特触发器输入。没有连接上拉电阻。
OSC1
OSC2
I
RES
VDD 正电源供应。 VSS 负电源供应,接地。
I/O
I/O Pull-high
I/O
I
O
Pull-high
Wake-up
PA3 or PFD
PA6 /PA7 or
SDA/SCL
Pull-high
I/O or PWM
Crystal or RC
斯密特触发器复位输入。低电平有效。
8 位双向输入/输出口,每个位可由掩膜选项设置成唤醒输入。
软件指令决定引脚是 选项决定端口上哪个位带上拉电阻。 和
引脚共用。PA 6 和 PA7 分别与 SDA 和 SCL 引脚共用,
INT
实现
I2C 总线功能。
位双向输入/输出口。软件指令决定引脚是 CMOS 输出或斯
8
密特触发器输入。掩膜选项决定在端口上哪个位带上拉电 阻。
PB A/D 输入引脚共用。A/D 输入通过软件指令选择,
一但被选择作为 无效。
位双向输入/输出口。软件指令决定引脚是 CMOS 输出或斯
8
密特触发器输入。掩膜选项决定端口上所有引脚是否带上拉 电阻。
位双向输入/输出口。软件指令决定引脚是 CMOS 输出或斯
8
密特触发器输入。掩膜选项决定端口上所有引脚是否带上拉 电阻。通过掩膜选项选择 出,它们分别与
位双向输入/输出口。软件指令决定引脚是 CMOS 输出或斯
8
密特触发器输入。掩膜选项决定端口上所有引脚是否带上拉 电阻。
OSC2 连接外部 RC 电路或晶体振荡器(由掩膜选项决
OSC1
)作为内部系统时钟。在 RC 模式下,OSC2 的输出端信号
是系统时钟四分频。
CMOS 输出或斯密特触发器输入。掩膜
A/D 输入,I/O 功能和上拉电阻功能将自动
PWM0/PWM1/PWM2 PWM3
PD0/PD1/PD2 PD3 引脚共用。
PA3 PA5 分别与 PFD
注意: 1. PA 上的每个引脚可通过掩膜选项被设定成具有唤醒功能。
2. PA 和 PB 上的引脚可单独的选择带上拉电阻,而 PC、PD 和 PF 上的引脚不可以单独选
择。如果选择了上拉配置,则该这些端口所有的输入引脚都将被连接到上拉电阻。
3. 此引脚说明表格基于 48-pin 封装。由于封装的限制,在 28-pin 的封装中可能有些引脚不
存在。在 28-pin 封装中没有外部引脚 TMR0TMR1 PD1/PWM1/TMR1 引脚共用。
11
极限参数
A/D 型单片机使用手册
供应电压.................................................................................VSS−0.3V to VSS+6.0V
输入电压................................................................................ V
储存温度...............................................................................................50°C~125°C
工作温度.................................................................................................40°C~85°C
这里只强调额定功率,超过极限参数功率的范围将对芯片造成损害,芯片在所 标示范围外的表现并不能预期,而长期工作在标示范围外条件下也可能影响芯 片的可靠性。
–0.3V to VDD+0.3V
SS
12
直流电气特性 Ta= 25 °C
符号 参数
V
I
DD1
I
DD2
I
DD3
I
STB1
I
STB2
Operating Voltage
DD
Operating Current
(Crystal OSC)
Operating Current
(RC OSC)
Operating Current 5V
Standby Current
(WDT Enabled)
Standby Current
(WDT and A/D Disabled)
测试条件
V
DD
f
f
3V 0.6 1.5 mA
5V 3V 0.8 1.5 mA
5V
条件
=4MHz 2.2  5.5 V
SYS
=8MHz 3.3  5.5 V
SYS
No load, f
SYS
=4MHz
ADC off
No load, f
SYS
=4MHz
ADC off
No load, f
SYS
=8MHz
ADC off
3V 5 µA
No load,
system HALT
5V
No load,
3V 1 µA
system HALT
5V
最小 典型 最大 单位
2 4 mA
2.5 4 mA
3 5 mA
10 µA
2 µA
Input Low Voltage for I/O
V
Ports,TMR,TMR0,TMR1,
IL1
INT
0 0.3V
V
DD
Input High Voltage for I/O
V
Ports,TMR,TMR0,TMR1,
IH1
INT
V
Input Low Voltage ( RES ) 0  0.4V
IL2
V
Input High Voltage ( RES ) 0.9V
IH2
V
Low Voltage Reset 2.7 3 3.3 V
LV R
IOL I/O Port Sink Current
IOH I/O Port Source Current
RPH Pull-high Resistance
0.7V
3V VOL=0.1V
5V V
DD
=0.1VDD 10 20  mA
OL
VDD V
DD
V
DD
4 8  mA
3V VOH=0.9VDD 2 4 mA
5V V
=0.9VDD 5 10 mA
OH
3V 40 60 80 k
5V
10 30 50 kΩ
DD
V
DD
V
VAD A/D Input Voltage 0  VDD V
EAD
I
ADC
A/D Conversion Integral
Non-Linearity Error
Additional power consumption
If A/D Converter is used
±0.5 ±1 LSB
3V 0.5 1 mA
5V
1.5 3 mA
13
A/D 型单片机使用手册
交流电气特性 Ta= 25 °C
符号 参数
V
f
System Clock
SYS
f
Timer I/P Frequency (TMR)
TIMER
t
Watchdog Oscillator Period
WDTOSC
t
t
t
t
RES
SST
LV R
INT
External Reset Low Pulse
Width
System Start-up Timer Period Wake-up from HALT 1024 *t
Low Voltage Width to Reset 1  ms
Interrupt Pulse Width 1 µs
DD
测试条件
条件
最小 典型 最大 单位
2.2V ~ 5.5V 400  4000 kHz
3.3V ~ 5.5V 400  8000 kHz2.2V ~ 5.5V 0  4000 kHz3.3V ~ 5.5V 0  8000 kHz
3V 45 90 180 µs
5V
1
32 65 130 µs
tAD A/D Clock Period 1 µs
t
A/D Conversion Time 76 t
ADC
t
A/D Sampling Time 32 t
ADCS
t
I
IIC
*t
=1/f
SYS
2
C Bus Clock Period
SYS
Connect to external
pull-high resistor 2k
64 *t
µs
SYS
AD
AD
SYS
14
系统结构
内部系统结构是盛群半导体公司 A/D 型单片机具有良好运行性能的主要因素。 由于采用 RISC 结构,此系列单片机具有高运算速度和高性能的特性。通过流 水线的方式,指令的取得和执行同时进行,此举使得除了分支、调用和查表指 令外,其它指令都能在一个指令周期内完成。8 位的 ALU 参与指令集中所有 的运算,它可完成算术运算、逻辑运算、移位、加、减和分支等功能,而内部 的数据路径则以通过累加器或 ALU 的方式加以简化。有些寄存器在数据存储 器中被实现,且可以直接或间接寻址。简单的寄存器寻址方式和结构特性,确 保了在提供最大可靠度和灵活性的 I/O A/D 控制系统时,仅需要少数的外部 器件。这使得这些单片机适合用在低成本高产量的控制应用上,可以提供 2K8K 字的程序存储器和 64 384 字节数据储存。
时序和流水线结构(Pipelining
系统时钟由晶体/陶瓷振荡器,或是由 RC 振荡器提供,细分为 T1~T4 四个内 部产生的非重叠时序。程序计数器在 T1 时自动加一并抓取一条新的指令。剩 下的 T2~T4 时钟完成解码和执行功能,因此一个 T1~T4 时钟形成一个指令周 期。虽然指令的取得和执行发生在连续的指令周期,但单片机流水线的结构会 保证指令在一个指令周期内被有效的执行,特殊的情况发生在程序计数器的内 容被改变的时候,如子程序的调用或跳转,在这情况下指令将需要多一个指令 周期的时间去执行。
注意: 当使用 RC 振荡器时,OSC2 可以如同一个 T1 相时钟同步引脚一样地被使用,这个 T1 相时
钟有 f
15
/4 的频率,拥有 1:3 高/低的占空比。
SYS
A/D 型单片机使用手册
O s c i l l a t o r C l o c k
( S y s t e m C l o c k )
P h a s e C l o c k T 1
P h a s e C l o c k T 2
P h a s e C l o c k T 3
P h a s e C l o c k T 4
P r o g r a m C o u n t e r
P i p e l i n i n g
P C P C + 1 P C + 2
F e t c h I n s t . ( P C )
E x e c u t e I n s t . ( P C - 1 )
F e t c h I n s t . ( P C + 1 )
E x e c u t e I n s t . ( P C )
F e t c h I n s t . ( P C + 2 )
E x e c u t e I n s t . ( P C + 1 )
系统时序和流水线
如果指令牵涉到分支,例如跳转或调用等指令,则需要两个指令周期才能完成 指令执行。需要一个额外周期的原因是程序先用一个周期取出实际要跳转或调 用的地址,再用另一个周期去实际执行分支动作,因此程序设计师必须特别考 虑额外周期的问题,尤其是在执行时间要求比较严格的时候。
1
2
3
4
5
6
D E L A Y :
M O V A , [ 1 2 H ]
C A L L D E L A Y
C P L [ 1 2 H ]
:
:
N O P
F e t c h I n s t . 1 E x e c u t e I n s t . 1
F e t c h I n s t . 2
E x e c u t e I n s t . 2
F e t c h I n s t . 3
F l u s h P i p e l i n e
F e t c h I n s t . 6 E x e c u t e I n s t . 6
F e t c h I n s t . 7
16
程序计数器
程序执行期间,程序计数器用来指向下一条要执行的指令地址。除了 JMP CALL 这些要求跳转到一个非连续的程序存储器地址之外,它会在每条指令执 行完后自动增加一。对于 A/D 系列的单片机,根据所选择的单片机型号不同, 程序计数器宽度会因程序存储器容量的不同而不同。然而必须要注意只有低 8 位,即程序计数器低字节寄存器 PCL,是可以让使用者直接读写的。
当执行的指令要求跳转到非连续的地址时,如跳转指令、子程序调用、中断或 复位等,单片机通过载入所需的地址到程序计数器来控制程序。对于条件跳转 指令,一旦条件符合,下一条在现在指令执行时所取得的指令即会被摒弃,而 由一个空指令周期来加以取代。
程序计数器低字节,即程序计数器低字节寄存器 PCL,可以通过程序控制取得, 且它是可以读取和写入的寄存器。通过直接传送数据到这寄存器,一个程序短 跳转可以直接被执行,然而因为只有低字节的运用是有效的,因此跳转被限制 在同页存储器,即 256 个存储器地址的范围内,当这样一个程序跳转要执行时, 需注意会插入一个空指令周期。
注意: 程序计数器低字节在程序控制下是完全可用的。PCL 的使用可能导致程序分支,所以额外
的周期需要预先取得。有关 PCL 寄存器更多的信息可在特殊功能寄存器部份中找到。
17
A/D 型单片机使用手册
模式
复位 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
定时/计数器 0 中断 0 0 0 0 0 0 0 0 0 1 0 0 0
定时/计数器 1 中断
(
只对 HT46R24/HT46C24)
A/D 转换器中断
(
除了 HT46R24/HT46C24)
A/D 转换器中断
(
只对 HT46R24/HT46C24)
I2C 总线中断
(
除了 HT46R24/HT46C24)
I2C 总线中断
(
只对 HT46R24/HT46C24)
条件跳转 Program Counter + 2
写入 PCL 寄存器 PC12 PC11 PC10 PC9 PC8 @7 @6 @5 @4 @3 @2 @1 @0
跳转或调用子程序 #12 #11 #10 #9 #8 #7 #6 #5 #4 #3 #2 #1 #0
由子程序返回 S12 S11 S10 S9 S8 S7 S6 S5 S4 S3 S2 S1 S0
b12 b11 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1 b0
0 0 0 0 0 0 0 0 0 1 1 0 0
0 0 0 0 0 0 0 0 0 1 1 0 0
0 0 0 0 0 0 0 0 1 0 0 0 0
0 0 0 0 0 0 0 0 1 0 0 0 0
0 0 0 0 0 0 0 0 1 0 1 0 0
程序计数器
注意:1. P C12~PC8:目前程序计数器位
2. @7~@0:PCL 位
3. #12~#0:指令码位
4. S12~S0:堆栈寄存器位
5. 对于 HT46R24/HT46C24,程序计数器有 13 个位,即从 b12~b0。
6. 对于 HT46R23/HT46C23,由于程序计数器只有 12 个位,表格中的列 b12 是无效的。
7. 对于 HT46R47/HT46C47,HT46R22/HT46C22,由于程序计数器只有 11 个位,表格中的
b11 b12 是无效的。
8. 定时/计数器 1 溢出行,只有 HT46R24/HT46C24 可用。
9. 对于 HT46R47/HT46C47HT46R22/HT46C22 HT46R23/HT46C23,定时/计数器 0 即
TMR
18
堆栈
堆栈是存储器中一个特殊的部分,它只用来储存程序计数器中的内容。根据选 择的单片机,堆栈可介于 68 或 16 层之间,它们既不是数据部份也不是程序 空间部份,且既不是可读取也不是可写入的。当前层由堆栈指针(Stack Pointer, SP)加以指示,同样也是不可读写的。在子程序调用或中断响应服务时,程序 计数器的内容被压入堆栈。当子程序或中断服务程序结束时,返回指令(RETRETI)使程序计数器从堆栈中重新得到它之前的值。当芯片复位之后,SP 将指向堆栈的顶部。
如果堆栈已满,且有非屏蔽的中断发生,中断请求标志位会被置位,但是中断 响应将被禁止。当堆栈指针减少(执行 RET RETI),中断将被响应。这个 特性提供程序设计者简单的方法来预防堆栈溢出。然而即使堆栈已满,CALL 指令仍然可以被执行,而造成堆栈溢出。使用时应避免堆栈溢出的情况发生, 因为这可能会造成不可预期的程序分支指令执行错误。
P r o g r a m C o u n t e r
T o p o f S T A C K
S t a c k
P o i n t e r
B o t t o m o f S T A C K
注意: 1. 对于 HT46R47/HT46C47 HT46R22/HT46C22 而言,N=6,即有 6 层堆栈可使用。
2. 对于 HT46R23/HT46C23 而言,N=8,即有 8 层堆栈可使用。
3. 对于 HT46R24/HT46C24 而言,N=16,即有 16 层堆栈可使用。
S t a c k L e v e l 1
S t a c k L e v e l 2
S t a c k L e v e l 3
S t a c k L e v e l N
P r o g r a m
M e m o r y
19
A/D 型单片机使用手册
算术及逻辑单元 – ALU
算术逻辑单元是单片机中很重要的部份,执行指令集中的算术和逻辑运算。 ALU 连接到单片机的数据总线,在接收相关的指令码后执行需要的算术与逻 辑运算,并将结果储存在指定的寄存器,当 ALU 计算或操作时,可能导致进 位、借位或其它状态的改变,而相关的状态寄存器会因此更新内容以显示这些 改变,ALU 所提供的功能如下:
算术运算:ADDADDMADCADCMSUBSUBMSBCSBCMDAA
逻辑运算:ANDORXORANDMORMXORMCPLCPLA
移位运算:RRARRRRCARRCRLARLRLCARLC
增一和减一:INCAINCDECADEC
分支判断:JMPSZSZASNZSIZSDZSIZASDZACALLRETRETI
20
程序存储器
程序存储器用来存放用户代码即储存程序。对于单片机而言,有两种程序存储 器可供使用。第一种是一次可编程存储器(OTP),使用者可编写他们的应用 码到单片机中,具有 OTP 存储器的单片机在名称上有“R”做标示。使用适当 的编程工具,OTP 单片机可以提供使用者灵活的方式来自由开发他们的应用, 这对于除错或需要经常升级与改变程序的产品是很有帮助的。对于中小型量 产,OTP 亦为极佳的选择。另一种存储器为掩膜存储器,单片机名称上有“C 做标示,这些单片机对于大量生产提供最佳的成本效益。
结构
14 位的程序存储器的容量是 2K16 位的程序存储器的容量则是 8K,这取决 于选用哪种单片机。程序存储器用程序计数器来寻址,其中也包含数据、表格 和中断入口,数据表格可以设定在程序存储器的任何地址,由表格指针来寻址。
以下是 A/D 型单片机程序存储器结构图。
H T 4 6 R 2 3 H T 4 6 C 2 3
I n i t i a l i z a t i o n
V e c t o r
E x t e r n a l
I n t e r r u p t V e c t o r
T i m e r / C o u n t e r
I n t e r r u p t V e c t o r
A / D C o n v e r t e r
I n t e r r u p t V e c t o r
2
I
C B u s
I n t e r r u p t V e c t o r
0 0 0 H
0 0 4 H
0 0 8 H
0 0 C H
0 1 0 H
0 1 4 H
3 F F H
4 0 0 H
7 F F H
8 0 0 H
F F F H
1 0 0 0 H
1 F F F H
H T 4 6 R 4 7 H T 4 6 C 4 7
I n i t i a l i z a t i o n
V e c t o r
E x t e r n a l
I n t e r r u p t V e c t o r
T i m e r / C o u n t e r
I n t e r r u p t V e c t o r
A / D C o n v e r t e r
I n t e r r u p t V e c t o r
H T 4 6 R 2 2 H T 4 6 C 2 2
I n i t i a l i z a t i o n
V e c t o r
E x t e r n a l
I n t e r r u p t V e c t o r
T i m e r / C o u n t e r
I n t e r r u p t V e c t o r
A / D C o n v e r t e r
I n t e r r u p t V e c t o r
I2C B u s
I n t e r r u p t V e c t o r
1 4 b i t s1 4 b i t s
H T 4 6 R 2 4 H T 4 6 C 2 4
I n i t i a l i z a t i o n
V e c t o r
E x t e r n a l
I n t e r r u p t V e c t o r
T i m e r / C o u n t e r 0
I n t e r r u p t V e c t o r
T i m e r / C o u n t e r 1
I n t e r r u p t V e c t o r
A / D C o n v e r t e r
I n t e r r u p t V e c t o r
I2C B u s
I n t e r r u p t V e c t o r
N o t I m p l e m e n t e d
1 6 b i t s1 5 b i t s
21
A/D 型单片机使用手册
特殊向量
程序存储器内部某些地址保留用做诸如复位和中断入口等特殊用途。
地址 000H
此向量是芯片复位后的程序起始地址。在芯片复位之后,程序将跳到这个 地址并开始执行。
地址 004H
此向量用做外部中断入口,假如单片机外部中断引脚电平转成低电平,而 外部中断使能且堆栈没有满的情况下,程序将跳到这个地址开始执行。
地址 008H
此内部中断向量被定时/计数器所使用,当定时器发生溢出,而定时器中断 使能且堆栈没有满的情况下,程序将跳到这个地址并开始执行。对于
HT46R24/HT46C24 而言,它具有两个定时器,这个定时器称为定时/计数器 0 TMR0。而对于其它单片机,则称为 TMR
地址 00CH
除了 HT46R24/HT46C24,此内部中断向量被 A/D 转换器使用。当一个 A/D 转换周期结束,而 A/D 中断使能且堆栈没有满的情况下,程序将跳到这个 地址并开始执行。对于 HT46R24/HT46C24,此内部向量被它的定时/计数器 1 使用。如果 TMR1 计数发生溢出,而内部中断使能且堆栈没有满的情况 下,程序将跳到这个地址并开始执行。
地址 010H
除了 HT46R47/HT46C47 HT46R24/HT46C24,此内部中断向量被 I 线接口使用。当 I 程序将跳到这个地址并开始执行。
2
C 总线需要数据传送时,如果 I2C 中断使能且堆栈没有满,
2
C
对于 HT46R24/HT46C24,此内部中断向量被它的 A/D 转换器中断使用。当 HT46R24/HT46C24 A/D 转换周期结束时,如果 A/D 中断使能且堆栈没 有满,程序将跳到这个地址并开始执行。
地址 014H
此向量只对 HT46R24/HT46C24 有效,被它的 I HT46R24/HT46C24 中的 I
2
C 总线需要数据传送时,如果 I2C 中断使能且堆
栈没有满,程序将跳到这个地址并开始执行。
22
2
C 总线接口使用。当
查表
程序存储器中的任何地址都可以定义成一个表格,以便储存固定的数据。使用 表格时,表格指针必须先行设定,其方式是将表格的低字节地址放在表格指针 寄存器 TBLP 中。这个寄存器定义表格较低的 8 位地址。在设定完表格指针后, 表格数据可以使用“TABRDC [m]”或“ TA BRDL [m] ”指令从当前的程序所在 的存储器页或存储器最后一页中来查表读取。当这些指令执行时,程序存储器 中表格数据低字节,将被传送到使用者所指定的数据存储器,程序存储器中表 格数据的高字节,则被传送到 TBLH 特殊寄存器,而高字节中未使用的位将被 读取为“0”。
下图是查表中寻址/数据流程图
P r o g r a m C o u n t e r h i g h b y t e
T B L P
P r o g r a m M e m o r y
T B L H S p e c i f i e d b y [ m ]
H i g h b y t e o f t a b l e c o n t e n t s
L o w b y t e o f t a b l e c o n t e n t s
查表程序范例
以下范例说明 HT46R47 A/D 型单片机中,表格指针和表格数据如何被定义和 执行。这个例子使用的表格数据用 ORG 伪指令储存在存储器的最后一页,在 此 ORG 伪指令中的值为 700H,即 2K 程序存储器 HT46R47 单片机中最后一 页存储器的起始地址,而表格指针的初始值则为 06H,这可保证从数据表格读 取的第一笔数据位于程序存储器地址 706H 即最后一页起始地址后的第六个地 址。值得注意的是,假如“TABRDC [m]”指令被使用,则表格指针指向当前 页。在这个例子中,表格数据的高字节等于零,而当“TABRDL [ m]”指令被 执行时,此值将会自动的被传送到 TBLH 寄存器。
23
A/D 型单片机使用手册
tempreg1 db ? ; temporary register #1 tempreg2 db ? ; temporary register #2 : :
mov a,06h ; initialize table pointer – note that this address ; is referenced
mov tblp,a ; to the last page or present page : :
tabrdl tempreg1 ; transfers value in table referenced by table pointer ; to tempreg1 ; data at prog. memory address 706H transferred to ; tempreg1 and TBLH
dec tblp ; reduce value of table pointer by one
tabrdl tempreg2 ; transfers value in table referenced by table pointer ; to tempreg2 ; data at prog. memory address 705H transferred to ; tempreg2 and TBLH ; in this example the data 1A is transferred to ; tempreg1 and data ″0F″ to register tempreg2 ; the value ″0″ will be transferred to the high byte ; register TBLH : :
org 700h ; sets initial address of last page (for HT46R47)
dc 00Ah, 00Bh, 00Ch, 00Dh, 00Eh, 00Fh, 01Ah, 01Bh : :
因为 TBLH 寄存器是只读寄存器,不能重新储存,若主程序和中断服务程序都 使用表格读取指令,应该注意它的保护。使用表格读取指令,中断服务程序可 能会改变 TBLH 的值,若随后在主程序中再次使用这个值,则会发生错误。因 此建议避免同时使用表格读取指令。然而在某些情况下,如果同时使用表格读 取指令是不可避免的,则在执行任何主程序的表格读取指令前,中断应该先除 能,另外要注意的是所有与表格相关的指令,都需要两个指令周期去完成操作。
指令
b12 b11 b10 B9 b8 b7 b6 b5 b4 b3 b2 b1 b0
TABRDC[m] PC12 PC11 PC10 PC9 PC8 @7 @6 @5 @4 @3 @2 @1 @0
TABRDL[m] 1 1 1 1 1 @7 @6 @5 @4 @3 @2 @1 @0
注意: 1. PC12~PC8:当前程序计数器位
2. @7~@0:表格指针 TBLP 位
3. 对 HT46R24/HT46C24 来说,表格地址是 13 位,从 b12~b0
4. 对 HT46R23/HT46C23 来说,表格地址是 12 位,从 b11~b0
5. 对 HT46R47/HT46C47 HT46R22/HT46C22 来说,表格地址是 11 位,从 b10~b0
24
表格地址
数据存储器
数据存储器是内容可更改的 8 RAM 内部存储器,用来储存临时数据,且分 为两部份。第一部份是特殊功能寄存器,这些寄存器有固定的地址且与单片机 的正确操作密切相关。大多特殊功能寄存器都可在程序控制下直接读取和写 入,但有些被加以保护而不对用户开放。第二部份数据存储器是做一般用途使 用,都可在程序控制下进行读取和写入。
结构
数据存储器的两个部份,即专用和通用数据存储器,位于连续的地址。全部 RAM 8 位宽度,但存储器长度因所选择的单片机而不同。所有单片机的数 据存储器的起始地址都是 00HHT46R47/HT46C47 HT46R22/HT46C22 的 结束地址是 7FH,HT46R23/HT46C23 和 HT46R24/HT46C24 的结束地址是 FFH。常见的寄存器,如 ACC PCL 等,全都具有相同的数据存储器地址。
0 0 H
S p e c i a l P u r p o s e D a t a M e m o r y
3 F H
4 0 H
G e n e r a l P u r p o s e D a t a M e m o r y
7 F H / F F H
注意: 除了少数专用的位,大部份数据存储器的位都可以直接使用“SET [m].i”和“CLR [m].i
加以操作。数据存储器也可通过间接寻址指针(MP)进行存取。
25
A/D 型单片机使用手册
通用数据存储器
所有的单片机程序需要一个读/写的存储区,让临界数据可以被储存和再使用。 该 RAM 区域就是通用数据存储器。这个数据存储区可让使用者进行读取和写 入的操作。使用“SET [m].i”和“CLR [m].i”指令可对个别的位做置位或复位 的操作,方便用户在数据存储器内进行位操作。
7 F H
4 0 H
H T 4 6 R 4 7 H T 4 6 C 4 7
H T 4 6 R 2 2 H T 4 6 C 2 2
4 0 H
7 F H
4 0 H
7 F H
8 0 H
F F H
H T 4 6 R 2 3 H T 4 6 C 2 3
7 F H
F F H
4 0 H
8 0 H
H T 4 6 R 2 4 H T 4 6 C 2 4
B a n k 0
B a n k 1
注意: HT46R24/HT46C24 中通用数据存储器的 384 个字节储存在两个独立的存储器区。在通用数
据存储器内读取或写入数据前,需先确认已设定间接寻址指针 BP 选择了正确的数据存储器
区。
26
专用数据存储器
这个区域的数据存储器是存放特殊寄存器的,这些寄存器与单片机的正确操作 密切相关,大多数的寄存器可进行读取和写入,只有一些是被保护而只能读取 的,相关细节的介绍请参看有关特殊功能寄存器的部份。要注意的是,任何读 取指令对存储器中未定义的地址进行读取将得到“00H”的值。
0 A H
0 B H 0 C H 0 D H
0 E H
0 F H
1 A H
1 B H 1 C H 1 D H
1 E H
1 F H
3 F H
H T 4 6 R 4 7 H T 4 6 C 4 7
0 0 H 0 1 H 0 2 H 0 3 H 0 4 H 0 5 H 0 6 H 0 7 H 0 8 H 0 9 H
1 0 H 1 1 H 1 2 H 1 3 H 1 4 H 1 5 H 1 6 H 1 7 H 1 8 H 1 9 H
2 0 H 2 1 H 2 2 H 2 3 H 2 4 H 2 5 H 2 6 H 2 7 H 2 8 H 2 9 H
I A R M P
A C C
P C L T B L P T B L H
S T A T U S
I N T C
T M R
T M R C
P A
P A C
P B
P B C
P D
P D C
P W M
A D R L
A D R H A D C R
A C S R
H T 4 6 R 2 2 H T 4 6 C 2 2
I A R
M P
A C C
P C L T B L P T B L H
S T A T U S
I N T C 0
T M R
T M R C
P A
P A C
P B
P B C
P C
P C C
P D
P D C P W M
I N T C 1
H A D R
H C R
H S R
H D R
A D R L A D R H A D C R A C S R
H T 4 6 R 2 3 H T 4 6 C 2 3
I A R 0 M P 0 I A R 1 M P 1
A C C
P C L T B L P T B L H
S T A T U S
I N T C 0 T M R H
T M R L
T M R C
P A
P A C
P B
P B C
P C
P C C
P D
P D C P W M 0 P W M 1
I N T C 1
H A D R
H C R
H S R
H D R
A D R L A D R H A D C R
A C S R
H T 4 6 R 2 4 H T 4 6 C 2 4
I A R 0 M P 0 I A R 1 M P 1
B P
A C C
P C L T B L P T B L H
S T A T U S
I N T C 0
T M R 0 H
T M R 0 L T M R 0 C T M R 1 H
T M R 1 L T M R 1 C
P A
P A C
P B
P B C
P C
P C C
P D
P D C P W M 0 P W M 1 P W M 2 P W M 3
I N T C 1
H A D R
H C R
H S R
H D R
A D R L A D R H A D C R A C S R
P F
P F C
S p e c i a l P u r p o s e D a t a M e m o r y
: U n u s e d
R e a d a s " 0 0 "
27
A/D 型单片机使用手册
特殊功能寄存器
为了确保单片机能成功的操作,数据存储器中设置了一些内部寄存器。这些寄 存器确保内部功能(如定时器和中断等)和外部功能(如 I/O 数据控制和 A/D 转换操作)的正确操作。在数据存储器中,这些寄存器以 00H 作为起始地址。 在特殊功能寄存器和通用数据存储器的起始地址之间,有一些未定义的数据存 储器,被保留用来做未来扩充,若从这些地址读取数据将返回 00H 值。
间接寻址寄存器 – IAR, IAR0, IAR1
间接寻址的方法准许使用间接寻址指针做数据操作,以取代定义实际存储器地 址的直接存储器寻址方法。在间接寻址寄存器上的任何动作,将对间接寻址指 针(MP)所指定的存储器地址产生对应的读/写操作。对于 HT46R47/HT46C47HT46R22/HT46C22 系列,提供一个间接寻址寄存器(IAR)和一个间接寻址指(MP)。而对于 HT46R23/HT46C23 HT46R24/HT46C24 系列,则提供两个 间接寻址寄存器(IAR0 IAR1),两个间接寻址指针(MP0 MP1)。要注意的 是,这些间接寻址寄存器并不是实际存在的,直接读取 IAR 寄存器将返回 00H 的结果,而直接写入此寄存器则不做任何操作。
间接寻址指针 – MP, MP0, MP1
对于 HT46R47/HT46C47 和 HT46R22/HT46C22 系列,提供一个间接寻址指针,MP。而对于 HT46R23/HT46C23 和 HT46R24/HT46C24 系列,则提供了两 个间接寻址指针,即 MP0 MP1。由于这些指针在数据存储器中能象普通的 寄存器一般被写入和操作,因此提供了一个寻址和数据追踪的有效方法。当对 间接寻址寄存器进行任何操作时,单片机指向的实际地址是由间接寻址指针所 指定的地址。
注意:HT46R47/HT46C47 和 HT46R22/HT46C22 而言,间接寻址指针的第 7 位没有作用。可是,
必须注意当间接寻址指针被读取时,其值为 1
28
以下的例子说明如何清除一个具 4 RAM 地址的区块,它们已事先被定义成 地址 adres1 adres4
data .section ´data´ adres1 db ? adres2 db ? adres3 db ? adres4 db ? block db ? code .section at 0 ´code´ org 00h start: mov a,04h ; setup size of block mov block,a mov a,offset adres1 ; Accumulator loaded with first RAM address mov mp,a ; setup memory pointer with first RAM ; address
loop: clr [00h] ; inc mp ; increment memory pointer sdz block ; check if last memory location has been ; cleared jmp loop
continue:
在上面的例子中有一值得注意,即并没有确定 RAM 地址。
clear the data at address defined by mp
储存区指针 – BP
只有 HT46R24/HT46C24 具有储存区指针。与 A/D 系列其它单片机相比,具有 储存区指针的 HT46R24/HT46C24 单片机,它的通用数据存储器容量更大。通 用数据存储器的地址范围是从 40H FFH,只能提供 192 个字节。然而把存 储器分成两个储存区,即储存区 0 和储存区 1,通用数据存储器的容量就可以 扩充到 384 个字节。储存区指针第 0 位用来设定通用数据存储器的当前储存区。 复位后,通用数据存储器会初始化到储存区 0,但是在暂停模式下的 WDT 溢 出复位,不会改变通用数据存储器的储存区号。当需要往 HT46R24/HT46C24 中的通用数据存储器读取或写入数据时,必须先设定储存区指针以确定已选择 了正确的储存区。请注意,特殊功能数据存储器不受储存区的影响,也就是说, 不论是在储存区 0 或储存区 1,都能对特殊功能寄存器进行读写操作。
累加器 – ACC
对任何单片机来说,累加器是相当重要的且与 ALU 所完成的运算有密切关系, 所有 ALU 得到的运算结果都会暂时储存在 ACC 累加器里。若没有累加器, ALU 必须在每次进行如加法、减法和移位的运算时,将结果写入到数据存储 器,这样会造成程序编写和时间的负担。另外数据传送也常常牵涉到累加器的 临时储存功能,例如在一使用者定义的寄存器和另一个寄存器之间传送数据 时,由于两寄存器之间不能直接传送数据,因此必须通过累加器来传送数据。
29
A/D 型单片机使用手册
程序计数器低字节寄存器 – PCL
为了提供额外的程序控制功能,程序计数器较低字节设置在数据存储器的特殊 功能区域内,程序员可对此寄存器进行操作,很容易的直接跳转到其它程序地 址。直接给 PCL 寄存器赋值将导致程序直接跳转到程序存储器的某一地址, 然而由于寄存器只有 8 位的长度,因此只允许在本页的程序存储器范围内进行 跳转,而当使用这种运算时,要注意会插入一个空指令周期。
表格寄存器 – TBLP, TBLH
这两个特殊功能寄存器对储存在程序存储器中的表格进行操作。TBLP 为表格 指针,指向表格的地址。它的值必须在任何表格读取指令执行前加以设定,由 于它的值可以被如 INC DEC 的指令所改变,这就提供了一种简单的方法对 表格数据进行读取。表格读取数据指令执行之后,表格数据高字节存储在TBLH 中。其中要注意的是,表格数据低字节会被传送到使用者指定的地址。
状态寄存器 – STATUS
8 位寄存器(0AH)包含零标志位(Z)、进位标志位(C)、辅助进位标志位AC)、溢出标志位(OV)、暂停标志位(PDF)和看门狗溢出标志位(TO)。 它同时记录状态数据和控制运算顺序。 除了 TO PDF 标志位外,状态寄存器中的位像其它大部份寄存器一样可以被 改变,但任何数据写入到状态寄存器将不会改变 TO PDF 标志位。另外,执 行不同的指令后,与状态寄存器有关的运算可能会得到不同的结果。TO 标志 位只会受系统上电、看门狗溢出、或执行“CLR WDT”或“ HALT”指令影响。
PDF 标志位只会受执行“HALT”或“CLR WDT”指令或系统上电影响。
ZOVAC C 标志位通常反映最近运算的状态
当加法运算的结果产生进位,或减法运算的结果没有产生借位时,则 C
置位,否则 C 被清零,同时 C 也会被带进位/借位的移位指令所影响。
当低半字节加法运算的结果产生进位,或高半字节减法运算的结果没有产
生借位时,AC 被置位,否则 AC 被清零。
当算术或逻辑运算结果是零时,Z 被置位,否则 Z 被清零。
当运算结果高两位的进位状态异或结果为 1 时,OV 被置位,否则 OV 被清
零。
系统上电或执行“CLR WDT”指令会清零 PDF,而执行“HALT”指令则
会置位 PDF。
系统上电或执行“CLR WDT”或“HALT”指令会清零 TO,而当 WDT
出则会置位 TO
30
b 7 b 0
T O P D F O V Z A C C
另外当进入一个中断程序或执行子程序调用时,状态寄存器不会自动压入到堆 栈保存。假如状态寄存器的内容是重要的且子程序可能改变状态寄存器的话, 则需谨慎的去做正确的储存。
中断控制寄存器 – INTC, INTC0, INTC1
8 位的 INTC, INTC0 INTC1 寄存器用来控制外部和内部中断的动作。通过 使用标准的位操作指令来设定这些寄存器的位的值,每个中断的使能/除能功 能可分别被控制。可使用的的中断功能有内部定时器中断、模数转换中断、I 总线中断,以及外部中断引脚
中断。对于 HT46R47/HT46C47,只需要一
INT
8 位的中断控制寄存器 INTC 来控制它所有的中断功能,而其它的单片机则 需要两个中断控制寄存器 INTC0 INTC1INTC INTC0 寄存器内的主中 断位 EMI 控制所有中断的使能/除能,用来设定所有中断使能位的开或关。当 一个中断程序被响应时,就会自动屏蔽其它中断,EMI 位将被清除,而执行 “RETI”指令则会置位 EMI 位。
S T A T U S R e g i s t e r
A r i t h m e t i c / l o g i c o p e r a t i o n f l a g s
C a r r y F l a g A u x i l i a r y C a r r y F l a g Z e r o F l a g O v e r f o l w F l a g
S y s t e m m a n a g e m e n t f l a g s
P o w e r d o w n f l a g W a t c h d o g t i m e - o u t f l a g
N o t i m p l e m e n t e d , r e a d a s " 0 "
2
C
注意: 若遇到在当前中断服务程序中要再响应其它的中断程序时,可以在进入该中断服务程序后,
在程序中用手动的方式将 EMI 位置为“1”。
定时/计数寄存器
该系列的单片机集成了一个或二个 8 位或 16 位的定时/计数器,这取决于您选 择的型号。对于具有一个定时/计数器的单片机而言,寄存器 TMR 是计数值存 放的位置。对应的控制寄存器 TMRC,含有 TMR 寄存器的设定信息。对于具 有两个 16 位定时器的 HT46R24/HT46C24 而言,分别是 TMR0 和 TMR1 及各 自的控制寄存器 TMR0C TMR1C。对于 16 位的定时器,存储实际的计时数 值需要两个字节,分别为高字节与低字节。寄存器对应为 TMRL/TMRH TMR0L/TMR0H 以及 TMR1L/TMR1H。请注意,定时器寄存器可以预先写入 固定的数据,以允许设定不同的时间中断。
31
A/D 型单片机使用手册
输入/输出端口和控制寄存器
在特殊功能寄存器中,输入/输出寄存器和它们相对应的控制寄存器很重要。 所有的输入/输出端口都有相对应的寄存器,且被标示为 PAPBPC 等。如 数据存储器结构图中所示,这些输入/输出寄存器映射到数据存储器的特定地 址,用以传送端口上的输入/输出数据。每个输入/输出端口有一个相对应的控 制寄存器,分别为 PAC PBC PCC 等,也同样映射到数据存储器的特定地 址。这些控制寄存器设定引脚的状态,以决定哪些是输入口,哪些是输出口。 要设定一个引脚为输入,控制寄存器对应的位必须设定成逻辑高,若引脚设定 为输出,则控制寄存器对应的位必须设为逻辑低。程序初始化期间,在从输入 /输出端口中读取或写入数据之前,必须先设定控制寄存器的位以确定引脚为 输入或输出。使用“SET [m].i”和“CLR [m].i”指令可以直接设定这些寄存器 的某一位。这种在程序中可以通过改变输入/输出端口控制寄存器中某一位而 直接改变该端口输入/输出状态的能力是此系列单片机非常有用的特性。
脉冲宽度调制寄存器 – PWM, PWM0, PWM1, PWM2, PWM3
每款 A/D 系列的单片机都包含 1 个、2 个或是 4 个集成的脉冲宽度调制器(即 PWM)。每个 PWM 都具有自己独立的控制寄存器。对于只有一个脉冲宽度调 制器的单片机,它的控制寄存器为 PWM。具有两个脉冲宽度调制器的单片机, 控制寄存器为 PWM0 和 PWM1。具有 4 个脉冲宽度调制器的单片机,控制寄 存器为 PWM0~PWM3。这些 8 位的寄存器定义相应的脉冲宽度调制器调制周 期的占空比。
I2C 总线寄存器 – ADR, HCR, HSR, HDR
除了 HT46R47/HT46C47,所有的单片机都包含一个集成的 I2C 总线,它的外 部接口为单片机上的共用引脚 SDA SCL。这个两线双向的总线利用 4 个特 殊功能寄存器进行正确设置和数据传送。HADR 寄存器用来设定单片机的从地 址,控制寄存器 HCR 可以使能或除能单片机,并定义它的工作模式为发送或 接收模式。HSR 寄存器为状态寄存器,HDR 寄存器为输入/输出数据寄存器。
A/D 转换寄存器 – ADRL, ADRH, ADCR, ADSR
每款 A/D 系列的单片机都包含一个 4 8 通道的 A/D 转换器。A/D 转换器的 正确操作需要使用 4 个寄存器。当一个模数转换周期结束后,转换出的数字量 将保存到高字节数据寄存器 ADRH 和低字节数据寄存器 ADRL。通道的选择 和 A/D 转换器的设置通过寄存器 ADCR 控制,A/D 时钟频率由时钟源寄存器
ADSR 定义。
32
输入/输出端口
盛群单片机的输入/输出端口控制具有很大的灵活性。这体现在每一个引脚在 使用者的程序控制下可以被指定为输入或输出、所有引脚的上拉选项、以及指 定引脚的唤醒选择,这些特性也使得此类单片机在广泛应用上都能符合开发的 要求。
依据所选单片机及封装类别的不同,该系列单片机提供从 13 40 个不等双向 输入/输出口,标示为 PA PB、PC 等,这些输入/输出端口在数据存储器的对 应指定地址如表所示。所有输入/输出口都可做为输入及输出之用。作为输入 操作时,输入/输出引脚不是锁存的,也就是输入数据必须在指令“MOV A,[m]T2 上升沿准备好,m 表示端口地址。对于输出操作,所有数据是锁存的,而 且持续到输出锁存被重写。
上拉电阻
很多产品应用在端口处于输入状态时需要外加一个上拉电阻来实现上拉的功 能。为了免去这个外加的电阻,当引脚规划为输入时,可由内部连接到一上拉 电阻,这些上拉电阻可通过掩膜选项来加以选择,它用一个 PMOS 晶体管来实 现。要注意的是一旦某一输入/输出端口选择了上拉电阻,则这个输入/输出端 口的所有引脚都将被连接到上拉电阻,个别引脚是不能单独设置成带上拉电阻 的。
PA 口的唤醒
本系列的单片机都具有暂停功能,使得单片机进入暂停模式以节省功耗,此功 能对于电池及低功率应用是很重要的。唤醒单片机有很多种方法,其中之一就 是使 PA 口其中的一只引脚从高电平转为低电平。当使用暂停指令“HALT” 迫使单片机进入暂停状态以后,单片机将保持闲置即低功率状态,直到 PA 口 上被选为唤醒输入的引脚电平发生下降沿跳变。这个功能特别适合于通过外部 开关来唤醒的应用。值得注意的是 PA 口的每个引脚都可单独的选择具有唤醒 的功能。
33
A/D 型单片机使用手册
输入/输出端口控制寄存器
每一个输入/输出端口都具有自己的控制寄存器(PAC PBC、PCC 等)去控制 输入/输出状态。利用此控制寄存器,每一个 CMOS 输出或者斯密特触发器输 入不管有没有上拉电阻设置,均可利用软件控制方式加以动态的重新设置。所 有输入/输出端口的引脚都各自对应于输入/输出端口控制寄存器的某一位。若 输入/输出引脚要实现输入功能,则对应的控制寄存器位必须设定为“1”。这 时程序指令可以直接读出输入引脚的逻辑状态。如果引脚的控制寄存器位被设 定为“0”,则此引脚被设置为 CMOS 输出。当引脚被设置为输出状态,程序 指令读取的是输出端口寄存器的内容。请注意当输入/输出端口被设置为输出 状态时,此时如果对输出口做读取的动作,则会读取到内部数据寄存器中的锁 存值,而不是输出引脚实际的逻辑状态。
引脚共用功能
引脚的共用功能可以增加单片机的灵活程度。有限的引脚个数会严重的限制设 计者,但是引脚的多功能特性,可以解决很多此类问题。多功能输入/输出引 脚的功能选择,有些是由掩膜选项进行设定,有些则是在应用程序中进行控制。
外部中断输入
外部中断引脚 引脚可当作一般的输入/输出引脚使用,此时外部中断控制寄存器 INTC 中的外 部中断使能位必须除能。
与输入/输出引脚 PA 5 共用。如果不需要外部中断输入,此
INT
外部定时器时钟输入
每款 A/D 系列的单片机都包含一个或两个定时器,定时器的个数取决于选用的 型号。对于具有一个定时器的单片机而言,该引脚与 PA4 共用,称为 TMR。 48-pin 封装的 HT46R24/HT46C24 具有两个内部定时器,有两个独立的输入引 脚 TMR0 和 TMR1。而对于 28-pin 封装的 HT46R24/HT46C24,它们也具有两 个内部定时器,但由于封装的限制,没有提供引脚 TMR0。这种封装的单片机 只有外部定时器引脚 TMR1 可以使用,它与 PD1/PWM1/TMR1 引脚共用。如 果 PA4/TMR 或 PD1/PWM1/TMR1 引脚被设定为定时器输入,则 TMRC 控制 寄存器中相应的控制位也必须正确设置。在不需要外部定时器输入的时候, PA4/TMR 和 PD1/PWM1/TMR1 引脚也可以作为一般 I/O 引脚使用。对于此种 应用,定时/计数器控制寄存器中的定时器模式位必须选为定时器模式(内部时 钟源),以避免输入/输出引脚与定时器操作的冲突。
34
PFD,PWM 输出,I2C 总线
每款 A/D 系列的单片机都包含一个与 PA 3 引脚共用的 PFD 输出和一个或多个 与引脚 PD0~PD3 引脚共用的 PWM 输出。PWM 的输出个数取决选用的单片机。 除了 HT46R47/HT46C47,其它型号的单片机还具有与内部 I 个引脚,它们与 I/O 端口的 PA6 PA 7 共用。所有这些引脚的功能可以通过掩 膜选项进行选择,并且在程序设计后保持不变。请注意,如要操作正确,应用
2
程序中的软件选项也必须正确的设定。如果选择了 I
C 选项,则这些引脚上的
上拉电阻会自动断开。对于所有引脚,如果作为 I/O 引脚使用,则所有上拉电 阻选项将保持不变。
A/D 输入
每款 A/D 系列的单片机都具有 4 个或 8 A/D 转换器输入。所有的模拟输入 与 PB 口的 I/O 引脚共用。如果这些引脚被用来作为 A/D 输入而不是一般的 I/O 引脚,则 A/D 转换控制寄存器 ADCR 中相应的位必须被正确的设定。掩膜选 项内不包含 A/D 功能。如果这些引脚作为 I/O 引脚使用,仍可以通过掩膜选 项选择是否要接上拉电阻。然而如果作为 A/D 输入使用,则这些引脚上的上拉 电阻会自动断开。
P u l l - H i g h O p t i o n
Q
D a t a B u s
C o n t r o l B i t
D
2
C 总线相关的两
V
D D
W r i t e C o n t r o l R e g i s t e r
C h i p R e s e t
R e a d C o n t r o l R e g i s t e r
W r i t e D a t a R e g i s t e r
R e a d D a t a R e g i s t e r
S y s t e m W a k e - u p
( w a k e - u p f o r P A o n l y )
Q
C K
S
D a t a B i t
Q
D
Q
C K
S
M
U X
W a k e - u p O p t i o n
非引脚共用功能输入/输出端口
I / O P i n
35
A/D 型单片机使用手册
V
D D
P u l l - H i g h O p t i o n
Q
D a t a B u s
C o n t r o l B i t
D
W r i t e C o n t r o l R e g i s t e r
R e a d C o n t r o l R e g i s t e r
W r i t e D a t a R e g i s t e r
P F D o r P W M W a v e f o r m
R e a d D a t a R e g i s t e r
( H T 4 6 R 2 4 / H T 4 6 C 2 4
2 8 - p i n p a c k a g e o n l y )
C K
Q
C h i p R e s e t
T M R 1
S
D a t a B i t
D
C K
S
Q
Q
M U X
M
P F D / P W M O p t i o n U X
PA3/PFD PD0/PWM0~PD3/PWM3 输入/输出端口
V
D D
P u l l - H i g h O p t i o n
Q
D a t a B u s
C o n t r o l B i t
D
P A 3 / P F D P D 0 / P W M 0 P D 1 / P W M 1 P D 2 / P W M 2 P D 3 / P W M 3
P D 1 / P W M 1 / T M R 1 ( H T 4 6 R 2 4 / H T 4 6 C 2 4 2 8 - p i n p a c k a g e o n l y )
W r i t e C o n t r o l R e g i s t e r
C h i p R e s e t
R e a d C o n t r o l R e g i s t e r
W r i t e D a t a R e g i s t e r
R e a d D a t a R e g i s t e r
I N T ( P A 5 o n l y ) T M R ( P A 4 o n l y )
S y s t e m W a k e - u p
C K
D a t a B i t
D
C K
Q
S
Q
Q
S
PA4/PA5 输入/输出端口
36
P A 4 / T M R ( e x c e p t H T 4 6 R 2 4 / H T 4 6 C 2 4 )
P A 5 / I N T
M
U X
W a k e - u p O p t i o n
V
D D
P u l l - H i g h O p t i o n
Q
D a t a B u s
C o n t r o l B i t
D
W r i t e C o n t r o l R e g i s t e r
C h i p R e s e t
R e a d C o n t r o l R e g i s t e r
W r i t e D a t a R e g i s t e r
R e a d D a t a R e g i s t e r
T o A / D C o n v e r t e r
D a t a B u s
P C R 2 P C R 1 P C R 0
Q
C K
S
D a t a B i t
Q
D
Q
C K
S
A n a l o g
S e l e c t o r
C o n t r o l B i t
Q
D
M U X
I n p u t
A C S 2 ~ A C S 0
PB 输入/输出端口
P u l l - H i g h O p t i o n
P B 0 / A N 0 ~ P B 7 / A N 7 ( H T 4 6 R 4 7 / H T 4 6 C 4 7 w i t h P B 0 / A N 0 ~ P B 3 / A N 3 o n l y )
V
D D
W r i t e C o n t r o l R e g i s t e r
C h i p R e s e t
R e a d C o n t r o l R e g i s t e r
W r i t e D a t a R e g i s t e r
T o I2C C i r c u i t
R e a d D a t a R e g i s t e r
S y s t e m W a k e - u p
T o I2C C i r c u i t
C K
S
D a t a B i t
D
C K
S
Q
Q
Q
M U
X
PA6/SDA, PA 7 / S CL 输入/输出端口
37
M
U X
W a k e - u p O p t i o n
M U
X
P A 6 / S D A , P A 7 / S C L ( e x c e p t H T 4 6 R 4 7 / H T 4 6 C 4 7 )
I2C C o n f i g u r a t i o n O p t i o n
A/D 型单片机使用手册
编程注意事项
在使用者的程序中,最先要考虑的是端口的初始化。复位之后,所有的输入/ 输出数据及端口控制寄存器都将被设为逻辑高。意思是说所有输入/输出引脚 默认为输入状态,而其电平则取决于其它相连接电路以及是否选择了上拉选 项。假如 PA C、PBC、PCC 等端口控制寄存器接着被设定某些引脚为输出状态, 这些输出引脚会有初始高输出值,除非数据寄存器端口 PA 、PB、PC 被预先设 定。要选择哪些引脚是输入及哪些引脚是输出,可通过设置正确的值到适当的 端口控制寄存器,或者使用指令“SET [m].i”及“CLR [m].i”来设定端口控制 寄存器中个别的位。要注意的是当使用这些位控制指令时,一个读-修改-写的 操作将会发生。单片机必须先读入整个端口上的数据,修改个别的位,然后重 新把这些数据写入到输出端口。
S y s t e m C l o c k
P o r t D a t a
T 1 T 2
T 3 T 4
W r i t e t o p o r t R e a d f r o m p o r t
T 1 T 2
T 3 T 4
PA 口有唤醒的额外功能,当芯片在 HALT 状态时有很多方法去唤醒此单片机, 其中之一就是 PA 口任一个引脚电平由高到低的转换,可以设定 PA 口的一个 或多个引脚有这项功能。
38
定时/计数器
定时/计数器在任何单片机中都是一个很重要的部分,提供程序设计者一种实 现和时间有关功能的方法。A/D 型单片机通常包含一个或两个 8 位或 16 位的 向上定时/计数器,这取决于选用哪款单片机。每个定时/计数器有三种不同的 工作模式,可以被当作一个普通定时器、外部的事件计数器、或者脉冲宽度测 量器使用。除了 HT46R24/HT46C24 中的 TMR1,在 8 位定时器里的 8 级预分 频器(Prescaler)还扩大了定时的范围。
有两个和定时/计数器相关的寄存器。其中,一个寄存器是存储实际的计数值, 赋值给此寄存器可以设定初始值,读取此寄存器可获得定时/计数器的内容。 另一个寄存器是定时/计数器的控制寄存器,此寄存器设置定时/计数器的选项, 控制定时/计数器的使用。定时/计数器的时钟源可来自内部时钟源。此外,除 了 28-pin 封装的 HT46R24/HT46C24 中的 TMR0 外,时钟源也可来自外部定时 器引脚。下列附表列举了对应定时/计数器寄存器的名称。
8 位定时/计数器个数 1 1
定时/计数器寄存器名称 TMR TMR 定时/计数器控制寄存器 TMRC TMRC
16 位定时/计数器个数 1 2
定时/计数器寄存器名称  TMRL/TMRH
定时/计数器控制寄存器  TMRC
HT46R47
HT46C47
HT46R22
HT46C22
HT46R23
HT46C23
HT46R24
HT46C24
TMR0L/TMR0H
TMR1L/TMR1H
TMR0C
TMR1C
定时/计数器在事件计数器模式下使用外部时钟源,而时钟源从外部定时/计数 器引脚输入,即 TMRTMR0 TMR1,这取决于选用哪种型号的单片机。 这些外部引脚可能与其它输入/输出引脚共用。每当外部定时/计数器输入引脚 由高电平到低电平或者由低电平到高电平(由 TE 位决定)进行转换时,将使 得计数器值增加一。请注意,虽然 28-pin 封装的 HT46R24/HT46C24 具有两个 内部定时/计数器,但由于封装的限制,没有提供 TMR0 引脚,它只有一个外 部定时器引脚 TMR1
39
A/D 型单片机使用手册
配置定时/计数器输入时钟源
除了 28-pin 封装的 HT46R24/HT46C24 中的 TMR0,内部定时/计数器的时钟源 可以来自系统时钟或外部时钟源。当定时/计数器在定时器模式或者在脉冲宽 度测量模式时,使用系统时钟作为计时来源。除了 HT46R24/HT46C24 TMR1 的定时器时钟源是 f 除以预分频器(Prescaler)的值,预分频值由 PSC0PSC1 PSC2 三位决定。
定时/计数器在事件计数器模式时使用外部时钟源,根据选用的单片机和使用 的定时/计数器,时钟源由外部定时/计数器引脚 TMRTMR0 TMR1 提供。 每次外部引脚由高电平到低电平或者由低电平到高电平(由 TE 位决定)进行 转换时,计数器增加一。要注意的是,28-pin 封装的 HT46R24/HT46C24 只有 一个外部定时器引脚 TMR1,定时器 TMR0 没有外部时钟源。
/4 且没有预分频器(Prescaler)外,定时器的时钟源是 f
SYS
D a t a B u s
P r e l o a d R e g i s t e r
R e l o a d
SYS
f
S Y S
T M R i n p u t
P S C 2 ~ P S C 0
( 1 / 1 ~ 1 / 1 2 8 )
8 - s t a g e p r e s c a l e r
T E
T M 1 T M 0
T i m e r / E v e n t C o u n t e r
M o d e C o n t r o l
T O N
8 - B i t T i m e r / E v e n t C o u n t e r
T i m e r / E v e n t
C o u n t e r
8 位定时/计数器结构 HT46R47/HT46C47 HT46R22/HT46C22
L o w B y t e
1 6 - B i t
P r e l o a d R e g i s t e r
H i g h B y t e
1 6 - B i t T i m e r / E v e n t C o u n t e r
f
S Y S
( H T 4 6 R 2 4 / H T 4 6 C 2 4
4 8 - p i n p a c k a g e o n l y )
( H T 4 6 R 2 3 / H T 4 6 C 2 3 )
T M R 0
T M R
P S C 2 ~ P S C 0
8 - s t a g e p r e s c a l e r
( 1 / 1 ~ 1 / 1 2 8 )
T E
T M 1 T M 0
T i m e r / E v e n t C o u n t e r
M o d e C o n t r o l
T O N
16 位定时/计数器结构 HT46R23/HT46C23 HT46R24/HT46C24 TMR0
¸
2
B u f f e r
L o w B y t e
O v e r f l o w t o I n t e r r u p t
P F D
D a t a B u s
R e l o a d
¸
2
O v e r f l o w t o I n t e r r u p t
P F D
40
D a t a B u s
L o w B y t e
B u f f e r
R e l o a d
¸
2
O v e r f l o w t o I n t e r r u p t
P F D
T M R 1
1 6 - B i t
T M 1 T M 0
f
/ 4
S Y S
T E
T i m e r / E v e n t C o u n t e r
M o d e C o n t r o l
T O N
P r e l o a d R e g i s t e r
H i g h B y t e
1 6 - B i t T i m e r / E v e n t C o u n t e r
L o w B y t e
16 位定时/计数器结构 HT46R24/HT46C24 TMR1
定时/计数寄存器 – TMR, TMRL/TMRH, TMR0L/TMR0H,
TMR1L/TMR1H
定时/计数寄存器是位于专用数据存储器内的特殊功能寄存器,具有储存实际 定时器值的用途。对 8 位定时/计数器来说,这个寄存器为 TMR。对 于 16 位定 时/计数器,会用一对 8 位寄存器来储存16 位定时器的值。在 HT46R23/HT46C23 中,这个寄存器对为 TMRL TMRH。在具有两个 16 位定时器的 HT46R24/ HT46C24 中,TMR0 的寄存器对为 TMR0L 和 TMR0H,而 TMR1 的寄存器对, 则称为 TMR1L TMR1H
在用作内部定时且收到一内部计时脉冲时,或用作外部计数且外部定时/计数 器引脚发生状态跳变时,此寄存器的值将会加一。定时器将从预置寄存器所载 入的值开始计数,直到 8 位定时/计数器 FFH 16 位定时/计数器 FFFFH 储满, 此时定时器溢出且会产生一个内部中断信号。定时器的值随后被预置寄存器的 值重设并继续计数。为了得到 8 位定时/计数器 FFH 16 位定时/计数器 FFFFH 的最大计算范围,预置寄存器必须先清除为零。此时要注意的是,上电后预置 寄存器处于未知状态。定时/计数器在 OFF 条件下,如果把数据写入预置寄存 器,这数据将被立即写入实际的定时器。而如果定时/计数器已经被打开且正 在计数,在这个周期内写入到预置寄存器的任何新数据将保留在预置寄存器, 只有在下一个溢出发生时才被写入实际定时器。当 TMR 寄存器被读取时,定 时器的计时时钟会停止计数以避免错误,然而这可能造成某些时序的错误,因 此程序设计者必须考虑到这点。
41
A/D 型单片机使用手册
对于 16 位定时/计数器,它有低字节与高字节两个定时/计数寄存器,访问这些 寄存器需要以指定方式进行。必须要注意的是当使用指令载入数据到低字节寄 存器,即 TMRLTMR0L TMR1L 时,数据只被载入到低字节缓冲器而不 是直接送到低字节寄存器。当数据写入相应高字节寄存器,即 TMRHTMR0HTMR1H 时,低字节缓冲器中的数据才真正被写入低字节寄存器。换句话说, 写入数据到高字节定时/计数寄存器时,数据会被直接写入到高字节寄存器。 同时在低字节缓冲器里的数据将被写入相应低字节寄存器。所以当写数据到 16 位定时/计数寄存器时,低字节数据应该先写入。另外要注意的是读取低字 节寄存器的内容时,必须先读取高字节寄存器的内容,相应低字节寄存器中的 内容就会载入低字节缓冲器中并被锁存。在此动作执行之后,低字节寄存器中 的内容可使用一般的方式读取。请注意,读取定时/计数器低字节寄存器实际 是读取先前锁存在低字节缓冲器中的内容,而非定时/计数器低字节寄存器的 实际内容。
定时/计数控制寄存器 – TMRC, TMR0C, TMR1C
定时/计数器能工作在三种不同的模式,至于选择工作在哪一种模式则是由各 自的控制寄存器的内容决定。对于只有一个定时/计数器的单片机,定时/计数 控制寄存器为 TMRC,而对于有两个定时/计数器的单片机,定时/计数控制寄 存器为 TMR0C 和 TMR1C。它们连同对应的定时/计数器寄存器控制定时/计数 器的全部操作。在使用定时器之前,必须先正确地设定定时/计数控制寄存器, 以便保证定时器能正确操作,而这个过程通常在程序初始化期间完成。
为了确定定时器工作在哪一种模式,TM0 TM1 位必须设定到要求的逻辑电 平。定时器打开位 TON,即定时/计数控制寄存器的第 4 位,是定时器控制的 开关,设定为逻辑高时,计数器开始计数,而清零时则停止计数。对于具有预 分频器(Prescaler)的定时器而言,定时/计数控制寄存器的第 0 位~第 2 位决定输 入定时预分频器(Prescaler)中的分频比例。如果使用外部计时源,预分频器
(Prescaler)的位将不作用。如果定时器工作在事件计数或脉冲宽度测量模式, TE 的逻辑电平,即 TMRC 寄存器的第 3 位将可用来选择上升沿或下降沿触发。
42
b 7
T ET O NT M 0T M 1
P S C 2
P S C 1 P S C 0
b 0
T i m e r / E v e n t C o u n t e r C o n t r o l R e g i s t e r
T M R C o r T M R 0 C
T i m e r p r e s c a l e r r a t e s e l e c t
P S C 1
P S C 2
0 0 0 0 1 1 1
1 E v e n t C o u n t e r a c t i v e e d g e s e l e c t 1 : c o u n t o n f a l l i n g e d g e 0 : c o u n t o n r i s i n g e d g e
P u l s e W i d t h M e a s u r e m e n t a c t i v e e d g e s e l e c t 1 : s t a r t c o u n t i n g o n r i s i n g e d g e , s t o p o n f a l l i n g e d g e 0 : s t a r t c o u n t i n g o n f a l l i n g e d g e , s t o p o n r i s i n g e d g e
T i m e r / E v e n t C o u n t e r c o u n t i n g e n a b l e 1 : e n a b l e 0 : d i s a b l e
N o t i m p l e m e n t e d , r e a d a s " 0 "
O p e r a t i n g m o d e s e l e c t
T M 1
0 0 1 1
P S C 0
0
0
0
1
1
0
1
1
0
0
0
1
1
0
1
1
T M 0
n o m o d e a v a i l a b l e
0
e v e n t c o u n t e r m o d e
1
t i m e r m o d e
0
p u l s e w i d t h m e a s u r e m e n t m o d e
1
T i m e r R a t e 1 : 1 1 : 2 1 : 4 1 : 8 1 : 1 6 1 : 3 2 1 : 6 4 1 : 1 2 8
HT46R24/HT46C24 具有两个内部定时/计数器 TMR0 TMR1,因此额外再需 要一个定时/计数控制寄存器 TMR1C
b 7
T ET O NT M 0T M 1
b 0
T i m e r / E v e n t C o u n t e r C o n t r o l R e g i s t e r
T M R 1 C
N o t i m p l e m e n t e d , r e a d a s " 0 "
E v e n t C o u n t e r a c t i v e e d g e s e l e c t 1 : c o u n t o n f a l l i n g e d g e 0 : c o u n t o n r i s i n g e d g e
P u l s e W i d t h M e a s u r e m e n t a c t i v e e d g e s e l e c t 1 : s t a r t c o u n t i n g o n r i s i n g e d g e , s t o p o n f a l l i n g e d g e 0 : s t a r t c o u n t i n g o n f a l l i n g e d g e , s t o p o n r i s i n g e d g e
T i m e r / E v e n t C o u n t e r c o u n t i n g e n a b l e 1 : e n a b l e 0 : d i s a b l e
N o t i m p l e m e n t e d , r e a d a s " 0 "
O p e r a t i n g m o d e s e l e c t
T M 1
T M 0 0 0 1 1
n o m o d e a v a i l a b l e
0
e v e n t c o u n t e r m o d e
1
t i m e r m o d e
0
p u l s e w i d t h m e a s u r e m e n t m o d e
1
43
A/D 型单片机使用手册
定时器模式
在这个模式,定时器可以用来测量固定时间间距,当定时器发生溢出时,就会 提供一个内部中断信号。要工作在这个模式,TMRC 寄存器中位 TM1(bit7)和 TM0(bit6)必须分别设为 1 0。在这个模式,内部时钟源被用来当定时器的计 时源。除了 HT46R24/HT46C24 TMR1,定时器的输入计时频率是 f 定时器预分频器(Prescaler)的值,这个值是由定时器控制寄存器的 PSC2~PSC0 位来决定。对于 HT46R24/HT46C24 中的 TMR1,它没有预分频器(Prescaler), 它的输入计时频率是 f
/4。定时器打开位 TON 必须被设为逻辑高,才能令定
SYS
时器工作。每次内部时钟由高到低的电平转换都会使定时器值增加一。当定时 器已满即溢出时,会产生中断信号且定时器会重新载入已经载入到预置寄存器 的值,然后继续向上计数。定时器溢出是中断的一种,也是唤醒暂停模式的一 种方法。
T i m e r C l o c k o r
P r e s c a l e r O u t p u t
SYS
除以
I n c r e m e n t
T i m e r C o n t r o l l e r
T i m e r + 1 T i m e r + 2
定时器模式时序图
T i m e r + N T i m e r + N + 1
事件计数器模式
在这个模式,发生在外部定时器引脚的外部逻辑事件改变的次数,可以通过内 部定时/计数器来记录。为使定时/计数器工作在事件计数器模式,TMRC 寄存 器中 TM1 TM0 位必须分别设为 0 1。计数器打开位 TON 必须设为逻辑 高,令计数器开始计数。当 TE 为逻辑低时,每次外部定时/计数器引脚接收到 由低到高电平的转换将使计数器加一。而当 TE 为逻辑高时,每次外部定时/ 计数器引脚接收到由高到低电平的转换将使计数器加一。与另外两个模式一 样,当计数器计满时,计数器将溢出且产生一个内部中断信号,同时定时/计 数器将重新载入已经载入到预置寄存器的值。如果外部定时器引脚和其它输入 /输出引脚共用,为了确保它是工作在事件计数器模式,要注意两点。首先是 要将 TM0 TM1 位设定在事件计数器模式,其次是确定端口控制寄存器将这 个引脚设定为输入状态。虽然 28-pin 封装的 HT46R24/HT46C24 具有两个内部 定时器,但只有 TMR1 外部控制引脚可以使用。因此 TMR0 不能使用在事件 计数器模式。计数器的溢出是中断的一种,也是唤醒暂停模式的一种方法。
E x t e r n a l E v e n t
I n c r e m e n t
T i m e r C o u n t e r
T i m e r + 1
事件计数器模式时序图
T i m e r + 2 T i m e r + 3
44
脉冲宽度测量模式
这个模式,可以测量外部定时/计数器引脚上的外部脉冲宽度。在脉冲宽度测 量模式中,定时/计数器的时钟源由内部时钟提供,TM0 和 TM1 位则必须都设 为逻辑高。如果 TE 位是逻辑低,当外部定时/计数器引脚接收到一个由高到低 电平的转换时,定时/计数器将开始计数直到外部定时/计数器引脚回到它原来 的高电平。此时 TON 位将自动清除为零,且定时/计数器停止计数。而如果 TE 位是逻辑高,则当外部定时/计数器引脚接收到一个由低到高电平的转换时, 定时/计数器开始计数直到外部定时/计数器引脚回到原来的低电平。如上所述, TON 位将自动清除为 0,且定时/计数器停止计数。请注意,在脉冲宽度测量 模式中,当外部定时器引脚上的外部控制信号回到它原来的电平时,TON 位 将自动地清除为 0。而在其它两种模式下,TON 位只能在程序控制下才会被清 除为 0。这时定时/计数器中剩下的值可被程序读取,并由此得知外部定时/计 数器引脚接收到的脉冲的长度。当 TON 位被清除时,任何在外部定时/计数器 引脚的进一步的电平转换将被忽略。直到 TON 位再次被程序设定为逻辑高, 定时/计数器才又开始脉冲宽度测量。利用这种方法可轻松地完成单个脉冲的 测量,要注意的是在这种模式下,定时/计数器是通过外部定时/计数器引脚上 的逻辑转换来控制,而不是通过逻辑电平。与另外两个模式一样,当定时/计 数器计满就会发生溢出,且产生一个内部中断信号,定时/计数器也将清零并 载入预置寄存器的值。如果外部定时器引脚与其它 I/O 引脚共用,为了确保它 是工作在脉冲宽度测量模式,要注意两点。首先是要将 TM0 TM1 位设定在 脉冲宽度测量模式,其次是确定此引脚的输入/输出端口控制寄存器对应位被 设定为输入状态。虽然 28-pin 封装的 HT46R24/HT46C24 具有两个内部定时器, 但只有 TMR1 外部控制引脚可以使用。因此 TMR0 不能使用在脉冲宽度测量 模式。定时器的溢出是中断的一种,也是唤醒暂停模式的一种方法。
E x t e r n a l T i m e r
P i n I n p u t
T O N ( w i t h T E = 0 )
P r e s c a l e r O u t p u t
( w i t h c l o c k = f
T i m e r C o u n t e r
45
S Y S
I n c r e m e n t
)
T i m e r
P r e s c a l e r O u t p u t i s s a m p l e d a t e v e r y f a l l i n g e d g e o f T 1 .
脉冲宽度测量模式时序图
+ 1 + 2 + 3 + 4
A/D 型单片机使用手册
可编程分频器 PFD
PFD 输出引脚与 I/O 引脚 PA3 共用。这个功能通过掩膜选项来选择,如果不选 择该功能,则这个引脚就是作为正常的输入/输出引脚使用。要注意的是,对 于有两个内部定时器的 HT46R24/HT46C24 而言,通过掩膜选项选择,PFD 的 时钟源可以是两个定时器中的任一个。
PFD 电路使用定时器溢出信号作为它的时钟源。载入合适的值到定时器预分频 器(Prescaler),可以产生需要的时钟源分频比例,由此来控制输出的频率。系 统时钟被预分频器分频后的时钟源,进入定时器计时,定时器从预置寄存器的 值开始往上计数,直到计数值满而产生溢出信号,导致 PFD 输出改变状态。 定时器将自动地重新载入预置寄存器的值,并继续向上计数。具体设置和运作 细节可参考定时/计数器章节。
要使 PFD 正确运作,必须将 PA 控制寄存器 PA C 的第 3 位设置为输出。如果 把它设置为输入,则 PFD 输出将不会动作,该引脚仍是作为正常的输入引脚 使用。只有把 PA3 位置“1”,PFD 输出引脚才会有输出。这个输出数据位被 用作 PFD 输出的开/关控制。注意,如果 PA 3 输出数据位被清为“0”,PFD 输 出将为低电平。
T i m e r O v e r f l o w
P F D C l o c k
P A 3 D a t a
P F D O u t p u t a t P A 3
假如系统时钟使用晶体振荡器,则使用这种频率产生的方法可以产生非常精确 的频率值。
预分频器(Prescaler)
除了 TMR1C,定时器控制寄存器的第 0 ~2 位可以用来定义定时/计数器 中内部时钟源的预分频级数。定时/计数器溢出信号可用来驱动 PFD 或产生定 时器中断。
46
输入/输出接口
当运行在事件计数器或脉冲宽度测量模式时,定时/计数器需要使用外部定时 器引脚以确保正确的动作。外部定时/计数器引脚是否与其它输入/输出引脚共 用,取决于选用哪种型号的单片机。可以选择上拉电阻来连接定时器输入引脚。 定时器也可被设定去驱动 PFD 引脚。当通过掩膜选项选择 PFD 输出时,定时 器可以根据定时/计数寄存器和定时/计数器的内容,以不同的频率来驱动 PFD
编程注意事项
当定时/计数器运行在定时器模式时,定时器的时钟源是使用内部系统时钟, 与单片机所有运算都能同步。在这个模式下,当定时器寄存器溢出时,单片机 将产生一个内部中断信号,使程序进入相应的内部中断向量。对于脉冲宽度测 量模式,定时器的时钟源也是使用内部系统时钟,但定时器只有在正确的逻辑 条件出现在定时器输入引脚时才执行动作。当这个外部事件没有和内部定时器 时钟同步时,只有当下一个定时器时钟到达时,单片机才会看到这个外部事件, 因此在测量值上可能有小的差异,需要程序设计者在程序应用时加以注意。同 样的情况发生在定时器配置为外部事件计数器模式时,它的时钟来源是外部事 件,和内部系统时钟或者定时器时钟不同步。
47
A/D 型单片机使用手册
脉冲宽度调制器
每一款 A/D 型单片机都提供一个或多个脉冲宽度调制(PWM)输出。这在马达 速度控制等应用中十分有用,通过给相应的 PWM 寄存器设置特殊的值,PWM 功能可提供占空比可调而频率固定的波形。
在数据存储器中,单片机为每一个 PWM 都指定了对应的寄存器。对于只有一 个 PWM 输出的单片机,这个寄存器为 PWM。对于有两个 PWM 输出的单片 机,寄存器则为 PWM0 PWM1。当有四个 PWM 输出时,则又有另两个寄 存器,分别为 PWM2 PWM3。此寄存器为 8 位,表示输出波形中每个调制 周期的占空比。为了提高 PWM 调制频率,每一个调制周期被调制两个或四个 独立的调制子区段,即 7+1 模式或 6+2 模式。除了 HT46R47/HT46C47 只有固 定的 6+2 模式外,其余各单片机可通过掩膜选项选择使用哪一种工作模式。通 过掩膜选项选定工作模式后,它会应用在此单片机所有的 PWM 输出上。要注 意的是,使用 PWM 时,只要将所需的值写入相应的 PWM 寄存器内,并在掩 膜选项内选择所需的工作模式即可,单片机的内部硬件会自动地将波形细分为 子调制周期。
对所有的单片机而言,PWM 时钟源就是系统时钟 f
单片机型号 通道 PWM 模式 输出引脚 PWM 寄存器名称
HT46R47/HT46C47
HT46R22/HT46C22
HT46R23/HT46C23
(24-pin
封装)
HT46R23/HT46C23
封装)
(28-pin
HT4624R/HT46C24
封装)
(28-pin
HT46R24/HT46C24
封装)
(48-pin
1 6+2 PD0 PWM
1 6+2
1 6+2
2 6+2
2 6+2
4 6+2
7+1 PD0 PWM
7+1 PD0 PWM0
7+1 PD0/PD1 PWM0/PWM1
7+1 PD0/PD1 PWM0/PWM1
7+1 PD0/PD1/PD2/PD3
PWM 功能表
SYS
PWM0/PWM1/
PWM2/PWM3
48
将原始调制周期分成 2 个或 4 个子周期的方法,使产生更高的 PWM 频率成为 可能,这样可以提供更广泛的应用。只要产生的 PWM 脉冲周期小于负载的时 间常数,PWM 输出就比较合适,这是因为长时间常数负载将会平均 PWM 输 出的脉冲。读者必须理解 PWM 频率与 PWM 调制频率的不同之处。当 PWM 时钟为系统时钟 f
,而 PWM 值为 8 位时,整个 PWM 周期的频率为 f
SYS
然而,当 PWM 工作在 7+1 模式时,PWM 调制频率为 f 模式时,PWM 调制频率将会是 f
PWM 调制频率 PWM 频率 PWM 占空比
f
/64 (对于 6+2 模式)
SYS
f
/128 (对于 7+1 模式)
SYS
/64
SYS
/256 [PWM]/256
f
SYS
/128,工作在 6+2
SYS
SYS
/256
49
A/D 型单片机使用手册
6+2 PWM 模式
通过一个 8 位的 PWM 寄存器控制,每个完整的 PWM 周期由 256 个时钟周期 组成。在 6+2 PWM 模式中,每个 PWM 周期又被分成四个独立的子周期,称 为调制周期 0~调制周期 3,在表格中以“i”表示。四个子周期各包含 64 个时 钟周期。在这个模式下,得到以 4 为因数增加的调制频率。8 位的 PWM 寄存 器被分成两个部分,这个寄存器的值表明整个 PWM 波形的占空比。第一部分 包括第 2 ~7 位,表示 DC 值,第二部分为第 0 ~1 位,表示 AC 值。 在 6+2 PWM 模式中,四个调制子周期的占空比,分别如下表所示。
参数 AC (0~3) DC (占空比)
调制周期 i
(i=0~3)
i<AC
AC
i
64
DC
64
1DC+
6+2 模式调制周期值
下图表示 6+2 模式下 PWM 输出的波形。请特别注意单个的 PWM 周期是如何
2 5 / 6 4
2 5 / 6 4
2 5 / 6 4
2 6 / 6 4
2 6 / 6 4
2 6 / 6 4
分成四个独立的调制周期以及 AC 值与 PWM 值的关系。
f
/ 2
S Y S
[ P W M ] = 1 0 0
P W M
[ P W M ] = 1 0 1
P W M
[ P W M ] = 1 0 2
P W M
[ P W M ] = 1 0 3
P W M
2 5 / 6 4
2 6 / 6 4
2 6 / 6 4
2 6 / 6 4
P W M m o d u l a t i o n p e r i o d : 6 4 / f
M o d u l a t i o n c y c l e 0
2 5 / 6 4 2 5 / 6 4 2 5 / 6 4
2 5 / 6 4
2 6 / 6 4
2 6 / 6 4
S Y S
M o d u l a t i o n c y c l e 1 M o d u l a t i o n c y c l e 2 M o d u l a t i o n c y c l e 3 M o d u l a t i o n c y c l e 0
P W M c y c l e : 2 5 6 / f
2 5 / 6 4
2 5 / 6 4
2 6 / 6 4 2 5 / 6 4
S Y S
6+2 PWM 模式
b 7 b 0
6+2 模式的 PWM 寄存器
50
P W M R e g i s t e r ( 6 + 2 ) M o d e
A C v a l u e
D C v a l u e
7+1 PWM 模式
通过一个 8 位的 PWM 寄存器控制,每个完整的 PWM 周期由 256 个时钟周期 组成。在 7+1 PWM 模式中,每个 PWM 周期又被分成两个独立的子周期,称 为调制周期 0 和调制周期 1,在表格中以“i”表示。每个子周期各包含 128 时钟周期。在这个模式下,得到以 2 为因数增加的调制频率。8 位的 PWM 寄 存器被分成两个部分,这个寄存器的值表明整个 PWM 波形的占空比。第一部 分包括第 1 ~7 位,表示 DC 值,第二部分为第 0 位,表示 AC 值。在 7+1 PWM 模式中,两个调制子周期的占空比,分别如下表所示。
参数 AC (0~1) DC (占空比)
调制周期 i
(i=0~1)
i<AC
i
AC
128
DC
128
1DC+
7+1 模式调制周期值
下图表示 7+1 模式下 PWM 输出的波形。请特别注意单个的 PWM 周期是如何 分成两个独立的调制周期以及 AC 值与 PWM 值的关系。
f
/ 2
S Y S
[ P W M ] = 1 0 0
P W M
[ P W M ] = 1 0 1
P W M
[ P W M ] = 1 0 2
P W M
[ P W M ] = 1 0 3
P W M
5 0 / 1 2 8
5 1 / 1 2 8
5 1 / 1 2 8
5 2 / 1 2 8
P W M m o d u l a t i o n p e r i o d : 1 2 8 / f
M o d u l a t i o n c y c l e 0
S Y S
P W M c y c l e : 2 5 6 / f
5 0 / 1 2 8
5 0 / 1 2 8
5 1 / 1 2 8
5 1 / 1 2 8
M o d u l a t i o n c y c l e 1 M o d u l a t i o n c y c l e 0
S Y S
7+1 PWM 模式
5 0 / 1 2 8
5 1 / 1 2 8
5 1 / 1 2 8
5 2 / 1 2 8
b 7 b 0
7+1 模式的 PWM 寄存器
51
P W M R e g i s t e r ( 7 + 1 ) M o d e
A C v a l u e
D C v a l u e
A/D 型单片机使用手册
PWM 输出控制
在所有单片机中,PWM 输出与 PD 端口的 I/O 引脚共用。要使某个引脚作为 PWM 输出而非普通的 I/O 引脚,必须选择正确的 PWM 掩膜选项。I/O 端口控
制寄存器 PDC 中相应的位也必须写“0”,以确保所需要的 PWM 输出引脚设 置为输出状态。在完成这两个初始化步骤,以及将所要求的 PWM 值写入 PWM 寄存器之后,将“1”写 入到 PD 输出数据寄存器的相应位,则 PWM 数据就会 出现在引脚上。将“0”写入到 PD 输出数据寄存器的相应位,则会除能 PWM 输出功能并强制输出低电平。通过这种方式,PD 数据输出寄存器作为 PWM 功能的开/关控制来使用。假如掩膜选项已经选择 PWM 功能,但是在 PDC 控 制寄存器中相应的位又写入“1”,使其成为输入引脚,则此引脚仍是作为带上 拉电阻的正常输入端使用。
clr PDC.0 ; set pin PD0 as output clr PDC.1 ; set pin PD1 as output clr PDC.2 ; set pin PD2 as output clr PDC.3 ; set pin PD3 as output
set pd.0 ; PD.0=1; enable pin PD0/PWM0 to be the PWM channel 0 mov a,64h ; PWM0=100D=64H mov pwm0,a
set pd.1 ; PD.1=1; enable pin PD1/PWM1 to be the PWM channel 1 mov a,65h ; PWM1=101D=65H mov pwm1,a
set pd.2 ; PD.2=1; enable pin PD2/PWM2 to be the PWM channel 2 mov a,66h ; PWM2=102D=66H mov pwm2,a
set pd.3 ; PD.3=1; enable pin PD3/PWM3 to be the PWM channel 3 mov a,67h ; PWM3=103D=67H mov pwm3,a
clr pd.0 ; disable PWM0 output – PD.0 will remain low clr pd.1 ; disable PWM1 output – PD.1 will remain low clr pd.2 ; disable PWM2 output – PD.2 will remain low clr pd.3 ; disable PWM3 output – PD.3 will remain low
52
模数转换器
对于大多的电子系统而言,处理真实世界的模拟信号是共同的需求。为了完全 由单片机来处理这些信号,首先必须通过 A/D 转换器将模拟信号转换成数字信 号。将 A/D 转换器电路集成入单片机,可有效的减少外部器件,随之而来,具 有低成本和减少器件空间需求的优势。每一款的盛群 A/D 型单片机都包含了四 个或八个通道的 A/D 转换器,它们可以直接接入外部模拟信号(来自传感器或 其它控制信号)并直接将这些信号转换成 9 位或 10 位的数字量。
A/D 转换器数据寄存器-ADRL/ADRH
完成转换过程后所获得的 9 位或 10 位的数字量,将储存在高位寄存器 ADRH 和低位寄存器 ADRL 内。在转换过程发生后,单片机可以直接读取这两个寄存 器,以获得数安化的转换值。要注意的是,只有高位寄存器 ADRH 完全利用 了 8 位。而低位寄存器 ADRL 只利用了 8 位中的 1 2 位,它包含的只是 910 位转换值中低的一或两位。
单片机型号 输入通道 转换位数 输入引脚
HT46R47/HT46C47 4 9 PB0~PB3
HT46R22/HT46C22 8 9 PB0~PB7
HT46R23/HT46C23 8 10 PB0~PB7
HT46R24/HT46C24 8 10 PB0~PB7
在下表中,D0~D8 D9 A/D 换转数据结果位。
寄存器 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
ADRL D0
ADRH D8 D7 D6 D5 D4 D3 D2 D1
A/D 数据寄存器 HT46R47/HT46C47 HT46R22/HT46C22
寄存器 Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1 Bit0
ADRL D1 D0
ADRH D9 D8 D7 D6 D5 D4 D3 D2
A/D 数据寄存器 HT46R23/HT46C23 HT46R24/HT46C24
53
A/D 型单片机使用手册
A/D 转换器控制寄存器 ADCR
寄存器 ADCR 用来控制 A/D 转换器的功能和操作。这个 8 位的寄存器所定义 的功能包括选择哪一个模拟通道连接至内部 A/D 转换器,哪个引脚是模拟输 入,哪个引脚是正常 I/O,并控制和监视 A/D 转换器的开始和复位功能。
寄存器 ADCR 包含 ACS2~ACS0 位,它们定义通道的编号。由于每个单片机只 包含一个实际的模数转换电路,因此这 4 8 个模拟输入中的每一个都必须分 别被发送到转换器。ADCR 寄存器中 ACS2~ACS0 位的功能正是决定哪个模拟 通道真正连接到内部A/D 转换器。对于HT46R22/HT46C22HT46R23/HT46C23 HT46R24/HT46C24,共有八个模拟输入通道,ACS2~ACS0 的三个位都被用 于通道选择;而对于 HT46R47/HT46C47,它只有四个模拟输入通道,因此 ACS2 位不被使用,且保持“0”。对于 HT46R47/HT46C47,如果 ACS2 位为“1”, 则无法定义 ACS2~ACS0 的功能。
ADCR 寄存器中的 PCR2~PCR0 位,用来定义 PB 端口上哪些引脚为 A/D 转换 器的模拟输入,哪些引脚为正常的 I/O 。对于具有 8 个模拟输入通道的 HT46R22/HT46C22HT46R23/HT46C23 和 HT46R24/HT46C24 单片机,需要 此三位来设定 PB 端口上各个位的功能;而对于只有四个模拟输入通道的 HT46R47/HT46C47,如果 PCR2~PCR0 3 位地址的值等于或大于“101”,其 功能将与值“100”相同,也就是 AN0AN1AN2 AN3 都将被设定为模 拟输入。要注意的是,如果 PCR2~PCR0 全都设为“0”,则所有 PB 端口的引 脚都被设定为正常的 I/O,这时内部 A/D 转换器电路的电源将被关闭以减少功 耗。
54
b 7 b 0
S T A R T
b 7 b 0
S T A R T
E O C B
E O C B
P C R 2
P C R 2
P C R 1 P C R 0
P C R 1 P C R 0
A C S 2 A C S 1
A C S 2 A C S 1 A C S 0
A D C R R e g i s t e r ( e x c l u d i n g H T 4 6 R 4 7 / H T 4 6 C 4 7 )
A C S 0
S e l e c t A / D c h a n n e l
A C S 2
0 0 0 0 1 1 1 1
P o r t B A / D c h a n n e l c o n f i g u r a t i o n s
P C R 2
0 0 0 0 1 1 1 1
E n d o f A / D c o n v e r s i o n f l a g 1 : n o t e n d o f A / D c o n v e r s i o n - A / D c o n v e r s i o n w a i t i n g o r i n p r o g r e s s 0 : e n d o f A / D c o n v e r s i o n - A / D c o n v e r s i o n e n d e d
S t a r t t h e A / D c o n v e r s i o n 0
1
®
®
1 : R e s e t A / D c o n v e r t e r a n d s e t E O C B t o " 1 "
0
®
A D C R R e g i s t e r ( H T 4 6 R 4 7 / H T 4 6 C 4 7 )
S e l e c t A / D c h a n n e l
A C S 2
0 0 0 0 1
P o r t B A / D c h a n n e l c o n f i g u r a t i o n s
P C R 2
0 0 0 0 1
E n d o f A / D c o n v e r s i o n f l a g 1 : n o t e n d o f A / D c o n v e r s i o n - A / D c o n v e r s i o n w a i t i n g o r i n p r o g r e s s 0 : e n d o f A / D c o n v e r s i o n - A / D c o n v e r s i o n e n d e d
S t a r t t h e A / D c o n v e r s i o n 0
1
®
®
0
1 : R e s e t A / D c o n v e r t e r a n d s e t E O C B t o " 1 "
®
A C S 1
0 0 1 1 0 0 1 1
P C R 1
0 0 1 1 0 0 1 1
0 : S t a r t
A C S 1
0 0 1 1 X
P C R 1
0 0 1 1 X
0 : S t a r t
A C S 0
: A N 0
0
: A N 1
1
: A N 2
0
: A N 3
1
: A N 4
0
: A N 5
1
: A N 6
0
: A N 7
1
P C R 0
: P o r t B A / D c h a n n e l s - a l l o f f
0
: P B 0 e n a b l e d a s A N 0
1
: P B 0 ~ P B 1 e n a b l e d a s A N 0 ~ A N 1
0
: P B 0 ~ P B 2 e n a b l e d a s A N 0 ~ A N 2
1
: P B 0 ~ P B 3 e n a b l e d a s A N 0 ~ A N 3
0
: P B 0 ~ P B 4 e n a b l e d a s A N 0 ~ A N 4
1
: P B 0 ~ P B 5 e n a b l e d a s A N 0 ~ A N 5
0
: P B 0 ~ P B 7 e n a b l e d a s A N 0 ~ A N 7
1
A C S 0
0
: A N 0
1
: A N 1
0
: A N 2
1
: A N 3
X
: u n d e f i n e d , c a n n o t b e u s e d
P C R 0
0
: P o r t B A / D c h a n n e l s - a l l o f f
1
: P B 0 e n a b l e d a s A N 0
0
: P B 0 ~ P B 1 e n a b l e d a s A N 0 ~ A N 1
1
: P B 0 ~ P B 2 e n a b l e d a s A N 0 ~ A N 2
X
: P B 0 ~ P B 3 e n a b l e d a s A N 0 ~ A N 3
55
A/D 型单片机使用手册
ADCR 寄存器中的 START 位,用于打开和复位 A/D 转换器。当单片机设定此 位从逻辑低到逻辑高,然后再到逻辑低,就会产生一个模数转换周期。当 START 位从逻辑低到逻辑高,但不再回到逻辑低时,则会将 ADCR 寄存器中的 EOCB 位置为“1”,复位模数转换器。 START 位用于控制内部模数换转器的开/关动 作。
ADCR 寄存器中的 EOCB 位用于表明模数转换过程的完成。在转换周期结束 后,EOCB 位会被单片机自动地置为“0”。此外,也会置位中断控制寄存器内 相应的 A/D 中断请求标志位,如果中断使能,就会产生适当的内部中断信号。 A/D 内部中断信号将引导程序到相应的 A/D 内部中断入口。如果 A/D 内部中 断被除能,单片机会轮询 ADCR 寄存器中的 EOCB 位,检查此位是否被清除, 以做为另一种侦测 A/D 转换周期结束的方法。
A/D 转换器时钟源寄存器 ACSR
A/D 转换器的时钟源为系统时钟 f ADCS1 ADCS0 位决定。
b 7 b 0
T E S T
的分频,而分频率由 ACSR 寄存器中的
SYS
A D C S 1 A D C S 0
A C S R R e g i s t e r
S e l e c t A / D c o n v e r t e r c l o c k s o u r c e
A D C S 1
A D C S 0
0
0
: s y s t e m c l o c k / 2 0 1 1
N o t i m p l e m e n t e d , r e a d a s " 0 "
F o r t e s t m o d e u s e o n l y
: s y s t e m c l o c k / 8
1 0
: s y s t e m c l o c k / 3 2
1
: u n d e f i n e d
虽然 A/D 时钟源是由系统时钟 f A/D 时钟源速度则有一些限制。由于允许的 A/D 时钟周期 t
因此,当系统时钟速度超过 2MHz 时,ADCS1 ADCS0 位不能设为“00”。 否则的话,将导致 A/D 时钟周期小于 1µs,产生不准确的 A/D 转换值。参考下 面表格中的一些例子,被标上星号*的数值是不允许的,因为它们的 A/D 时钟 周期小于规定的最小值。
f
ADCS1, ADCS0=00
SYS
(f
/2)
SYS
1MHz 2µs 8µs 32µs 未定义 2MHz 1µs 4µs 16µs 未定义 4MHz 500ns* 2µs 8µs 未定义 8MHz 250ns* 1µs 4µs 未定义
56
ADCS1, ADCS0=01
ADCS1 ADCS0 决定,但可选择的最大
SYS
的最小值为 1µs
AD
A/D 时钟周期(tAD)
ADCS1, ADCS0=10
(f
SYS
/8)
(f
/32)
SYS
ADCS1, ADCS0=11
A/D 时钟周期范例
A/D 输入引脚
所有的 A/D 模拟输入引脚都与 PB 端口的 I/O 引脚共用。ADCR 寄存器中的 PCR2~PCR0 位,决定是将输入引脚设置为正常的 PB 端口输入/输出引脚,还
是将它们设置为模拟输入引脚,而不是由掩膜选项来决定。通过这种方式,引 脚的功能可由程序来控制,从正常的 I/O 操作功能到模拟输入,反过来也一样。 当输入引脚作为正常的 I/O 引脚使用时,可通过掩膜选项设置上拉电阻,若设 置为 A/D 输入,则上拉电阻会自动断开。请注意,PBC 端口控制寄存器并不 需要为使能 A/D 输入,而先设定 A/D 引脚为输入引脚,当 PCR2~PCR0 位使A/D 输入时,不考虑端口控制寄存器的状态。电源供应脚 VDD A/D 转换 器的参考电压,模拟输入电压不可超过此电压值。另外须适当的量测 VDD, 以确保该电压的稳定及减少噪声。
A/D 转换的步骤
下面总结实现 A/D 转换过程的各个步骤。
步骤 1
选择 PB 端口的 A/D 输入引脚,并通过 ADCR 中的 PCR2~PCR0 位,将它 们规划为 A/D 输入引脚。
步骤 2
通过 ADCR 中的 ACS2~ACS0 位,选择连接至内部 A/D 转换器的通道。
步骤 3
通过 ACSR 中的 ADCS1 ADCS0 位,选择所需的 A/D 转换时钟。
步骤 4
如果要使用中断,则中断控制寄存器必须正确地设置,以确保 A/D 功能的 动作。根据使用的单片机,主中断控制位 EMI(位于 INTC INTC0 内) 必须置位为“1”,A/D 转换器的中断使能位 EADI(位于 INTCINTC0 INTC1 内)也必须置位为“1”。
步骤 5
通过设定 ADCR 寄存器中的 START 位从“0”到“1”再回到“ 0”,可以开 始模数转换的过程。该位需初始化为“0”。
57
A/D 型单片机使用手册
步骤 6
可以轮询 ADCR 寄存器中的 EOCB 位,检查模数转换过程是否完成。当此 位成为逻辑低时,表示转换过程已经完成。转换完成后,可读取 A/D 数据 寄存器 ADRL ADRH 获得转换后的值。另一种方法是,若中断使能且堆 栈未满,则转换完成后,程序会进入 A/D 中断服务子程序。
注意: 若使用轮询 ADCR 寄存器中 EOCB 位的状态的方法来检查转换过程是否结束时,步骤 4
以省略。
下列时序图表示模数转换过程中不同阶段的图形与时序。
M i n i m u m o n e i n s t r u c t i o n c y c l e n e e d e d
S T A R T
E O C B
P C R 2 ~ P C R 0
A C S 2 ~ A C S 0
0 0 0 B
0 0 0 B
P o w e r - o n R e s e t
1 : D e f i n e P B c o n f i g u r a t i o n 2 : S e l e c t a n a l o g c h a n n e l
A / D c l o c k m u s t b e f
N o t e :
R e s e t A / D c o n v e r t e r
A / D s a m p l i n g t i m e 3 2 t
A D
1 0 0 B
0 1 0 B
S t a r t o f A / D c o n v e r s i o n
7 6 t
A / D c o n v e r s i o n t i m e
/ 2 , f
/ 8 o r f
S Y S
S Y S
R e s e t A / D c o n v e r t e r
E n d o f A / D c o n v e r s i o n
A D
/ 3 2
S Y S
A/D 转换时序
A / D s a m p l i n g t i m e 3 2 t
A D
1 0 0 B
0 0 0 B
S t a r t o f A / D c o n v e r s i o n
7 6 t
A / D c o n v e r s i o n t i m e
E n d o f A / D c o n v e r s i o n
A D
0 0 0 B
1 . P B p o r t s e t u p a s I / O s 2 . A / D c o n v e r t e r i s p o w e r e d o f f t o r e d u c e p o w e r c o n s u m p t i o n
d o n ' t c a r e
A/D 转换器没有对应的掩膜选项,它的功能设定与操作完全由应用程序控制。 由应用程序控制开始 A/D 转换过程后,单片机的内部硬件就会开始进行转换, 在这个过程中,程序可以继续其它功能。有两种方法判断 A/D 转换过程是否结 束,第一种方法是应用程序去轮询 ADCR 寄存器中的 EOCB 位,第二种方法 则是等待 A/D 内部中断的发生。下面两个短程序的例子用来说明这两个方法, 它们是依据 HT46R22/HT46C22 撰写的。
58
范例:使用 EOCB 轮询方法侦测转换的结束
clr INTC0.3 ; disable A/D interrupt in interrupt control ; register mov a,00100000B mov ADCR,a ; setup ADCR register to configure Port PB0~PB3 ; as A/D inputs and select AN0 to be connected ; to the A/D converter mov a,00000001B mov ACSR,a ; setup the ACSR register to select f ; the A/D clock
Start_conversion clr ADCR.7 set ADCR.7 ; reset A/D clr ADCR.7 ; start A/D
Polling_EOC sz ADCR.6 ; poll the ADCR register EOCB bit to detect end ; of A/D conversion jmp polling_EOC ; continue polling mov a,ADRH ; read conversion result from the high byte ; ADRH register mov adrh_buffer,a ; save result to user defined register mov a,ADRL ; read conversion result from the low byte ADRL ; register mov adrl_buffer,a ; save result to user defined register jmp start_conversion; start next A/D conversion
SYS
/8 as
59
A/D 型单片机使用手册
范例:使用中断方法侦测转换的结束
set INTC0.0 ; interrupt global enable set INTC0.3 ; enable A/D interrupt in interrupt control ; register mov a,00100000B mov ADCR,a ; setup ADCR register to configure Port PB0~PB3 ; as A/D inputs and select AN0 to be connected ; to the A/D converter mov a,00000001B mov ACSR,a ; setup the ACSR register to select f ; the A/D clock
start_conversion clr ADCR.7 set ADCR.7 ; reset A/D clr ADCR.7 ; start A/D ; interrupt service routine EOC_service routine mov a_buffer,a ; save ACC to user defined register mov a,ADRH ; read conversion result from the high byte ; ADRH register mov adrh_buffer,a ; save result to user defined register mov a,ADRL ; read conversion result from the low byte ; ADRL register mov adrl_buffer,a ; save result to user defined register
clr ADCR.7 set ADCR.7 ; reset A/D clr ADCR.7 ; start A/D
mov a,a_buffer ; restore ACC from terporary storage reti
SYS
/8 as
60
A/D 转换功能
HT46R47/HT46C47 HT46R22/HT46C22 单片机均含有一组 9 位的 A/D 转换 器,它们转换的最大值可达 1FFH。由于模拟输入最大值等于 VDD 的电压值, 因此每一位可表示 V
HT46C24 单片机均含有一组 10 位的 A/D 转换器,它们转换的最大值可达 3FFH,每一位表示 V 器内,模拟输入值和数字输出值之间理想的转换功能。
A / D C o n v e r s i o n R e s u l t
理想的 A/D 转换功能 HT46R47/HT46C47 和 HT46R22/HT46C22
/512 的模拟输入值。HT46R23/HT46C23 和 HT46R24/
DD
/1024 的模拟输入值。下图显示 9 位和 10 位 A/D 转换
DD
1 . 5 L S B
1 F F H
1 F E H
1 F D H
0
0 . 5 L S B
1 2 3
5 1 0 5 1 1 5 1 2
5 0 9
A n a l o g I n p u t V o l t a g e
V
D D
( )
5 1 2
0 3 H
0 2 H
0 1 H
3 F F H
3 F E H
3 F D H
A / D C o n v e r s i o n R e s u l t
0 3 H
0 2 H
0 1 H
0
理想的 A/D 转换功能 HT46R23/HT46C23 和 HT46R24/HT46C24
61
0 . 5 L S B
1
2 3
A n a l o g I n p u t V o l t a g e
1 0 2 2 1 0 2 3 1 0 2 4
1 0 2 1
1 . 5 L S B
V
D D
( )
1 0 2 4
A/D 型单片机使用手册
为了减少量化错误,A/D 转换器输入端会加入 0.5 LSB 的偏移量。除了数字化 数值 0,其后的数字化数值会在精确点之前的 0.5 LSB 处改变,而数字化数值 的最大值将在 VDD 之前的 1.5 LSB 处改变。
A/D 转换器有最大为±1 LSB 的非线性积分误差,这是理想线性转递功能的偏 离。对于 HT46R47/HT46C47 HT46R22/HT46C22,其 9 位结果的 A/D 转换 器有 8 位精准度,而对于 HT46R23/HT46C23 HT46R24/HT46C24,其 10 位 结果的 A/D 转换器有 9 位精准度。
62
I2C 总线串行接口
I2C 总线是由飞利浦半导体开发出的两线双向通讯接口。在两条线上发送和接 收数据的可能性,为单片机的基础应用提供了更多的应用可行性。除了 HT46R47/HT46C47,盛群 A/D 系列单片机都提供了 I 过掩膜选项选择。
D a t a B u s
2
C 总线。I2C 总线功能通
I2C D a t a R e g i s t e r
( H D R )
H T X
D i r e c t i o n C o n t r o l
S C L
S D A
D a t a I n ( T o L S B ) D a t a O u t ( F r o m M S B )
M
U
T X A K , E n a b l e / D i s a b l e A c k n o w l e d g e
X
S h i f t R e g i s t e r
T r a n s m i t / R e c e i v e
C o n t r o l U n i t
S l a v e A d d r e s s R e g i s t e r
( H A D R )
A d d r e s s
C o m p a r a t o r
S R W , R e a d / w r i t e S l a v e
H C F , 8 - b i t D a t a C o m p l e t e
H B B , D e t e c t S t a r t o r S t o p
A d d r e s s M a t c h ( H A A S )
2
I
C I n t e r r u p t
I2C 总线由两个端口组成,一个为 SDA 端口的串行数据线,另一个为 SCL 口的串行时钟线。由于在同一总线上可以连接多个单片机,因此它们的输出均 为开漏型。必须要在输出端口连接外部上拉电阻。请注意,没有片选端口,在
2
C 总线上的每一个单片机均被在 I2C 总线上发送和接收的唯一地址所识别。
I
当两个设备相互在 I
2
C 总线上通讯时,一个被认定为主机,而另一个则被认定
为从机。主机和从机都可以发送和接收数据,但主机全面地控制总线。对于只
2
能操作在从模式下的盛群单片机,在 I 从发送模式和从接收模式。与控制 I 有四个,分别为 HADRHCRHSR HDR。利用 I
C 总线上发送数据有两种模式,分别为
2
C 总线及相应的数据发送有关的寄存器共
2
C 总线通讯需要四个步
骤:起始信号、发送从地址、发送数据和最后的停止信号。
63
A/D 型单片机使用手册
I2C 总线从地址寄存器 HADR
寄存器 HADR 是单片机存放从地址的位置。寄存器 HADR 的第 1~7 位定义单
2
片机的从地址。第 0 位未定义。当连接在 I HADR 寄存器中的从地址匹配时,就选中了这个从机单片机。
C 总线上的主机送出的从地址与
b 7 b 0
H A D R R e g i s t e r
N o t i m p l e m e n t e d , r e a d a s " 0 "
S l a v e a d d r e s s
I2C 总线输入/输出数据寄存器 HDR
寄存器 HDR I2C 总线输入/输出数据寄存器。在单片机写数据到 I2C 总线前,
2
被发送的实际数据必须先放置在 HDR 寄存器内。在从 I 后,单片机可以从寄存器 HDR 中读取到这个数据。任何发送到 I
2
数据或是从 I
C 总线上接收数据,都必须通过寄存器 HDR 来完成。
C 总线上接收到数据
2
C 总线上的
I2C 总线控制寄存器 HCR
I2C 总线控制寄存器 HCR 包含 3 个位,第 7 位为 HEN,是用来决定 I2C 总线
2
功能使能或除能,如果 I
C 总线要求数据发送,则此位必须设定为逻辑高。第 4 位为 HTX,是用来决定单片机工作在发送模式还是接收模式,如果单片机要 作为发送端,则必须被设定为逻辑高。第 3 TXAK 为发送应答位。在接收
2
8 位数据之后,此位数据将会在第九个时钟发送到 I
C 总线上。为了继续接
收更多的数据,在接收更多的数据之前,必须把此位清为“0”。
b 7 b 0
H E N T X A K
H T X
H C R R e g i s t e r
N o t i m p l e m e n t e d , r e a d a s " 0 "
T r a n s m i t a c k n o w l e d g e f l a g 1 : d o n ' t a c k n o w l e d g e 0 : a c k n o w l e d g e
T r a n s m i t / r e c e i v e m o d e 1 : t r a n s m i t m o d e 0 : r e c e i v e m o d e
N o t i m p l e m e n t e d , r e a d a s " 0 "
I2C B u s f u n c t i o n 1 : e n a b l e 0 : d i s a b l e
64
I2C 总线状态寄存器 HSR
I2C 总线寄存器 HSR 是一个 8 位的状态寄存器,其中有 5 位被使用。第 7 位为 HCF,在发送数据字节时清为“0”,而在数据发送完成后置为“1”。第 6 位为 HAAS,如果发送的从地址与从机的从地址匹配,它将被置为“1”,并且置位
2
C 中断请求标志位。如果中断使能且堆栈未满,则调用 10H 处子程序。写数
I
2
据到 I 不匹配,则 HAAS 位将被复位为“0”。
5 位为 HBB 位,当侦测到 START 信号,就会把该位置为“1”,表示 I 线忙碌。当侦测到 STOP 信号,则会将 HBB 位清除为“0”,表示 I 闲。第 2 位为 SRW,也就是从机读/写命令位,用来判断主机是要在 I 上发送数据还是接收数据。当发送过来的从地址与从机的从地址匹配时,也就 是当 HAAS 位置位为“1”时,单片机将检测 SRW 位来确认本机是工作在发 送模式还是接收模式。如果 SRW 位等于“1”,表示主机要从总线上读取数据, 因此从机应该为发送模式。当 SRW 位等于“0”,表示主机要写数据到总线上, 因此从机应该为接收模式来接收这些数据。
C 总线会清除 HAAS 位。如果 I2C 总线上发送的从地址与从机的从地址
2
C
2
C 总线空
2
C 总线
b 7 b 0
H A A S
H C F H B B
S R W
H S R R e g i s t e r
R X A K
R e c e i v e a c k n o w l e d g e f l a g 1 : n o t a c k n o w l e d g e d 0 : a c k n o w l e d g e d
N o t i m p l e m e n t e d , r e a d a s " 0 " M a s t e r d a t a r e a d / w r i t e r e q u e s t f l a g
1 : r e q u e s t d a t a r e a d 0 : r e q u e s t d a t a w r i t e
N o t i m p l e m e n t e d , r e a d a s " 0 "
I2C B u s b u s y f l a g 1 : b u s y 0 : n o t b u s y
C a l l i n g a d d r e s s m a t c h e d f l a g 1 : m a t c h e d 0 : n o t m a t c h e d
D a t a t r a n s f e r f l a g 1 : t r a n s f e r c o m p l e t e 0 : t r a n s f e r n o t c o m p l e t e
0 位为接收应答位 RXAK。当 RXAK 位被复位为“0”时,表示在发送 8 位 数据之后的第 9 个时钟收到了正确的应答信号。在发送模式下,发送端会检测 RXAK 位,判断接收端是否要接收下一个数据字节。发送端会继续送出数据直 到 RXAK 位被置为“1”。同时,发送端会释放 SDA 端口,这样主机能发送 STOP 信号来释放总线。
65
A/D 型单片机使用手册
I2C 总线通讯
I2C 总线上的通讯需要四个单独的步骤,START 信号,从机地址的发送、数据
2
的发送,最后还有一个 STOP 信号。当一个 START 的信号被发送到 I 上时,所有在总线上的单片机都会接收到此信号,并被告知总线上即将有数据 到来。数据的前 7 位为从地址,第一位为最高位(MSB)。
S T A R T s i g n a l
f r o m M a s t e r
S e n d s l a v e a d d r e s s
a n d R / W b i t f r o m M a s t e r
A c k n o w l e d g e
f r o m s l a v e
S e n d d a t a b y t e
f r o m M a s t e r
A c k n o w l e d g e
f r o m s l a v e
S T O P s i g n a l
f r o m M a s t e r
C 总线
如果单片机的地址与发送过来的地址匹配,则在寄存器 HSR 内的 HAAS 位将
2
被置位,并且产生一个 I
C 中断。进入中断服务子程序后,从机单片机必须先
去检测 HAAS 位的状态,判断中断的来源是由于地址的匹配,还是 8 位数据发 送的完成。在数据发送期间,请注意,在 7 位的从地址发送完成之后,接下来 的第 8 个位为读/写位,该值会被存储在 SRW 位内。单片机会检测这个位,用
2
以决定是进入发送模式还是进入接收模式。在发送数据到 I
C 总线或是从 I2C
总线接收数据之前,单片机必须先初始化总线,接下来的步骤将完成此项工作:
步骤 1
2
将单片机的从地址写到 I
C 总线地址寄存器 HADR 中。
步骤 2
2
C 总线控制寄存器内的 HEN 位置为“1”,使能 I2C 总线。
I
步骤 3
将中断控制寄存器内的 EHI 位置位,使能 I
2
C 总线中断。
66
起始信号
START 信号只能由连接到 I 生。START 信号会被所有连接到 I
2
会被置位表示 I
C 总线忙碌。START 信号为 SCL 端口保持高电平而 SDA 端口
发生由高电平到低电平的变化。
从地址
主机发送的 START 信号会被所有连接在 I 与哪台从机通讯,主机会在发出 START 信号之后立即送出从机地址。在接收 到 7 位地址数据后,所有的从机将它与自身的 7 位从地址进行比较。如果主机 发来的从地址与从机单片机的内部地址匹配,就会产生一个内部的 I 断信号。接着地址之后的第 8 位数据定义读/写状态,它会被储存在 HSR 寄存 器的 SRW 位。从机会发送一个低电平的应答位(作为第 9 位数据)。当地址匹 配时,从机单片机会设定状态标志位 HAAS。
由于有两种情况会产生 I2C 总线中断,所以当进入中断服务子程序时,应该先 检测 HAAS 位,以确认中断来源是来自于从地址的匹配还是来自于数据字节发 送的完成。当从地址匹配时,从机必须被设置为发送模式以写入数据到 HDR 寄存器,或是设置为接收模式从 HDR 寄存器虚读数据以释放 SCL 端口。
2
C 总线的主机产生,而不是由作为从机的单片机产
2
C 总线的单片机检测。在检测时,HBB
2
C 总线上的芯片检测。为了确定要
2
C 总线中
0
S l a v e A d d r e s s
1
1
D a t a
2
C 通讯时序图
I
0 1 0 1 0
S S A S R
S t a r t
S C L
S D A
S C L
S D A
S = S t a r t ( 1 b i t ) S A = S l a v e A d d r e s s ( 7 b i t s ) S R = S R W b i t ( 1 b i t ) M = S l a v e d e v i c e s e n d a c k n o w l e d g e b i t ( 1 b i t ) D = D a t a ( 8 b i t s ) A = A C K ( R X A K b i t f o r t r a n s m i t t e r , T X A K b i t f o r r e c e i v e r 1 b i t ) P = S t o p ( 1 b i t )
S S A S R
1
1 0 1 0 0 1 00
M D A D A
S R W
M D A D A P
A C K
A C K S t o p
67
A/D 型单片机使用手册
SRW
HSR 寄存器中的 SRW 位定义从机单片机是要从 I 总线写数据。而单片机要检查此位来决定是作为发送端还是接收端。如果 SRW
2
位设定为“1”,则表示主机要从 I 成发送端来送出数据到 I
2
数据到 I
应答位
C 总线,所以从机单片机必须设定接收端来从 I2C 总线上读取数据。
主机送出调用地址后,任何在 I
2
C 总线。如果 SRW 位设定为“0”,则表示主机要送
C 总线读取数据,所以从机单片机必须设定
2
C 总线上内部地址与调用地址匹配的从机必须
产生一个应答信号。这个应答信号通知主机有从机与调用地址匹配。如果主机 没有接收到应答信号,则主机会送出一个 STOP 信号以结束通讯。当 HAAS 位 为逻辑高、地址也匹配时,从机单片机会检测 SRW 位来决定是作为发送端还 是接收端。如果 SRW 位为逻辑高,则从机单片机应该被设定为发送端,因此 HCR 寄存器中的 HTX 位应该被设定为“1”,如果 SRW 位为逻辑低,则从机 单片机应该被设定为接收端,且 HCR 寄存器中的 HTX 位应该被设定为“0”。
数据字节
被发送的数据为 8 位,在从机确认过已接收到从地址之后再发送。串行位发送 的顺序为先传高位后传低位。8 位数据接收之后,接收端必须在接收下一个数 据字节前送出一个电平为“0”的应答信号。如果发送端没有收到接收端的应 答位信号,则会释放 SDA 端口且主机会送出 STOP 信号来释放对 I 控制。相应的数据储存在 HDR 寄存器中。如果设定为发送端,则从机单片机 必须先将要发送的数据写入 HDR 寄存器。如果设定为接收端,则从机单片机 必须从 HDR 寄存器中读取被发送的数据。
2
C 总线读取数据还是要往 I2C
2
C 总线的
S C L
S D A
S t a r t b i t
接收应答位 当接收端想要继续接收下一组数据字节时,必须在第 9 位时钟产生一个应答位 TXAK。被设为发送端的从机单片机会检测 HSR 中的 RXAK 位来决定是否送 出另一组数据字节,如果没有应答信号,则会释放 SDA 端口并且等待接收从 主机发来的 STOP 信号。
68
D a t a s t a b l e
数据时序图
D a t a a l l o w c h a n g e
S t o p b i t
S t a r t
W r i t e S l a v e
A d d r e s s t o H A D R
S E T H E N
I2C B u s I n t e r r u p t = ?
E n a b l eD i s a b l e
N o
R e a d f r o m H D R
R E T I
C L R E H I
P o l l H I F t o d e c i d e
w h e n t o g o t o I
G o t o M a i n P r o g r a m
H T X = 1 ?
2
C B u s I S R
2
C 总线初始化流程图
I
N o
Y e s
Y e s
R X A K = 1
?
N o
S t a r t
H A A S = 1
?
S E T E H I
W a i t f o r I n t e r r u p t
G o t o M a i n P r o g r a m
Y e s
Y e s
S R W = 1 ?
S E T H T X
W r i t e t o H D R
R E T I R E T I
N o
C L R H T X
C L R T X A K
D u m m y R e a d
F r o m H D R
C L R H T X
C L R T X A K
D u m m y R e a d
f r o m H D R
R E T I
W r i t e t o H D R
69
R E T I
2
C 总线 ISR 流程图
I
中断
A/D 型单片机使用手册
每一款 A/D 系列的单片机均包含外部与内部中断功能。外部中断由外部引脚
的动作控制。而定时/计数器、A/D 转换器和 I2C 接口等内部功能都利用内
INT
部中断功能进行操作。
HT46R47/HT46C47 不包含内部 I 的中断控制寄存器 INTC 足以控制所有的请求动作。而 HT46R22/HT46C22 HT46R23/HT46C23 HT46R24/HT46C24 都具有一个 I
断控制寄存器不足以控制所有的中断特性。因此提供了两个中断控制寄存器, 称为 INTC0 INTC1
一但中断子程序被响应,所有其它的中断将被屏蔽(通过清除 EMI 位)。这个 方式可以防止任何进一步的中断嵌套。其它的中断请求可能发生在此期间,但 只有中断请求标志位会被记录。如果某个中断服务子程序正在执行,此时有另 一个中断要求响应,EMI 位和 INTC 相关的位可以被置位,以允许此中断被响 应。如果堆栈已满,即使此中断使能,中断请求也不会被响应,直到 SP 减少 为止。如果要求立刻动作,则堆栈必须避免成为储满状态。
2
C 接口,只具有一个定时/计数器,一个 8
2
C 接口,一个 8 位的中
b 7 b 0
E A D IA D F
E T I E E I E M I
E I F T F
I N T C R e g i s t e r H T 4 6 R 4 7 / H T 4 6 C 4 7 I N T C 0 R e g i s t e r H T 4 6 R 2 2 / H T 4 6 C 2 2 H T 4 6 R 2 3 / H T 4 6 C 2 3
M a s t e r I n t e r r u p t g l o b a l e n a b l e 1 : g l o b a l e n a b l e 0 : g l o b a l d i s a b l e
E x t e r n a l i n t e r r u p t e n a b l e 1 : e n a b l e 0 : d i s a b l e T i m e r / E v e n t C o u n t e r i n t e r r u p t e n a b l e 1 : e n a b l e 0 : d i s a b l e
A / D C o n v e r t e r i n t e r r u p t e n a b l e 1 : e n a b l e 0 : d i s a b l e
E x t e r n a l i n t e r r u p t r e q u e s t f l a g 1 : a c t i v e 0 : i n a c t i v e T i m e r / E v e n t C o u n t e r i n t e r r u p t r e q u e s t f l a g 1 : a c t i v e 0 : i n a c t i v e A / D c o n v e r t e r r e q u e s t f l a g 1 : a c t i v e 0 : i n a c t i v e
N o t i m p l e m e n t e d , r e a d a s " 0 "
70
b 7 b 0
I N T C 1 R e g i s t e r H T 4 6 R 2 2 / H T 4 6 C 2 2
E H IH I F
H T 4 6 R 2 3 / H T 4 6 C 2 3
I2C B u s I n t e r r u p t e n a b l e 1 : e n a b l e 0 : d i s a b l e
N o t i m p l e m e n t e d , r e a d a s " 0 "
2
C B u s i n t e r r u p t r e q u e s t f l a g
I 1 : a c t i v e 0 : i n a c t i v e
N o t i m p l e m e n t e d , r e a d a s " 0 "
A/D 系列中其它单片机不同,HT46R24/HT46C24具有两组内部定时/计数器。 虽然所有的中断控制功能仍由 INTC0 INTC1 中断控制寄存器所控制,但它 与其它单片机在结构上还是有少许的不同。
b 7 b 0
E T 0 I E E I E M IE I F T 0 F
E T 1 IT 1 F
I N T C 0 R e g i s t e r H T 4 6 R 2 4 / H T 4 6 C 2 4
M a s t e r I n t e r r u p t g l o b a l e n a b l e 1 : g l o b a l e n a b l e 0 : g l o b a l d i s a b l e
E x t e r n a l i n t e r r u p t e n a b l e 1 : e n a b l e 0 : d i s a b l e
T i m e r / E v e n t C o u n t e r 0 i n t e r r u p t e n a b l e 1 : e n a b l e 0 : d i s a b l e
T i m e r / E v e n t C o u n t e r 1 i n t e r r u p t e n a b l e 1 : e n a b l e 0 : d i s a b l e
E x t e r n a l i n t e r r u p t r e q u e s t f l a g 1 : a c t i v e 0 : i n a c t i v e
T i m e r / E v e n t C o u n t e r 0 r e q u e s t f l a g 1 : a c t i v e 0 : i n a c t i v e
T i m e r / E v e n t C o u n t e r 1 r e q u e s t f l a g 1 : a c t i v e 0 : i n a c t i v e
N o t i m p l e m e n t e d , r e a d a s " 0 "
71
A/D 型单片机使用手册
b 7 b 0
A D F H I F
在暂停模式中,外部中断具有唤醒单片机的能力。当中断被响应时,首先将程 序计数器的值压入堆栈,并跳转到程序存储器中特殊地址的子程序。只有程序 计数器的值会被压入堆栈。如果累积器、状态寄存器或是其它寄存器的内容会 被中断服务程序改变,而这些变化可能会破坏原先想要的控制顺序,则这些内 容应该预先加以储存。
E H I
E A D I
I N T C 1 R e g i s t e r H T 4 6 R 2 4 / H T 4 6 C 2 4
A / D C o n v e r t e r I n t e r r u p t e n a b l e 1 : e n a b l e 0 : d i s a b l e
I2C B u s I n t e r r u p t 1 : e n a b l e 0 : d i s a b l e
N o t i m p l e m e n t e d , r e a d a s " 0 "
A / D C o n v e r t e r r e q u e s t f l a g 1 : a c t i v e 0 : i n a c t i v e
2
I
C B u s I n t e r r u p t r e q u e s t f l a g 1 : a c t i v e 0 : i n a c t i v e
N o t i m p l e m e n t e d , r e a d a s " 0 "
各个中断使能位以及相应的请求标志位,以优先级的顺序如下图所示。
A u t o m a t i c a l l y C l e a r e d b y I S R
M a n u a l l y S e t o r C l e a r e d b y S o f t w a r e
E x t e r n a l I n t e r r u p t
R e q u e s t F l a g E I F
T i m e r / E v e n t C o u n t e r 0
I n t e r r u p t R e q u e s t F l a g T 0 F
T i m e r / E v e n t C o u n t e r 1
I n t e r r u p t R e q u e s t F l a g T 1 F
A / D C o n v e r t e r
I n t e r r u p t R e q u e s t F l a g A D F
2
I
I n t e r r u p t R e q u e s t F l a g H I F
C B u s
注意: 在图中,T1F 中断请求标志位和 ET1I 中断使能位是对应具有两组定时器的 HT46R24/
HT46C24 单片机而言。对于只具有一组定时器的 HT46R47/HT46C47HT46R22/HT46C22
HT46R23/HT46C23,定时/计数器 0 表示唯一定时器 TMR,而中断请求标志位称为 TF
使能位称为 ETI
A u t o m a t i c a l l y D i s a b l e d b y I S R
C a n b e E n a b l e d M a n u a l l y
E E I
E T 0 I
E T 1 I
E A D I
E H I
E M I
P r i o r i t y
H i g h
L o w
I n t e r r u p t
P o l l i n g
72
外部中断
要使外部中断发生,相应的外部中断使能位必须先被设定。外部中断使能位 EEI 为寄存器 INTC 或 INTC0 的第 1 位。外部中断通过 平转换来触发,之后相应的中断请求标志位(EIF;INTC 的第 4 位)将被设定。 当中断使能、堆栈未满且外部中断产生时,将调用位于地址 04H 处的子程序。 当外部中断被响应时,中断请求标志位 EIF 会被复位且 EMI 位会被清零以除 能其它中断。
定时/计数器中断
要使定时器内部中断发生,相应的内部中断使能位必须先被设定。对于具有一 组定时器的单片机,中断使能位 ETI 为寄存器 INTC INTC0 的第 2 位。对于 具有两组定时器的单片机,定时器 0 的中断使能位 ET0I 为第 2 位,而定时器 1 的中断使能位 ET1I 为第 3 位。当定时器溢出后,就会置位定时/计数器中断 请求标志位,产生定时/计数器中断。对于具有一组定时器的单片机,请求标 志位 TF 为寄存器 INTC INTC0 的第 5 位。对于具有两组定时器的单片机, 定时器 0 的请求标志位 T0F 为第 5 位,而定时器 1 的请求标志位 T1F 为第 6 位。当主设备的中断使能位被置位、堆栈未满且对应的内部中断使能位被置位 时,一旦定时/计数器溢出,就会产生内部中断。对于具有一组定时器的单片 机,该中断将产生地址 08H 处的子程序调用。而对于具有两组定时器的单片机, 由定时器 0 产生的中断,调用地址 08H 处的子程序,由定时器 1 产生的中断, 则调用地址 0CH 处的子程序。当内部中断被响应时,中断请求标志位 TFT0FT1F 会被复位且 EMI 位会被清零以除能其它中断。
端口由高到低的电
INT
A/D 中断
要使 A/D 中断发生,相应的中断使能位 EADI 必须先被设定。对于 HT46R47/
HT46C47EADI 位为寄存器 INTC 的第 3 位,对于 HT46R22/HT46C22 HT46R23/HT46C23,为寄存器 INTC0 的第 3 位,而对于 HT46R24/HT46C24
为寄存器 INTC1 的第 0 位。当 A/D 转换程序完成时,就会置位 A/D 转换器请 求标志位 ADF,产生 A/D 中断。对于 HT46R47/HT46C47ADF 为寄存器 INTC 的第 6 位,而对于 HT46R22/HT46C22 和 HT46R23/HT46C23,为寄存器 INTC0 的第 6 位。对于 HT46R24/HT46C24,为寄存器 INTC1 的第 4 位。当主设备的 中断使能位被置位、堆栈未满且对应的 A/D 中断使能位被置位时,一旦先前请 求的 A/D 转换程序完成,就会产生内部中断。除 HT46R24/HT46C24 外,该中 断将产生地址 0CH 处的子程序调用,而对于 HT46R24/HT46C24,则是调用地 址 10H 处的子程序。当 A/D 中断被响应,中断请求标志位 ADF 会被复位且
EMI 位会被清零以除能其它中断。
73
A/D 型单片机使用手册
I2C 中断
要使 I2C 中断发生,相应的中断使能位 EHI 必须先被设定。对于 HT46R22/HT46C22 HT46R23/HT46C23,EHI 位为寄存器 INTC1 的第 0 位, 而对于 HT46R24/HT46C24,为寄存器 INTC1 的第 1 位。当接收到匹配的 I
2
从地址或者是 I
2
产生 I
C 中断。对于 HT46R22/HT46C22 和 HT46R23/HT46C23,HIF 位为寄存
C 数据字节发送完成时,就会置位 I2C 中断请求标志位 HIF
INTC1 的第 4 位,对于 HT46R24/HT46C24,为 寄 存 器 INTC1 的第 5 位。请
2
注意,HT46R47/HT46C47 未包含 I
2
关的 I 相应的 I
I
C 使能位或请求标志位。当主设备的中断使能位被置位、堆栈并未满且
2
2
C 数据字节发送完成时发生。对于 HT46R22/HT46C22 和 HT46R23/HT46C23,
C 中断使能位被置位时,内部中断就会在接收到匹配的 I2C 从地址或
C 接口,它的中断控制寄存器 INTC 没有相
该中断会产生地址 10H 处的子程序调用,而对于 HT46R24/HT46C24,则是调
2
用地址 14H 处的子程序。一旦 I
C 中断被响应,中断请求标志位 HIF 会被复位
EMI 位会被清零以除能其它中断。
中断优先权
当中断是发生在两个连续的 T2 脉冲上升沿之间时,如果相应的中断请求被允 许,中断将在后一个 T2 脉冲响应。下表指出在同时提出请求的情况下所提供 的优先权。这个可以通过重新设定 EMI 位来加以屏蔽。
2
C
HT46R47
中断源
外部中断
TMR/TMR0 溢出 2 2 2 2
TMR1 溢出 N/A N/A N/A 3
A/D 转换器中断 3 3 3 4
I2C 总线中断 N/A 4 4 5
注意: 只有 HT46R24/HT46C24 拥有两组内部定时器,即 TMR0 TMR1。该系列其它单片机只有
一组内部定时器,即 TMR
HT46C47
优先权
1
假使外部和内部中断均被使能,且外部和内部中断同时发生,则外部中断永远 优先处理,首先被响应。使用 INTC 寄存器适当地屏蔽个别中断,可以防止同 时发生的情况。
74
HT46R22
HT46C22
优先权
1 1 1
HT46R23
HT46C23
优先权
HT46R24
HT46C24
优先权
编程注意事项
中断请求标志位 TFT0FT1F、EIF、ADF 及 HIF 与中断使能位 ETI、ET0I、
ET1IEEIEADI EHI 共同形成数据存储器中的中断控制寄存器 INTC INTC0 INTC1。通过除能中断使能位,可以屏蔽中断请求,然而,一旦中断
请求标志位被设定,它们会被保留在 INTCINTC0 或 INTC1 寄存器内,直到 相应的中断服务子程序执行或被软件指令清除。
建议各位使用者在中断服务子程序中不要使用“调用子程序”指令。中断通常 发生在不可预料的情况或是需要立刻执行的某些应用。假如只剩下一层堆栈且 没有控制好中断,当“调用子程序”在中断服务子程序中执行时,将破坏原来 的控制序列。
75
A/D 型单片机使用手册
复位和初始化
复位功能是任何单片机中基本的部分,使得单片机可以设定一些与外部参数无 关的先置条件。最重要的是,复位条件在初次提供电源给单片机后,经短暂延 迟,内部电路将使得单片机被定义在良好的状态且准备执行第一条程序语句。 上电复位之后,在程序未开始执行前,部分重要的内部寄存器将会被预先设定 状态。程序计数器就是其中之一,它会被清除为零,使得单片机从最低的程序 存储器地址开始执行程序。
除了上电复位外,即使单片机正在执行状态,有些情况的发生也迫使单片机必 须加以复位。其中一个例子是当提供电源给单片机以执行程序后, 强制拉下至低电平。这个例子为正常操作复位,单片机中只有一些寄存器受影 响,而大部分寄存器则是不受影响,以便复位引脚回复至高电平后,单片机仍 可以正常操作。复位的另一种形式是看门狗定时器溢出而复位单片机,所有复 位操作类型导致不同的寄存器条件被加以设定。
另外一种复位以低电压即 LV R 的型态存在,在电源提供电压低于某一临界值 的情况下,一种和
引脚复位类似的完全复位将会被执行。
RES
RES
引脚被
复位
通过内部与外部事件触发复位,单片机共有五种复位方式:
76
S
上电复位
这是最基本而不可避免的复位,发生在单片机上电后。除了保证程序存储器会 从起始地址开始执行,上电复位也使得其它寄存器被设定在预设条件,所有的 输入/输出口寄存器和输入/输出端口控制寄存器在上电复位时会保持高电平, 以确保上电后所有引脚被设为输入状态。
虽然单片机有一个内部 RC 复位功能,由于接通电源不稳定,还是推荐使用和
引脚连接的外部 RC 电路。由 RC 电路所造成的时间延迟使得
RES
电源供应稳定前的一段延长周期内保持在低电平。在这段时间内,单片机的正 常操作是被禁止的。 机可开始进行正常操作。下图中 SST 是系统延迟周期 System Start-up Timer 的 缩写。
引脚达到一定电压值后,再经过延迟时间 t
RES
RES
RSTD
引脚在
,单 片
V D D
R E S
S S T T i m e - o u t
I n t e r n a l R e s e t
0 . 9 V
D D
t
R S T D
上电复位时序图
引脚复位
RES
当单片机正常工作,而
引脚通过外部硬件(如外部开关)被强迫拉至低电平
RES
时,此种复位型式即会发生。这种复位形式与其它复位的例子一样,程序计数 器会被清除为零且程序从头开始执行。
0 . 9 V
R E S
S S T T i m e - o u t
I n t e r n a l R e s e t
0 . 4 V
D D
引脚复位时序图
RE
D D
t
R S T D
77
A/D 型单片机使用手册
低电压复位 LV R
单片机具有低电压复位电路,可以监测它的电源电压。例如在更换电池的情况 下,单片机供应的电压可能会落在 0.9V~V 从内部复位单片机。LV R 包含以下的规格:有效的 LV R 信号,即在 0.9V~V 的低电压,必须存在超过 1ms。如果低电压存在不超过 1ms,则 LV R 将会忽略 它且不会执行复位功能。
L V R
t
S S T T i m e - o u t
I n t e r n a l R e s e t
R S T D
低电压复位时序图
正常操作时看门狗溢出复位
除了看门狗溢出标志位TO 将被设为1 之外,正常操作时看门狗溢出复位和 复位相同。
的范围内,这是 LV R 将会自动
LV R
LV R
RES
W D T T i m e - o u t
S S T T i m e - o u t
I n t e r n a l R e s e t
t
R S T D
正常操作时看门狗溢出复位时序图
暂停时看门狗溢出复位
暂停时看门狗溢出复位有些不同于其它种类的复位,除了程序计数器与堆栈指 针将被清除为 0 TO 标志位被设为 1 外,绝大部份的条件保持不变。图中 t 的细节请见 A.C.特性。
W D T T i m e - o u t
S S T T i m e - o u t
暂停时看门狗溢出复位时序图
t
S S T
不同的复位方法以不同的方式影响复位标志位。这些标志位,即 PDF TO, 被放在状态寄存器中,由如暂停功能或看门狗计数器等几种控制器操作控制。 复位标志位如下所示:
TO PDF 复位条件
0 0
u u
1 u
1 1
u”表示不变化
上电时的
一般运行时的
一般运行时的 WDT 溢出复位
HALT
复位
RES
复位或 LV R 低压复位
RES
暂停时的 WDT 溢出复位
SST
78
在单片机复位之后,各功能单元初始化的情形,列于下表。
项 目 复位后情况
程序计数器 清除为零
中断
看门狗定时器
定时/计数器
预分频器
输入/输出口
堆栈指针
不同的复位以不同的方式影响单片机中的内部寄存器。为保证复位发生后程序 的正常执行,在特定的复位发生后,了解单片机内的情况是非常重要的。下表 描述了不同的复位如何影响单片机的内部寄存器。
HT46R47/HT46C47
所有中断被除能
WDT
清除并重新计时
所有定时/计数器停止
定时/计数器之预分频器内容清除
所有 I/O 设为输入模式
堆栈指针指向堆栈顶端
复位
寄存器
MP xxx xxxx uuu uuuu uuu uuuu uuu uuuu
ACC xxxx xxxx uuuu uuuu uuuu uuuu uuuu uuuu
PCL 0000 0000 0000 0000 0000 0000 0000 0000
TBLP xxxx xxxx uuuu uuuu uuuu uuuu uuuu uuuu TBLH −−xx xxxx −−uu uuuu −−uu uuuu −−uu uuuu STATUS −−00 xxxx −−uu uuuu −−1u uuuu −−11 uuuu INTC 000 0000 000 0000 000 0000 uuu uuuu
TMR xxxx xxxx xxxx xxxx xxxx xxxx uuuu uuuu TMRC 0 0 0 1000 000 1000 000 1000 uuu uuuu
PA 1111 1111 1111 1111 1111 1111 uuuu uuuu
PAC 1111 1111 1111 1111 1111 1111 uuuu uuuu PB −−−− 1111 −−−− 1111 −−−− 1111 −−−− uuuu PBC −−−− 1111 −−−− 1111 −−−− 1111 −−−− uuuu PD −−−− −−−1 −−−− −−−1 −−−− −−−1 −−−− −−−u PDC −−−− −−−1 −−−− −−−1 −−−− −−−1 −−−− −−−u
PWM xxxx xxxx xxxx xxxx xxxx xxxx uuuu uuuu ADRL x −−− −−−− x −−− −−−− x −−− −−−− u−−− −−−−
ADRH xxxx xxxx xxxx xxxx xxxx xxxx uuuu uuuu
ADCR 0100 0000 0100 0000 0100 0000 uuuu uuuu ACSR 1 −−− −−00 1−−− −−00 1−−− −−00 u−−− −−uu
RES
(上电时)
LV R 复位
RES
(一般运行时)
WDT 溢出复位
(一般运行时)
WDT 溢出复位
(HALT 暂停时)
“u”表示不变化 “x”表示不确定 “”表示不存在
79
A/D 型单片机使用手册
HT46R22/HT46C22
复位
寄存器
MP xxx xxxx uuu uuuu uuu uuuu uuu uuuu
ACC xxxx xxxx uuuu uuuu uuuu uuuu uuuu uuuu
PCL 0000 0000 0000 0000 0000 0000 0000 0000
TBLP xxxx xxxx uuuu uuuu uuuu uuuu uuuu uuuu TBLH −−xx xxxx −−uu uuuu −−uu uuuu −−uu uuuu STATUS −−00 xxxx −−uu uuuu −−1u uuuu −−11 uuuu INTC0 000 0000 000 0000 000 0000 uuu uuuu INTC1 −−−0 −−−0 −−−0 −−−0 −−−0 −−−0 −−−u −−−u
TMR xxxx xxxx xxxx xxxx xxxx xxxx uuuu uuuu TMRC 0 0 0 1000 000 1000 000 1000 uuu uuuu
PA 1111 1111 1111 1111 1111 1111 uuuu uuuu
PAC 1111 1111 1111 1111 1111 1111 uuuu uuuu
PB 1111 1111 1111 1111 1111 1111 uuuu uuuu
PBC 1111 1111 1111 1111 1111 1111 uuuu uuuu PC −−−− −−11 −−−− −−11 −−−− −−11 −−−− −−uu PCC −−−− −−11 −−−− −−11 −−−− −−11 −−−− −−uu PD −−−− −−−1 −−−− −−−1 −−−− −−−1 −−−− −−−u PDC −−−− −−−1 −−−− −−−1 −−−− −−−1 −−−− −−−u
PWM xxxx xxxx xxxx xxxx xxxx xxxx uuuu uuuu HADR xxxx xxxxxxx xxx xxxx xxx uuuu uuu HCR 0 −−0 0−−− 0 −−0 0−−− 0 −−0 0−−− u−−u u−−− HSR 100− − 0 − 1100− − 0 − 1100− − 0 − 1 u u u − − u − u
HDR xxxx xxxx xxxx xxxx xxxx xxxx uuuu uuuu ADRL x −−− −−−− X −−− −−−− x −−− −−−− u−−− −−−−
ADRH xxxx xxxx xxxx xxxx xxxx xxxx uuuu uuuu
ADCR 0100 0000 0100 0000 0100 0000 uuuu uuuu ACSR 1 −−− −−00 1−−− −−00 1−−− −−00 u−−− −−uu
RES
(上电时)
LV R 复位
RES
(一般运行时)
WDT 溢出复位
(一般运行时)
WDT 溢出复位 (HALT 暂停时)
“u”表示不变化 “x”表示不确定 “”表示不存在
80
HT46R23/HT46C23
复位
寄存器
MP0 xxxx xxxx uuuu uuuu uuuu uuuu uuuu uuuu
MP1 xxxx xxxx uuuu uuuu uuuu uuuu uuuu uuuu
ACC xxxx xxxx uuuu uuuu uuuu uuuu uuuu uuuu
PCL 0000 0000 0000 0000 0000 0000 0000 0000
TBLP xxxx xxxx uuuu uuuu uuuu uuuu uuuu uuuu TBLH xxx xxxx uuu uuuu uuu uuuu uuu uuuu STATUS −−00 xxxx −−uu uuuu −−1u uuuu −−11 uuuu INTC0 000 0000 000 0000 000 0000 uuu uuuu INTC1 −−−0 −−−0 −−−0 −−−0 −−−0 −−−0 −−−u −−−u
TMRL xxxx xxxx xxxx xxxx xxxx xxxx uuuu uuuu
TMRH xxxx xxxx xxxx xxxx xxxx xxxx uuuu uuuu TMRC 0 0 0 1000 000 1000 000 1000 uuu uuuu
PA 1111 1111 1111 1111 1111 1111 uuuu uuuu
PAC 1111 1111 1111 1111 1111 1111 uuuu uuuu
PB 1111 1111 1111 1111 1111 1111 uuuu uuuu
PBC 1111 1111 1111 1111 1111 1111 uuuu uuuu PC −−−1 1111 −−−1 1111 −−−1 1111 −−−u uuuu PCC −−−1 1111 −−−1 1111 −−−1 1111 −−−u uuuu PD −−−− −−11 −−−− −−11 −−−− −−11 −−−− −−uu PDC −−−− −−11 −−−− −−11 −−−− −−11 −−−− −−uu
PWM0 xxxx xxxx xxxx xxxx xxxx xxxx uuuu uuuu
PWM1 xxxx xxxx xxxx xxxx xxxx xxxx uuuu uuuu HADR xxxx xxxxxxx xxx xxxx xxx uuuu uuu HCR 0 −−0 0−−− 0 −−0 0−−− 0 −−0 0−−− u−−u u−−− HSR 100− − 0 − 1100− − 0 − 1100− − 0 − 1 u u u − − u − u
HDR xxxx xxxx xxxx xxxx xxxx xxxx uuuu uuuu ADRL x x −− −−−− xx−− −−−− xx−− −−−− uu−− −−−−
ADRH xxxx xxxx xxxx xxxx xxxx xxxx uuuu uuuu
ADCR 0100 0000 0100 0000 0100 0000 uuuu uuuu ACSR 1 −−− −−00 1−−− −−00 1−−− −−00 u−−− −−uu
RES
(上电时)
LV R 复位
RES
(一般运行时)
WDT 溢出复位
(一般运行时)
WDT 溢出复位 (HALT 暂停时)
“u”表示不变化 “x”表示不确定 “”表示不存在
81
A/D 型单片机使用手册
u
u
u
−0 −−−0−−−0 −−−0−−−0 −
u
u
u
u
u
u
−00−
−00−
u
u
u
u
u
u
−−−00−
−−−00−
u
u
u
u
u
u
u
u
u
u
u
u
u
u
R
R
−−−0−
−−−0−
−0−
−0−
u
R
u
L
−−−−−xx−−−−−
−xx−−−
u
ADCR
u
R
−−−
−−−−−
−−−−−
u
HT46R24/HT46C24
复位
寄存器
MP0 xxxx xxxx uuuu uuuuuuuu uuuu uuuu uuu MP1 xxxx xxxx uuuu uuuuuuuu uuuu uuuu uuu ACC xxxx xxxx uuuu uuuuuuuu uuuu uuuu uuu PCL 0000 0000 0000 0000 0000 0000 0000 0000 BP TBLP xxxx xxxx uuuu uuuuuuuu uuuu uuuu uuu TBLH xxxx xxxx uuuu uuuuuuuu uuuu uuuu uuu STATUS −−00 xxxx INTC0 000 0000−000 0000−000 0000 uuu uuu INTC1 −−00 TMR0H xxxx xxxx xxxx xxxx xxxx xxxx uuuu uuu TMR0L xxxx xxxx xxxx xxxx xxxx xxxx uuuu uuu TMR0C 0 0 0 1000 00−0 1000 00−0 1000 uuu uuu TMR1H xxxx xxxx xxxx xxxx xxxx xxxx uuuu uuu TMR1L xxxx xxxx xxxx xxxx xxxx xxxx uuuu uuu TMR1C 0 0 0 1 PA 1111 1111 1111 1111 1111 1111 uuuu uuu PAC 1111 1111 1111 1111 1111 1111 uuuu uuu PB 1111 1111 1111 1111 1111 1111 uuuu uuu PBC 1111 1111 1111 1111 1111 1111 uuuu uuu PC 1111 1111 1111 1111 1111 1111 uuuu uuu PCC 1111 1111 1111 1111 1111 1111 uuuu uuu PD 1111 1111 1111 1111 1111 1111 uuuu uuu PDC 1111 1111 1111 1111 1111 1111 uuuu uuu PF 1111 1111 1111 1111 1111 1111 uuuu uuu PFC 1111 1111 1111 1111 1111 1111 uuuu uuu PWM0 xxxx xxxx xxxx xxxx xxxx xxxx uuuu uuu PWM1 xxxx xxxx xxxx xxxx xxxx xxxx uuuu uuu PWM2 xxxx xxxx xxxx xxxx xxxx xxxx uuuu uuu PWM3 xxxx xxxx xxxx xxxx xxxx xxxx uuuu uuu HAD HC HSR 100 HD SDR ADRH xxxx xxxx xxxx xxxx xxxx xxxx uuuu uuu
ACS
RES
(上电时)
−−
xxxx xxx−xxxx xxx−xxxx xxx uuuu uuu 0 −−0 0
1100
xxxx xxxx xxxx xxxx xxxx xxxx uuuu uuu xx
0100 0000 0100 0000 0100 0000 uuuu uuu 1 −−
00 1
LV R 复位
RES
(一般运行时)
uu uuu
00
0 1
0 0
WDT 溢出复位
1100
00 1
WDT 溢出复位
(一般运行时)
1u uuuu −−11 uuu
00
0 1
0 0
0 1 u u u u
(HALT 暂停时)
0 −−−0 −−
00 −−uu −−u
−− uu− u u−
−− u−−u u
−− uu−− −−
00 u−−− −−u
“u”表示不变化 “x”表示不确定 “”表示不存在
82
振荡器
不同的振荡器选择可以让使用者在不同的应用需求中获得更多范围的功能。有 两种系统时钟可供选择,而看门狗定时器又有多种时钟源选项,提供了使用者 最大的灵活性。所有的振荡器选项都是通过掩膜选项来完成。
系统时钟配置
有两种方法产生系统时钟:使用外部晶体/陶瓷振荡器或是外部 RC 电路。可以 通过掩膜选项来选择。
系统晶体/陶瓷振荡器
对于晶体振荡器的结构配置,晶体只要简单的连接至 OSC1 OSC2,则会产 生所需的相移及反馈,而不需其它外部的器件。陶瓷共振器可以使用来代替晶 体,但是要连接两个小电容在 OSC1OSC2 和地之间。
C 1
R 1
O S C 1
C 2
晶体/陶瓷振荡器
O S C 2
下表表示对于几种晶体/陶瓷振荡器频率下的典型的 C1C2 R1 的值。
晶体或共振器 C1, C2 R1
4MHz 晶体 0pF 10k 4MHz 共振器(3 脚) 0pF 12k 4MHz 共振器(2 脚) 10pF 12k
3.58MHz 晶体 0pF 10k
3.58MHz 共振器(2 脚) 25pF 10k 2MHz 晶体与共振器(2 脚) 25pF 10k 1MHz 晶体 35pF 27k 480kHz 共振器 300pF 9.1k 455kHz 共振器 300pF 10k 429kHz 共振器 300pF 10k
83
A/D 型单片机使用手册
系统电阻电容振荡器
使用外部 RC 电路作为系统振荡器,需要在 OSC1 GND 之间连接一个阻值 约在 30k750k之间的电阻。产生的系统时钟 4 分频后提供给 OSC2 作输 出,以达到与外部同步化的目的。虽然此振荡器配置成本较低,但振荡频率会 因 VDD、温度和芯片本身的制成而改变,因此不适合用来做计时严格或需要 精确振荡器频率的场合。对于外部电阻 R RC 振荡器对温度以及对 V
特性曲线分析。
DD
4 7 0 p F
R
O S C
的阻值,请参考附录章节中典型
OSC
V
D D
O S C 1
f
/ 4 N M O S O p e n D r a i n
S Y S
O S C 2
电阻电容振荡器
注意: 内部电容和外部电阻 R
共同作用决定频率值,图中显示的外部电容并不会影响振荡器的
OSC
频率值。如果应用电路中用到 OSC2 open-drain 输出,则应该加上这个电容以改善振荡器
的稳定性。
看门狗定时振荡器
WDT 振荡器是一个完全独立在芯片上且自由动作的振荡器,它在 5V 时的周 期时间典型值为 65µs 且不需外部的器件搭配。当芯片进入暂停模式时,系统 时钟将停止动作,但 WDT 振荡器继续自由动作且保持看门狗有效。然而在某 些应用中,为了保持功率,WDT 振荡器可以通过掩膜选项来关闭。
84
暂停模式下的暂停和唤醒
暂停模式是通过“HALT”指令实现且造成如下结果:
系统振荡器将被关闭
RAM 芯片和寄存器上的内容保持不变
如果 WDT 时钟源是来自 WDT 振荡器,则 WDT 将被清除然后再重新计数
所有输入/输出端口状态保持不变
PDF 标志位被置位而 TO 标志位被清零
当系统进入 HALT 模式,系统振荡器将停止以减少能量消耗。然而,要记住重 要的一点,如果内部 WDT 振荡器被使能,它将保持动作且导致少量的能量被 消耗。此外如果使用 A/D 转换器,即使系统振荡器已经停止,A/D 电路仍然会 有一些能量消耗。因此当在 HALT 模式下要降低能量消耗时,应该先将 ADCR 寄存器中所有 PCR 位清零,除能 A/D 转换器。
系统可以通过外部复位、内部中断、端口 PA 上外部下降沿信号或 WDT 溢出 来离开暂停模式。外部复位将初始化芯片,而 WDT 溢出也可以从暂停模式启 动 WDT 溢出复位,通过检查 TO PDF 标志位,可以判定复位来源。PDF 标 志位可以通过系统上电或执行“CLR WDT”指令来清除,而执行“HALT”指 令则可置位 PDF 标志位。如果 WDT 发生溢出,TO 标志位将被置位,同时造 成一个只复位 PC SP 的唤醒,而其它的标志位则保持原来状态。
端口 PA 唤醒和外部中断唤醒方法可以视为一般执行的延续。端口 PA 中的每 个位可以通过掩膜选项独立选择唤醒功能。输入/输出口唤醒后,程序将在下 一条指令处继续执行。如果系统是通过外部中断唤醒,则有两种可能,假如外 部中断除能或外部中断使能但堆栈已满,程序将在下一条指令处继续执行;假 如外部中断使能但堆栈未满,则正常的中断响应将会发生。假设在进入暂停模 式之前外部中断请求标志位被设为“1”,相关中断的唤醒功能将无效,一旦唤 醒事件发生,回到正常运算将需要 1024 个系统时钟周期。换句话说,一个空 周期将插在唤醒之后。如果在唤醒后是接着去响应外部中断,则真实的中断子 程序执行将延迟一个或数个周期,如果唤醒后接着去执行下一条指令,则它将 在空周期结束后立刻执行。
85
A/D 型单片机使用手册
看门狗定时器
看门狗定时器的功能在防止如电的干扰等外部不可控制事件,所造成的程序不 正常动作或跳转到未知的地址。当 WDT 溢出时,它产生一个“芯片复位”的 动作。WDT 时钟通过选择掩膜选项中两个时钟源之一提供:它本身内部的 WDT 振荡器或指令时钟(系统时钟除以 4)。要注意的是假如 WDT 掩膜选项 设为除能,则任何相关的指令将无效。
A/D 系列单片机中,所有看门狗定时器的选项,如使能/除能、WDT 时钟源 和适当的时钟源分频系数都是通过掩膜选项来选择。在 A/D 系列中,没有与
WDT 相关的内部寄存器,WDT 的时钟源之一是内部振荡器,在供应电压为 5V 时周期近似为 65µs。必须注意的是,这个专用的内部时钟的周期可以随着 VDD、温度和制作工艺而改变。另一个 WDT 时钟源选项是指令时钟,它是系
统时钟的四分频(f 是来自指令时钟,它另外还被一个内部计数器分频来获得更长的看门狗溢出时 间。在 HT46R47/HT46C47 中,这个分频系数由内部计数器固定于 2 它单片机,分频系数可以通过选择不同的掩膜选项来改变,可以得到 2 范围的分频系数。由于清除指令只复位计数链的最后一级,因此实际的分频系 数和相应的 WDT 溢出时间会有因数为 2 的变化。实际的分频系数是依据清除 指令被执行前,WDT 计数器剩余的值。例如,如果掩膜选项选择 WDT 溢出 时间为 2 表示 WDT 时钟源。如前所述,这个时钟源可以来自内部 WDT 振荡器或是来 自系统时钟的四分频。
/4)。无论 WDT 时钟源是来自它内部的 WDT 振荡器或
SYS
15
。对 于 其
12
2
12
4096),实际的溢出时间可以为从 fS/212到 fS/213的范围内,其中 f
15
S
如果使用指令时钟作为时钟源,要注意的是,当系统进入暂停模式后,指令时 钟会停止且 WDT 将失去其保护目的。在这种情况下,系统只能通过外部逻辑 重新复位。当系统操作在干扰严重的环境时,建议使用内部 WDT 振荡器。
86
系统在正常运行状态下,WDT 溢出将导致“芯片复位”,且置位状态标志位 “TO”。然而如果系统处于暂停模式,则只有一个从暂停模式来的 WDT 溢出 复位发生,它只复位程序计数器和 SP。有三种方法可以用来清除 WDT 的内容。 第一种是外部硬件复位( 是通过“HALT”指令。使用软件指令有两种方法去清除看门狗寄存器,必须 由掩膜选项选择。第一种选择是使用单一“CLR WDT”指令,而第二种是使 用“CLR WDT1”和“CLR WDT2”两个指令。对于第一种选择,只要执行“CLR
WDT”便清除 WDT。而第二种选择,必须交替执行“CLR WDT1”和“CLR WDT2”两者才能成功的清除 WDT。关于第二种选择要注意的是,如果“CLR WDT1”正被使用来清除 WDT,接着再执行这条指令将是无效的,只有执行
CLR WDT2”指令才能清除 WDT。同样的“CLR WDT2”指令已经执行后, 只有接着执行“CLR WDT1”指令才可以清除看门狗定时器。
引脚低电平),第二种是通过软件指令,而第三种
RES
C L R W D T 1 F l a g
C L R W D T 2 F l a g
1 o r 2 I n s t r u c t i o n s
f
S Y S
W D T O S C O u t p u t
W D T S o u r c e S e l e c t
C o n t r o l
L o g i c
/ 4
C o n f i g . O p t i o n
S e l e c t
f
S
8 - b i t D i v i d e r
8
fS/ 2
fS/ 2
7 - b i t P r e s c a l e r
C o n f i g O p t i o n
1 2
1 3
, fS/ 2
, fS/ 2
1 4
o r fS/ 2
C L R
W D T T i m e - o u t
2
¸
1 5
1 3
1 4
/ fS, 2
1 5
/ fS o r 2
( 2
/ fS, 2
看门狗定时器
注意:1. 在 HT46R47/HT46C47 中不能使用 4-to-1 的掩膜选项来选择 f
它有固定的 f
/215分频系数。
S
/212、fS/213、fS/214或 fS/215,
S
2. 因为只有计数链中的最后一级被指令清除,WDT 溢出周期可变。例如选择的值为 2
它的范围可能从 216/fS到 215/fS。
1 6
/ fS)
16
/f
S
87
掩膜选项
A/D 型单片机使用手册
通过 HT-IDE 的软件介面,使用者可以选择掩膜选项。对于 OTP 版单片机,单 片机掩膜选项会被储存在选项存储器。所有的位必须安照适合的系统功能去设 定,具体内容可由下表得到。请注意,当使用者把掩膜选项烧入单片机之后, 就不可以再被应用程序修改。对于掩膜版单片机,掩膜选项一经定义则会在工 厂生产时制作完成,使用者不能再重新配置。
No. 选项
1 WDT 时钟源:WDT OSC 或 f
2 CLRWDT 指令条数:1 或 2 条指令
3 PA0~PA7 唤醒功能:使能或除能(各个位分别控制)
PA, PB, PC, PD, PF
4
(端口的个数取决于选用的单片机型号。上拉电阻的端口或位也取决于单片机的型号。)
5 PD0~PD3PWM 功能选择。PWM 通道的个数取决于选用的单片机的型号。
模式选择:(7+1)(6+2)模式
PWM
6
HT46R47/HT46C47 除外,它只有(6+2)模式)
7 OSC 类型选择:RC Crystal
PA3 PFD
8
PFD
9 WDT 分频系数:2
10 PA6, PA7 I2C 总线功能:使能或除能(HT46R47/HT46C47 除外)
11 LVR 功能:使能或除能
功能:使能或除能
时钟源选择:来自 Timer 0 Timer 1 PFD 输出(只对 HT46R24/HT46C24 而言)
上拉电阻:有或无
12、213、214
/4 或除能
SYS
15
2
HT46R47/HT46C47 除外)
88
应用电路
V
D D
0 . 0 1mF
0 . 1mF
1 0 0 k
S e e B e l o w
W
O S C
C i r c u i t
1 0 k
0 . 1mF
V D D
R E S
W
V S S
O S C 1
O S C 2
H T 4 6 R 4 7 / H T 4 6 C 4 7
P A 0 ~ P A 2
P A 3 / P F D
P A 4 / T M R
P A 5 / I N T
P A 6 ~ P A 7
P B 0 / A N 0
~
P B 3 / A N 3
P D 0 / P W M
V
D D
4 7 0 p F
R
C 1
C 2
O S C 1
O S C
f
/ 4
S Y S
O S C 2
O S C 1
O S C 2
R 1
R C S y s t e m O s c i l l a t o r
3 0 k
< R
W
O S C
C r y s t a l S y s t e m O s c i l l a t o r
F o r c o m p o n e n t v a l u e s , c o n s u l t O s c i l l a t o r s e c t i o n
O S C C i r c u i t
< 7 5 0 k
W
89
A/D 型单片机使用手册
V
D D
0 . 1mF
1 0 0 k
S e e B e l o w
W
O S C
C i r c u i t
0 . 0 1mF
1 0 k
0 . 1mF
V D D
R E S
W
V S S
O S C 1
O S C 2
H T 4 6 R 2 2 / H T 4 6 C 2 2
P A 0 ~ P A 2
P A 3 / P F D
P A 4 / T M R
P A 5 / I N T
P A 6 / S D A
P A 7 / S C L
P B 0 / A N 0
~
P B 7 / A N 7
P C 0 ~ P C 1
P D 0 / P W M
V
D D
4 7 0 p F
R
C 1
C 2
O S C 1
O S C
f
/ 4
S Y S
O S C 2
O S C 1
O S C 2
R 1
R C S y s t e m O s c i l l a t o r
< R
3 0 k
O S C
W
C r y s t a l S y s t e m O s c i l l a t o r
F o r c o m p o n e n t v a l u e s , c o n s u l t O s c i l l a t o r s e c t i o n
O S C C i r c u i t
< 7 5 0 k
W
90
Loading...