一、实验目的
了解STC单片机ADC的结构;
掌握STC单片机ADC的使用。
二、实验原理
STC15F2K60S2单片机内含8路10位高速AD转换器,速度可达30万次/秒。单片机P1口既可作为普通I/O口,也可作为AD转换器模拟电压输入口。AD转换器相关的寄存器如表1所示。
表1 ADC转换相关寄存器
P1ASF | P17ASF | P16ASF | P15ASF | P14ASF | P13ASF | P12ASF | P11ASF | P10ASF |
ADC_CONTR | ADC_POWER | SPEED1 | SPEED0 | ADC_FLAG | ADC_START | CHS2 | CHS1 | CHS0 |
ADC_RES |
|
|
|
|
|
|
|
|
ADC_RESL |
|
|
|
|
|
|
|
|
CLK_DIV PCON2 | MCKO_S1 | MCKO_S0 | ADRJ | Tx_Rx | Tx2_Rx2 | CLKS2 | CLKS1 | CLKS0 |
IE | EA | ELVD | EADC | ES | ET1 | EX1 | ET0 | EX0 |
IP | PPCA | PLVD | PADC | PS | PT1 | PX1 | PT0 | PX0 |
①P1口控制寄存器P1ASF
P1ASF某一位为“1”,P1口对应的引脚设为模拟功能。某一位为“0”,对应的引脚设为普通I/O。
②ADC控制寄存器ADC_CONTR
ADC_POWER=1,打开AD转换器电源(关闭电源可降低功耗,ADC初次上电需适当延时,再启动AD转换)。
SPEED1、SPEED0选择AD转换速度。
SPEED1 | SPEED0 | AD转换时间 |
1 | 1 | 90个时钟周期 |
1 | 0 | 180个时钟周期 |
0 | 1 | 360个时钟周期 |
0 | 0 | 540个时钟周期 |
ADC_FLAG:AD转换结束标志,需由软件清0。
ADC_START:AD转换启动控制。
CHS2、CHS1、CHS0:选择模拟输入通道P1.0~P1.7。
转换结果存放在ADC_RES和ADC_RESL寄存器中,当CLK_DIV.5/ADRJ=0时,ADC_RES为结果的高8位,ADC_RESL为结果的低2位(如表2所示)。当CLK_DIV.5/ADRJ=1时,ADC_RES为结果的高2位,ADC_RESL为结果的低8位(如表3所示)。
ADC_RES | RES9 | RES8 | RES7 | RES6 | RES5 | RES4 | RES3 | RES2 |
ADC_RESL | - | - | - | - | - | - | RES1 | RES0 |
ADC_RES |
|
|
|
|
|
| RES9 | RES8 |
ADC_RESL | RES7 | RES6 | RES5 | RES4 | RES3 | RES2 | RES1 | RES0 |
STC15F2K60S2的AD转换器以Vcc为参考电压,当ADRJ=0时,10位转换结果与输入模拟电压的关系由式(1)计算:
…………...……………………(1)
如果只取高8位,则由式(2)计算:
……………………………………...…………………(2)
当ADRJ=1时,10位转换结果与输入模拟电压的关系由式(3)计算:
…………………………………(3)
如果单片机Vcc电压不稳,会引起AD转换误差,在实际应用中,可用一路AD采样外部的基准电压(如用TL431基准电源),另一路AD采样被测电压,按式(4)计算:
………………………………..…………………..(4)
三、实验环境
Windows XP;
Keil μ Vision 4;
STC-ISP-6.28。
四、实验内容
1.实验连线
分别用两根8芯杜邦线将单片机P2口与J61、单片机P0口与J62连接起来,P0口用于数码管的位选择,P2口输出数码管的显示码。用跳线帽短接JP8、JP9,模拟输入经过RC滤波(如图1所示)。用杜邦线连接连接J35和P1.3,单片机通道3采样模拟输入电压。
图1 ADC模拟输入滤波电路
2.程序设计
Keil汇编或C语言头文件REG51.H不包含STC单片机ADC寄存器定义,而编程时需要用到ADC_CONTR、ADC_RES等特殊功能寄存器,STC-ISP软件提供各种STC单片机的寄存器定义头文件。在STC-ISP软件界面,选择头文件选项卡,选择好单片机系列,该系列的寄存定义出现在文本框中,可以复制头文件内容,也可以保存头文件(如图8-2所示)。本实验可以将头文件命名为STC15F2K.H,保存到\Keil\C51\INC文件夹中,以后编程时直接用该头文件替换REG51.H。
AD转换可以用中断的方式,也可以用查询的方式。每次转换结束,将ADC_RES寄存器和ADC_RESL寄存器内容存入整型变量result。当ADRJ=0时:
int result;
result=(ADC_RES<<2)|(ADC_RESL&3);
vin=result*Vcc/1024; //Vcc单位为毫伏
图9-2 STC15F2K系列头文件
3.程序设计
程序经编译生成HEX文件,再利用STC-ISP软件将代码下载到单片机中,调节多圈电位器W3,观察数码管显示值的变化。用数字万用表核对J35的输入电压与数码管显示的电压是否一致。
五、思考题
1. ADC通道2对2.45V基准电压(J41)采样,通道3对模拟输入电压采样,根据(4)式计算并显示被测电压。
2.如何实现多路电压检测并轮流显示?
以上图文的Word格式文档下载(内容和本网页上的一模一样,方便保存):
实验 AD转换.docx
(104.09 KB, 下载次数: 228)
欢迎光临 (http://www.51hei.com/bbs/) | Powered by Discuz! X3.1 |