HOLTEK HT48R10A-1, HT48R30A-1, HT48R50A-1, HT48R70A-1, HT48RU80 User Manual

HT48R10A-1, HT48R30A-1,
HT48R50A-1, HT48R70A-1,
HT48RU80
I/O 型单片机
使用手册
二○○六年六月
第三版
本使用手册版权为盛群半导体股份有限公司所有,非经盛群半导体股份有限公司书面授权同意,不得通过任
何形式复制、储存或传输。
Cost-Effective I/O 型单片机使用手册
ii
目录
目录
第一部份 单片机概论 .................................................................. 1
第一章 硬件结构.........................................................................................3
简介..............................................................................................................3
特性..............................................................................................................4
技术特性 .............................................................................................. 4
内核特性 .............................................................................................. 4
周边特性 .............................................................................................. 5
选择表..........................................................................................................6
系统框线图..................................................................................................7
引脚分配......................................................................................................8
引脚说明....................................................................................................10
极限参数....................................................................................................15
直流电气特性............................................................................................15
交流电气特性............................................................................................16
系统结构....................................................................................................17
时序和流水线结构(Pipelining) ......................................................... 17
程序计数器 ........................................................................................ 18
堆栈....................................................................................................21
算术及逻辑单元 – ALU ...................................................................22
程序存储器................................................................................................23
结构....................................................................................................23
特殊向量 ............................................................................................ 24
多 Bank 管理 ...................................................................................... 25
查表....................................................................................................28
查表程序范例 .................................................................................... 29
数据存储器................................................................................................32
结构....................................................................................................32
通用数据存储器 ................................................................................ 33
专用数据存储器 ................................................................................ 34
i
I/O 型单片机使用手册
特殊功能寄存器........................................................................................35
间接寻址寄存器 – IAR, IAR0, IAR1 .............................................35
间接寻址指针 – MP, MP0, MP1 ......................................................35
存储区指针 – BP .........................................................................36
累加器 – ACC ................................................................................... 37
程序计数器低字节寄存器 – PCL .................................................... 37
表格寄存器 – TBLP,TBHP,TBLH....................................................37
看门狗定时寄存器 – WDTS ............................................................ 38
状态寄存器 – STATUS.....................................................................38
中断控制寄存器 – INTC,INTC0,INTC1 .........................................39
定时/计数寄存器...............................................................................39
输入/输出端口和控制寄存器 ........................................................... 40
UART 寄存器 USR,UCR1,UCR2,TXR/RXR,BRG.......................40
输入/输出端口 ..........................................................................................41
上拉电阻 ............................................................................................ 41
PA 口的唤醒 ......................................................................................41
输入/输出端口控制寄存器 ............................................................... 41
引脚共享功能 .................................................................................... 42
编程注意事项 .................................................................................... 45
定时/计数器 .............................................................................................. 46
配置定时/计数器输入时钟源 ........................................................... 47
定时/计数寄存器 – TMR, TMR0,TMR0L/TMR0H,
TMR1L/TMR1H,TMR2..................................................................... 49
定时/计数控制寄存器 – TMRC,TMR0C,TMR1C,TMR2C ............ 50
定时器模式 ........................................................................................ 53
事件计数器模式 ................................................................................ 53
脉冲宽度测量模式 ............................................................................ 54
可编程分频器(PFD)和蜂鸣器的应用 ..............................................55
预分频器(Prescaler)...........................................................................56
输入/输出接口...................................................................................56
编程注意事项 .................................................................................... 57
定时/计数器应用范例 ....................................................................... 57
中断............................................................................................................59
中断寄存器 ........................................................................................ 59
中断优先权 ........................................................................................ 62
外部中断 ............................................................................................ 63
定时/计数器中断...............................................................................64
UART 中断 ........................................................................................64
编程注意事项 .................................................................................... 65
复位和初始化............................................................................................66
复位....................................................................................................66
ii
目录
异步串行口——UART............................................................................74
UART 特性..........................................................................................74
UART 外部引脚..................................................................................74
数据发送 .............................................................................................75
UART 状态控制寄存......................................................................75
波特率发生器 .....................................................................................79
UART 设置与控制..............................................................................81
UART 发送器......................................................................................83
UART 接收器......................................................................................84
接收错误处理 .....................................................................................85
接收中断图解 .....................................................................................86
地址检测模式 .....................................................................................86
暂停模式下的 UART 功能.................................................................87
UART 应用范例.................................................................................87
振荡器........................................................................................................89
系统时钟配置 .................................................................................... 89
系统晶体/陶瓷振荡器 ....................................................................... 89
系统电阻电容振荡器 ........................................................................90
内部系统电阻电容振荡器 ................................................................90
RTC 振荡器........................................................................................ 91
看门狗定时振荡器 ............................................................................ 91
暂停和唤醒................................................................................................92
暂停.....................................................................................................92
进入暂停 .............................................................................................92
静态电流 .............................................................................................92
唤醒 .................................................................................................... 92
看门狗定时器............................................................................................94
掩膜选项....................................................................................................96
应用电路....................................................................................................97
第二部份 程序语言 .....................................................................
99
第二章 指令集介绍.................................................................................101
指令集......................................................................................................101
指令周期 .......................................................................................... 101
数据的传送 ...................................................................................... 101
算术运算 .......................................................................................... 102
逻辑和移位运算 .............................................................................. 102
分支和控制的转换 .......................................................................... 102
位运算 .............................................................................................. 102
查表运算 .......................................................................................... 103
其它运算 .......................................................................................... 103
指令设定一览表......................................................................................104
惯例..................................................................................................104
iii
I/O 型单片机使用手册
第三章 指令定义.....................................................................................107
第四章 汇编语言和编译器.....................................................................
常用符号..................................................................................................121
语句语法..................................................................................................122
名称..................................................................................................122
操作项 .............................................................................................. 122
操作数项 .......................................................................................... 122
注解..................................................................................................122
编译伪指令..............................................................................................123
条件编译伪指令 .............................................................................. 123
文件控制伪指令 .............................................................................. 124
程序伪指令 ...................................................................................... 126
数据定义伪指令 .............................................................................. 130
宏指令 .............................................................................................. 132
汇编语言指令..........................................................................................136
名称..................................................................................................136
助记符 .............................................................................................. 136
操作数、运算子和表达式 ..............................................................136
其它..........................................................................................................139
前置引用 .......................................................................................... 139
局部标号 .......................................................................................... 139
汇编语言保留字 .............................................................................. 140
编译器选项..............................................................................................141
编译列表文件格式.................................................................................. 141
源程序列表 ...................................................................................... 141
编译总结 .......................................................................................... 142
其它..................................................................................................142
第三部份 开发工具 ...................................................................
121
145
第五章 单片机开发工具.........................................................................147
HT-IDE 集成开发环境............................................................................ 147
盛群单片机仿真器(HT-ICE) ..................................................................149
HT-ICE 接口卡.................................................................................149
OTP 烧写器 ..................................................................................... 149
OTP 适配卡 ..................................................................................... 149
系统配置..................................................................................................150
HT-ICE 接口卡设置 ........................................................................151
安装..........................................................................................................153
系统要求 .......................................................................................... 153
硬件安装 .......................................................................................... 153
软件安装 .......................................................................................... 154
iv
目录
第六章 快速开始.....................................................................................159
步骤一:建立一个新项目 ..............................................................159
步骤二:将源程序文件加到项目中 ..............................................159
步骤三:编译项目 .......................................................................... 159
步骤四:烧写 OTP 单片机............................................................. 160
步骤五:传送程序与掩膜选项单至 Holtek ..................................160
附录 ............................................................................................... 161
附录 A 特性曲线图 ...................................................................................163
附录 B 封装信息 .......................................................................................
173
v
I/O 型单片机使用手册
vi
前言
前言
自从盛群半导体公司成立以来,致力于单片机产品的设计与开发。虽然盛群半 导体提供给客户各式各样的半导体芯片,但其中单片机仍是盛群的主要关键产 品,未来盛群半导体仍将继续扩展单片机产品系列完整性与功能性。通过长期 累积的单片机研发经验与技术,盛群半导体能为各式各样的应用范围开发出高 性能且低价位的单片机芯片。其中部分单片机集成了全双工串行通讯 UART 功 能,方便与外部串行接口通讯。盛群的 I/O 型单片机提供客户绝佳的产品方案, 大大地为顾客提升他们产品的功能,当设计者使用盛群所开发出的各式开发工 具时,更可减少产品开发周期并大大的增加他们的产品附加价值。
为了使用者阅读方便,本手册分成三部份。关于一般的单片机的规格信息可在 第一部份中找到。与单片机程序相关的信息,如指令集、指令定义和汇编语言 编译伪指令,可在第二部份找到。第三部份则是关于盛群半导体的开发工具有 关如何安装和使用的相关信息。
希望使用 I/O 型单片机的盛群半导体客户,通过这本手册,能以一种简单、有 效、且完整的方法,实现他们在单片机上的各种应用。由于盛群半导体将单片 机规格、程序规划和开发工具等信息结合在一本使用手册上,预期客户将可充 分利用盛群半导体各种单片机的特性,获取最大的产品优势。盛群半导体欢迎 客户经常浏览本公司的网站,获得使用手册的最新更新,同时也欢迎客户提供 宝贵的意见和建议,以作为我们未来改进的参考。
vii
I/O 型单片机使用手册
viii
第一部份
单片机概论
第一部份 单片机概论
1
I/O 型单片机使用手册
2
第一章 硬件架构
第一章
硬件结构
本章主要为 I/O 型单片机的规格信息,并且包含了所有参数和相关的硬件信息。 这些信息提供设计者此类单片机的主要硬件特性细节,结合程序部份的信息将 能够让使用者快速且成功地实现各种单片机的应用。参考本章中的相关部份, 也保证使用者可以充分利用 I/O 型单片机
1
简介
HT48R10A-1/HT48C10-1、HT48R30A-1/HT48C30-1、HT48R50A-1/HT48C50-1 HT48R70A-1/HT48C70-1 HT48RU80/HT48CU80 是 8 位高性能、高效益的 RISC 结构单片机,适用于多输入/输出控制产品。内部的特殊特性,如暂停、
唤醒功能、振荡器选择、蜂鸣器驱动和 UART 等,提升了单片机的灵活度, 而这些特性也同时保证实际应用时只需要最少的外部组件,进而降低了整个产 品成本。有了低功耗、高性能、灵活控制的输入/输出和低成本等优势,这些 芯片拥有许多功能,并适合被广泛应用在如工业控制、消费性产品和子系统控 制器等场合,该系列所有的单片机都拥有相同的特性,主要的不同在于 I/O 引 脚数目,RAM ROM 的容量,定时器数目和大小等方面。另外,
HT48RU80/HT48CU80 还集成了全双工串行通讯 UART 功能。
HT48R10A-1HT48R30A-1HT48R50A-1HT48R70A-1 HT48RU80 都是
属于一次可编程(One-Time Programmable, OTP)单片机,当配合使用盛群半导 体的程序开发工具时,可简单有效的更新程序。这提供了设计者快速有效的开 发途径。而对于那些已经设计成熟的应用,掩膜版的 HT48C10-1HT48C30-1, HT48C50-1HT48C70-1 和 HT48RU80 则可满足大量生产和低成本的需求。由 于和 OTP 版的功能完全兼容,掩膜版对于已经设计完成而想要降低成本的产 品,提供了一个理想的解决方案。
3
特性
I/O 型单片机使用手册
技术特性
高性能 RISC 结构
低功率完全静态 CMOS 设计
工作电压:
4MHz 下,由 2.2V 5.5V 8MHz 下,由 3.3V 5.5V
功率损耗:
5V/4MHz 下,典型值为 2mA 不使用看门狗定时器和 RTC 时,3V 下静态(standby)电流小于 1µA
温度范围:
工作温度40°C 85°C(工业级规格) 储存温度50°C 125°C
内核特性
程序存储器
1K×14 OTP/Mask ROM (HT48R10A-1/HT48C10-1)
2K×14 OTP/Mask ROM (HT48R30A-1/HT48C30-1)
4K×15 OTP/Mask ROM (HT48R50A-1/HT48C50-1)
8K×16 OTP/Mask ROM (HT48R70A-1/HT48C70-1)
16K×16 OTP/Mask ROM (HT48RU80/HT48CU80)
数据存储器
64×8 SRAM (HT48R10A-1/HT48C10-1)
96×8 SRAM (HT48R30A-1/HT48C30-1)
160×8 SRAM (HT48R50A-1/HT48C50-1)
224×8 SRAM (HT48R70A-1/HT48C70-1)
576×8 SRAM (HT48RU801/HT48CU80)
表格读取功能
多层硬件堆栈
4-level (HT48R10A-1/HT48C10-1HT48R30A-1/HT48C30-1)
6-level (HT48R50A-1/HT48C50-1) 16-level (HT48R70A-1/HT48C70-1,HT48RU801/HT48CU80)
直接和间接数据寻址模式
位操作指令
4
第一章 硬件架构
63 条强大的指令
大多数指令执行时间只需要一个指令周期
周边特性
从 21 个到 56 个具有上拉功能的双向输入输出口
• PA 口具有唤醒功能
一个或两个外部中断输入
事件计数输入
具有预分频器(Prescaler)及中断功能的定时器
看门狗定时器(WDT)
暂停与唤醒特性可以节省功耗
• PFD/蜂鸣器驱动输出
芯片内置晶体及电阻电容振荡电路
• 32768Hz 的实时时钟(RTC)功能
• UARTHT48RU80/HT48CU80
具有低电压复位(LV R)特性
具有烧录电路接口及程序代码保护功能
• Mask 版单片机适用于大量生产
提供高效的软硬件支持工具
5
选择表
I/O 型单片机使用手册
这个系列的 I/O 型单片机拥有广泛的功能特性,其中有些是普通的,有些则是 独有的。大部份的特性对该系列所有的单片机来说是共通的,主要的区别在于 程序存储器和数据存储器的容量、I/O 数目和定时器功能。为了帮助使用者在 应用时能选择适当的单片机,以下表格提供了各个单片机主要的特性概述。
型号 电源
HT48R10A-1 HT48C10-1
HT48R30A-1 HT48C30-1
HT48R50A-1 HT48C50-1
HT48R70A-1 HT48C70-1
HT48RU80 HT48CU80
程序
存储器数据存储器
2.2V~
2.2V~
2.2V~
2.2V~
2.2V~
1K×14 64×8 21 8-bit×1 2
5.5V
2K×14 96×8 25 8-bit×1 2
5.5V
4K×15 160×8 35
5.5V
8K×16 224×8 56 16-bit×2 3
5.5V
16K×16 576×8 56
5.5V
输入/输出
定时器 中断
8-bit×1
16-bit×1
8-bit×1
16-bit×2
UART
3
6 16
注意: 1.型号部份包含“C”的为 Mask 版本,而“R”则是 OTP 版本。
2.对于有两种封装形式的单片机,本表反映的是大封装格式的情况
堆栈 封装种类
4 24SKDIP/SOP
4
6
16
24SKDIP/SOP 28SKDIP/SOP
28SKDIP/SOP
48SSOP
48SSOP
64QFP
48SSOP
64QFP
6
系统框线图
以下的系统框线图为 I/O 型单片机系列的主要功能模块。
第一章 硬件架构
S y s t e m R C /
X ' t a l O s c i l l a t o r
I n t e r n a l
R C O S C
W D T
O s c i l l a t o r
R e s e t &
L V R
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 .
R e g i s t e r
T i m i n g
A d d r e s s D e c o d 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
D e c o d e r
M U X
M e m o r y
P o i n t e r
C o n f i g .
R e g i s t e r
I n s t r u c t i o n
T i m e r ( s ) /
C o u n t e r
R e g i s t e r
M U X
S h i f t e r
A L U
A C C
B u z z e r
D r i v e r
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
U A R T
I / O
P o r t s
T o P r o g r a m
M e m o r y
C o n f i g u r a t i o n
P r o g r a m m i n g
O p t i o n
D e v i c e
C i r c u i t r y
注意:1. 本系统框线图为 OTP 单片机,至于 Mask 型单片机则没有 Device Programming Circuitry
2.只有在 HT48RU80/HT48CU80 中才具有 UART 功能。
7
引脚分配
2 4
1
P B 5
P B 4
P A 3
P A 2
P A 1
P A 0
P B 3
P B 2
P B 1 / B Z
P B 0 / B Z
V S S
P C 0 / I N T
H T 4 8 R 1 0 A - 1 / H T 4 8 C 1 0 - 1
2 4 S K D I P - A / S O P - A
P B 5
P B 4
P A 3
P A 2
P A 1
P A 0
P B 3
P B 2
P B 1 / B Z
P B 0 / B Z
N C
N C
N C
N C
P D 7
P D 6
P D 5
P D 4
V S S
P G 0 / I N T
T M R 0
P C 0
P C 1
P C 2
H T 4 8 R 5 0 A - 1 / H T 4 8 C 5 0 - 1
2
3
4
5
6
7
8
9
1 0
1 1
1 2
1
2
3
4
5
6
7
8
9
1 0
1 1
1 2
1 3
1 4
1 5
1 6
1 7
1 8
1 9
2 0
2 1
2 2
2 3
2 4
4 8 S S O P - A
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
I/O 型单片机使用手册
P B 5
P B 4
P A 3
P A 2
P A 1
P A 0
P B 3
P B 2
P B 1 / B Z
P B 0 / B Z
V S S
P G 0 / I N T
P C 0 / T M R 0
P C 1
H T 4 8 R 5 0 A - 1 / H T 4 8 C 5 0 - 1
2 8 S K D I P - A / S O P - A
2 8
1
2 7
2
2 6
3
2 5
4
2 4
5
2 3
6
2 2
7
2 1
8
2 0
9
1 9
1 0
1 8
1 1
1 7
1 2
1 3
1 6
1 5
1 4
P B 6
P B 7
P A 4
P A 5
P A 6
P A 7
O S C 2 / P C 4
O S C 1 / P C 3
V D D
R E S
P C 2
P C 1 / T M R
P B 6
P B 7
P A 4
P A 5
P A 6
P A 7
N C
N C
N C
N C
O S C 2 / P G 2
O S C 1 / P G 1
V D D
R E S
T M R 1
P D 3
P D 2
P D 1
P D 0
P C 7
P C 6
P C 5
P C 4
P C 3
1
P B 5
2
P B 4
3
P A 3
4
P A 2
5
P A 1
6
P A 0
7
P B 3
8
P B 2
9
P B 1 / B Z
1 0
P B 0 / B Z
1 1
V S S
P G 0 / I N T
1 2
H T 4 8 R 3 0 A - 1 / H T 4 8 C 3 0 - 1
2 4 S K D I P - A / S O P - A
P B 5
1
P B 4
2
P A 3
3
P A 2
4
P A 1
5
P A 0
6
P B 3
7
P B 2
8
P B 1 / B Z
9
P B 0 / B Z
1 0
P E 3
1 1
P E 2
1 2
P E 1
1 3
P E 0
1 4
P D 7
1 5
P D 6
1 6
P D 5
1 7
P D 4
1 8
V S S
1 9
I N T
2 0
T M R 0
2 1
P C 0
2 2
P C 1
2 3
P C 2
2 4
H T 4 8 R 7 0 A - 1 / H T 4 8 C 7 0 - 1
4 8 S S O P - A
P B 5
1
P B 4
2
P B 6
2 4
P B 7
2 3
P A 4
2 2
P A 5
2 1
P A 6
2 0
P A 7
1 9
O S C 2 / P G 2
1 8
O S C 1 / P G 1
1 7
V D D
1 6
R E S
1 5
P C 2
1 4
P C 0 / T M R
1 3
P B 6
4 8
P B 7
4 7
P A 4
4 6
P A 5
4 5
P A 6
4 4
P A 7
4 3
P F 0
4 2
P F 1
4 1
P F 2
4 0
P F 3
3 9
O S C 2
3 8
O S C 1
3 7
V D D
3 6
R E S
3 5
T M R 1
3 4
P D 3
3 3
P D 2
3 2
P D 1
3 1
P D 0
3 0
P C 7
2 9
P C 6
2 8
P C 5
2 7
P C 4
2 6
P C 3
2 5
P A 3
P A 2
P A 1
P A 0
P B 3
P B 2
P B 1 / B Z
P B 0 / B Z
V S S
P G 0 / I N T
P C 0 / T M R
P C 1
H T 4 8 R 3 0 A - 1 / H T 4 8 C 3 0 - 1
2 8 S K D I P - A / S O P - A
P B 5
P B 4
P A 3
P A 2
P A 1
P A 0
P B 3 / T M R 2
P B 2 / I N T 1
P B 1 / B Z
P B 0 / B Z
P E 3
P E 2
P E 1
P E 0
P D 7
P D 6
P D 5
P D 4
V S S
I N T 0
T M R 0
P C 0 / T X
P C 1 / R X
P C 2
H T 4 8 R U 8 0 / H T 4 8 C U 8 0
3
4
5
6
7
8
9
1 0
1 1
1 2
1 3
1 4
1
2
3
4
5
6
7
8
9
1 0
1 1
1 2
1 3
1 4
1 5
1 6
1 7
1 8
1 9
2 0
2 1
2 2
2 3
2 4
4 8 S S O P - A
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
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
P B 7
P A 4
P A 5
P A 6
P A 7
O S C 2 / P G 2
O S C 1 / P G 1
V D D
R E S
P C 5
P C 4
P C 3
P C 2
P B 6
P B 7
P A 4
P A 5
P A 6
P A 7
P F 0
P F 1
P F 2
P F 3
O S C 2
O S C 1
V D D
R E S
T M R 1
P D 3
P D 2
P D 1
P D 0
P C 7
P C 6
P C 5
P C 4
P C 3
P B 6
P B 7
P A 4
P A 5
P A 6
P A 7
O S C 2 / P G 2
O S C 1 / P G 1
V D D
R E S
P C 5 / T M R 1
P C 4
P C 3
P C 2
8
第一章 硬件架构
P B 1 / B Z
P B 0 / B Z
V S S
P A 1
P A 0
P E 7
P E 6
P E 5
P E 4
P B 3
P B 2
P E 3
P E 2
P E 1
P E 0
P D 7
P D 6
P D 5
P D 4
P G 4
P G 5
P A 3
P A 2
6 4 6 3 6 2 6 1 6 0 5 25 35 45 55 65 75 85 9
1
2
3
4
5
6
7
8
9
1 0
1 1
1 2
1 3
1 4
1 5
1 6
1 7
1 8
1 9
H T 4 8 R 7 0 A - 1 / H T 4 8 C 7 0 - 1
2 0 2 1 2 2 2 3 2 4 3 23 13 02 92 82 72 62 5
P G 1
P G 0
T M R 0
I N T
P G 6
6 4 Q F P - A
P G 2
P G 7
P B 6
P B 5
P B 4
P C 2
P C 1
P C 0
P G 3
P A 6
P A 5
P A 4
P B 7
5 1
P A 7
5 0
P F 0
4 9
P F 1
4 8
P F 2
4 7
P F 3
O S C 2
4 6
O S C 1
4 5
P F 4
4 4
P F 5
4 3
P F 6
4 2
P F 7
4 1
V D D
4 0
R E S
3 9
T M R 1
3 8
P D 3
3 7
P D 2
3 6
P D 1
3 5
P D 0
3 4
P C 7
3 3
P C 6
P C 5
P C 4
P C 3
P B 3 / T M R 2
P B 2 / I N T 1
P B 1 / B Z
P B 0 / B Z
P A 1
P A 0
P E 7
P E 6
P E 5
P E 4
P E 3
P E 2
P E 1
P E 0
P D 7
P D 6
P D 5
P D 4
V S S
P G 4
P G 5
P A 3
P A 2
6 4 6 3 6 2 6 1 6 0 5 25 35 45 55 65 75 85 9
1
2
3
4
5
6
7
8
9
1 0
1 1
1 2
1 3
1 4
1 5
1 6
1 7
1 8
1 9
H T 4 8 R U 8 0 / H T 4 8 C U 8 0
2 0 2 1 2 2 2 3 2 4
P G 1
P G 0
T M R 0
I N T 0
P G 6
P G 7
6 4 Q F P - A
P G 3
P G 2
P A 6
P A 5
P A 4
P B 7
P B 6
P B 5
P B 4
5 1
5 0
4 9
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
P C 1 / R X
P C 0 / T X
P C 2
3 23 13 02 92 82 72 62 5
P C 3
P C 4
P C 5
P C 6
注意: 单片机封装的引脚兼容特性,使其在硬件应用时以最小的改变去提供设 备直接升级到更高
的功能。
P A 7
P F 0
P F 1
P F 2
P F 3
O S C 2
O S C 1
P F 4
P F 5
P F 6
P F 7
V D D
R E S
T M R 1
P D 3
P D 2
P D 1
P D 0
P C 7
9
引脚说明
I/O 型单片机使用手册
HT48R10A-1/HT48C10-1
引脚名称
PA0~ PA 7 I/ O
PB0/BZ
RES
BZ
INT
PB1/ PB2 ~ PB7
PC0/ PC1/TMR
PC2
OSC1/PC3 OSC2/PC4
VDD VSS
I/O
I/O
I/O Pull-high
I
O
I
 
