HT45F23 ADC 功能应用实例
功能应用实例
功能应用实例
功能应用实例
HT45F23 ADC 功能应用实例
功能应用实例
功能应用实例
功能应用实例
文件编码:HA0234S
简介简介简介简介
具备处理外部模拟信号功能是很多电子设备的基本要求。为了将模拟信号转换为数字信号,
就需要借助 A/D 转换器。将 A/D 功能和 MCU 整合在一起,就可减少电路的元件数量和电
路板的空间使用。
HT45F23 单片机内建 6 通道,12 位分辨率的 A/D 转换器。在本应用说明中,将介绍如何使
用 HT45F23 单片机的 A/D 功能。
工作原理
工作原理
工作原理
工作原理
HT45F23 单片机 A/D 模块的核心是一个内嵌的 12-Bit A/D 转换器,具体结构如下图所示:
A/D 转换器结构图
转换器结构图
转换器结构图
转换器结构图
A/D 转换器的电源供应通过 VRSEL 位控制,由 VDD 或外部输入引脚 VREF 提供。数据寄
存器 ADRH 和 ADRL 用来保存 12-bit 的 A/D 转换结果,高 8 位放在 ADRH,而低 4 位则放
在 ADRL 的高 4 位。ADCR 和 ACSR 两个控制寄存器控制 A/D 的相关设定和操作。ACSR
寄存器的 ADCS0~ADCS2 位用来设定 A/D 时钟,为了保证 A/D 转换精度,A/D 时钟周期应
不小于 0.5µs。ACSR 中的 ADONB 位控制 A/D 模块功能的开关。在 ADPCR 寄存器中,
PCR0~PCR5 控制共用 IO 引脚作为 A/D 输入脚还是普通 I/O 脚。而 ACS0~ACS2 控制哪个
引脚为 A/D 转换器的输入。START 为 A/D 转换过程启动位,当该位由 0→1→0,A/D 即开
始转换。EOCB 为转换结束标志位。当该位为 0,则表示 A/D 转换完成,反之,为 A/D 转
换过程正在进行中。
1
)
,
+
L
A
H
J
A
H
)
H
1
)
#
H
1
)
,
4
A
B
A
H
A
?
A
8
J
=
C
A
)
,
4
)
,
4
0
)
,
,
=
J
=
4
A
C
E
I
J
A
H
I
5
6
)
4
6
-
+
*
)
,
.
.
8
5
5
2
+
"
8
4
-
.
)
,
+
5
)
,
+
5
B
5
;
5
2
+
4
#
2
+
4
)
+
5
)
+
5
)
,
+
?
8
,
,
)
,
*
*
E
J
8
4
5
-
*
E
J
)
,
4
.
5
>
E
J
+
?
,
E
L
E
@
A
H
2
)
K
J
F
K
J
2
)
K
J
F
K
J
HT45F23 ADC 功能应用实例
功能应用实例
功能应用实例
功能应用实例
A/D 转换时序图见下图:
A/D 转换时序图
转换时序图
转换时序图
转换时序图
注意:
当 ADPCR 中的 PCR5~PCR0 不都为“0”,即有选择转换通道,且 ADONB 为“0”,即 A/D
功能使能,A/D 模块才会被开启。读者可通过将 ADONB 设定“1”,关闭 A/D 模块。ADC
模块会增加系统功耗,当不用 ADC 时,建议设定 ADONB 位 (ACSR.6) 为“1”来减少系
统功耗。
A/D 的工作时钟和输入通道选择分别由 ACSR 寄存器的 ADCS0~ADCS2 和 ACSR 寄存器的
ACS0~ACS2 控制,如下所示:
A/D 共用 I/O 通道如下图所示:
2
J
)
,
+
)
,
?
L
A
H
I
E
J
E
A
*
*
5
6
)
4
6
-
+
*
)
+
5
)
+
5
2
M
A
H
4
A
I
A
J
-
@
B
)
,
?
L
A
H
I
E
,
A
B
E
A
F
H
J
?
B
E
C
K
H
=
J
E
5
A
A
?
J
=
=
C
?
D
=
A
5
J
=
H
J
B
)
,
?
L
A
H
I
E
4
A
I
A
J
)
,
?
L
A
H
J
A
H
)
,
I
=
F
E
C
J
E
A
J
)
,
5
*
5
J
=
H
J
B
)
,
?
L
A
H
I
E
4
A
I
A
J
)
,
?
L
A
H
J
A
H
*
5
J
=
H
J
B
)
,
?
L
A
H
I
E
4
A
I
A
J
)
,
?
L
A
H
J
A
H
-
@
B
)
,
?
L
A
H
I
E
)
,
I
=
F
E
C
J
E
A
J
)
,
5
B
B
J
5
6
J
)
,
+
)
,
?
L
A
H
I
E
J
E
A
B
B
)
,
*
)
,
+
@
K
A
HT45F23 ADC 功能应用实例
功能应用实例
功能应用实例
功能应用实例
A/D 使用步骤:
步骤 1:通过设定 ACSR 控制寄存器中的 ADCS2~ADCS0,选择 A/D 转换时钟。
步骤 2:通过设定 ADPCR 中的 PCR0~PCR5 的值,选择相应的 I/O 作为 A/D 输入引脚。
步骤 3:清除 ACSR 控制寄存器的 ADONB 位为零,使能 A/D 功能。
步骤 4:通过设定 ADCR 控制寄存器的 ACS2~ACS0,选择相应 A/D 转换通道与 A/D 转换
模块连接。
步骤 5:如果使用 A/D 中断,需要正确设定中断使能位。确保总中断使能位 EMI、多功能
中断使能位 EMFI 和 A/D 中断使能位 EADI 都设定为“1”。
(注意:执行 A/D 中断处理返回后,系统会自动清除 MFF,但不会自动清除 ADF,
需要手动清除 ADF)。
步骤 6:通过将 ADCR 控制寄存器的 START 位由 0→1→0,启动 A/D 转换。
步骤 7:如果使用查询法,可以通过检测 ADCR 控制寄存器的 EOCB 位是否为“0”,来判
断 A/D 转换是否完毕。若 EOCB 为“0”,A/D 转换完毕,这时 A/D 数据寄存器
ADRH/ADRL 可以读取。如果使用中断法,中断使能,堆栈未满,A/D 中断即可响
应。
注意:
• 如果使用查询法,检测 ADCR 控制寄存器的 EOCB 位,来判断 A/D 转换是否完成。以上
中断方法就可以省略。
• ADC 模块会增加系统功耗,当不用 ADC 时,建议设定 ADONB 位(ACSR.6)为“1”,来
减少系统功耗。
3
"
!
'
&
%
$
#
"
!
!
"
#
$
%
&
'
2
+
$
2
9
+
2
5
+
!
2
+
#
2
9
+
5
+
2
+
"
8
4
-
.
8
+
)
2
5
+
2
)
+
2
5
+
2
+
!
:
6
2
+
:
6
2
+
)
#
5
+
2
+
)
"
5
+
2
*
$
)
!
4
-
5
2
*
#
)
2
1
6
2
*
"
)
)
7
,
2
+
2
*
!
)
5
+
5
2
)
+
7
6
6
+
8
,
,
8
5
5
2
)
)
2
+
7
6
2
)
!
)
1
6
2
)
"
)
-
6
+
2
)
#
)
2
2
.
,
2
)
$
)
*
2
)
%
)
-
*
2
*
5
,
1
6
2
*
5
,
1
5
,
)
2
*
5
+
5
+
0
6
"
#
.
!
"
5
5
2
)
'
&
%
$
#
"
!
!
"
#
$
%
&
'
2
)
+
7
6
6
+
2
)
+
2
5
+
2
+
!
:
6
2
+
:
6
2
+
)
#
5
+
2
+
)
"
5
+
2
*
$
)
!
4
-
5
2
*
"
)
)
7
,
2
+
2
*
!
)
5
+
5
2
*
5
+
5
+
8
,
,
8
5
5
2
)
)
2
+
7
6
2
)
!
)
1
6
2
)
"
)
-
6
+
2
)
#
)
2
2
.
,
2
)
$
)
*
2
)
%
)
-
*
2
*
5
,
1
6
2
*
5
,
1
5
,
)
0
6
"
#
.
!
5
5
2
)
0
6
"
#
.
!
$
5
2
)
$
#
"
!
'
!
"
#
$
%
&
8
,
,
2
)
+
7
6
6
+
2
)
+
2
5
+
2
+
!
:
6
2
+
:
6
2
+
)
#
5
+
2
+
)
"
5
+
2
*
$
)
!
4
-
5
8
5
5
2
)
)
2
+
7
6
2
)
!
)
1
6
2
)
"
)
-
6
+
2
)
#
)
2
2
.
,
2
)
$
)
*
2
)
%
)
-
*
2
*
!
)
5
+
5
HT45F23 ADC 功能应用实例
功能应用实例
功能应用实例
功能应用实例
应用电路
应用电路
应用电路
应用电路
VDD
C1
0.1uF
GND
com4
key
Vref
a
AN5
AN4
AN3
AN2
AN1
AN0
1
2
3
4
5
6
7
8
9
10
11
12
PC6/PWM1/C2P/SCOM3
PC5/PWM0/C1N/SCOM2
PC4/VREF/VCAP/SCOM1
PA0/CNP/SCOM0
PC3/XT2
PC2/XT1
PC1/AN5/OSC2
PC0/AN4/OSC1
PB6/AN3/RES
PB5/AN2/PINT
PB4/AN1/AUD/PCLK
PB3/AN0/SCS
PA1/CIOUT/TC0
VDD
VSS
PA2/A1P/C2OUT
PA3/A1N/INT0
PA4/A1E/TC1
PA5/A2P/PFD
PA6/A2N/BZ
PA7/A2E/BZ
PB0/SD0/INT1
PB1/SDI/SDA
PB2/SCK/SCL
24
23
22
21
20
19
18
17
16
15
14
13
b
VDD
GND
c
d
e
f
g
dt
com1
com2
com3
Key
HT45F23 24 SSOP-A
R11
330
Key
A
N
0
A
N
1
A
N
2
A
N
3
A
N
4
A
N
5
VDD
VDD
VDD
VDD
VDD
VDD
c
o
m
4
c
o
m
3
c
o
m
2
c
o
m
1
R5
10K
R6
R7
R8
R9
R10
10K
10K
10K
10K
10K
GND
GND
GND
GND
GND
GND
GND
说明:
dt
g
f
e
d
c
b
a
R1
1K
a b c d e f g
t
d
1
m
o
c
2
m
o
c
3
m
o
c
4
m
o
c
Q1
Q2
Q3
Q4
GND
GND
GND
GND
R2
R3
R4
1K
1K
1K
本次范例程序有两个,一个为查询法,一个为中断法。通过这两个简单的应用,介绍如何
通过查询标志位和中断两种方法使用 HT45F23 的 A/D 功能,实现多通道 A/D 采样。
按键 Key 可以切换 A/D 采样通道。在数码管 1 显示当前采样通道值,数码管 2、3、4 显示
该通道电压值。
本范例中,A/D 模块的电压接电源 VDD。当不用 ADC 时,设定 ADONB 位(ACSR.6)为“1”,
用于减少系统功耗。读者可根据实际情况,设定 VRSEL=1,由 VREF 输入,提供 A/D 模
块的参考电压。
4
HT45F23 ADC 功能应用实例
功能应用实例
功能应用实例
功能应用实例
S/W 流程图流程图流程图流程图(查询法查询法查询法查询法)
主程序流程
开始
RAM及程序
状态初始化
有键按下
Y
N
A/D转换
A/D处理
数码管显示
N
切换A/D
输入通道
A/D转换流程
设定ADCR、ACSR、
ADPCR寄存器
START=0
START=1
START=0
EOCB=0
Y
A/D转换完成,
进入转换处理
128次A/D
转换完成
Y
返回
N
程序说明
程序说明 (查询法查询法查询法查询法)
程序说明程序说明
程序首先初始化变量,设定数码管 SEG、COM 输出模式,按键输入模式,上拉电阻。关闭
A/D 中断。
设定 ACSR,即设定 ADONB 位,是否使能 A/D 功能及设定 ADCS2~ADCS0,选择 A/D 转换
时钟。
设定 ADPCR,即设定 PCR5~PCR0,使能共用 I/O 为 A/D 输入引脚。
设定 ADCR 寄存器中 ACS2~ACS0,选择相应的 A/D 转换通道与内部转换模块相连。
START=0→1→0,启动 A/D 转换。判断 EOCB 是否为“0”,不为“0”,说明 A/D 转换还没
完毕;一直查询 EOCB 为“0”,说明 A/D 转换已经完毕。进行 128 次 A/D 转换,通过简单
四则运算,将 128 次 A/D 转换结果求平均值并转为 BCD 码,最后将结果通过数码管显示
程序将其显示出来。判断是否有按键,有按键改变 A/D 转换通道。无则返回,重新启动 A/D
转换。
程序范例
程序范例 (查询法查询法查询法查询法)
程序范例程序范例
Configuration Option:
OSC:
Internal RC:
PB6/RES:
WDT:
;other option select by user.
程序代码及说明:见附件
HIRC, Filter OFF
4M@Vdd= 5V
PB6
Enable
5
HT45F23 ADC 功能应用实例
功能应用实例
功能应用实例
功能应用实例
S/W 流程图流程图流程图流程图(中断法中断法中断法中断法)
程序说明
程序说明 (中断法中断法中断法中断法)
程序说明程序说明
• 主程序:
程序首先初始化变量,设定数码管 SEG、COM 输出模式,按键输入模式,上拉电阻。关闭
A/D 中断。
设定 ACSR,即设定 ADONB 位,是否使能 A/D 功能及设定 ADCS2~ADCS0,选择 A/D 转
换时钟。
设定 ADPCR,即设定 PCR5~PCR0,使能共用 I/O 为 A/D 输入引脚。
设定 ADCR 寄存器中 ACS2~ACS0,选择相应的 A/D 转换通道与内部转换模块相连。
EMI=1,开启总中断。EMFI=1,使能多功能中断。EADI=1,开启 A/D 中断。
START=0→1→0,启动 A/D 转换。通过判断 ADF 是否为“1”,等待 A/D 转换中断。进
行 128 次 A/D 转换,通过简单四则运算,将 128 次 A/D 转换结果求平均值并转为 BCD
码,最后将结果通过数码管显示程序将其显示出来。判断是否有按键,有按键改变 A/D
转换通道。无则返回,重新启动 A/D 转换。
• 中断服务程序:
判断 ADF 是否为“1”,若为“0”,说明不是 A/D 中断,退出中断;若 ADF 为“1”,说
明为 A/D 中断,进入 A/D 中断处理子程序。执行 A/D 中断处理子程序返回后,系统会自
动清除 MFF 但不会自动清除 ADF,需要手动清除 ADF,以保证下次 A/D 转换完成后能
再次进入 A/D 中断子程序处理。
6
HT45F23 ADC 功能应用实例
功能应用实例
功能应用实例
功能应用实例
程序范例
程序范例 (中断法中断法中断法中断法)
程序范例程序范例
Configuration Option:
OSC:
Internal RC:
PB6/RES:
WDT:
HIRC, Filter OFF
4M@Vdd= 5V
PB6
Enabl
;other option select by user.
程序代码及说明:见附件。
总结总结总结总结
本文通过上面应用实例,对如何使用两种方式进行 HT45F23 的 A/D 采样进行介绍,读者可
根据相应的使用情况进行选择。
7