掩膜选项 说明
Pull-high Wake-up
Schmitt Trigger
Pull-high
I/O or BZ/
Pull-high
Crystal or RC or
Int. RC+I/O or
Int. RC+RTC
8 位双向输入/输出口,每个位可由掩膜选项设置成唤醒输入。 软件指令决定引脚是 CMOS 输出或输入。掩膜选项决定所有 引脚是否有上拉电阻及输入为斯密特触发器或非斯密特触 发器。 8 位双向输入/输出口。软件指令决定引脚是 CMOS 输出或斯 密特触发器输入。掩膜选项决定所有引脚是否有上拉电阻。
BZ
PB0 PB1 分别与 BZ
位双向输入/输出口。软件指令决定引脚是 CMOS 输出或斯
3
密特触发器输入。掩膜选项决定所有引脚是否有上拉电阻。
PC0 和外部中断
引脚
TMR 引脚共用。外部中断在高电平转低电平时被触发。
OSC2 连接外部 RC 电路或晶体振荡器(由掩膜选项决
OSC1
)作为内部系统时钟。对于外部 RC 系统时钟的操作,OSC2
定 的输出端信号是系统时钟四分频。 这两个引脚可以被选择成一个 RTC 振荡器(32768Hz)I/O 口。在这两种情况下系统时钟来自内部 RC 振荡器,其正常
5V 时有 3.2MHz, 1.6MHz, 800kHz 400kHz 四种选
频率在 择。如果引脚使用成普通 如果使用成振荡器引脚,位 的使用。在这个情况下上拉选项是不可用的。 触发复位输入。低电平有效。
正电源供应。 负电源供应,接地。
INT
引脚共用。
BZ
引脚共用而 PC1 和外部定时器
I/O 引脚,则上拉选项是可用的。
PC3 PC4 可以被应用程序自由
注意: 1. PA 上的每个引脚可通过掩膜选项被设定成拥有唤醒功能。
2. 单独的引脚或口不可以被选择为带上拉电阻,如果选择了上拉配置,则该端口的所有
输入引脚都将被连接到上拉电阻。
10
第一章 硬件架构
HT48R30A-1/HT48C30-1
引脚名称
PA0~ PA 7 I/ O
PB0/BZ PB1/
PB2 ~ PB7
PC0/TMR PC1 ~ PC5
PG0/
OSC1/PG1 OSC2/PG2
VDD VSS
RES
BZ
INT
I/O
Schmitt Trigger
I/O
I/O or BZ/
I/O Pull-high
I/O Pull-high
I
Crystal or RC or
O
Int. RC+I/O or
I
 
Int. RC+RTC
掩膜选项 说明
位双向输入/输出口,每个位可由掩膜选项设置成唤醒输入。
Pull-high
Wake-up
Pull-high
Pull-high
8
软件指令决定引脚是 引脚是否有上拉电阻及输入为斯密特触发器或非斯密特触发 器。
8 位双向输入/输出口。软件指令决定引脚是 CMOS 输出或斯
密特触发器输入。掩膜选项决定所有引脚是否有上拉电阻。
BZ
PB0 PB1 分别与 BZ 6
位双向输入/输出口。软件指令决定引脚是 CMOS 输出或斯
密特触发器输入。掩膜选项决定所有引脚是否有上拉电阻。
PC0 和外部定时器 TMR 引脚共用。
引脚
1
位双向输入/输出口。软件指令决定引脚是 CMOS 输出或斯
密特触发器输入。掩膜选项决定引脚是否有上拉电阻。引脚
PG0 和外部中断
时被触发。
OSC1
)作为内部系统时钟。对于外部 RC 系统时钟的操作,OSC2
定 的输出端信号是系统时钟四分频。 这两个引脚可以被选择成一个 RTC 振荡器(32768Hz)或 I/O 口。在这两种情况下系统时钟来自内部 RC 振荡器,其正常 频率在 择。如果引脚使用成普通 如果使用成振荡器引脚,位 的使用。在这个情况下上拉选项是不可用的。 触发复位输入。低电平有效。
正电源供应。 负电源供应,接地。
OSC2 连接外部 RC 电路或晶体振荡器(由掩膜选项决
5V 时有 3.2MHz, 1.6MHz, 800kHz 400kHz 四种选
CMOS 输出或输入。掩膜选项决定所有
引脚共用。
BZ
引脚共用。外部中断在高电平转低电平
INT
I/O 引脚,则上拉选项是可用的。
PG1 PG2 可以被应用程序自由
注意: 1. PA 上的每个引脚可通过掩膜选项被设定成拥有唤醒功能。
2. 单独的引脚或口不可以被选择为带上拉电阻,如果选择了上拉配置,则该端口的所有
输入引脚都将被连接到上拉电阻。
3. 引脚 PC1 和 PC3 ~ PC5 只存在于 28-pin 的封装。在 24-pin 的封装中这些引脚是无效的。
11
I/O 型单片机使用手册
HT48R50A-1/HT48C50-1
引脚名称
PA0~ PA 7 I/ O
PB0/BZ PB1/
PB2 ~ PB7
PC0/TMR0 PC5/TMR1 PC1 ~ PC4 PC6 ~ PC7
PD0 ~ PD7 I/O Pull-high
PG0/
OSC1/PG1 OSC2/PG2
VDD VSS
RES
BZ
INT
I/O
I/O
I/O Pull-high
I/O Pull-high
I
O
I
 
掩膜选项 说明
Pull-high
Wake-up
Schmitt Trigger
Pull-high
I/O or BZ/
Pull-high
Crystal or RC or
Int. RC+I/O or
Int. RC+RTC
位双向输入/输出口,每个位可由掩膜选项设置成唤醒输入。
8
软件指令决定引脚是 引脚是否有上拉电阻及输入为斯密特触发器或非斯密特触 发器。
8 位双向输入/输出口。软件指令决定引脚是 CMOS 输出或斯
密特触发器输入。掩膜选项决定所有引脚是否有上拉电阻。
BZ
PB0 PB1 分别与 BZ
位双向输入/输出口。软件指令决定引脚是 CMOS 输出或斯
8
密特触发器输入。掩膜选项决定所有引脚是否有上拉电阻。
28-pin 的封装中 TMR0 TMR1 分别与 PC0 PC5 引脚
在 共用。
位双向输入/输出口。软件指令决定引脚是 CMOS 输出或斯
8
密特触发器输入。掩膜选项决定所有引脚是否有上拉电阻。
1
位双向输入/输出口。软件指令决定引脚是 CMOS 输出或斯
密特触发器输入。掩膜选项决定引脚是否有上拉电阻。引脚
PG0 和外部中断
OSC2 连接外部 RC 电路或晶体振荡器(由掩膜选项决
OSC1
)作为内部系统时钟。对于外部 RC 系统时钟的操作,OSC2
定 的输出端信号是系统时钟四分频。 这两个引脚可以被选择成一个 RTC 振荡器(32768Hz)I/O 口。在这两种情况下系统时钟来自内部 RC 振荡器,其正常
5V 时有 3.2MHz, 1.6MHz, 800kHz 400kHz 四种选
频率在 择。如果引脚使用成普通 如果使用成振荡器引脚,位 由的使用。在这个情况下上拉选项是不可用的。
触发复位输入。低电平有效。 正电源供应。
负电源供应,接地。
CMOS 输出或输入。掩膜选项决定所有
引脚共用。
BZ
引脚共用。
INT
I/O 引脚,则上拉选项是可用的。
PG1 PG2 可以被应用程序自
注意: 1. PA 上的每个引脚可通过掩膜选项被设定成拥有唤醒功能。
2. 单独的引脚或口不可以被选择为带上拉电阻,如果选择了上拉配置,则该端口的所有
输入引脚都将被连接到上拉电阻。
3. 在 48-pin 的封装中,端口 PC 没有共用引脚。所有的 PC 引脚都是普通的 I/O,而 TMR0
TMR1 都是独立的引脚。
4. 引脚 PC6 和 PC7 只存在于 48-pin 的封装中。
5. 端口 PD 只出现在 48-pin 的封装中。
12
第一章 硬件架构
HT48R70A-1/HT48C70-1
引脚名称
PA0~ PA 7 I/ O
PB0/BZ PB1/
PB2 ~ PB7 PC0 ~ PC7 PD0 ~ PD7 PE0 ~ PE7 PF0 ~ PF7 PG0 ~ PG7
TMR0 I
TMR1 I
OSC1 OSC2
VDD VSS
INT
RES
BZ
I/O
I/O
I
I O Crystal or RC or
I
 
掩膜选项 说明
Pull-high
Wake-up
Schmitt Trigger
Pull-high
I/O or BZ/
Int. RC+RTC
 
位双向输入/输出口,每个位可由掩膜选项设置成唤醒输入。
8
软件指令决定引脚是 引脚是否有上拉电阻及输入为斯密特触发器或非斯密特触 发器。
8 位双向输入/输出口。软件指令决定引脚是 CMOS 输出或斯
密特触发器输入。每个端口由掩膜选项决定所有引脚是否有
BZ
上拉电阻。
外部中断斯密特触发器输入。电平由高到低转换时产生边沿 触发。
斯密特触发器输入的定时/计数器 0。 斯密特触发器输入的定时/计数器 1。
OSC1
)作为内部系统时钟。对于外部 RC 系统时钟的操作,OSC2
定 的输出端信号是系统时钟四分频。 这两个引脚可以被选择成一个 RT C 振荡器(32768Hz)。在这 种情况下系统时钟来自内部 时有 3.2MHz, 1.6MHz, 800kHz 和 400kHz 四种选择。
触发复位输入。低电平有效。 正电源供应。
负电源供应,接地。
PB0 PB1 分别与 BZ
OSC2 连接外部 RC 电路或晶体振荡器(由掩膜选项决
CMOS 输出或输入。掩膜选项决定所有
引脚共用。
BZ
RC 振荡器,其正常频率在 5V
注意: 1. PA 上的每个引脚可通过掩膜选项被设定成拥有唤醒功能。
2. 单独的引脚或口不可以被选择为带上拉电阻,如果选择了上拉配置,则该端口的所有输
入引脚都将被连接到上拉电阻。
3. 引脚 PE4 ~ PE7 和引脚 PF4 ~ PF7 只存在于 64-pin 的封装中。
4. 端口 PG 只存在于 64-pin 的封装中。
13
I/O 型单片机使用手册
HT48RU80A/HT48CU80
引脚名称
PA0~ PA 7 I/ O
PB0/BZ PB1/
PB2 ~ PB7 PB3/TMR2 PB4~ PB7 PC0/TX PC1/RX PC2~ PC7 PD0 ~ PD7 PE0 ~ PE7 PF0 ~ PF7 PG0 ~ PG7
TMR0 I
TMR1 I
OSC1 OSC2
VDD VSS
INT
RES
BZ
I/O
I/O
I
I O Crystal or RC or
I
 
掩膜选项 说明
Pull-high
Wake-up
Schmitt Trigger
Pull-high
I/O or BZ/
Int. RC+RTC
 
位双向输入/输出口,每个位可由掩膜选项设置成唤醒输入。
8
软件指令决定引脚是 引脚是否有上拉电阻及输入为斯密特触发器或非斯密特触 发器。
8 位双向输入/输出口。软件指令决定引脚是 CMOS 输出或斯
密特触发器输入。每个端口由掩膜选项决定所有引脚是否有 上拉电阻。
BZ
TMR2
外部中断斯密特触发器输入。电平由高到低转换时产生边沿 触发。
斯密特触发器输入的定时/计数器 0。 斯密特触发器输入的定时/计数器 1。
OSC1
)作为内部系统时钟。对于外部 RC 系统时钟的操作,OSC2
定 的输出端信号是系统时钟四分频。 这两个引脚可以被选择成一个 RT C 振荡器(32768Hz)。在这 种情况下系统时钟来自内部 时有 3.2MHz, 1.6MHz, 800kHz 和 400kHz 四种选择。
触发复位输入。低电平有效。 正电源供应。
负电源供应,接地。
PB0PB1PB2 PB3 分别与 BZ
引脚共用。
OSC2 连接外部 RC 电路或晶体振荡器(由掩膜选项决
CMOS 输出或输入。掩膜选项决定所有
RC 振荡器,其正常频率在 5V
BZ
INT1
注意: 1. PA 上的每个引脚可通过掩膜选项被设定成拥有唤醒功能。
2. 单独的引脚或口不可以被选择为带上拉电阻,如果选择了上拉配置,则该端口的所有输
入引脚都将被连接到上拉电阻。
3. 引脚 PE4 ~ PE7 和引脚 PF4 ~ PF7 只存在于 64-pin 的封装中。
4. 端口 PG 只存在于 64-pin 的封装中。
14
第一章 硬件架构
极限参数
供应电压................................................................................. VSS−0.3V to VSS+6.0V
输入电压................................................................................ V
–0.3V to VDD+0.3V
SS
储存温度............................................................................................... 50°C~125°C
工作温度................................................................................................. 40°C~85°C
这里只强调额定功率,超过极限参数功率的范围将对芯片造成损害,芯片在所 标示范围外的表现并不能预期,而长期工作在标示范围外条件下也可能影响芯 片的可靠性。
直流电气特性 Ta= 25°C
符号 参数
V
Operating Voltage
DD
Operating Current
I
DD1
(Crystal OSC)
Operating Current
I
DD2
(RC OSC) Operating Current
I
DD3
(Crystal OSC) Standby Current
I
STB1
(WDT Enabled)
Standby Current
I
STB2
(WDT Disabledf)
Standby Current
I
STB3
(WDT Disabled)
V
Input Low Voltage for I/O Ports
IL1
V
Input High Voltage for I/O Ports
IH1
V
Input Low Voltage (
IL2
V
Input High Voltage (
IH2
V
Low Voltage Reset
LVR
RES
RES
IOL I/O Port Sink Current
IOH I/O Port Source Current
RPH Pull-high Resistance
测试条件
V
 
3V 5V
3V 5V
5V
3V 5V
3V 5V 3V
5V
DD
条件
f
=4MHz 2.2
SYS
f
=8MHz 3.3
SYS
No load,
=4MHz
f
SYS
No load,
=4MHz
f
SYS
No load,
=8MHz
f
SYS
No load, RTC Off, system HALT
No load, RTC Off, system HALT
No load,RTC On, system HALT
 
)
)
 
LVR enabled 2.7 3 3.3 V
3V 4 8 5V 3V 5V 3V 5V
VOL=0.1V
VOH=0.9VDD
DD
 
最小 典型 最大 单位
5.5 V
5.5 V
0.6 1.5 mA
 
 
 
   
0
0.7V 0
0.9V
2 4 mA
0.8 1.5 mA
2.5 4 mA
4 8 mA
 
DD
 
DD
10
10
0.3V V
0.4V
V
5
1 2 5
DD
DD
DD
DD
V
V
V
10 20
2 4
5 10
  
20 60 100 10 30 50
µA µA
µA µA µA
µA
V
mA mA mA mA
k k
Ω Ω
15
I/O 型单片机使用手册
交流电气特性 Ta= 25°C
符号 参数
f
System Clock (Crystal OSC)
SYS1
f
System Clock (RC OSC)
SYS2
System Clock
f
SYS3
(Internal RC OSC)
f
Timer I/P Frequency (TMR)
TIMER
t
Watchdog Oscillator Period
WDTOSC
Watchdog Time-out Period
t
WDT1
(WDT OSC)
Watchdog Time-out Period
t
WDT2
(System Clock) Watchdog Time-out Period
t
WDT3
(RTC OSC)
t
External Reset Low Pulse Width
RES
t
System Start-up Timer Period
SST
t
Low Voltage Width to Reset
LVR
t
Interrupt Pulse Width
INT
* t
SYS
=1/f
SYS1,
1/f
SYS2
1/f
SYS3
测试条件
V
DD
 
 
条件
2.2V ~ 5.5V 400
3.3V ~ 5.5V 400
2.2V ~ 5.5V 400
3.3V ~ 5.5V 400
3.2MHz 1800
1.6MHz 900
5V
800kHz 450
400kHz 225
2.2V ~ 5.5V 0
3.3V ~ 5.5V 0
3V 5V
3V 11 23 46 ms
5V
 
Without WDT prescaler
Without WDT Prescaler Without WDT Prescaler
Wake-up from
HALT
 
最小 典型 最大 单位
4000 kHz
8000 kHz
4000 kHz
8000 kHz
5400 kHz
2700 kHz
1350 kHz
675 kHz
4000 kHz
8000 kHz
45 90 180 32 65 130
8 17 33 ms
1
1024
7.812
1024
t
t
0.25 1 2 ms 1
SYS
ms
SYS
µs µs
*
µs
*
µs
注意: 内部 RC 系统时钟在 5V 时有一典型的基本频率 3.2MHz。其它在 5V 时的 1.6MHz800kHz
400kHz 内部 RC 系统时钟是这个基本频率 3.2MHz 的分频。
16
系统结构
第一章 硬件架构
内部系统结构是盛群半导体公司 I/O 型单片机具有良好运行性能的主要因素。 由于采用 RISC 结构,此系列单片机具有高运算速度和高性能的特性。通过流 水线的方式,即指令的取得和执行同时进行,此举使得除了分支、调用和查表 指令外,其它指令都能在一个指令周期内完成。8 位的 ALU 参与指令集中所 有的运算,它可完成算术运算、逻辑运算、移位、加、减和分支等功能,而内 部的数据路径则以通过累加器或 ALU 的方式加以简化。有些寄存器在数据存 储器中被实现,且可以直接或间接寻址。简单的寄存器寻址方式和结构特性, 确保了在提供最大可靠度和灵活性的输入/输出控制系统时,仅需要少数的外 部器件。这使得这些单片机适合用在低成本高产量的控制应用上,可以提供 1K 16K 字的程序存储器和 64 576 字节数据储存。
时序和流水线结构(Pipelining)
系统时钟由晶体/陶瓷振荡器,或是由 RC 振荡器提供,细分为 T1~T4 四个内 部产生的非重叠时序。程序计数器在 T1 时自动加一并抓取一条新的指令。剩 下的 T2~T4 时钟完成解码和执行功能,因此一个 T1~T4 时钟组成一个指令周 期。虽然指令的取得和执行发生在连续的指令周期,但单片机流水线的结构会 保证指令在一个指令周期内被有效的执行。特殊的情况发生在程序计数器的内 容被改变的时候,如子程序的调用或跳转,在这情况下指令将需要多一个指令 周期的时间去执行。
注意: 当使用 RC 振荡器时,OSC2 可以如同一个 T1 相时钟同步引脚一样地被使用,这个 T1 相时
钟有 f
17
/4 的频率,拥有 1:3 高/低的占空比。
SYS
I/O 型单片机使用手册
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
程序计数器
程序执行期间,程序计数器用来指向下一条要执行的指令地址。除了 JMP CALL 这些要求跳转到一个非连续的程序存储器地址之外,它会在每条指令执 行完后自动增加一。对于输入/输出系列的单片机,根据所选择的单片机型号 不同,程序计数器宽度会因程序存储器容量的不同而不同。然而必须要注意只 有较低的 8 位,即所谓的程序计数器低字节寄存器,是可以让使用者直接读写 的。
当执行的指令要求跳转到非连续的地址时,如跳转指令、子程序调用、中断或 复位等,单片机通过载入所需的地址到程序计数器来控制程序。对于条件跳转 指令,一旦条件符合,下一条在现在指令执行时所取得的指令即会被摒弃,而 由一个空指令周期来加以取代。
18
第一章 硬件架构
程序计数器较低字节,即程序计数器低字节寄存器或 PCL,可以通过程序控制 取得,且它是可以读取和写入的寄存器。通过直接传送数据到这寄存器,一个 程序短跳转可以直接被执行,然而因为只有低字节的运用是有效的,因此跳转 被限制在同页存储器,即 256 个存储器地址的范围内,当这样一个程序跳转要 执行时,需注意会插入一个空指令周期。
HT48RU80/HT48CU80 的程序计数器分在两个区段,由区段控制器的第 5 位控 制选择,这个位控制着程序计数器的最高地址,如下图所示。
注意: 程序计数较低字节在程序控制下是完全可用的。PCL 的使用可能导致程序分支,所以额
的周期需要预先取得。有关 PCL 寄存器更多的信息可在特殊功能寄存器部份中找到。
1 3 1 2
B a n k P o i n t e r ( B P )
8 7 0
P r o g r a m C o u n t e r
B P . 5
HT48RU80/HT48CU80
模式
复位 外部中断 0 定时/计数器 0 中断 定时/计数器 1 中断
定时/计数器 2 中断 外部中断 1
UART 中断
条件跳转 写入 PCL 寄存器
跳转或调用子程序
由子程序返回
b13 b12 b11 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1 b0
0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 0 0 0 1 0 0 0
0 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 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0
PC13 PC12 PC11 PC10 PC9 PC8 @7 @6 @5 @4 @3 @2 @1 @0
BP. 5 #12 #11 #10 #9 #8 #7 #6 #5 #4 #3 #2 #1 #0
S13 S12 S11 S10 S9 S8 S7 S6 S5 S4 S3 S2 S1 S0
程序计数器
Program Counter + 2
19
I/O 型单片机使用手册
其它单片机
模式
复位 外部中断 定时/计数器 0 中断 定时/计数器 1 中断 条件跳转 写入 PCL 寄存器 跳转或调用子程序 由子程序返回
b12 b11 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1 b0
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 1 0 0 0
0 0 0 0 0 0 0 0 0 1 1 0 0
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
程序计数器
Program Counter + 2
注意: 1. PC13~PC8:目前程序计数器位。
2. @7~@0PCL 位。
3. BP.5:Bank 选择位。
4. #12~#0:指令码位。
5. S13~S0:堆栈寄存器位。
6. 对于 HT48RU80/HT48CU80,程序计数器有 14 位,即从 b13~b0
7. 对于 HT48R70A-1/HT48C70-1,由于程序计数器有 13 个位,表格中的列 b13 是无效的。
8. 对于 HT48R50A-1/HT48C50-1,由于程序计数器只有 12 个位,表格中的列 b13 和列 b12
是无效的。
9. 对于 HT48R30A-1/HT48C30-1,由于程序计数器只有 11 个位,表格中的列 b13,b12 和
b11 效的。
10. 对于 HT48R10A-1/HT48C10-1,由于程序计数器只有 10 个位,表格中的列 b13, b12,b11
b10 是无效的。
11. 定时/计数器 2 溢出行,用于 HT48RU80/HT48CU80。
12. 定时/计数器 1 溢出行,用于 HT48R50A-1/HT48C50-1 、HT48R70A-1/HT48C70-1 和
HT48RU80/HT48CU80
13. 定时/计数器 0 溢出行,用于 HT48R10A-1/HT48C10-1 、HT48R30A-1/HT48C30-1。
14. UART 总线中断只有在 HT48RU80/HT48CU9 0 中可用。
20
第一章 硬件架构
堆栈
堆栈是存储器中一个特殊的部分,它只用来储存程序计数器中的内容。根据选 择的单片机,堆栈可介于 46 16 层之间,它们既不是数据部分也不是程序 空间部分,且既不是可读取也不是可写入的。当前层由堆栈指针(Stack Pointer, SP)加以指示,同样也是不可读写的。在子程序调用或中断响应服务时,程序 计数器的内容被压入到堆栈中。当子程序或中断服务程序结束时,返回指令 (RET RETI)使程序计数器从堆栈中重新得到它以前的值。当一个芯片复位 之后,SP 将指向堆栈的顶部。
如果堆栈已满,且有非屏蔽的中断发生,中断请求标志位会被置位,但是中断 响应将被禁止。当堆栈指针减少(执行 RET 或 RETI),中断将被响应。这个特 性提供程序设计者简单的方法来预防堆栈溢出。然而即使堆栈已满,CALL 指 令仍然可以被执行,而造成堆栈溢出。使用时应避免堆栈溢出的情况发生,因 为这可能会造成不可预期的程序分支指令执行错误。
注意: 1. 对 HT48R10A-1/HT48C10-1 和 HT48R30A-1/HT48C30-1 而言,N=4,即 4 层堆栈可用。
2. 对 HT48R50A-1/HT48C50-1 而言,N=6,即 6 层堆栈可用。
3. 对 HT48R70A-1/HT48C70-1 和 HT48RU80/HT48CU80 而言,N=16,即 16 层堆栈可用。
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
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 C o u n t e r
P r o g r a m M e m o r y
B a n k P o i n t e r
21
I/O 型单片机使用手册
算术及逻辑单元 – ALU
算术逻辑单元是单片机中很重要的部份,执行指令集中的算术和逻辑运算。 ALU 连接到单片机的数据总线,在接收相关的指令码后执行需要的算术与逻 辑操作,并将结果储存在指定的寄存器,当 ALU 计算或操作时,可能导致进 位、借位或其它状态的改变,而相关的状态寄存器会因此更新内容以显示这些 改变,ALU 所提供的功能如下:
算术运算:ADD、ADDM、ADC、ADCM、SUB、SUBM、SBC、SBCM、DAA
逻辑运算:AND、OR、XOR、ANDM、ORM、XORM、CPL、CPLA
移位:RRA、RR、RRCA、RRC、RLA、RL、RLCA、RLC
增加和减少:INCA、INC、DECA、DEC
分支判断:JMPSZSZASNZSIZSDZSIZASDZACALLRET RETI
22
程序存储器
程序存储器用来存放用户代码即存储程序。对于 I/O 型的单片机而言,有两种 程序存储器可供使用。第一种是一次可编程存储器(OTP),使用者可编写他们 的应用码到芯片中,具有 OTP 存储器的单片机在芯片名称上有“R”做标示。 使用适当的编程工具,OTP 单片机可以提供使用者以灵活的方式来自由开发他 们的应用,这对于除错或需要经常升级与改变程序的产品是很有帮助的。对于 中小型量产,OTP 亦为极佳的选择。另一种存储器为掩膜存储器,单片机名称 上有“C”做标示,这些芯片对于大量生产提供最佳的成本效益。
结构
14 位的程序存储器的容量是 1K,16 位的程序存储器的容量则是 16K,这取决 于选用哪种单片机。程序存储器用程序计数器来寻址,其中也包含数据、表格 和中断入口。数据表格可以设定在程序存储器的任何地址,由表格指针来寻址。 HT48RU80/HT48CU80 中,程序存储器分为两个 8K 容量的区段,Bank 0 和 Bank 1,程序存储器区段由区段指针寄存器的第五位选择,清零时选择 Bank 0,置 1 时选择 Bank 1。当区段指针寄存器也用于控制数据存储器区段指针时,要小 心注意。 以下是 I/O 型单片机程序存储器结构图。
H T 4 8 R 1 0 A - 1 H T 4 8 C 1 0 - 1
0 0 0 H
0 0 4 H
0 0 8 H
0 0 C H
0 1 0 H
0 1 4 H
0 1 8 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
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
N o t I m p l e m e n t e d
第一章 硬件架构
H T 4 8 R 3 0 A - 1 H T 4 8 C 3 0 - 1
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
H T 4 8 R 5 0 A - 1 H T 4 8 C 5 0 - 1
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
1 5 b i t s1 4 b i t s1 4 b i t s
H T 4 8 R 7 0 A - 1 H T 4 8 C 7 0 - 1
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
1 6 b i t s
B a n k 0
H T 4 8 R U 8 0 H T 4 8 C U 8 0
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 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 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
E x t e r n a l I N T 1
I n t e r r u p t V e c t o r
U A R T B u s
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 2
I n t e r r u p t V e c t o r
1 6 b i t s
B a n k 1
23
I/O 型单片机使用手册
特殊向量
程序存储器内部某些地址保留用做诸如复位和中断入口等特殊用途。
地址 000H
这个向量是芯片复位后的程序起始地址。在芯片复位之后,程序将跳到这 个地址并开始执行。
地址 004H
这个向量用做外部中断入口,假如单片机外部中断引脚电平接收到下降沿 信号,而外部中断使能且堆栈没有满的情况下,程序将跳到这个地址开始 执行。HT48RU80/HT48CU80 的外部中断是
地址 008H
此内部中断向量被定时/计数器所使用,当定时器发生溢出,而内部中断使 能且堆栈没有满的情况下,程序将跳到这个地址并开始执行。这个定时/计 数器称为定时/计数器 0。HT48R50A-1/HT48C50-1 和 HT48R70A-1/HT48C 70-1 有两个定时/计数器,HT48RU80/HT48CU80 有三个定时/计数器。
地址 00CH
此内部中断向量被定时/计数器所使用,当定时器发生溢出,而内部中断使 能且堆栈没有满的情况下,程序将跳到这个地址并开始执行,此向量只可 用于 HT48R50A-1/HT48C50-1、HT48R70A-1/HT48C70-1 和 HT48RU80 /HT48CU80,该定时/计数器称为定时/计数器 1。注意, HT48R10A-1/HT48C10-1 和 HT48R30A-1/HT48C30-1 只有一个定时/计数器, 不用这个中断向量。
地址 010H
此中断向量用于外部中断
,当外部中断管脚是低电平,外部中断允许,
INT1
并且堆栈位满,程序将跳到此位置执行中断服务程序。这个中断向量仅适 用于 HT48RU80/HT48CU80。
地址 014H
对于 HT48RU80/HT48CU80,此中断用于 UART 总线中断。如果中断允许,且 堆栈位满,当传输信号或完成接收,产生 UART 总线中断,程序将跳到此处, 开始执行中断服务程序。
地址 018H
对于 HT48RU80/HT48CU80,此中断用于定时/计数器 2 溢出。如果中断允许, 且堆栈未满,当定时/计数器 2 溢出,产生定时器中断,程序将跳到此处, 开始执行中断服务程序。
INT0
24
第一章 硬件架构
多Bank管理
HT48RU80/HT48CU80 有多个程序存储 Bank,一些特殊的事项需要注意。首先, 伪指令 ROMBANK 将程序段放置于不同的 Bank 中。当执行CALL指令来调 用位于不同 Bank的子程序,或者执行JMP指令来跳转到不同 Bank 的地址时, 必须先正确设置 Bank 指针来确定目标 Bank。伪指令 ROMBANK 最佳用法如 下所列。当执行CALLJMP指令,BP 特殊寄存器中的 Bank 指针会自动 装载到程序计数器中。若子程序被位于另一个 Bank 的主程序调用,当执这个 子程序的RET指令时,程序会自动返回到原先主程序所在的 Bank,然而, BP 的值不会改变,它仍保持着子程序所在 Bank 的值。因此在不同的 Bank 间的转移过程中,BP 必须小心处理。以下的范例就是母体 HT48RU80/HT48CU80 的程序,说明了如何在不同的 Bank 之间使用CALLJMP指令。
include HT48RU80.inc
: rombank 0 codesec0 ;define rombank0 rombank 1 codesec1 ;define rombank1 : codesec0 .section at 000h ’code’ ; locates the following program section ; into Bank0
clr bp ; re-initializing the BP
jmp start : start: : : lab0: : :
mov a,BANK routb1 ; routine”routb1”is locate in Bank 1
mov bp,a ; load bank number for routb1 into BP
call roub1 ; call subroutine located in Bank 1
clr bp .5 ; program will return to this location
; after RET in Bank 1 : ; but BP will retain Bank 1 value : ; so clear the BP
codesec1 .section at 000h ’code’ ; locates following program section ; into Bank 1 : : routb1 proc : ret ; return program to Bank0 but BP will ; retain Bank 1 value routb1 endp :
25
I/O 型单片机使用手册
中断处理时,Bank指针的处理需十分小心。无论程序运行至哪个Bank,一旦中 断发生,包括外部中断和内部中断,程序都会立刻跳转至相应的位于Bank 0的 中断子程序入口。然而要注意的是,虽然无论什么情况下程序都会跳转到 Bank0,但是Bank指针仍然保持原来的值,而不是指向Bank 0。因为这个原因, 进入中断处理子程序后,除了保存累加器和状态寄存器之外,另一个重要的动 作就是,保存Bank指针以及清Bank指针让它指向Bank 0,尤其是在Bank 0中执 行调用子程序或跳转指令。在”RETI”指令执行以前,Bank指针和累加器、状态 特殊寄存器一样必须被恢复,确保程序返回至正确的Bank地址,并指向此地址。 以下范例说明了如何处理中断子程序:
include HT48RU80.inc
:
: rombank 0 codesec0 ; define rombank 0 rombank 1 codesec1 ; define rombank 1
:
: codesec0 .section at 000h ’code’ ; locates the following program section
; into Bank 0
clr bp ; clear bank pointer after power-on reset
:
:
org 004h ; jump here from any bank when ext . int.
; occurs - BP retains original value mov accbuf0,a ; backup accumulator mov a,bp ; backup bank pointer clr bp ; clear bp to indicate Bank 0 otherwise
; original BP value will remain and give
; rise to false jmp or call addresses
jmp ext_int ; jump to external interrupt subroutine
: :
org 008h ; jump here from any bank when timer 0 int
; occurs - BP retains original value mov accbuf1,a ; backup accumulator mov a,bp ; backup bank pointer clr bp ; clear bp to indicate Bank 0 otherwise
; original BP value will remain and give
; rise to false jmp or call addresses
jmp tim0_int ; jump to timer 0 interrupt subroutine
: :
org 00Ch ; jump here from any bank when timer 1 int
; occurs - BP retains original value
:
26
第一章 硬件架构
:
ext_int: ; external interrupt subroutine
mov bp_exti,a ; backup bank pointer mov a,status ; backup status register mov statusbuf0,a ; backup status register
:
: mov a,statusbuf0 ; restore status register mov status,a mov a,bp_exti ; restore bank pointer mov bp,a mov a,accbuf0 ; restore accumulator
reti ; return to main program and original
; calling bank : :
time0_int: ; ext1_int interrupt subroutine
mov bp_tmr0,a ; backup bank pointer mov a,status ; backup status register mov statusbuf1,a
: :
mov a,statusbuf1 ; restore status register mov status,a mov a,bp_tmr0 ; restore bank pointer mov bp,a mov a,accbuf1 ; restore accumulator
reti ; return to main program and original
; calling bank :
27
I/O 型单片机使用手册
查表
程序存储器中的任何地址都可以定义成一个表格,以便储存固定的数据。使用 表格时,必须设定表格指针来确定访问程序存储器的地址。然而部分芯片只有 表格低字节指针,另一部分芯片有表格低字节和高字节指针。要注意的是,不 同的芯片查表方式会略有不同。 除 HT48RU80/HT48CU80 外,它们只有一个表格指针寄存器 TBLP,可以从中获 取查表地址低字节,它必须事先设定。这个寄存器定义表格低的 8 位地址。在 设定完表格指针后,表格数据可以使用“TABRDC [m]”或“TABRDL [m]”指令 从目前程序所在的存储器页或存储器最后一页中来查表读取。当这些指令执行 时,程序存储器中表格数据低字节,将被传送到使用者所指定的数据存储器, 程序存储器中表格数据的高字节,则被传送到 TBLH 特殊寄存器,而高字节中 未使用的位将被读取为“0”。
下图是除 HT48RU80/HT48CU80 以外的查表寻址/数据流程图:
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
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
P r o g r a m
M e m o r y
L o w b y t e o f t a b l e c o n t e n t s
28
第一章 硬件架构
查表程序范例
以下范例说明了 HT48R10A-1 I/O 型单片机如何定义表格指针、如何查表。这 个例子使用的表格数据用 ORG 伪指令储存在存储器的最后一页。在此 ORG 伪 指令中的值为 300H,即 1K 程序存储器 HT48R10A-1 单片机中最后一页存储器 的开始的地址,而表格的初始值为 06H。 这可保证从数据表格读取的第一笔数据位于程序存储器地址 306H,即最后一页 开始地址后六个地址。值得注意的是假如“TABRDC [m]”指令被使用,则表 格指针指向当前页。表格数据低字节被送往指定的寄存器,而表格表格数据高 字节将会自动被传送到 TBLH 寄存器,在这个例子中,表格数据的高字节等于 零。
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 tempregl ; data at prog. memory address 306H 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 305H transferred to
; tempreg2 and TBLH
; in this example the data 1AH is transferred to
; tempreg1
; and data 0FH to register tempreg2
; the value 00H will be transferred to the high byte
; register TBLH
: org 300h ; sets initial address of last page(for HT48R10A-1) dc 00Ah, 00Bh, 00Ch, 00Dh, 00Eh, 00Fh, 01Ah, 01Bh
:
对于芯片 HT48RU80/HT48CU80,它们有两个表格指针寄存器 TBLP TBHP, 可以从中获取表格地址低字节和表格地址高字节,必须事先设定。不同于仅使 用表格地址低字节 TBLP 的芯片,增加的 TBHP 寄存器允许在任何地址定义表 格,并且允许连续直接访问任何地址任何页的表格数据。这类芯片中,当设定 了低字节表格指针和高字节表格指针后,就可以使用指令“TABRDC [m]”获 取任何程序存储器地址的表格数据,或者使用指令“TABRDL [m]”获取最后页
29
I/O 型单片机使用手册
的表格数据。无论使用何种指令,程序存储器中的低字节表格数据都会被送往 用户定义的数据寄存器[m]中。程序存储器中高字节表格数据会被送往 TBLH 特 殊寄存器。高字节中未使用的位将被读取为零。
下图是 HT48RU80/HT48CU80 的查表寻址/数据流程图:
T B H P
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
以下范例说明了 HT48RU80/HT48CU80 如何定义表格指针、如何查表。这个例子 使用的表格数据用 ORG 伪指令储存在存储器中。在此 ORG 伪指令中的值为 000H,这是相对于 Bank 1 起始地址而言,绝对地址是“2000H”。这里高字节 表格指针是 20H,低字节表格指针的初值则为 05H。这可以保证从数据表格读 取的第一笔数据位于程序存储器地址 2005H,即 ORG 伪指令定义地址后五个 地址。执行“TABRDC [m]”指令,表格数据低字节“FFH”被送往指定的“temp 寄存器,而表格数据高字节“55H”将会被传送到 TBLH 寄存器。
include HT48RU80.inc
: :
data .section ’data’
temp db ?
:
: rombank 0 codesec0 ; Bank 0 definition rombank 1 codesec1 ; Bank 1 definition
:
: codesec0 .section at 0 ’code’
jmp start
:
org 010h
start:
:
:
mov a,020h ; setup table high byte address mov tbhp,a mov a,005h ; setup table low byte address mov tblp,a ; table pointer address is now 2005H tabrdc temp ; read table data from PC address 2005H nop ; FFH will be placed in the temp
; register and 55H will be placed in ; the TBLH register
30
第一章 硬件架构
codesec1 .section at 000h ’code’ ; Bank 1 code located here
org 0000h ; this defines the offset from the
; start address of Bank 1 which is ; 2000H
dc 000AAh, 011BBh, 022CCh, 033DDh, 044EEh, 055FFh
:
:
因为 TBLH 寄存器是只读寄存器,不能重新储存,若主程序和中断服务程序都 使用表格读取指令,应该注意它的保护。使用表格读取指令,中断服务程序可 能会改变 TBLH 的值,若随后在主程序中再次使用这个值,则会发生错误。因 此建议避免同时使用表格读取指令。然而在某些情况下,如果同时使用表格读 取指令是不可避免的,则在执行任何主程序的表格读取前,中断应该先禁止, 另外要注意的是所有与表格相关的指令,都需要两个指令周期去完成操作。
HT48RU80/HT48CU80 以外的
指令
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
HT48RU80/HT48CU80
指令
TABRDC[m] TBHP TBHP TBHP TBHP TBHP TBHP @7 @6 @5 @4 @3 @2 @1 @0 TABRDL[m] 1 1 1 1 1 1 @7 @6 @5 @4 @3 @2 @1 @0
注意: 1. PC12 ~ PC8:当前程序计数器位
2. @7~@0:是表格指针 TBLP 位
3. 对 HT48UR90/HT48CU80 来说,表格地址是 14 位,从 b13~b0。
4. 对 HT48R70A-1/HT48C70-1 来说,表格地址是 13 位,从 b12~b0。
5. 对 HT48R50A-1/HT48C50-1 来说,表格地址是 12 位,从 b11~b0。
6. 对 HT48R30A-1/HT48C30-1 来说,表格地址是 11 位,从 b10~b0
7. 对 HT48R10A-1/HT48C10-1 来说,表格地址是 10 位,从 b9~b0。
b12 b11 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1 b0
b13 b12 b11 b10 b9 b8 b7 b6 b5 b4 b3 b2 b1 b0
表格地址
表格地址
31
数据存储器
数据存储器是内容可更改的 8 RAM 内部存储器,用来储存临时数据,且分 为两部份。第一部份是特殊功能寄存器,这些寄存器有固定的地址且与单片机 的正确操作密切相关。大多特殊功能寄存器都可在程序控制下直接读取和写 入,但有些被加以保护而不对用户开放。第二部份数据存储器是做一般用途使 用,都可在程序控制下进行读取和写入。对于 HT48RU80/HT48CU80 而言,通用 数据存储器分为三个独立的区域,即存储区 0、存储区 1 和存储区 2。
结构
数据存储器的两个部份,即专用和通用数据存储器,位于连续的地址。全部 RAM 8 位宽度,但存储器长度因所选择的单片机而不同。所有芯片的数据 存储器的开始地址都是 00H 。 HT48R10A-1/HT48C10-1 和 HT48R30A-1/ HT48C30-1 的结束地址是 7FH , HT48R50A-1/ HT48C50-1 、 HT48R70A-1/ HT48C70-1 和 HT48RU80/HT48CU80 的结束地址是 FFH。常见的寄存器,如 ACCPCL 等,全都具有相同的数据存储器地址。
I/O 型单片机使用手册
S p e c i a l
P u r p o s e
D a t a
M e m o r y
B a n k 0
G e n e r a l
P u r p o s e
D a t a
M e m o r y
C a p a c i t y
i s D e v i c e
D e p e n d e n t
0 0 H
1 F H / 3 F H / 5 F H 2 0 H / 4 0 H / 6 0 H
7 F H / F F H
H T 4 8 R 1 0 A - 1 / H T 4 8 C 1 0 - 1 , H T 4 8 R 3 0 A - 1 / H T 4 8 C 3 0 - 1 H T 4 8 R 5 0 A - 1 / H T 4 8 C 5 0 - 1 , H T 4 8 R 7 0 A - 1 / H T 4 8 C 7 0 - 1
0 0 H
3 F H
4 0 H
F F H
B a n k 0
B a n k 1
H T 4 8 R U 8 0 / H T 4 8 C U 8 0
B a n k 2
B a n k 0 , 1 , 2
G e n e r a l P u r p o s e D a t a M e m o r y
注意: 除了少数专用的位,大部份数据存储器的位都可以直接使用“SET [m].i”和“CLR [m].i”
加以操作。数据存储器也可通过间接寻址指针进行存取。HT48R10A-1/HT48C10-1 和
HT48R30A-1/HT48C30-1 对应的是 MP,其他型号的是 MP0 MP1
32
第一章 硬件架构
通用数据存储器
所有的单片机程序需要一个读/写的存储区,让临时数据可以被储存和再使用。 该 RAM 区域就是通用数据存储器。这个数据存储区可让使用者进行读取和写 入的操作。使用“SET [m].i”和“CLR [m].i”指令可对个别的位做置位或复位 的操作,方便用户在数据存储器内进行位操作。 对于 HT48RU80/HT48CU80,通用数据存储器位于存储区 0、存储区 1 和存储区 2,在对通用数据存储器进行存取操作之前,必须先正确的设定存储区指针的 值。存储区 1 或存储区 2 必须使用间接寻址指针 MP1 和间接寻址寄存器 IAR1 进行间接存取。任何直接寻址或使用间接寻址指针 MP0 和间接寻址缓存器 IAR0 进行的间接寻址,只会在存储区 0 存取数据。 以下是 I/O 型单片机通用数据存储器的详细结构图:
2 0 H
6 0 H
F F H
H T 4 8 R 5 0 A - 1 H T 4 8 C 5 0 - 1
1 6 0 B y t e s
H T 4 8 R 7 0 A - 1 H T 4 8 C 7 0 - 1
2 0 H
F F H
2 2 4 B y t e s
4 0 H
F F H
H T 4 8 R U 8 0 H T 4 8 C U 8 0
B a n k 0
B a n k 1
B a n k 2
5 7 6 B y t e s
H T 4 8 R 1 0 A - 1 H T 4 8 C 1 0 - 1
2 0 H
4 0 H
7 F H
6 4 B y t e s
: U n u s e d , R e a d a s " 0 0 "
H T 4 8 R 3 0 A - 1 H T 4 8 C 3 0 - 1
2 0 H
7 F H
9 6 B y t e s
注意:HT48RU80/HT48CU80 中,通用数据存储器的 576 个字节储存在三个独立的存储区,即存储
区 0、存储区 1 和存储区 2。在读取或写入数据到通用数据存储器之前,必须先确认是否正
确的设定了存储区指针,选择了正确的数据存储器区。
33
I/O 型单片机使用手册
专用数据存储器
这个区域的数据存储器是存放特殊寄存器的,这些寄存器与单片机的正确操作 密切相关,大多数的寄存器可进行读取和写入,只有一些是被保护而只能读取 的,相关细节的介绍请参看有关特殊功能寄存器的部份。要注意的是,任何读 取指令对存储器中未使用的地址进行读取将得到“00H”的值。
以下是 I/O 型单片机中,专用数据存储器的详细结构图:
0 0 H 0 1 H 0 2 H 0 3 H 0 4 H 0 5 H 0 6 H 0 7 H 0 8 H
0 9 H 0 A H 0 B H
0 C H 0 D H
0 E H 0 F H
1 0 H
1 1 H
1 2 H
1 3 H
1 4 H
1 5 H
1 6 H
1 7 H
1 8 H
1 9 H 1 A H 1 B H
1 C H 1 D H
1 E H 1 F H
H T 4 8 R 1 0 A - 1 H T 4 8 C 1 0 - 1
I A R
M P
A C C P C L
T B L P
T B L H
W D T S
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 C
P C C
H T 4 8 R 3 0 A - 1 H T 4 8 C 3 0 - 1
I A R
M P
A C C
P C L T B L P T B L H
W D T S
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 C
P C C
P G
P G C
H T 4 8 R 5 0 A - 1 H T 4 8 C 5 0 - 1
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
W D T S
S T A T U S
I N T C
T M R 0
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 G
P G C
H T 4 8 R 7 0 A - 1 H T 4 8 C 7 0 - 1
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
W D T S
S T A T U S
I N T C 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 E
P E C
P F
P F C
P G
P G C
0 0 H 0 1 H 0 2 H 0 3 H 0 4 H 0 5 H 0 6 H 0 7 H 0 8 H 0 9 H 0 A H
0 B H 0 C H 0 D H 0 E H
0 F H
1 0 H
1 1 H
1 2 H
1 3 H
1 4 H
1 5 H
1 6 H
1 7 H
1 8 H
1 9 H 1 A H 1 B H 1 C H 1 D H 1 E H
1 F H
2 0 H
2 1 H
2 2 H
2 3 H
2 4 H
2 5 H
2 6 H
2 7 H
2 8 H
2 9 H 2 A H 2 B H 2 C H 2 D H
H T 4 8 R U 8 0 H T 4 8 C U 8 0
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
W D T S
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 E
P E C
P F
P F C
I N T C 1
T B H P
T M R 2
T M R 2 C
P G
P G C
U S R U C R 1 U C R 2
T X R / R X R
B R G
: U n u s e d , R e a d a s " 0 0 "
34
3 F H
第一章 硬件架构
特殊功能寄存器
为了确保单片机能成功的操作,数据存储器中设置了一些内部寄存器。这些寄 存器确保内部功能(如定时器、中断和看门狗等)和外部功能(如输入/输出数据 控制)的正确操作。在数据存储器中,这些寄存器以 00H 作为开始地址。在特 殊功能寄存器存储空间和通用数据存储器的起始地址之间,有一些未定义的数 据存储器,被保留用来做未来的扩充,若从这些地址读取数据将返回 00H 值。
间接寻址寄存器 – IAR, IAR0, IAR1
间接寻址的方法准许使用间接寻址指针做数据操作,以取代定义实际存储器地 址的直接存储器寻址方式。在间接寻址寄存器上的任何动作,将对间接寻址指 针 (MP) 所指定的存储器地址产生对应的读/写操作。对于 HT48R10A-1/ HT48C10-1 HT48R30A-1/HT48C30-1 系列,提供一个间接寻址寄存器(IAR) 和一个间接寻址指针(MP)。而对于 HT48R50A-1/HT48C50-1HT48R70A-1/
HT48C70-1 HT48RU80/HT48CU80 系列,提供两个间接寻址寄存器(IAR0 和 IAR1)和两个间接寻址指针(MP0 MP1)。要注意的是这些间接寻址寄存器并
不是实际存在的,直接读取 IAR 寄存器将返回 00H 的结果,而直接写入此寄 存器则不做任何操作。
间接寻址指针 – MP, MP0, MP1
对于 HT48R10A-1/HT48C10-1 HT48R30A-1/HT48C30-1 系列,提供一个间 接寻址指针,即 MP 。而对于 HT48R50A-1/HT48C50-1 HT48R70A-1/ HT48C70-1 HT48RU80/HT48CU80 系列,提供两个间接寻址指针,即 MP0MP1。由于这些指针在数据存储器中能像普通的寄存器一般被写入和操作, 因此提供了一个寻址和数据追踪的有效方法。当对间接寻址寄存器进行任何操 作时,单片机指向的实际地址是由间接寻址指针所指定的地址。
注意:HT48R10A-1/HT48C10-1 HT48R30A-1/HT48C30-1 而言,间接寻址指针的第 7 位没有
用。可是,必须注意当间接寻址指针被读取时,其值为 1。
35
I/O 型单片机使用手册
以下适用于 HT48R10A-1/HT48C10-1 HT48R30A-1/HT48C30-1 的例子说明 如何清除一个具有 4 RAM 地址的区块,它们已事先被定义成地址 adres1 adres4
data .section ´data´ adres1 db ? adres2 db ? adres3 db ? adres4 db ? block db ? code .section at 0 ´code´ org 00h
start: mov a,04h ; setup size of block mov block,a mov a,offset adres1 ; Accumulator loaded with first RAM address mov mp,a ; setup memory pointer with first RAM address
loop: clr IAR ; clear the data at address defined by mp inc mp ; increment memory pointer sdz block ; check if last memory location has been
; cleared jmp loop
continue:
在上面的例子中有一点值得注意,即并没有确定 RAM 地址。
存储区指针 BP
HT48RU80/HT48CU80 的数据存储器和程序存储器都被分为几个 Bank,存储区指
针只存在 HT48RU80/HT48CU80 中。所有的数据存储器分为三个存储区。可以使
用存储区指针 BP 来选择正确的数据存储器区。如果要对存储区 1 或存储区 2
进行数据存取,存储区指针 BP 的值必须先设置为“01”或“10”。请注意,这
两个存储区必须使用间接寻址指针 MP1 和间接寻址寄存器 IAR1 进行间接存取。
任何的直接寻址或使用 MP0 和 IAR0 的间接寻址,只会在存储区 0 存取数据。
复位后,通用数据存储器会初始化到存储区 0,但是在 HALT 模式下的 WDT 溢
出复位,不会改变通用数据存储器的存储区号。请注意,特殊功能数据存储器
不受存储区的影响,也就是说,不论是在存储区 0、存储区 1 或存储区 2,都
能对特殊功能寄存器进行读写操作。16K 程序存储器分为两个 8K 的 Bank,即
Bank0 和 Bank1。存储区指针的第 5 位用来选择 Bank。尽管存储区指针寄存器
某些位被用来指示存储区号,但该寄存器的 8 个位都可以使用。没有用到的那
些位都设置为“0”。
36
第一章 硬件架构
b 7 b 0
B P 5 X X X B P 1 B P 0
XX
累加器 – ACC
对任何单片机来说,累加器是相当重要的且与 ALU 所完成的运算有密切关系, 所有 ALU 得到的运算结果都会暂时储存在 ACC 累加器里。若没有累加器, ALU 必须在每次进行如加法、减法和移位的运算时,将结果写入到数据存储 器,这样会造成程序编写和时间的负担。另外数据传送也常常牵涉到累加器的 临时储存功能,例如在一使用者定义的寄存器和另一个寄存器之间传送数据 时,由于两寄存器之间不能直接传送数据,因此必须通过累加器来传送数据。
B a n k P o i n t e r
B P 0
B P 1
0
0
1
0
0
1 1
1
N o t u s e d
P r o g r a m M e m o r y 0 : B a n k 0 1 : B a n k 1
N o t u s e d
D a t a M e m o r y B a n k 0 B a n k 1 B a n k 2 u n d e f i n e d
程序计数器低字节寄存器 – PCL
为了提供额外的程序控制功能,程序计数器较低字节设置在数据存储器的特殊 功能区域内,程序员可对此寄存器进行操作,很容易的直接跳转到其它程序地 址。直接给 PCL 寄存器赋值将导致程序直接跳转到程序存储器的某一地址, 然而由于寄存器只有 8 位的长度,因此只允许在本页的程序存储器范围内进行 跳转,而当使用这种运算时,要注意会插入一个空指令周期。
表格寄存器 – TBLP, TBHP,TBLH
这两个特殊功能寄存器对储存在程序存储器中的表格进行操作。TBLP 为表格 指针,指向表格数据的地址。它的值必须在任何表格读取指令执行前加以设定, 由于它的值可以被如 INC DEC 的指令所改变,这就提供了一种简单的方法 对表格数据进行读取。表格读取数据指令执行之后,表格数据高字节存储在
TBLH 中。其中要注意的是,表格数据低字节会被传送到使用者指定地址。
37
I/O 型单片机使用手册
看门狗定时寄存器 – WDTS
看门狗在单片机中的特性是提供一个自动复位的功能,给予单片机一个保护工 具去预防不正确的程序跳转。当看门狗定时器溢出时会产生复位。为了提供可 变的看门狗定时器复位时间,看门狗定时器的时钟源可被预分频,分频值可由 WDTS 寄存器来设定。对 WDTS 寄存器赋值,可以设定适当的预分频值的看 门狗定时器时钟源。要注意的是,在 WDTS 中只有较低的 3 位被使用来设定 从 1 128 之间的分频比例,8 位中剩下的 5 位可以被程序设计者用来做其它 用途。
状态寄存器 – 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。 另外当进入一个中断程序或执行子程序调用时,状态寄存器不会自动压入到堆 栈保存。假如状态寄存器的内容是重要的且子程序可能改变状态寄存器的话, 则需谨慎的去做正确的储存。
38
第一章 硬件架构
b 7 b 0
T O P D F O V Z A C C
中断控制寄存器 – INTC,INTC0,INTC1
8 位的 INTC 寄存器用来控制外部和内部中断的动作。HT48RU80/HT48CU80 有两个中断控制寄存器(INTC0 INTC1)。其它型号的只有一个中断控制寄 存器(INTC)。通过使用标准的位操作指令来设定这寄存器的位的值,外部中 断和内部中断的使能和除能功能可分别被控制。寄存器中主中断位(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 l o 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 "
注意: 若遇到在当前中断服务程序中要再响应其它的中断程序时,可以在进入该中断服务程序后,
在程序中用手动的方式将 EMI 置为“1”。
定时/计数器寄存器
该系列的单片机集成了一个、二个或三个 8 位或 16 位的定时/计数器,这取决 于您选择的型号。对于具有一个 8 位定时器的 HT48R10A-1/HT48C10-1 HT48R30A-1/HT48C30-1 而言,寄存器 TMR 是 8 位定时数值存放的位置。对应 的控制寄存器 TMRC,含有此定时/计数器的设定信息。HT48R50A-1/HT48C50-1 具有一个 8 位定时/计数器,对应的寄存器为 TMR0,和一个 16 位定时/计数器, 对应的寄存器对为 TMR1L/ TMR1H,均为定时数值存放的位置。对应的控制寄 存器 TMR0C 和 TMR1C 含有这两个定时/计数器的设定信息。HT48R70A-1/ HT48C70-1 具有两个 16 位定时/计数器,对应的寄存器对为 TMR0L/TMR0H 和 TMR1L/TMR1H,均为 16 位定时数值存放的位置,两个对应的控制寄存器 TMR0C 和 TMR1C 含有这两个定时/计数器的设定信息。跟 HT48R70A-1/HT48C70-1 一 样,HT48RU80/HT48CU80 同样含有两个 16 位的定时器,但
HT48RU80/HT48CU80 还包含了一个 8 位的定时器,对应的寄存器为 TMR2,控
39
I/O 型单片机使用手册
制寄存器为 TMR2C。请注意,定时器寄存器可以预先写入固定的数据,以允许 设定不同的时间中断。
输入/输出端口和控制寄存器
在特殊功能寄存器中,输入/输出寄存器和它们相对应的控制寄存器很重要。 所有的输入/输出端口都有相对应的寄存器,且被标示为 PA PBPC 等。如 数据存储器结构图中所示,这些输入/输出寄存器映射到数据存储器的特定地 址,用以传送端口上的输入/输出数据。每个输入/输出端口有一个相对应的控 制寄存器,分别为 PA CPBC PCC 等,也同样映射到数据存储器的特定地 址。这些控制寄存器设定引脚的状态,以决定哪些是输入口,哪些是输出口。 要设定一个引脚为输入,控制寄存器对应的位必须设定成高,若引脚设定为输 出,则控制寄存器对应的位必须设为低。程序初始化期间,在从输入/输出端 口中读取或写入数据之前,必须先设定控制寄存器的位以确定引脚为输入或输 出。使用“SET [m].i”和“ CLR [m].i”指令可以直接设定这些寄存器的某一位。 这种在程序中可以通过改变输入/输出端口控制寄存器中某一位而直接改变该 端口输入/输出口状态的能力是此系列单片机非常有用的特性。
UART 寄存器 – USR,UCR1,UCR2,TXR/RXR,BRG
HT48RU80/HT48CU80 具有一个内部 UART 功能,有 5 个相关的寄存器。USR 是 UART 的状态寄存器,UCR1 和 UCR2 是控制寄存器。通过串发送或接收的数据存 放在 TXR/RXR 寄存器中,而波特率的配置是通过寄存器 BRG 来实现的。
40
第一章 硬件架构
输入/输出端口
盛群单片机的输入/输出端口控制具有很大的灵活性。这体现在每一个引脚在 使用者的程序控制下可以被指定为输入或输出、所有引脚的上拉选项、以及指 定引脚的唤醒选择,这些特性也使得此类单片机在广泛应用上都能符合开发的 要求。
依据所选单片机及封装类别的不同,该系列单片机提供从 21 56 个不等双向 输入/输出口,标示为 PA PBPC 等。这些输入/输出端口在数据存储器的对 应指定地址如表所示。所有输入/输出口都可做为输入及输出之用。作为输入 操作时,输入/输出引脚是不锁存的,也就是输入数据必须在指令“MOV A,[m]T2 上升沿准备好,m 表示端口地址。对于输出操作,所有数据是锁存 的,而且持续到输出锁存被重写。
上拉电阻
很多产品应用在端口处于输入状态时需要外加一个上拉电阻来实现上拉的功 能。为了免去这个外加的电阻,当引脚规划为输入时,可由内部连接到一上拉 电阻。这些上拉电阻可通过掩膜选项来加以选择,它用一个 PMOS 晶体管来实 现。要注意的是一旦某一输入/输出端口选择了上拉电阻,则这个输入/输出端 口的所有引脚都将被连接到上拉电阻,个别引脚是不能单独设置成带上拉电阻 的。
PA 口的唤醒
本系列的单片机都具有暂停功能,使得单片机进入暂停模式以节省功耗,此功 能对于电池及低功率应用是很重要的。唤醒单片机有很多种方法,其中之一就 是使 PA 口其中的一个引脚从高电平转为低电平。当使用暂停指令“HALT” 迫使单片机进入暂停状态以后,单片机将保持闲置即低功率状态,直到 PA 上被选为唤醒输入的引脚电平发生下降沿跳变。这个功能特别适合于通过外部 开关来唤醒的应用。值得注意的是 PA 口的每个引脚都可单独的选择具有唤醒 的功能。
输入/输出端口控制寄存器
每一个输入/输出端口都拥有自己的控制寄存器(PA CPBC、PCC 等)去控制 输入/输出状态。利用此控制寄存器,每一个 CMOS 输出或者斯密特触发器输 入不管有没有上拉电阻设置,均可利用软件控制方式加以动态的重新设置。所
41
I/O 型单片机使用手册
有输入/输出端口的引脚都各自对应于输入/输出端口控制寄存器的某一位。若 输入/输出引脚要实现输入功能,则对应的控制寄存器位必须设定为“1”。这 时程序指令可以直接读出输入引脚的逻辑状态。如果引脚的控制寄存器位被设 定为“0”,则此引脚被设置为 CMOS 输出。当引脚被设置为输出状态,程序 指令读取的是输出端口寄存器的内容。请注意当输入/输出口被设置为输出状 态时,此时如果对输出口做读取的动作,则会读取到内部数据寄存器中的锁存 值,而不是输出引脚实际的逻辑状态。
引脚共享功能
如果引脚能有超过一个以上的功能,则单片机灵活程度将大大的提升。有限的 引脚个数会严重地限制设计者,但是引脚的多功能特性,可以解决很多此类问 题。多功能输入/输出引脚的功能选择,有些是由掩膜选项设定,另一些则是 在应用程序控制时做设定。
蜂鸣器
蜂鸣器引脚 BZ 及BZ与输入/输出引脚 PB0 PB1 共用。假如定义为蜂鸣器引 脚,则需选择正确的硬件及软件选项。
外部中断输入
外部中断引脚 然而对于 HT48R70A-1/HT48C70-1 而言,外部中断引脚 HT48RU80/HT48CU80 有两个外部中断引脚,其中的 而
的引脚和 I/O PB2 共用一个引脚。要把这些引脚做为外部中断引脚,
INT1
与输入/输出引脚 PC0 PG0 共用,这取决于使用哪种型号。
INT
是一个独立的引脚。
INT
是个独立的引脚,
INT0
而不是一般输入/输出引脚,必须正确地设定中断控制寄存器 INTC0 INTC1 里的外部中断使能位。如果不需要外部中断输入,除了
HT48R70A-1/HT48C70-1 外,此引脚可当作一般的输入/输出引脚使用,此时 INTC 寄存器中的外部中断使能位必须被关断。
外部定时器时钟输入
每一款芯片均包含一个或二个定时器,这取决于芯片型号的选择。每个定时器 都有一个外部输入引脚,仅有一个定时器的单片机中此引脚称为 TMR,而在 拥有两个定时器的单片机中这些引脚称为 TMR0 TMR1。对所有仅有一个定 时器的单片机来说,外部输入引脚 TMR 与输入/输出引脚 PC0 PC1 共用。 而对所有拥有两个定时器的单片机来说,外部输入引脚 TMR0 TMR1 或分 别与引脚 PC0 PC5 共用,或独立存在不与其它引脚共用,这取决于所选单 片机的型号和封装。HT48RU80/HT48CU80 包括三个定时器,都有外部定时器 管脚,TMR0TMR1 TMR2TMR0 TMR1 的管脚是独立的,TMR2
42
第一章 硬件架构
I/O 口 PB3 共用一个管脚。这些外部定时器引脚如果是共用引脚,那么在不需 要外部定时器输入引脚的场合,也可以当作一般输入/输出引脚使用。对于此 种应用,TMRC 寄存器中的定时器模式位必须选为定时器模式(内部时钟源), 以避免输入/输出引脚与定时器操作的冲突。
P u l l - H i g h O p t i o n
Q
Q
S
Q
Q
S
M U X
PA 输入/输出端口
W a k e - u p O p t i o n
D a t a B u s
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
C o n t r o l B i t
D
C K
D a t a B i t
D
C K
V
D D
W e a k P u l l - u p
P A 0 ~ P A 7
S c h m i t t T r i g g e r I n p u t O p t i o n
D a t a B u s
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
P B 0 D a t a B i t B Z ( P B 1 o n l y ) B Z ( P B 0 o n l y )
R e a d D a t a R e g i s t e r
C o n t r o l B i t
D
C K
D a t a B i t
D
C K
P u l l - H i g h O p t i o n
Q
Q
S
Q
Q
S
M U X
PB0/PB1 输入/输出端口
M
U X
B Z O p t i o n
V
D D
W e a k P u l l - u p
P B 0 / B Z P B 1 / B Z
43
I/O 型单片机使用手册
D a t a B u s
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 C 0 / P G 0 o n l y )
I N T 1 ( P B 2 o n l y )
T M R / T M R 0 / T M R 1 / T M R 2
( P C 0 / P C 1 / P C 5 / P B 3 o n l y )
O S C 1 ( P C 3 / P G 1 o n l y ) O S C 2 ( P C 4 / P G 2 o n l y )
V
D D
C o n t r o l B i t
D
C K
S
D a t a B i t
D
C K
S
P u l l - H i g h O p t i o n
Q
Q
Q
Q
M U X
W e a k P u l l - u p
P C 0 / I N T ( H T 4 8 R 1 0 A - 1 / H T 4 8 C 1 0 - 1 ) P G 0 / I N T ( H T 4 8 R 3 0 A - 1 / H T 4 8 C 3 0 - 1 H T 4 8 R 5 0 A - 1 / H T 4 8 C 5 0 - 1 ) P B 2 / I N T 1 ( H T 4 8 R U 8 0 / H T 4 8 C U 8 0 ) P C 0 / T M R ( H T 4 8 R 3 0 A - 1 / H T 4 8 C 3 0 - 1 ) P C 0 / T M R 0 ( H T 4 8 R 5 0 A - 1 / H T 4 8 C 5 0 - 1 ) P C 1 / T M R ( H T 4 8 R 5 0 A - 1 / H T 4 8 C 5 0 - 1 ) P C 5 / T M R 1 ( H T 4 8 R 1 0 A - 1 / H T 4 8 C 1 0 - 1 ) P B 3 / T M R 2 ( H T 4 8 R U 8 0 / H T 4 8 C U 8 0 ) O S C 1 / P C 3 ( H T 4 8 R 1 0 A - 1 / H T 4 8 C 1 0 - 1 ) O S C 1 / P G 1 ( H T 4 8 R 3 0 A - 1 / H T 4 8 C 3 0 - 1 H T 4 8 R 5 0 A - 1 / H T 4 8 C 5 0 - 1 ) O S C 2 / P G 2 ( H T 4 8 R 3 0 A - 1 / H T 4 8 C 3 0 - 1 H T 4 8 R 5 0 A - 1 / H T 4 8 C 5 0 - 1 ) O S C 2 / P C 4 ( H T 4 8 R 1 0 A - 1 / H T 4 8 C 1 0 - 1 )
PB2~PB7PCPDPEPF PG 输入/输出端口
振荡器
对于 HT48R10A-1/HT48C10-1,振荡器引脚 OSC1OSC2 PC3PC4 共用, 而在 HT48R30A-1/HT48C30-1 以及 HT48R50A-1/HT48C50-1 中,则是与 PG1PG2 共用。对于 HT48R70A-1/HT48C70-1 HT48RU80/HT48CU80,振荡器引 脚是独立的。掩膜选项决定此引脚共用功能的选择,如果选择输入/输出引脚 功能,则可选择上拉选项。
44
第一章 硬件架构
UART 引脚
W r i t e C o n t r o l R e g i s t e r
D a t a B u s
C h i p R e s e t
C o n t r o l B i t
Q
D
C K
Q
S
P u l l - H i g h O p t i o n
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
F r o m U A R T T X
PC0/TX Input/Output Port – HT48RU80/HT48CU80
D a t a B i t
D
C K
S
Q
Q
M
U X
M
U X
U A R T E N & T X E N
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
R e a d D a t a R e g i s t e r
D a t a B u s
C h i p R e s e t
C o n t r o l B i t
D
C K
S
D a t a B i t
D
C K
S
P u l l - H i g h O p t i o n
Q
Q
Q
Q
M
U X
U A R T E N & R X E N
T o U A R T R X
PC1/RX Input/Output Port – HT48RU80/HT48CU80
HT48RU80/HT48CU80 具有一个内部的异步串行通信端口,它通过两个引脚与外 部芯片相连,这两个外部引脚 TX 和 RX 分别与引脚 PC0 和 PC1 共享。
V
D D
P C 0 / T X
V
D D
P C 1 / R X
45
I/O 型单片机使用手册
编程注意事项
在使用者的程序中,最先要考虑的是端口的初始化。复位之后,所有的输入/ 输出数据及端口控制寄存器都将被设为逻辑高。意思是说所有输入/输出引脚 默认为输入状态,而其电平则取决于其它相连接电路以及是否选择了上拉选 项。假如 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 口的一个或多个引脚 都可被设定有这项功能。
46
定时/计数器
定时/计数器在任何单片机中都是一个很重要的部分,提供程序设计者一种实 现和时间有关功能的方法。在 I/O 型单片机中,通常包含一个或两个 8 16 位的向上计数器,这取决于选用哪款单片机。每个定时/计数器有三种不同的 工作模式,可以被当作一个普通定时器、外部的事件计数器、或者脉冲宽度测 量器使用。在 8 位定时器里 8 级预分频器(Prescaler)也加大了定时器的范围。
有两个和定时/计数器相关的寄存器。其中,一个寄存器是存储实际的计数值, 赋值给此寄存器可以设定初始值,读取此寄存器可获得定时/计数器的内容。 另一个寄存器是定时/计数器的控制寄存器,此寄存器设置定时/计数器的选项, 控制定时/计数器的使用。定时/计数器的时钟源可来自内部时钟源或在外部定 时器引脚,下列附表列举了对应定时/计数器寄存器的名称。
第一章 硬件架构
HT48R10A-1
HT48C10-1
8 位定时/计数器个数 1 1 1 0 1
定时/计数器寄存器名称 TMR TMR TMR0 TMR2 定时/计数器控制寄存器 TMRC TMRC TMR0C TMR2C
16 位定时/计数器个数 0 0 1 2 2
定时/计数器寄存器名称 - TMR1L/TMR1H
定时/计数器控制寄存器 TMR1C TMR0C/ TMR1C TMR0C/ TMR1C
HT48R30A-1
HT48C30-1
HT48R50A-1
HT48C50-1
HT48R70A-1
HT48C70-1
TMR0L/TMR0H
TMR1L/TMR1H
HT48RU80
HT48CU80
TMR0L/TMR0H
TMR1L/TMR1H
定时/计数器在事件计数模式下使用外部时钟源,而时钟源从外部计数器的引 脚输入,即 TMRTMR0、TMR1 或 TMR2,这取决于选用哪种型号的单片机。 这些外部引脚可能与其它输入/输出引脚共用。每当外部定时/计数器输入引脚 由高电平到低电平或者由低电平到高电平(由 TET0ET1E 或者 T2E 位决 定)进行转换时,将使得计数器值增加一。
47
I/O 型单片机使用手册
配置定时/计数器输入时钟源
内部定时/计数器的时钟源可以来自系统时钟或外部时钟源。当定时/计数器在 定时器模式或者在脉冲宽度测量模式时,使用系统时钟作为时钟源。内部定时 器时钟来源也经过一个预分频器(Prescaler),根据被选择的定时器和器件,预 分频值由 PSC2~PSC0T0PSC2~T0PSC0 T2PSC2~T2PSC0 三位决定。
定时/计数器在事件计数模式时使用外部时钟源,而时钟源是由外部定时/计数 器引脚 TMRTMR0、TMR1 或 TMR2 来提供,这取决于哪种型号的单片机及 哪一个定时/计数器被使用。每当外部引脚由高电平到低电平或者由低电平到 高电平(由 TET0ET1E T2E 位决定)进行转换时,将使得计数器值增 加一。
P r e l o a d R e g i s t e r
P S C 2 ~ P S C 0
R T C O s c i l l a t o r
f
S Y S
C o n f i g u r a t i o n
O p t i o n
8 - s t a g e p r e s c a l e r
T M R
( 1 / 2 ~ 1 / 2 5 6 )
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
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
B Z
B Z
8 位定时/计数器结构 HT48R10A-1/HT48C10-1 HT48R30A-1/HT48C30-1
D a t a B u s
R T C O s c i l l a t o r
f
S Y S
C o n f i g u r a t i o n
O p t i o n
T 0 P S C 2 ~ T 0 P S C 0
8 - s t a g e p r e s c a l e r
T M R 0
T 0 E
( 1 / 2 ~ 1 / 2 5 6 )
T 0 M 1 T 0 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 0 O N
8 - B i t T i m e r / E v e n t C o u n t e r
P r e l o a d R e g i s t e r
T i m e r / E v e n t
C o u n t 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
B Z
B Z
8 位定时/计数器结构 HT48R50A-1/HT48C50-1
48
第一章 硬件架构
D a t a B u s
R T C O s c i l l a t o r
T M R 0 I n p u t
16 位定时/计数器 0 结构 HT48R70A-1/HT48C70-1 HT48RU80/HT48CU80
f
S Y S / 4
C o n f i g u r a t i o n
O p t i o n
T 0 E
T 0 M 1 T 0 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
H i g h B y t e
T 0 O N
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
B u f f e r
L o w B y t e
B u f f e r
1 6 - B i t
P r e l o a d R e g i s t e r
L o w B y t e
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
B Z
B Z
R T C O s c i l l a t o r
R T C O s c i l l a t o r
f
S Y S
f
T M R 1
S Y S / 4
C o n f i g u r a t i o n
O p t i o n
T 1 E
T 1 M 1 T 1 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
P r e l o a d R e g i s t e r
H i g h B y t e
T 1 O N
1 6 - B i t T i m e r / E v e n t C o u n t e r
1 6 - B i t
L o w B y t e
N o t e : N o b u z z e r o u t p u t o n
R e l o a d
¸
2
H T 4 8 R 5 0 A - 1 / H T 4 8 C 5 0 - 1 a n d H T 4 8 R 7 0 A - 1 / H T 4 8 C 7 0 - 1
16 位定时/计数器 1 结构 HT48R50A-1/HT48C50-1,HT48R70A-1/HT48C70-1
HT48RU80/HT48CU80
P r e l o a d R e g i s t e r
T 2 M 1 T 2 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
8 - B i t T i m e r / E v e n t C o u n t e r
T 2 O N
T i m e r / E v e n t
C o u n t e r
C o n f i g u r a t i o n
O p t i o n
T 2 P S C 2 ~ T 2 P S C 0
8 - s t a g e P r e s c a l e r
T M R 2
( 1 / 2 ~ 1 / 2 5 6 )
T 2 E
8 位定时/计数器 2 结构 HT48RU80/HT48CU80
O v e r f l o w t o I n t e r r u p t
B Z
B Z
D a t a B u s
R e l o a d
O v e r f l o w t o I n t e r r u p t
49
I/O 型单片机使用手册
定时/计数寄存器 – TMR, TMR0, TMR0L/TMR0H, TMR1L/TMR1H
TMR2
定时/计数器寄存器是位于专用数据存储器内的特殊功能寄存器,储存实际的 定时器值。对 8 位定时/计数器来说,这个寄存器是 HT48R10A-1/HT48C10-1HT48R30A-1/HT48C30-1 中的 TMR HT48R50A-1/HT48C50-1 中的 TMR0HT48RU80/HT48CU80 中的 TMR2。对于 16 位定时/计数器,需要用两个 8 位寄存器来储存 16 位定时/ 计数器的值,这些成对的寄存器即为 TMR0L/TMR0H TMR1L/ TMR1H。当用作内部定时器模式时收到一个内部 计时脉冲时,或用作外部计数模式时外部定时/计数器引脚发生电平转换时, 定时/计数寄存器的值将会加一。定时器从预置寄存器所载入的值开始向上计 数,直到 8 位定时/计数器计到 FFH,或 16 位定时/计数器计到 FFFFH,此时 定时器发生溢出且会产生一个内部中断信号。定时器的值随后被预置寄存器的 值重设,定时/计数器继续计数。注意当预置寄存器被清为零,就可以得到 8 位定时/计数器 FFH 16 位定时/计数器 FFFFH 的最大计算范围。此时要注意 的是,上电后预置寄存器中的数值处于未知状态。定时/计数器在 OFF 条件下, 如果把数据写入预置寄存器,这数据将被立即写入实际的定时器。然而如果定 时/计数器已经被打开且正在计数,在这个周期内写入到预置寄存器的任何新 数据将被保留在预置寄存器中,等到下一个溢出发生时才会被写入实际的定时 器。当定时/计数寄存器被读取时,定时器计时时钟会停止以避免错误,然而 这可能造成某些时序的错误,因此程序设计者必须考虑到这点。
对于 16 位内部定时/计数器,它有低字节与高字节两个定时/计数寄存器,访问 这些寄存器需要以指定方式进行。必须要注意的是当使用指令载入数据到低字 节寄存器,即 TMR0L TMR1L 时,数据只被载入到低字节缓冲器而不是直 接送到低字节寄存器。当数据写入相应高字节寄存器,即 TMR0H TMR1H 时,低字节缓冲器中的数据才真正被写入低字节寄存器。换句话说,写入数据 到高字节定时/计数寄存器时,数据会被直接写入到高字节寄存器。同时在低 字节缓冲器里的数据将被写入相应低字节寄存器。所以当载入数据到 16 位定 时/计数寄存器时,低字节数据应该先写入。另外要注意的是读取低字节寄存 器的内容时,必须先读取高字节寄存器的内容,相应低字节寄存器中的内容就 会载入低字节缓冲器中并被锁存。在此动作执行之后,低字节寄存器中的内容 可使用一般的方式读取。请注意,读取定时/计数器低字节寄存器实际是读取 先前锁存在低字节缓冲器中的内容,而非定时/计数器低字节寄存器的实际内 容。
50
第一章 硬件架构
定时/计数控制寄存器 – TMRC,TMR0C,TMR1C,TMR2C
定时/计数器能工作在三种不同的模式,至于选择工作在哪一种模式则是由各 自的控制寄存器的内容决定。对于只有一个定时/计数器的单片机而言,定时/ 计数控制寄存器即 TMRC,而对于有两个或三个定时/计数器的单片机而言, 定时/计数控制寄存器为 TMR0CTMR1C TMR2C。定时/计数器寄存器和 定时/计数控制寄存器控制计时/事件计数器的全部操作。在定时器使用之前必 须先正确地设定定时/计数控制寄存器,以便保证定时器能正确操作,而这个 过程通常在程序初始化期间完成。
b 7
T 0 ET 0 O NT 0 M 0T 0 M 1
T 0 P S C 2
T 0 P S C 1 T 0 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 0 C H T 4 8 R 5 0 A - 1 / H T 4 8 C 5 0 - 1
T i m e r p r e s c a l e r r a t e s e l e c t T 0 P S C 2
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 0 M 1
T 0 P S C 1 0 0 0 0 1 1 1 1
T 0 M 0
0
0
0
1
1
0
1
1
T 0 P S C 0 0 0 1 1 0 0 1 1
n o m o d e a v a i l a b l e e v e n t c o u n t e r m o d e t i m e r m o d e 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
0 1 0 1 0 1 0 1
T i m e r R a t e 1 : 2 1 : 4 1 : 8 1 : 1 6 1 : 3 2 1 : 6 4 1 : 1 2 8 1 : 2 5 6
51
I/O 型单片机使用手册
b 7
T 0 ET 0 O NT 0 M 0T 0 M 1
b 7
T 1 ET 1 O NT 1 M 0T 1 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 0 C H T 4 8 R 7 0 A - 1 / H T 4 8 C 7 0 - 1 H T 4 8 R U 8 0 / H T 4 8 C U 8 0
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 0 M 1
T 0 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 1
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
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
b 0
T M R 1 C H T 4 8 R 5 0 A - 1 / H T 4 8 C 5 0 - 1 H T 4 8 R 7 0 A - 1 / H T 4 8 C 7 0 - 1 H T 4 8 R U 8 0 / H T 4 8 C U 8 0
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 1 M 0
T 1 M 1
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
52
第一章 硬件架构
b 7
T 2 ET 2 O NT 2 M 0T 2 M 1
T 2 P S C 2 T 2 P S C 1 T 2 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 2 C H T 4 8 R U 8 0 / H T 4 8 C U 8 0
T i m e r p r e s c a l e r r a t e s e l e c t T 2 P S C 2
T 2 P S C 1 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 2 M 1 T 2 M 0 0 0 n o m o d e a v a i l a b l e 0 1 e v e n t c o u n t e r m o d e 1 0 t i m e r m o d e 1 1 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
T 2 P S C 0 0 0 1 1 0 0 1 1
0 1 0 1 0 1 0 1
T i m e r R a t e 1 : 2 1 : 4 1 : 8 1 : 1 6 1 : 3 2 1 : 6 4 1 : 1 2 8 1 : 2 5 6
b 7
P S C 2
T ET O NT M 0T M 1
b 0
P S C 1 P S C 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 H T 4 8 R 1 0 A - 1 / H T 4 8 C 1 0 - 1
H T 4 8 R 3 0 A - 1 / H T 4 8 C 3 0 - 1
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 1 0 1 0 1 0 1
T i m e r R a t e 1 : 2 1 : 4 1 : 8 1 : 1 6 1 : 3 2 1 : 6 4 1 : 1 2 8 1 : 2 5 6
0 0 1 1 0 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 1
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
53
I/O 型单片机使用手册
定时器工作模式有三种,定时器模式,事件计数模式和脉冲宽度测量模式。为 了确定定时器工作在哪一种模式,TMRC 寄存器的第 7 位和第 6 位必须设定到 要求的逻辑电平。这些位相应的被称为 TM1/TM0T0M1/T0M0,T1M1/T0M0 或者 T2M1/T2M1。定时器打开位 TONT0ONT1ON 或者 T2ON,即定时/ 计数控制寄存器的第 4 位,是定时器控制的开关,设定逻辑高时定时器开始计 数,而清零时则定时器停止计数。对 8 位定时/计数器而言,定时/计数控制寄 存器的位 0~2 决定输入定时预分频器(Prescaler)中的分频比例。如果使用外部 计时源,预分频器(Prescaler)将不作用。如果定时器工作在事件计数或脉冲宽 度测量模式,TET0E,T1E 或者 T2E 的逻辑电平即定时器控制寄存器的第 3 位将可用来选择上升或下降沿触发。 HT48R50A-1/HT48C50-1 和 HT48R70A-1/HT48C70-1 具有两个内部定时/计数器 TMR0 和 TMR1,因此额外再需要一个定时/计数控制寄存器 TMR1C。另外 HT48RU80/HT48CU80 还有一个 8 位的定时器,对应的控制寄存器为 TMR2C。
定时器模式
在这个模式,定时/计数器可以用来测量固定时间间距,当定时器发生溢出时, 就会提供一个内部中断信号。要工作在这个模式,位 TM1/TM0T0M1/T0M0 、 T1M1/T1M0 或者 T2M1/T2M0 必须分别设为 1 0。在这个模式,内部时钟 源被用来当定时器的计时源。对 8 位定时/计数器而言,对于
HT48R10A-1/HT48C10-1 HT48R30A-1/HT48C30-1 称为 TMR,对于 HT48R50A-1/HT48C50-1 称为 TMR0, HT48RU80/HT48CU80 称为 TMR2,定 /计数器的输入计时频率是 f
SYS
f 预分频器的值是由相应的 TMRC 寄存器的 PSC0 ~PSC2T0PSC0 ~T0PSC2、 或者 T2PSC0 ~T2PSC2 位来决定。对 16 位定时/计数器而言,定时/计数器的输 入计时频率是 f
SYS
/4 或 f
16 位的定时器没有预分频器(Prescaler)功能。定
RTC
时器打开位 TONT0ONT1ON 或者 T2ON 必须被设为逻辑高才能让定时器 开始工作。每次内部时钟由高到低的电平转换都会使定时器值增加一;当定时 器已满即溢出时,会产生中断信号且定时器会重新载入已经载入到预置寄存器 的值,然后继续向上计数。定时器溢出是中断的一种,也是唤醒暂停模式的一 种方法,然而,内部中断也可以被屏蔽,方法是将相关中断寄存器的 ETIE0TI 或者 E1TI 置零。
除以定时器预分频器(Prescaler)的值,
RTC
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
I n c r e m e n t
T i m e r C o n t r o l l e r
54
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
第一章 硬件架构
事件计数器模式
在这个模式,发生在外部引脚的外部逻辑事件改变的数目,可以通过内部定时 /计数器来记录。为使定时/计数器工作于事件计数模式,位 TM1/TM0, T0M1/T0M0,T1M1/T1M0 或者 T2M1/T2M0 必须分别设为 0 和 1。定时器打开位 TON,T0ON,T10N 或者 T20N 必须设为逻辑高,令定时器开始计数。当 TE,T0E, T1E 或者 T2E 为逻辑低时,每次外部定时/计数器引脚接收到由低到高电平的 转换将使计数器加一。而当 TE,T0E,T1E 或者 T2E 为逻辑高时,每次外部定 时/计数器引脚接收到由高到低电平的转换将使计数器加一。与另外两个模式 一样,当计数器计满时,将会发生溢出且产生一个内部中断信号,同时定时/ 计数器重新载入一个已经载入到预置寄存器的值。如果外部计数输入与其它 I/O 共用引脚,为确保事件计数模式正常工作,除了 TM1/TM0,T0M1/T0M0, T1M1/T1M0 或者 T2M1/T2M0 位需设定在事件计数模式,还需通过输入/输出端 口控制寄存器将该 I/O 设定在输入模式。计数器溢出是中断的一种,也是唤醒 暂停模式的一种方法。应当注意的是,定时器的溢出是中断的一种,也是唤醒 暂停模式的一种。
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
脉冲宽度测量模式
在这个模式,可以测量外部定时/计数器引脚的外部脉冲宽度。在脉冲宽度测 量模式中,定时/计数器时钟源由内部时钟提供,而位 TM1/TM0T0M1/T0M0 , T1M1/T1M0 或者 T2M1/T2M0 则必须都设为逻辑高。如果 TET0ET1E 或 者 T2E 位是逻辑低,当外部定时/计数器引脚接收到一个由高到低电平的转换 时,定时/计数器将开始计数直到外部定时/计数器引脚回到它原来的高电平, 此时 TONT0ON,T1ON 或者 T2ON 位将自动清除为零且定时/计数器将停止 计数。而如果 TET0ET1E 或者 T2E 位是逻辑高,则当外部定时/计数器引 脚接收到一个由低到高电平的转换时,定时/计数器开始计数直到外部定时/计 数器引脚回到原来的低电平。如上所述,TONT0ONT1ON 或者 T2ON 位 将自动清除为零,且定时/计数器停止计数。请注意,在脉冲宽度测量模式中, TONT0ON,T1ON 或者 T2ON 位将自动地清除为零且定时/计数器会停止计 数,而在其他两种模式下,TONT0ONT1ON 或者 T2ON 位要在程序控制 下才会被清除为零。这时定时/计数器中的剩下的值被程序读取,可以由此得 知外部计数引脚接收到的脉冲的长度。当 TONT0ONT1ON 或者 T2ON
55
I/O 型单片机使用手册
被清零时,任何在外部定时/计数器引脚的进一步转换将被忽略,而直到 TONT0ONT1ON 或者 T2ON 位再次被程序设定为逻辑高,定时/计数器才又开始 脉冲宽度测量。利用这种方法可以轻松完成单一脉冲测量。要注意的是在这种 模式下,定时/计数器是通过外部定时/计数器引脚上的逻辑转换来控制,而不 是通过逻辑电平。与另外两个模式一样,当定时/计数器已满,将溢出且产生 一个内部中断信号,定时/计数器也将清零并载入预置寄存器的值。如果外部 计数输入与其他 I/O 共用引脚,为确保脉冲宽度测量模式正常工作,要注意两 点。第一点是要将 TM1/TM0T0M1/T0M0T1M1/T1M0 或者 T2M1/T2M0 位设定在脉冲宽度测量模式,第二点是确定此引脚的输入/输出口控制寄存器 对应位被设定为输入状态。这种定时器溢出是中断的一种,也是唤醒暂停模式 的一种方法。
E x t e r n a l T i m e r
P i n I n p u t
T O N , T 0 O N , T 1 O N o r T 2 O N
( w i t h T E , T 0 E , T 1 E o r T 2 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
I n c r e m e n t
T i m e r C o u n t e r
S Y S
)
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
可编程分频器(PFD)和蜂鸣器的应用
与可编程分频器的作用相似,单片机中蜂鸣器的功能在于能提供可变频率输 出,以适用于像压电蜂鸣器驱动、或其它需要精确频率输出的场合。
BZ
BZ 是一对和输入/输出引脚 PB0 与 PB1 共用的蜂鸣器输出。可通过掩膜
选项选择单一 BZ 输出或是 BZ 和BZ输出。如果不选择为蜂鸣器输出,其功 能即如正常的输入/输出引脚。要注意的是 者配合可以产生更强的输出功率驱动蜂鸣器等器件。蜂鸣器电路使用定时器溢 出信号作为其时钟源。载入合适的值到定时器预分频器(Prescaler),可以产生 需要的时钟源分频比例,由此来控制输出的频率。系统时钟被预分频器 (Prescaler)分频后的时钟源,进入定时器计时,定时器从预置寄存器的值开始 往上计算,直到计数值满并产生溢出信号,并改变 BZ/ 将自动地重新载入预置寄存器的值,并继续往上计数。具体设置和运作细节可 参考定时/ 计数器章节。对于 HT48R50A-1/HT48C50-1
HT48RU80/HT48CU80,定时/计数器 0 和定时/计数器 1 都可以成为蜂鸣器的
56
引脚是 BZ 引脚的反向输出,两
BZ
输出状态。定时器
BZ
第一章 硬件架构
时钟源,对于 HT48R70A-1/HT48C70-1,只有定时/计数器 0 可以成为蜂鸣器的 时钟源。 若要蜂鸣器正确工作,必须将 PB 口控制寄存器 PBC.0 PBC.1 设置为输出。 若将它设置为输入,则蜂鸣器输出将不会动作,只能当作一般输入引脚。BZ
只有在对 PB.0 设为“1”才会有蜂鸣器输出。这个输出数据位被用来作
BZ
BZ/ 注意,PB1 BZ/
I n t e r n a l C l o c k S o u r c e
输出的开关控制。注意,PB0 为“ 0”的话,BZ/BZ输出都为低电平。
BZ
输出控制不起作用。
BZ
P A 0 D a t a
B Z O u t p u t a t P A 0
P A 1 D a t a
B Z O u t p u t a t P A 1
PFD 输出控制
假如系统时钟使用晶体振荡器,则使用这种频率产生的方法可以产生非常精确 的频率值。
预分频器(Prescaler)
HT48R10A-1/HT48C10-1 和 HT48R30A-1/HT48C30-1 中的 TMR, HT48R50A-1 /HT48C50-1 中的 TMR0 和 HT48RU80/HT48CU80 中的 TMR2 都具有预分频器 (Prescaler)。相应定时/计数器控制寄存器的第 0 位~第 2 位(PSC0~PSC2、 T0PSC0~T0PSC2 或者 T2PSC0~T2PSC2)可以用来定义定时/计数器中内部时钟源 的预分频级数。定时/计数器溢出信号可用来驱动 PFD 或产生定时器中断。
输入/输出接口
当运行在事件计数器或脉冲宽度测量模式时,定时/计数器需要使用外部定时/ 计数器引脚以确保正确的动作。外部定时/计数器引脚是否和其它输入/输出引 脚共用的,取决于选用哪种型号的单片机。可以选择上拉电阻来连接定时器输 入引脚。定时器也可设定驱动引脚共用的蜂鸣器。当通过掩膜选项选择蜂鸣器 引脚时,定时器可以根据定时/计数寄存器的内容,以不同的频率来驱动蜂鸣 器。
57
I/O 型单片机使用手册
编程注意事项
当定时/计数器运行在定时器模式时,定时器的时钟源是使用内部系统时钟或 RTC ,与单片机所有运算都能同步。在这个模式下,当定时器寄存器溢出时, 单片机将产生一个内部中断信号,使程序进入相应的内部中断向量。对于脉冲 宽度测量模式,计数器的时钟源也是使用内部系统时钟或 RTC,但定时器只有 在正确的逻辑条件出现在外部定时/计数器输入引脚时才执行动作。当这个外 部事件没有和内部定时器时钟同步时,只有当下一个定时器时钟到达时,单片 机才会看到这个外部事件,因此在测量值上可能有小的差异,需要程序设计者 在程序应用时加以注意。同样的情况发生在定时器配置为外部事件计数模式 时,它的时钟来源是外部事件,和内部系统时钟或者定时器时钟不同步。
定时/计数器应用范例
下面的应用范例是基于 HT48R50A-1/HT48C50-1 而言的,它有 8 位和 16 位两个 内部定时器,其它单片机也有相似的操作。这个例子说明了如何设置定时/计 数器的寄存器,如何设置中断。需要注意的是,对于 16 位定时/计数器,因为 16 位数据在高位加载时才会写到定时/计数器的寄存器中,所以低字节必须先 写入。另外还需注意的是,怎样通过寄存器的第 4 位来启停定时/计数器。此 应用范例设置定时/计数为定时模式,时钟来源于内部的系统时钟。定时/计数 器的时钟源由掩模选项设置。
include ht48r50A-1.inc
jmp begin
:
: org 04h ; external interrupt vectors reti org 08h ; timer-counter 0 interrupt vector jmp tmr0int ; jump here when timer 0 overflows org 0ch ; timer-counter 1 interrupt vector
jmp tmr1int ; jump here when timer 1 overflows
:
:
org 20h ; main program
:
:
;internal timer 0 interrupt routine
tmr0int:
:
; timer 0 main program placed here
:
reti
:
58
第一章 硬件架构
; internal timer 1 interrupt routine tmr1int:
:
; timer 1 main program placed here
:
reti
:
: begin: ; setup timer 0 registers
mov a,09bh ; setup timer 0 preload value mov tmr0,a mov a,081h ; setup timer 0 control register mov tmr0c,a ; timer mode and prescaler set to /4
; setup timer 1 registers
clr tmr11 ; clear both low and high bytes to give
; maximum count clr tmr1h mov a,080h ; setup timer 1 control register mov tmr1c,a ; timer 1 has no prescaler
; setup interrupt register
mov a,00dh ; enable master interrupt and both timer
; interrupts mov intc,a
: set tmr0c.4 ; start timer 0 set tmr1c.4 ; start timer 1
:
59
I/O 型单片机使用手册
中断
输入/输出系列单片机提供外部中断和内部定时/计数器中断两种功能。外部中 断由一个或两个管脚状态控制,所有的这一系列单片机都是如此。内部中断由 定时/计数器控制,HT48RU80/HT48CU80 则是由附加的 UART 功能控制。有 一个或两个中断控制寄存器,包含了中断打开/关闭的中断控制位和中断请求 标志位。
中断寄存器
HT48RU80/HT48CU80 有两个中断控制寄存器(INTC0 和 INTC1),其它型号的单
片机只有一个中断控制器(INTC)。 一旦中断子程序被响应,所有其它的中断将被屏蔽(通过清零 EMI 位),这个方 式可以预防任何进一步的中断相互嵌套。其它的中断请求可能发生在这个期 间,但只有中断请求标志位会被记录,但不会立即响应此中断。如果某个中断 服务子程序正在执行,此时有另一个中断要求响应,EMI 位和 INTC 相关的位 可以被置位,以允许此中断响应。如果堆栈已满,即使此中断已经被允许,中 断请求也不会响应,直到 SP 减少为止。如果要求立刻响应,堆栈必须避免成 为储满状态。
b 7 b 0
E T I E E I E M IE I F T F
I N T C R e g i s t e r H T 4 8 R 1 0 A - 1 / H T 4 8 C 1 0 - 1 H T 4 8 R 3 0 A - 1 / H T 4 8 C 3 0 - 1
60
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
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
N o t i m p l e m e n t e d , r e a d a s " 0 "
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
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
N o t i m p l e m e n t e d , r e a d a s " 0 "
第一章 硬件架构
b 7 b 0
T 1 F
b 7 b 0
T 1 F
E T 1 I
E T 1 I
E T 0 I E E I E M IE I F T 0 F
E T 0 I E E I 0 E M IE I F 0 T 0 F
I N T C R e g i s t e r H T 4 8 R 5 0 A - 1 / H T 4 8 C 5 0 - 1 H T 4 8 R 7 0 A - 1 / H T 4 8 C 7 0 - 1
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 s o u r c e e n 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
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 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 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 "
I N T C 0 R e g i s t e r H T 4 8 R U 8 0 / H T 4 8 C U 8 0
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 0 s o u r c e e n a b l e 1 : e n a b l e 0 : d i s a b l e
61
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 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 0 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 1 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 "
I/O 型单片机使用手册
b 7 b 0
T 2 F
E T 2 I E U R I E E I 1E I F 1 U R F
I N T C 1 R e g i s t e r H T 4 8 R U 8 0 / H T 4 8 C U 8 0
E x t e r n a l i n t e r r u p t 1 s o u r c e e n a b l e 1 : e n a b l e 0 : d i s a b l e
U A R T T X o r R X 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 2 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 "
E x t e r n a l i n t e r r u p t 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
U A R T 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
T i m e r / E v e n t C o u n t e r 2 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 "
单片机中所有中断都有唤醒暂停模式的能力。当一个中断被响应时,首先将程 序计数器的值压入堆栈,并跳转到程序存储器中指定的子程序地址。要注意的 是只有程序计数器的值会被压入堆栈,假如累加器、状态寄存器(STATUS) 或其他寄存器的内容被中断服务程序改变,可能会破坏原先想要的控制顺序, 因此这内容应该预先加已储存。
不同中断的允许位、请求标志、优先级如下图所示。
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
I n t e r r u p t R e q u e s t F l a g T F
中断示意图 — HT48R10A-1/HT48C10-1 HT48R30A-1/HT48C30-1
62
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 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
第一章 硬件架构
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
中断示意图 — HT48R50A-1/HT48C50-1 HT48R70A-1/HT48C70-1
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 0 R e q u e s t F l a g E I F 0
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
E x t e r n a l I n t e r r u p t 1
R e q u e s t F l a g E I F 1
I n t e r r u p t R e q u e s t F l a g U R F
U A R T
T i m e r / E v e n t C o u n t e r 2
I n t e r r u p t R e q u e s t F l a g T 2 F
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
P r i o r i t y
E E I
E M I
H i g h
E T 0 I
E T 1 I
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 0
E T 0 I
E T 1 I
E E I 1
E U R I
E T 2 I
E M I
L o w
中断示意图 — HT48RU80/HT48CU80
I n t e r r u p t
P o l l i n g
P r i o r i t y
H i g h
I n t e r r u p t
P o l l i n g
L o w
中断优先权
当中断是发生在两个连续的 T2 脉冲上升沿之间时,如果相应的中断请求被允 许,中断将在后一个 T2 脉冲响应。下面的表格指出在同时提出请求的情况下 所提供的优先权。
63
I/O 型单片机使用手册
HT48R10A-1
中断源
外部中断 0
定时/计数器中断 或定时/计数器 0 中断
定时/计数器 1 中断
外部中断 1
UART 中断
定时/计数器 2 中断
注意: 1. HT48R10A-1/HT48C10-1 HT48R30A-1/HT48C30-1 只有一个定时/ 计数器,
HT48R70A-1/HT48C70-1 HT48R50A-1/HT48C50-1,它们拥有两个定时/计数器。
HT48RU80/HT48CU80 有三个定时/计数器。
2.只有 HT48RU80/HT48CU80 有一个 UART 中断。
HT48C10-1
优先权
1 1 1 1 1
2 2 2 2 2
N/A N/A 3 3 3
N/A N/A N/A N/A 4
N/A N/A N/A N/A 5
N/A N/A N/A N/A 6
HT48R30A-1
HT48C30-1
优先权
HT48R50A-1
HT48C50-1
优先权
HT48R70A-1
HT48C70-1
优先权
HT48RU80 HT48CU80
优先权
当外部和内部两个中断同时被允许,且外部和内部中断同时发生的情况下,外 部中断将拥有优先权首先动作。使用 INTC 寄存器或者 INTC0 INTC1 寄存 器来做个别中断的屏蔽可以预防同时发生的情形。
外部中断
要使外部中断发生,相应的外部中断允许标志位必须被置位。除了 HT48RU80/HT48CU80,其他型号的单片机都是一个单独的外部中断引脚,使 能位就是 INTC 寄存器的第 1 位,即 EEIHT48RU80/HT48CU80 有两个外部 中断引脚
管脚
的使能位是 INTC0 寄存器的第 1 位,称为 EEI0,管脚
INT0
的使能位是 INTC1 寄存器的第 0 位,称为 EEI1。外部中断是通过 由高到低的电平转换来触发,之后相应中断请求标志位被置位 HT48RU80/HT48CU80 有两个相应的中断请求标志,分别是 INTC0 的第 4 位, 称为 EIF0,以及 INTC1 的第 4 位,称为 EIF1。其他类型的单片机只有一个中 断请求标志,为 INTC 的第 4 位,称为 EIF。当总中断和外部中断都允许,堆 栈没有满,外部中断管脚出现一个下降沿,产生中断请求。进入中断服务程序 后,相应的中断请求标志位 EIFEIF0 或者 EIF1 将被清零,且 EMI 位将被清 零来屏蔽其它中断。
HT48R10A-1/HT48C10-1 的外部中断 HT48R30A-1/HT48C30-1 HT48R50A-1/HT48C50-1 的外部中断 共用管脚。请注意,外部中断管脚必须被设置为输入,保证正确的操作。
64
INT
PC0 共用管脚。
INT
INT
INT1
端口上
PG0
第一章 硬件架构
定时/计数器中断
要使定时器内部中断发生,相应的内部中断使能位必须先被设定。对于具有一 组定时器的单片机,中断使能位 ETI 为 INTC 寄存器的第 2 位。对于具有两组 定时器的单片机,定时器 0 的中断使能位 ET0I 为 INTC 的第 2 位,而定时器 1 的中断使能位 ET1I 为 INTC 的 第 3 位。对于具有三组定时器的 HT48RU80/HT48CU80,定时器 0 的中断使能位 ET0I 为 INTC0 寄存器的第 2 位, 定时器 1 的中断使能位 ET1I 为 INTC0 寄存器的第 3 位,而定时器 2 的中断使 能位 ET2I 为 INTC1 寄存器的第 2 位。当定时器溢出后,就会置位定时/计数器 中断请求标志位,产生定时/计数器中断。对于具有一组定时器的单片机,请 求标志位 TF 为 INTC 寄存器的第 5 位。对于具有两组定时器的单片机,定时器 0 的请求标志位 T0F 为 INTC0 寄存器的第 5 位,而定时器 1 的请求标志位 T1F 为 INTC1 寄存器的第 6 位。对于有三组定时器的 HT48RU80/HT48CU80,定时器 0 的请求标志位 T0F 为 INTC0 寄存器的第 5 位,定时器 1 的请求标志位 T1F 为 INTC0 寄存器的第 6 位,定时器 2 的请求标志位 T2F 为 INTC1 寄存器的第 6 位。
当主设备的中断使能位被置位、堆栈未满且对应的内部中断使能位被置位时, 一旦定时/计数器溢出,就会产生内部中断。对于具有一组定时器的单片机, 该中断将产生地址 08H 处的子程序调用。而对于具有两组定时器的单片机,由 定时器 0 产生的中断,调用地址 08H 处的子程序,而由定时器 1 产生的中断, 调用地址 0CH 处的子程序。对于具有三组定时器的 HT48RU80/HT48CU80,由定 时器 0 产生的中断,调用地址 08H 处子程序,由定时器 1 产生的中断,调用地 址 0CH 处子程序,而由定时器 2 产生的中断,调用地址 018H 处的子程序。当 内部中断被响应时,中断请求标志位 TF、T0F、T1F 或 T2F 会被复位且 EMI 位 会被清零以除能其它中断。
UART 中断
对于具有一个串行口的 HT48RU80/HT48CU80,要使 UART 中断发生,相应的内
部中断使能位 EURI 必须被置位,此位为 INTC1 的第一位。当 UART 产生暂停信
号时,就会置位中断请求标志 URF(即 INTC1 的第 5 位),产生 UART 中断。当
主中断使能位被置位,堆栈未满且相应的 UART 中断使能位 EURI 被置位时,一
旦 UART 产生请求,就会产生 UART 中断,将会调用地址 014H 处的子程序。当
UART 中断响应时,中断请求标志位 URF 会被复位且 EMI 位将被清零以除能其
它中断。
产生 UART 中断有多种情况,例如,发送接收数据、帧错误检测和自动地址检
测。这些状态反映在 UART 的状态寄存器 USR 中。UART 控制寄存器 UCR2 决定
是否产生中断信号。更多关于这两个寄存器的介绍可查阅 UART 相关章节。
65
I/O 型单片机使用手册
编程注意事项
中断请求标志位 TF、T0F、T1F、T2F、URF、EIF、EIF0 和 EIF1 与中断使能位 ETI、ET0I、ET1I、ET2I、EURI、EEI、EEI0 和 EEI1 共同形成数据存储器中的 中断控制寄存器 INTC,INTC0 和 INTC1。通过除能中断使能位,可以屏蔽中断 请求。然而,一旦中断请求标志位被设定,它们会被保留在 INTC、INTC0 和 INTC1 寄存器内,直到相应的中断服务子程序执行或被软件指令清除。
在中断子程序中建议不要使用“调用子程序”指令。中断通常发生在不可预期 的情况或需要立刻执行的某些应用。假如只剩下一层堆栈且没有控制好中断使 能,当“CALL”指令在中断子程序执行时,将破坏原来的控制序列。
66
第一章 硬件架构
复位和初始化
复位功能是任何单片机中基本的部分,使得单片机可以设定一些与外部参数无 关的先置条件。最重要的是单片机上电后,经短暂延迟,将处于预期的稳定状 态并且准备执行第一条程序语句。上电复位之后,在程序未开始执行前,部分 重要的内部寄存器将会被预先设定状态。程序计数器就是其中之一,它会被清 除为零,使得单片机从最低的程序存储器地址开始执行程序。
除了上电复位外,即使单片机处于执行状态,有些情况的发生也迫使单片机必 须复位。例如,当单片机上电执行程序后, 个例子是正常操作复位,单片机中只有一些寄存器受影响,而大部份寄存器则 是不受影响,以便复位引脚回复至高电平后,单片机仍可以正常工作。复位的 另一种形式是看门狗定时器溢出复位单片机,所有复位操作类型导致不同的寄 存器条件被加以设定。
另外一种复位以低电压复位即 LV R 的类型存在,在电源供应电压低于某一临 界值的情况下,一种和
引脚被强制拉下至低电平。这
RES
引脚复位类似的完全复位将会被执行。
RES
复位
包括内部与外部事件触发复位,单片机共有五种复位方式:
上电复位
这是最基本而不可避免的复位,发生在单片机上电后。除了保证程序存储器会 从起始地址开始执行,上电复位也使得其它寄存器被设定在预设条件,所有的 输入/输出端口和输入/输出端口控制寄存器在上电复位时将保持逻辑高,以确 保所有引脚被设为输入状态。
虽然单片机有一个内部 RC 复位功能,由于接通电源不稳定,还是推荐使用和
引脚连接的外部 RC 电路,RC 电路所造成的时间延迟使得
RES
RES
源供应稳定前的一段延长周期内保持在低电平。在这段时间内,单片机是不能 正常工作的。在经过延迟时间 t
RSTD
,而
引脚达到一电压值后,单片机才
RES
可恢复正常工作。下列图中 SST 是系统延时周期(System Start-up Timer)的缩写。
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
引脚在电
67
I/O 型单片机使用手册
引脚复位
RES
当单片机正常工作时,而
引脚通过外部硬件(如外部开关)被强迫拉至低电
RES
平时,此种复位形式即会发生。这种复位模式和其它复位的例子一样,程序计 数器会被清除为零且程序从头开始执行。
0 . 4 V
引脚复位时序图
RES
低电压复位-LVR
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
D D
0 . 9 V
D D
t
R S T D
单片机有低电压复位电路的目的是为了监看单片机的电源供应电压。例如更换 电池的情况下,单片机电源供应的电压可能会落在 0.9V~V
的范围内,则
LVR
LVR 将会自动地从内部复位单片机。LV R 包括下列规格:有效的 LV R 信号,
即在 0.9V~VLVR 将会忽略它且不会执行复位功能。
的低电压,必须存在超过 1ms。如果低电压存在不超过 1ms
LVR
L V R
t
S S T T i m e - o u t
R S T D
I n t e r n a l R e s e t
低电压复位时序图
正常工作时看门狗溢出复位 除了看门狗溢出标志位 TO 将被设为 1 之外,正常工作时看门狗溢出复位和
复位相同。
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
正常工作时看门狗溢出复位时序图
68
t
R S T D
第一章 硬件架构
暂停时看门狗溢出复位
暂停时看门狗溢出复位有些不同于其它种类的复位,除了程序计数器与堆栈指 针将被清除为 0 TO 标志位被设为 1 外,绝大部份的条件保持不变。图中 t 的细节请参考 A.C 特性。
SST
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 溢出复位
复位条件
在单片机上电复位之后,各功能单元初始化的情形,列于下表。
项 目 复位后情况 程序计数器 清除为零 中断 看门狗定时器 定时/计数器 预分频器 输入/输出口 堆栈指针 堆栈指针指向堆栈顶端
UART
所有中断被关闭
WDT
清零并重新计时 所有定时/计数器停止 定时/计数器之预分频器内容清零 所有 I/O 设为输入模式
关闭,TX RX 管脚设置为 PC0/PC1
UART
不同的复位以不同的方式影响单片机中的内部寄存器。为保证复位发生后程序 的正常执行,在特定的复位发生后,知道单片机内的条件是非常重要的。下表 是描述每一个复位类型如何影响单片机的内部寄存器。
69
I/O 型单片机使用手册
HT48R10A-1/HT48C10-1
寄存器
MP 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 STATUS INTC WDTS 0000 0111 0000 0111 0000 0111 uuuu uuuu TMR xxxx xxxx xxxx xxxx xxxx xxxx uuuu uuuu TMRC 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 PCC
复位
(上电时)
xxx xxxx
−−xx xxxx −−uu uuuu −−uu uuuu −−uu uuuu
−−00 xxxx −−uu uuuu −−1u uuuu −−11 uuuu
−−00 000 −−00 000 −−00 000 −−uu − uuu
0 1000 000 1000 000 1000 uu− u uuuu
00
−−−1 1111 −−−1 1111 −−−1 1111 −−−u uuuu
−−−1 1111 −−−1 1111 −−−1 1111 −−−u uuuu
LV R 复位
RES
uuu uuuu uuu uuuu − uuu uuuu
WDT 溢出复位
(一般运行时)
WDT 溢出复位 (HALT 暂停时)
“u”表示不变化 “x”表示不确定 “”表示不存在
70
第一章 硬件架构
HT48R30A-1/HT48C30-1
寄存器
MP 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 STATUS INTC WDTS 0000 0111 0000 0111 0000 0111 uuuu uuuu TMR xxxx xxxx xxxx xxxx xxxx xxxx uuuu uuuu TMRC 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 PCC PG PGC
复位
(上电时)
xxx xxxx
−−xx xxxx −−uu uuuu −−uu uuuu −−uu uuuu
−−00 xxxx −−uu uuuu −−1u uuuu −−11 uuuu
−−00 000 −−00 000 −−00 000 −−uu − uuu
0 1000 000 1000 000 1000 uu− u uuuu
00
−−11 1111 −−11 1111 −−11 1111 −−uu uuuu
−−11 1111 −−11 1111 −−11 1111 −−uu uuuu
−−−− − 111 −−−− − 111 −−−− − 111 −−−− − uuu
−−−− − 111 −−−− − 111 −−−− − 111 −−−− − uuu
LV R 复位
RES
uuu uuuu uuu uuuu − uuu uuuu
WDT 溢出复位
(一般运行时)
WDT 溢出复位 (HALT 暂停时)
“u”表示不变化 “x”表示不确定 “
”表示不存在
71
I/O 型单片机使用手册
HT48R50A-1/HT48C50-1
寄存器
MP0 MP1 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 STATUS INTC WDTS 0000 0111 0000 0111 0000 0111 uuuu uuuu TMR0 xxxx xxxx xxxx xxxx xxxx xxxx uuuu uuuu TMR0C TMR1H xxxx xxxx xxxx xxxx xxxx xxxx uuuu uuuu TMR1L xxxx xxxx xxxx xxxx xxxx xxxx uuuu uuuu TMR1C 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 1111 1111 1111 1111 1111 1111 uuuu uuuu PCC 1111 1111 1111 1111 1111 1111 uuuu uuuu PD 1111 1111 1111 1111 1111 1111 uuuu uuuu PDC 1111 1111 1111 1111 1111 1111 uuuu uuuu PG PGC
复位
(上电时)
xxxx xxxx xxxx xxxx
xxx xxxx uuu uuuu uuu uuuu − uuu uuuu
−−00 xxxx −−uu uuuu −−1u uuuu −−11 uuuu
000 0000 000 0000 000 0000 − uuu uuuu
0 1000 000 1000 000 1000 uu− u uuuu
00
0 1−−− 000 1−−− 000 1−−− uu− u u−−−
00
−−−− − 111 −−−− − 111 −−−− − 111 −−−− − uuu
−−−− − 111 −−−− − 111 −−−− − 111 −−−− − uuu
LV R 复位
RES
uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu
WDT 溢出复位
(一般运行时)
WDT 溢出复位 (HALT 暂停时)
“u”表示不变化 “x”表示不确定 “
”表示不存在
72
第一章 硬件架构
HT48R70A-1/HT48C70-1
寄存器
MP0 MP1 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 xxxx xxxx uuuu uuuu uuuu uuuu uuuu uuuu STATUS INTC WDTS 0000 0111 0000 0111 0000 0111 uuuu uuuu TMR0H xxxx xxxx xxxx xxxx xxxx xxxx uuuu uuuu TMR0L xxxx xxxx xxxx xxxx xxxx xxxx uuuu uuuu TMR0C TMR1H xxxx xxxx xxxx xxxx xxxx xxxx uuuu uuuu TMR1L xxxx xxxx xxxx xxxx xxxx xxxx uuuu uuuu TMR1C 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 1111 1111 1111 1111 1111 1111 uuuu uuuu PCC 1111 1111 1111 1111 1111 1111 uuuu uuuu PD 1111 1111 1111 1111 1111 1111 uuuu uuuu PDC 1111 1111 1111 1111 1111 1111 uuuu uuuu PE 1111 1111 1111 1111 1111 1111 uuuu uuuu PEC 1111 1111 1111 1111 1111 1111 uuuu uuuu PF 1111 1111 1111 1111 1111 1111 uuuu uuuu PFC 1111 1111 1111 1111 1111 1111 uuuu uuuu PG 1111 1111 1111 1111 1111 1111 uuuu uuuu PGC 1111 1111 1111 1111 1111 1111 uuuu uuuu
复位
(上电时)
xxxx xxxx xxxx xxxx
−−00 xxxx −−uu uuuu −−1u uuuu −−11 uuuu
000 0000 000 0000 000 0000 − uuu uuuu
0 1−−− 000 1−−− 000 1−−− uu− u u−−−
00
0 1−−− 000 1−−− 000 1−−− uu− u u−−−
00
LV R 复位
RES
uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu
WDT 溢出复位
(一般运行时)
WDT 溢出复位 (HALT 暂停时)
“u”表示不变化 “x”表示不确定 “
”表示不存在
73
I/O 型单片机使用手册
HT48RU80/HT48CU80
寄存器
MP0 MP1 ACC xxxx xxxx uuuu uuuu uuuu uuuu uuuu uuuu PCL 0000 0000 0000 0000 0000 0000 0000 0000
BP 0000 0000 0000 0000 0000 0000 uuuu uuuu TBLP xxxx xxxx uuuu uuuu uuuu uuuu uuuu uuuu
TBLH xxxx xxxx uuuu uuuu uuuu uuuu uuuu uuuu TBHP xxxx xxxx uuuu uuuu uuuu uuuu uuuu uuuu STATUS
INTC0 INTC1 WDTS 0000 0111 0000 0111 0000 0111 uuuu uuuu TMR0H xxxx xxxx xxxx xxxx xxxx xxxx uuuu uuuu TMR0L xxxx xxxx xxxx xxxx xxxx xxxx uuuu uuuu TMR0C TMR1H xxxx xxxx xxxx xxxx xxxx xxxx uuuu uuuu TMR1L xxxx xxxx xxxx xxxx xxxx xxxx uuuu uuuu TMR1C TMR2 xxxx xxxx xxxx xxxx xxxx xxxx uuuu uuuu TMR2C 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 1111 1111 1111 1111 1111 1111 uuuu uuuu PCC 1111 1111 1111 1111 1111 1111 uuuu uuuu PD 1111 1111 1111 1111 1111 1111 uuuu uuuu PDC 1111 1111 1111 1111 1111 1111 uuuu uuuu PE 1111 1111 1111 1111 1111 1111 uuuu uuuu PEC 1111 1111 1111 1111 1111 1111 uuuu uuuu PF 1111 1111 1111 1111 1111 1111 uuuu uuuu PFC 1111 1111 1111 1111 1111 1111 uuuu uuuu PG 1111 1111 1111 1111 1111 1111 uuuu uuuu PGC 1111 1111 1111 1111 1111 1111 uuuu uuuu USR 0000 1011 0000 1011 0000 1011 uuuu uuuu UCR1 0000 00x0 0000 00x0 0000 00x0 uuuu uuuu UCR2 0000 0000 0000 0000 0000 0000 uuuu uuuu TXR/RXR xxxx xxxx xxxx xxxx xxxx xxxx uuuu uuuu BRG xxxx xxxx xxxx xxxx xxxx xxxx uuuu uuuu
复位
(上电时)
xxxx xxxx xxxx xxxx
−−00 xxxx −−uu uuuu −−1u uuuu −−11 uuuu
000 0000 000 0000 000 0000 − uuu uuuu
000 000 000 000 000 000 − uuu − uuu
0 1−−− 000 1−−− 000 1−−− uu− u u−−−
00
0 1−−− 000 1−−− 000 1−−− uu− u u−−−
00
0 1000 000 1000 000 1000 uu− u uuuu
00
LV R 复位
RES
uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu uuuu
WDT 溢出复位
(一般运行时)
WDT 溢出复位 (HALT 暂停时)
“u”表示不变化 “x”表示不确定 “
”表示不存在
74
第一章 硬件架构
异步串行口——UART
此章节仅适用于 HT48RU80/HT48CU80。HT48RU80/HT48CU80 具有一个全双工的 串行口。这样可以很方便的与其它具有串行口的芯片通讯。UART 功能占用一 个内部中断向量,当接收到数据或数据发送结束,触发 UART 中断。
UART 特性
UART 具有的功能:
z 全双工异步传输 z 可选择 8 位或 9 位传输格式 z 可选择奇校验、偶校验或无校验 z 可选择 1 位或 2 位停止位 z 8 位预分频的波特率发生器 z 奇偶、帧、噪声和超越检测 z 支持中断和地址检测(最后一位=1) z 独立的发送和接收允许 z 两层 FIFO 接收缓冲器 z 发送和接收中断 z 下列条件可触发中断
— 发送完成
— 发送寄存器空闲 — 接收完成 — 过速错误 — 地址匹配
UART 外部引脚
UART 是通过 TX RX 引脚与外部芯片通讯。当 UCR2 寄存器的 TXEN 位清 零,UART 发送功能被禁止,则 TX 引脚可作为普通 IO 口使用。同样的,当 UCR2 寄存器的 RXEN 位清零,UART 接收功能被禁止,则 RX 引脚可作为普 通 IO 口使用。若 UARTENTXEN RXEN 置位,这些 IO 口将自动转换成相 应 TX 输出和 RX 输入并且禁止任何可能存在于 RX 脚的上拉电阻。
75
I/O 型单片机使用手册
数据发送
下图显示了 UART 的整体结构。需要发送的数据首先写入 TXR 寄存器,然后在 波特率发生器的控制下将寄存器中数据一位位地移到 TX 引脚上,低位在前。 只有 TXR 寄存器映像到单片机的数据存储器中,而发送移位寄存器没有实际地 址,所以对用户程序不可见。
数据在波特率发生器的控制下,低位在前高位在后,从外部引脚 RX 进入接收 移位寄存器。当数据接收完成,数据从接收移位寄存器移入可被用户程序操作 的 RXR 寄存器中。只有 RXR 寄存器映像到单片机数据存储器中,而接收移位寄 存器没有实际地址,所以对用户程序不可见。
需要注意的是,上文中提到的发送寄存器 TXR 和接收寄存器 RXR,其实是共享 一个地址的数据寄存器 TXR/RXR 寄存器。
T r a n s m i t t e r S h i f t R e g i s t e r
M S B L S B
T X R R e g i s t e r R X R R e g i s t e r
T X P i n
C L K C L K
R X P i n
B a u d R a t e G e n e r a t o r
M C U D a t a B u s
R e c e i v e r S h i f t R e g i s t e r
M S B L S B
B u f f e r
UART 发送器框图
UART 状态控制寄存器
有 5 个寄存器与 UART 功能相关。寄存器 USR、UCR1 和 UCR2 全面控制 UART, 而寄存器 BRG 控制波特率。发送和接收数据是通过寄存器 TXR/RXR 的。
Æ USR 寄存器
b 7
F E R R
R I D L EO E R RN FP E R R
R X I F T I D L E T X I F
b 0
U S R R e g i s t e r
T r a n s m i t d a t a r e g i s t e r e m p t y 1 : c h a r a c t e r t r a n s f e r r e d t o t r a n s m i t s h i f t r e g i s t e r 0 : c h a r a c t e r n o t t r a n s f e r r e d t o t r a n s m i t s h i f t r e g i s t e r
T r a n s m i s s i o n i d l e 1 : n o t r a n s m i s s i o n i n p r o g r e s s 0 : t r a n s m i s s i o n i n p r o g r e s s
R e c e i v e R X R r e g i s t e r s t a t u s 1 : R X R r e g i s t e r h a s a v a i l a b l e d a t a 0 : R X R r e g i s t e r i s e m p t y
R e c e i v e r s t a t u s 1 : r e c e i v e r i s i d l e 0 : d a t a b e i n g r e c e i v e d
O v e r r u n e r r o r 1 : o v e r r u n e r r o r d e t e c t e d 0 : n o o v e r r u n e r r o r d e t e c t e d
F r a m i n g e r r o r f l a g 1 : f r a m i n g e r r o r d e t e c t e d 0 : n o f r a m i n g e r r o r
N o i s e f l a g 1 : n o i s e d e t e c t e d 0 : n o n o i s e d e t e c t e d
P a r i t y e r r o r f l a g 1 : p a r i t y e r r o r d e t e c t e d 0 : n o p a r i t y e r r o r d e t e c t e d
76
第一章 硬件架构
寄存器 USR 是 UART 的状态寄存器,可以通过程序读取。所有 USR 位是只读的。 详细解释如下: z TXIF TXIF 是发送数据寄存器为空标志。若 TXIF=0,数据还没有从缓冲器加载到移 位寄存器中;若 TXIF=1,数据已从缓冲器中加载到移位寄存器中。读取 USR 寄存器再写 TXR 寄存器将清除 TXIF。当 TXEN 被置位,由于发送缓冲器未满, TXIF 也会被置位。 z TIDLE TIDLE 是数据发送完标志位。若 TIDLE=0,数据传输中。当 TXIF=1 且数据发送 完毕或者暂停字被发送时,TIDLE 置位。TIDLE=1,TX 引脚空闲。读取 USR 寄 存器再写 TXR 寄存器将清除 TIDLE 位。
z RXIF RXIF 是接收寄存器状态标志。当 RXIF=0,RXR 寄存器为空;当 RXIF=1,RXR 寄存器接收到新数据。当数据从移位寄存器中加载到 RXR 寄存器中,如果 UCR2 寄存器中的 RIE=1,则会触发中断。当接收数据时检测到一个或多个错误时, 相应的标志位 NF、FERR 或 PERR 会在同一周期内置位。读取 USR 寄存器再读 RXR 寄存器,如果 RXR 寄存器中没有新的数据,那么将清除 RXIF 标志。
z RIDLE
RIDLE 是接收状态标志。若 RIDLE=0,正在接收数据;若 RIDLE=1,接收器空 闲。在接收到停止位和下一个数据的起始位之间,RIDLE 被置位,表明 UART 空闲。
z OERR
OERR 是过速错误标志,表示接收缓冲器是否溢出。若 OERR=0,没有数据溢出; 若 OERR=1,发生了过速错误,它将影响下一组数据的接收。先读取 USR 寄存 器再读 RXR 寄存器将清除此标志位。
z FERR
FREE 是帧错误标志位。若 FREE=0,没有帧错误发生;若 FREE=1,当前的数据 发生了帧错误。任何复位都会清除该标志位,也可以先读取 USR 寄存器再读 RXR 寄存器来清除此位。
z NF
NF 是噪声干扰标志。若 NF=0,没有受到噪声干扰;若 NF=1,UART 接收数据时 受到噪声干扰。它与 RXIF 在同周期内置位,但不会与过速标志位同时置位。 先读取 USR 寄存器再读 RXR 寄存器将清除此标志位。
z PERR
PERR 是奇偶校验出错标志。若 PERR=0,奇偶校验正确;若 PERR=1,接收到的 数据奇偶校验出错。只有使能了奇偶校验此位才有效。任何复位都会清除该标 志位,也可以先读取 USR 寄存器再读 RXR 寄存器来清除此位。
77
I/O 型单片机使用手册
Æ UCR1 寄存器
UCR1 和 UCR2 是 UART 的两个控制寄存器,用来定义各种 UART 功能,例如 UART 的使能与除能、奇偶校验控制和传输数据的长度等等。
b 7
S T O P SP R TB N OU A R T E N
P R E N
T X B R K R X 8 T X 8
详细解释如下:
TX8
z
此位只有在传输数据为 9 位的格式中有效,用来存储发送数据的第 9 位。BNO 是用来控制传输位数是 8 位还是 9 位。
z RX8
此位只有在传输数据为 9 位的格式中有效,用来存储接收数据的第 9 位。BNO 是用来控制传输位数是 8 位还是 9 位。
z TXBRK
TXBRK 是暂停字发送控制位。TXBRK=0,没有暂停字要发送,TX 引脚正常操作; TXBRK=1,将会发送暂停字,发送器将发送逻辑 0。若 TXBRK 为高,缓冲器中 数据发送完毕后,发送器将至少保持 13 位宽的低电平直至 TXBRK 复位。
z STOP
此位用来设置停止位的长度。STOP=1,有两位停止位;STOP=0,只有一位停止 位。
z PRT
奇偶校验选择位。PRT=1,奇校验;PRT=0,偶校验。
z PREN
此位为奇偶校验使能位。PREN=1,使能奇偶校验;PREN=0,除能奇偶校验。
z BNO
BNO 是发送位数控制位。BNO=1,传输数据为 9 位;BNO=0,传输数据为 8 位。 若选择了 9 位数据传输格式,RX8 和 TX8 将分别存储接收和发送数据的第 9 位。
b 0
U C R 1 R e g i s t e r
T r a n s m i t d a t a b i t 8 ( w r i t e o n l y )
R e c e i v e d a t a b i t 8 ( r e a d o n l y )
T r a n s m i t b r e a k c h a r a c t e r 1 : t r a n s m i t b r e a k c h a r a c t e r s 0 : n o b r e a k c h a r a c t e r s
D e f i n e s t h e n u m b e r o f s t o p b i t s 1 : t w o s t o p b i t s 0 : o n e s t o p b i t
P a r i t y t y p e b i t 1 : o d d p a r i t y f o r p a r i t y g e n e r a t o r 0 : e v e n p a r i t y f o r p a r i t y g e n e r a t o r
P a r i t y e n a b l e b i t 1 : p a r i t y f u n c t i o n e n a b l e d 0 : p a r i t y f u n c t i o n d i s a b l e d
N u m b e r o f d a t a t r a n s f e r b i t s 1 : 9 - b i t d a t a t r a n s f e r 0 : 8 - b i t d a t a t r a n s f e r
U A R T e n a b l e b i t 1 : e n a b l e U A R T , T X & R X p i n s a s U A R T p i n s 0 : d i s a b l e U A R T , T X & R X p i n s a s I / O p o r t p i n s
78
第一章 硬件架构
z UARTEN
此位为 UART 的使能位。UARTEN=0,UART 除能,RX 和 TX 可用作普通的输入输 出口;UARTEN=1,UART 使能,TX 和 RX 将分别由 TXEN 和 RXEN 控制。当 UART 被除能将清除缓冲器,所有缓冲器中的数据将被忽略,另外波特率计数器、错 误和状态标志位被复位,TXEN、RXEN、TXBRK、RXIF、OERR、FERR 和 NF 清零 而 TIDLE、TXIF 和 RIDLE 置位,UCR1、UCR2 和 BRG 寄存器中的其它位保持不 变。若 UART 工作时 UARTEN 清零,所有发送和接收将停止,模块也将复位成上 述状态。当 UART 再次使能时,它将在上次配置下重新工作。
Æ UCR2 寄存器
UCR2 是 UART 的另一个控制寄存器,它的主要功能是使能或除能发送和接收允 许以及 UART 的各种中断源。它也可用来控制波特率,使能接收唤醒和地址侦 测。
b 7
B R G H
W A K EA D D E NR X E NT X E N
R I E T I I E T E I E
详细解释如下: z TEIE 此位为发送寄存器为空中断的使能或除能位。若 TEIE=1,当 TXIF 置位时,UART 的中断请求标志置位;若 TEIE=0,UART 中断请求标志不受 TXIF 的影响。 z TIIE 此位为发送器空闲中断的使能或除能位。若 TIIE=1,当 TIDLE 置位时,UART 的中断请求标志置位;若 TIIE=0,UART 中断请求标志不受 TIDLE 的影响。 z RIE 此位为接收中断使能或除能位。若 RIE=1,当 OERR 或 RXIF 置位时,UART 的中 断请求标志置位;若 RIE=0,UART 中断请求标志不受 OERR 和 RXIF 影响。
b 0
U C R 2 R e g i s t e r
T r a n s m i t t e r e m p t y i n t e r r u p t e n a b l e 1 : T X I F i n t e r r u p t r e q u e s t e n a b l e 0 : T X I F i n t e r r u p t r e q u e s t d i s a b l e
T r a n s m i t t e r i d l e i n t e r r u p t e n a b l e 1 : T I D L E i n t e r r u p t r e q u e s t e n a b l e 0 : T I D L E i n t e r r u p t r e q u e s t d i s a b l e
R e c e i v e r i n t e r r u p t e n a b l e 1 : R X I F i n t e r r u p t r e q u e s t e n a b l e 0 : R X I F i n t e r r u p t r e q u e s t d i s a b l e
D e f i n e s t h e R X w a k e u p e n a b l e 1 : R X w a k e u p e n a b l e ( f a l l i n g e d g e ) 0 : R X w a k e u p d i s a b l e
A d d r e s s d e t e c t m o d e 1 : e n a b l e 0 : d i s a b l e
H i g h b a u d r a t e s e l e c t b i t 1 : h i g h s p e e d 0 : l o w s p e e d
R e c e i v e r e n a b l e b i t 1 : r e c e i v e r e n a b l e 0 : r e c e i v e r d i s a b l e
T r a n s m i t t e r e n a b l e b i t 1 : t r a n s m i t t e r e n a b l e 0 : t r a n s m i t t e r d i s a b l e
79
I/O 型单片机使用手册
z WAKE 此位为接收唤醒功能的使能和除能位。若 WAKE=1 且在暂停模式下,RX 引脚的 下降沿将唤醒单片机;若 WAKE=0 且在暂停模式下,RX 引脚的任何边沿都不能 唤醒单片机。 z ADDEN 此位为地址检测使能和除能位。ADDEN=1,地址检测使能,此时数据的第 8 位 (BON=0)或第 9 位(BON=1)为高,那么接到的是地址而非数据。若相应的中 断使能且接收到的值最高位为 1,那么中断请求标志将会被置位,若最高位为 0,那么将不会产生中断且收到的数据也会被忽略。 z BRGH 此位为波特率发生器高低速选择位,它和 BRG 寄存器一起控制 UART 的波特率。 BRGH=1,为高速模式;BRGH=0,为低速模式。 z RXEN 此位为接收使能位。RXEN=0,接收将被除能,接收器立刻停止工作。另外缓冲 器将被复位,此时 RX 引脚可作普通的输入输出端口使用。若 RXEN=1 且 UARTEN=1,则接收将被使能,RX 引脚将由 UART 来控制。在数据传输时清除 RXEN 将中止数据接收且复位接收器,此时 RX 引脚可作为普通输入输出端口使用。 z TXEN 此位为发送使能位。TXEN=0,发送将被除能,发送器立刻停止工作。另外缓冲 器将被复位,此时 TX 引脚可作为普通的输入输出端口使用。若 TXEN=1 且 UARTEN=1,则发送将被使能,TX 引脚将由 UART 来控制。在数据传输时清除 TXEN 将中止数据发送且复位发送器,此时 TX 引脚可作为普通的输入输出口使用。
波特率发生器
UART 自身具有一个波特率发生器,通过它可以设定数据传输速率。波特率是 由一个独立的内部 8 位计数器产生,它由 BRG 寄存器和 UCR2 寄存器的第 2 位 BRGH 来控制。BRGH 是决定波特率发生器处于高速模式还是低速模式,从而决 定计算公式的选用。BRG 寄存器的值 N 可根据下表中的公式计算,N 的范围是 0 到 255。
UCR2 的 BRGH 位 0 1
波特率
为的得到相应的波特率,首先需要设置 BRGH 来选择相应的计算公式从而算出 BRG 的值。由于 BRG 的值不连续,所以实际波特率和理论值之间有一个偏差。 下面举例怎样计算 BRG 寄存器中的值 N 和误差。
80
f
SYS
)1(64 +N
f
SYS
)1(16 +N
第一章 硬件架构
B
Æ 波特率和误差的计算
系统选用 8M 晶振且 BRGH=0,若期望的波特率为 9600,计算它的 BRG 寄存器的 值 N,实际波特率和误差。
f
根据上表,波特率 BR =
SYS
)1(64 +N
f
转换后的公式 N =
代入参数 N =
SYS
R
64*
8000000
1
1
=12.0208
64*9600
取最接近的值,十进制 12 写入 BRG 寄存器,实际波特率如下
BR =
8000000
+
误差 %16.0
96009615
9615
=
)112(64
=
9600
下面两表给出 BRGH 取不同值时的实际波特率和误差。
波特率
Kbps
0.3 - - - - - - 207 0.300 0.00 185 0.300 0.00
1.2 103 1.202 0.16 92 1.203 0.23 51 1.202 0.16 46 1.19 -0.83
2.4 51 2.404 0.16 46 2.38 -0.83 25 2.404 0.16 22 2.432 1.32
4.8 25 4.807 0.16 22 4.863 1.32 12 4.808 0.16 11 4.661 -2.9
9.6 12 9.615 0.16 11 9.322 -2.9 6 8.929 -6.99 5 9.321 -2.9
19.2 6 17.857 -6.99 5 16.64 -2.9 2 20.83 8.51 2 18.643 -2.9
38.4 2 41.667 8.51 2 37.29 -2.9 1 - - 1 - -
57.6 1 62.5 8.51 1 55.93 -2.9 0 62.5 8.51 0 55.93 -2.9
115.2 0 125 8.51 0 111.86 -2.9 - - - - - -
f
=8M f
SYS
BRG Kbps Err BRG Kbps Err BRG Kbps Err BRG Kbps Err
SYS
BRGH=0 时的波特率和误差
BRGH=0
=7.159M f
=4M f
SYS
=3.579545M
SYS
81
I/O 型单片机使用手册
波特
Kbps
0.3 - - - - - - - - - - - -
1.2 - - - - - - 207 1.202 0.16 185 1.203 0.23
2.4 207 2.404 0.16 185 2.405 0.23 103 2.404 0.16 92 2.406 0.23
4.8 103 4.808 0.16 92 4.811 0.23 51 4.808 0.16 46 4.76 -0.83
9.6 51 9.615 0.16 46 9.520 -0.832 25 9.615 0.16 22 9.727 1.32
19.2 25 19.231 0.16 22 19.454 1.32 12 19.231 0.16 11 18.643 -2.9
38.4 12 38.462 0.16 11 37.287 -2.9 6 35.714 -6.99 5 37.286 -2.9
57.6 8 55.556 -3.55 7 55.93 -2.9 3 62.5 8.51 3 55.930 -2.9
115.2 3 125 8.51 3 111.86 -2.9 1 125 8.51 1 111.86 -2.9 250 1 250 0 - - - 0 250 0 - - -
f
=8M f
SYS
BRG Kbps Err BRG Kbps Err BRG Kbps Err BRG Kbps Err
=7.159M f
SYS
BRGH=1 时的波特率和误差
UART 设置与控制
Æ 简介
UART 采用标准的不归零码传输数据。它由 1 位起初位,8 位或 9 位数据位和 1 位或者两位停止位组成。奇偶校验是由硬件自动完成的,可设置成奇校验、偶 校验和无校验三种格式。常用的数据传输格式由 8 位数据位,1 位停止位,无 校验组成,用 8,N,1 表示,它是系统上电的默认格式。数据位数、停止位数 和奇偶校验由 UCR1 寄存器的 BNO、PRT、PREN 和 STOPS 设定。用于数据发送和 接收的波特率由一个内部的 8 位定时器产生,数据传输时低位在前高位在后。 尽管 UART 发送器和接收器在功能上相互独立,但它们使用相同的数据传输格 式和波特率,在任何情况下,停止位是必须的。
BRGH=1
=4M f
SYS
=3.579545M
SYS
Æ UART 的使能和除能
UART 是由 UCR1 寄存器的 UARTEN 位来使能和除能的。它的发送引脚 TX 和接收 引脚 RX 分别与 PC6 和 PC7 复用,UARTEN 的一个基本功能就是控制这两个引脚。 若 UARTEN、TXEN 和 RXEN 都为高,则 PC6 和 PC7 分别为 UART 的发送端口和接 收端口,而不能作为普通的输入输出端口使用。若没有数据发送,TX 引脚默 认状态为高电平。
UARTEN 清零将除能 TX 和 RX,使其可作为普通的输入输出端口使用。当 UART 被除能将清除缓冲器,所有缓冲器中的数据将被忽略,另外错误和状态标志位 被复位,TXEN、RXEN、TXBRK、RXIF、OERR、FERR 和 NF 清零而 TIDLE、TXIF 和 RIDLE 置位,UCR1、UCR2 和 BRG 寄存器中的其它位保持不变。若 UART 工作 时 UARTEN 清零,所有发送和接收将停止,模块也将复位成上述状态。当 UART 再次使能时,它将在上次配置下重新工作。
82
第一章 硬件架构
Æ 数据位、停止位位数以及奇偶校验的选择
数据传输格式由数据长度、是否校验、校验类型地址表明位以及停止位长度组 成。它们都是由 UCR1 寄存器的各个位控制的。BNO 决定数传输是 8 位还是 9 位;PRT 决定校验类型;PRTEN 决定时是否选择奇偶校验;而 STOPS 决定选用 1 位还是 2 位停止位。下表列出了各种数据传输格式。地址表明位用来确定此 帧是否为地址。
Start Bit Data Bits Address Bits Parity Bits Stop Bits
8 位数据位
1 8 0 0 1 1 7 0 1 1 1 7 1 0 1
9 位数据位
1 9 0 0 1 1 8 0 1 1 1 8 1 0 1
发送和接收数据格式
下图是传输 8 位和 9 位数据的波形。
S t a r t B i t
B i t 0 B i t 1 B i t 2 B i t 3 B i t 4 B i t 5 B i t 6 B i t 7
8 - B i t D a t a F o r m a t
S t a r t B i t
B i t 0 B i t 1 B i t 2 B i t 3 B i t 4 B i t 5 B i t 6 B i t 7 B i t 8
9 - B i t D a t a F o r m a t
P a r i t y B i t
S t o p B i t
P a r i t y B i t
N e x t
S t a r t
B i t
S t o p B i t
N e x t S t a r t
B i t
UART 发送器
UCR1 寄存器的 BNO 位是控制数据传输的长度。BNO=1 其长度为 9 位,第 9 位 MSB 存储在 UCR1 寄存器的 TX8 中。发送器的核心是发送移位寄存器 TSR,它的 数据由发送寄存器 TXR 提供,应用程序只须将发送数据写入 TXR 寄存器。上组 数据的停止位发出前,TSR 寄存器禁止写入。如果还有新的数据要发送,一旦 停止位发出,待发数据将会从 TXR 寄存器加载到 TSR 寄存器。TSR 不像其它寄 存器一样映射在数据存储器,所以应用程序不能对其进行读写操作。TXEN=1, 发送使能,但若 TXR 寄存器没有数据或者波特率没有设置,发送器将不会工作。 先写 TXR 寄存器再 TXEN 也会触发发送。当发送器使能,若 TSR 寄存器为空, 数据写入 TXR 寄存器将会直接加载到 TSR 寄存器中。发送器工作时,TXEN 清 零,发送器将立刻停止工作并且复位,此时 TX 引脚可作为普通的输入输出口 使用。
83
I/O 型单片机使用手册
Æ 发送数据
当 UART 发送数据时,数据从移位寄存器中移到 TX 引脚上,其低位在前高位在 后。在发送模式中,TXR 寄存器在内部总线和发送移位寄存器间形成一个缓冲。 如果选择 9 位数据传输格式,最高位 MSB 存储在 UCR1 寄存器的 TX8 中。发送 器初始化可由如下步骤完成: z 正确地设置 BNO、PRT、PREN 和 STOPS 位以确定数据长度、校验类型和停
止位长度。
z 设置 BRG 寄存器,选择期的波特率。 z 置高 TXEN,使引脚作为 UART 的发送端而非普通的输入输出端口。 z 读取 USR 寄存器,然后将待发数据写入 TXR 寄存器,此步骤会清除 TXIF
标志位。
z 如果要发送多个数据只需重复上一步骤。
当 TXIF=0 时,数据将禁止写入 TXR 寄存器。可以通过以下步骤来清除 TXIF:
1. 读取 USR 寄存器
2. 写 TXR 寄存器
只读标志位 TXIF 由 UART 硬件置位。若 TXIF=1,TXR 寄存器为空,其它数据可 以写入而不会覆盖以前的数据。若 TEIE=1,TXIF 标志位会影响中断。
在数据传输时,写 TXR 指令会将待发数据暂存在 TXR 寄存器中,当前数据发送 完毕后,待发数据被加载到发送移位寄存器中。当发送器空闲时,写 TXR 指令 会将数据直接加载到 TSR 寄存器中,数据传输立刻开始且 TXIF 置位。当一帧 数据发送完毕,TIDLE 将被置位。可以通过以下步骤来清除 TIDLE:
1. 读取 USR 寄存器
2. 写 TXR 寄存器
清除 TXIF 和 TIDLE 软件执行次序相同。
Æ 发送暂停字
若 TXBRK=1,下一帧将会发送暂停字。它是同一个起始位、13*N(N=1,2……) 位逻辑 0 以及停止位组成。置位 TXBRK 将会发送暂停字,而清除 TXBRK 产生停 止位,传输暂停字不会产生中断。需要注意思的是,暂停字至少 13 位宽。若 TXBRK 持续为高,那么发送器会一直发送暂停字;当应用程序清除了 TXBRK, 发送器将传输最后一帧暂停字再加上一位或者两位停止位。暂停字后的高电平 保证下一帧数据起始位的检测。
84
第一章 硬件架构
UART 接收器
Æ 简介
UART 接收器支持 8 位或者 9 位数据接收。若 BNO=1,数据长度为 9 位,而最高 位 MSB 存放在 UCR1 寄存器的 RX8 中。接收器的核心是串行移位寄存器 RSR。 RX 引脚上的数据送入数据恢复器中,它在 16 倍波特率的频率下工作,而串行 移位器工作在正常波特率下。当在 RX 引脚上检测到停止位,数据从 RSR 寄存 器中加载到 RXR 寄存器。RX 引脚上的每一位数据会被采样三次以判断其逻辑 状态。RSR 不像其它寄存器一样映射在数据存储器,所以应用程序不能对其进 行读写操作。
Æ 接收数据
当 UART 接收数据时,数据低位在前高位在后,连续地从 RX 引脚进入。RXR 寄 存器在内部总线和接收移位寄存器间形成一个缓冲。RXR 寄存器是一个两层的 FIFO 缓冲器,它能保存两帧数据的同时接收第三帧数据,应用程序必须保证 在接收完第三帧前读取 RXR 寄存器,否则忽略第三帧数据并且发生过速错误。 接收器的初始化可由如下步骤完成: z 正确地设置 BNO、PRT、PREN 和 STOPS 位以确定数据长度、校验类型和停
止位长度。
z 设置 BRG 寄存器,选择期的波特率。 z 置高 TXEN,使引脚作为 UART 的发送端而非普通的输入输出端口。
此时接收器被使能并检测起始位。
接收数据将会发生如下事件:
z 当 RXR 寄存器中有一帧以上的数据时,USR 寄存器中的 RXIF 位将会置位。 z 若 RIE=1,数据从 RSR 寄存器加载到 RXR 寄存器中将产生中断。 z 若接收器检没到帧错误、噪声干扰错误、奇偶出错或过速错误,那么相应
的错误标志位置位。
可以通过如下步骤来清除 RXIF:
1. 读取 USR 寄存器
2. 读取 RXR 寄存器
Æ 接收暂停字
UART 接收任何暂停字都会当作帧错误处理。接收器只根据 BNO 和 STOPS 位确 定一帧数据的长度。若暂停字位数大于 BNO 和 STOPS 位指定的长度,接收器认 为接收已完毕,RXIF 和 FERR 置位,RXR 寄存器清 0,若相应的中断允许且 RIDLE 为高将会产生中断。若暂停字较长,接收器收到起始位、数据位将会置位 FERR 标志,且在下一起始位前必须检测到有效的停止位。暂停字只会被认为包含信 息 0 且会置位 FERR 标志。暂停字将会加载到缓冲器中,在接收到停止位前不
85
I/O 型单片机使用手册
会再接收数据,没有检测到停止位也会置位只读标志位 RIDLE。UART 接收到暂 停字会产生以下事件:
z 帧错误标志位 FERR 置位。 z RXR 寄存器清零。 z OERR、NF、PERR、RIDLE 或 RXIF 可能会置位。
Æ 空闲状态
当 UART 接收数据时,即在起初位和停止位之间,USR 寄存器的接收标志位 RIDLE 清零。在停止位和下一帧数据的起始位之间,RIDLE 被置位,表示接收器空闲。
Æ 接收中断
USR 寄存器的只读标志位 RXIF 由接收器的边缘触发置位。若 RIE=1,数据从移 位寄存器 RSR 加载到 RXR 寄存器时产生中断,同样地,过速也会产生中断。
接收错误处理
UART 会产生几种接收错误,下面部分将描述各错误以及怎样处理。
Æ 过速——OERR 标志
RXR 寄存器是一个两层的 FIFO 缓冲器,它能保存两帧数据的同时接收第三帧 数据,应用程序必须保证在接收完第三帧前读取 RXR 寄存器,否则发生过速错 误。
产生过速错误时将会发生以下事件:
z USR 寄存器中 OERR 被置位。 z RXR 寄存器中数据不会丢失。 z RSR 寄存器数据将会被覆盖。 z 若 RIE=1,将会产生中断。
Æ 噪声干扰——NF 标志
数据恢复时多次采样可以有效的鉴别出噪声干扰。当检测到数据受到噪声干扰 时将会发生以下事件:
z 在 RXIF 上升沿,USR 寄存器中只读标志位 NF 置位。 z 数据从 RSR 寄存器加载到 RXR 寄存器中。 z 不产生中断,此位置位的同时由 RXIF 请求中断。
先读取 USR 寄存器再读取 RXR 寄存器将复位 NF。
Æ 帧错误——FERR 标志
若在停止位上检测到 0,USR 寄存器中只读标志 FERR 置位。若选择两位停止位, 两停止都必须为高,否则将置位 FERR。它同数据一起存储在缓冲器中,可被 任何复位清除。
86
第一章 硬件架构
Æ 奇偶校验错误——PERR 标志
若接收到数据出现奇偶校验错误,USR 寄存器中只读标志 PERR 置位。只有使 能了奇偶校验,选择了校验类型,此标志位才有效。它同数据一起存储在缓冲 器中,可被任何复位清除。注意,FERR 和 PERR 与相应的数据一起存储有缓冲 器中,在读取数据之前必须先访问错误标志位。
接收中断图解
UART 拥有单独的内部中断和独立的中断变量。发送寄存器为空、发送器空闲、 接收器数据有效、过速和地址检测和 RX 引脚唤醒都会产生中断。若 UART 中断 允许且堆栈未满,程序将会跳转到相应的中断向量执行中断服务程序,而后再 返回主程序。其中四种,若 UCR2 寄存器中相应中断允许位被置位,USR 寄存 器中标志位将会产生中断。发送器有两个相应的中断允许位而接收器共用一个 中断允许位。这些允许位可用于禁止个别的 UART 中断源。 地址检测也是 UART 的中断源,它没有相应的标志位,若 UCR2 寄存器中 ADDEN=1, 当检测到地址将会产生 UART 中断。RX 引脚唤醒也可以产生 UART 中断,它没 有相应的标志位,当 UXR2 中的 WAKE 和 RIE 位被置位,RX 引脚上有下降沿可 以唤醒单片机。应注意,RX 唤醒中断发生时,系统必须延时 1024 个系统时钟 才能正常工作。
U S R R e g i s t e r
T r a n s m i t t e r E m p t y
F l a g T X I F
T r a n s m i t t e r I d l e
F l a g T I D L E
U C R 2 R e g i s t e r
0
T E I E
1
0
T I I E
1
U A R T I n t e r r u p t
R e q u e s t F l a g
U R F
I N T C 1
R e g i s t e r
E U R I
I N T C 0
R e g i s t e r
E M I
R e c e i v e r O v e r r u n
F l a g O E R R
R e c e i v e r D a t a
A v a i l a b l e R X I F
R X P i n W a k e - u p
0
W A K E
1
U C R 2 R e g i s t e r
O R
A D D E N
地址检测模式
置位 UCR2 寄存器中的 ADDEN 将启动地址检测模式。若 ADDEN 有效,只有在接 收到数据最高位为 1 才会产生中断,中断允许位 EURI 和 EMI 也要使能才会产
87
0
R I E
1
0
1
R X 7 i f B N O = 0 R X 8 i f B N O = 1
UART 中断框图
0
1
I/O 型单片机使用手册
生中断。地址的最高位为第 9 位(BNO=1)或第 8 位(BNO=0),若此位为高, 则接收到的是地址而非数据。只有接收的数据的最后位为高才会产生中断。若 ADDEN 除能,每接收到一个有效数据便会置位 RXIF,而不用考虑数据的最后一 位。地址检测和奇偶校验在功能上相互排斥,若地址检测模式使能,必须保证 操作的正确,同时必须除能奇偶校验。
ADDEN 位 9(BNO=1),位 8(BNO=0) 产生 UART 中断
0
1
0 1 0 × 1
ADDEN 功能
暂停模式下的 UART 功能
当 MCU 进入暂停模式,UART 将停止工作。当芯片进入暂停模式,模块的所有 时钟关闭。当 UART 传送数据时,MCU 进入暂停模式,发送将停止并且 TX 引脚 保持高电平。同样地,当 MCU 接收数据时进入暂停模式,数据接收也会停止。 当单片机进入暂停模式,USR、UCR1 和 UCR2、接收/发送寄存器、BRG 寄存器 都不会受到影响。 UART 功能中包括了 RX 引脚的唤醒功能,由 UCR2 寄存器中 WAKE 位控制。进入 暂停模式前,若该标志位与 UART 允许位 UARTEN、接收器允许位 RXEN 和接收 器中断位 RIE 都被置位,则 RX 引脚的下降沿可唤醒单片机。唤醒后系统需延 时 1024 个系统时钟才能正常工作,在此期间,RX 引脚上的任何数据将被忽略。 若要唤醒并产生 UART 中断, 全局中断允许位 EMI 和 UART 中断允许 EURI 也必 须置位;若这两标志位没有被置位,那么,单片机将可以被唤醒但不会产生中 断。同样唤醒后系统需延时 1024 个系统时钟才能正常工作,然后才会产生 UART 中断。
√ √
UART 应用范例
下面的程序将显示如何通过 UART 发送和接收数据:
t_uart_TX:
clr intc0 ; disable intc0 clr intc1 ; disable intc1 mov a,80h mov ucr1,a ; enable uarten mov brg,a ; set brg=80h mov ucr2,a ; enable txen mov a,055h mov txr,a ; set txr=55h
: :
jmp t_uart_TX
88
第一章 硬件架构
t_uart_RX:
clr intc0 ; disable intc0 clr intc1 ; disable intc1 mov a,80h mov ucr1,a ; enable uarten mov brg,a ; set brg=80h mov a,40h mov ucr2,a ; enable rxen mov a,rxr mov pa,a ; pa=rxr
: :
jmp t_uart_RX
89
振荡器
I/O 型单片机使用手册
多种振荡器选项可以让使用者根据他们不同的应用需求来做选择。有三种系统 时钟可供选择,看门狗定时器也有多种时钟源选择,另外还有实时时钟 RTC 。 所有振荡器选项都是通过掩膜选项来加以选择。
系统时钟配置
有三种方法产生系统时钟:使用外部晶体/陶瓷振荡器、外部 RC 电路或是内部 RC 时钟源,选择方法是通过掩膜选项来加以选择。
系统晶体/陶瓷振荡器
对于晶体振荡器的结构配置,晶体只要简单的连接至 OSC1 OSC2,就会产 生所需的相移及反馈,而不需其它外部器件。陶瓷共振器可以用来代替晶体, 但是要连接两个小电容在 OSC1OSC2 和地之间。
C 1
R 1
O S C 1
C 2
O S C 2
晶体/陶瓷振荡器
下表表示对应于不同的晶体/陶瓷振荡频率,所需的 C1C2 R1 的值。
晶体或共振器
4MHz 晶体 4MHz 共振器
3.58MHz 晶体
3.58MHz 共振器 2MHz 晶体与共振器 1MHz 晶体 480kHz 共振器 455kHz 共振器 429kHz 共振器 R1 的作用是在低电压的时候确保关闭振荡,此低电压值低于单片机的最低工作电压。需
要注意的是如果
LV R 使能,可以不加 R1
C1, C2 R1
0pF
10pF
0pF
25pF
25pF
35pF
300pF
300pF
300pF
10k
12k
10k
10k
10k
27k
9.1k
10k
10k
Ω Ω Ω Ω Ω Ω
Ω Ω Ω
90
Loading...