实验5 STC单片机ADC转换实验-V20170317

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验 5

1.实验目的

学习STC12C5A单片机ADC知识;

2.实验设备

硬件:12号节点,串口线;

软件:KeiluVision4编译软件,STC下载软件STC_ISP;

芯片手册:配套光盘\附件\芯片手册\STC单片机手册

源码路径:配套光盘\源代码\单片机原理与技术\实验5

hex路径:配套光盘\源代码\单片机原理与技术\实验5

3.实验原理

3.1A/D相关寄存器介绍

与A/D转换有关的寄存器如表3.1所示:

表3.1A/D相关寄存器

P1ASF:P1口的模拟功能控制器。STC12C5A16S2系列单片机的A/D转换口,在P1口(P1.7-P1.0),上电复位后P1口默认为弱上拉型I/O口,用户可以通过软件设置将8路中的任何一路设置为A/D转换,不需作为A/D使用的P1口可继续作为I/O口使用(建议只作为输入)。需作为A/D使用的口需先将P1ASF特殊功

能寄存器中的相应位置为‘1’,将相应的口设置为模拟功能。P1ASF寄存器的定义如表3.2所示:

表3.2P1ASF寄存器定义

ADC_CONTR:ADC控制寄存器。该寄存器的描述如表3.3所示:

表3.3ADC_CONTR寄存器定义

对ADC_CONTR寄存器的操作建议使用直接赋值语句,不要使用“与”和“或”语句。

ADC_POWER:?ADC电源控制位。

0:关闭A/D转换器电源

1:打开A/D转换器电源

建议进入空闲模式时,将ADC电源关闭,即ADC_POWER?=0。启动A/D转换前一定要确认A/D电源已打开,A/D转换结束后关闭A/D电源可降低功耗,也可不关闭。初次打开内部A/D转换模拟电源,需适当延时,等内部模拟电源稳定后,再启动A/D转换。

建议启动A/D转换后,在A/D转换结束之前,不改变任何I/O口的状态,有利于高精度A/D?转换,若能将定时器/串行口/中断系统关闭更好。

SPEED1,SPEED0:模数转换器转换速度控制位,其描述如表3.4所示:

表3.4SPEED1、SPEED0描述

ADC_FLAG:模数转换器转换结束标志位,当A/D转换完成后,ADC_FLAG=1,要由软件清0。不管是A/D转换完成后由该位申请产生中断,还是由软件查询该

标志位A/D转换是否结束,当A/D转换完成后,ADC_FLAG=1,一定要软件清0。

ADC_START:模数转换器(ADC)转换启动控制位,设置为“1”时,开始转换,转换结束后为0。

CHS2/CHS?/CHS0:模拟输入通道选择,CHS2/CHS1/CH0描述如表3.5所示:

图3.5CHS2/CHS1/CH0定义

ADC_RES、ADC_RESL:ADC结果寄存器。该寄存器用于存A/D转换结果,其定义如表3.6所示:

表3.6ADC_RES、ADC_RESL寄存器定义

AUXR1寄存器的ADRJ位是A/D转换结果寄存器(ADC_RES,ADC_RESL)的数据格式调整控制位。当ADRJ=0时,10位A/D转换结果的高8位存放在ADC_RES 中,低2位存放在ADC_RESL的低2位中,如表3.7所示:

表3.7ADRJ=0时AD结果

此时,如果用户需需取完整10位结果,按下面公式计算:

如果用户只需要8位结果,按下面公式计算:

式中,Vin为模拟输入通道输入电压,Vcc为单片机实际工作电压,用单片机工作电压作为模拟参考电压。

当ADRJ=1时,10位A/D转换结果的高2位存放在ADC_RES的低2位中,低8位存放在ADC_RESL中。

此时,如果用户需要完整10位结果,按下面公式计算:

式中,Vin为模拟输入通道输入电压,Vcc为单片机实际工作电压,用单片机工作电压作为模拟参考电压。

IE:中断允许控制寄存器。该寄存器的描述如表3.8所示:

表3.8IE寄存器定义

EA:CPU的中断开放标志,EA=1,CPU开放中断,EA=0,CPU屏蔽所有的中断申请。EA的作用是使中断允许形成多级控制。即各中断源首先受EA控制;其次还受各中断源自己的中断允许控制位控制。

EADC:A/D转换中断允许位

EADC=1,允许A/D转换中断

EADC=0,禁止A/D转换中断

如果要允许A/D转换中断则需要将相应的控制位置1:

1、将EADC置1,允许ADC中断,这是ADC中断的中断控制位。

2、将EA置1,打开单片机总中断控制位,此位不打开,也是无法产生ADC中断的A/D中断服务程序中要用软件清A/D中断请求标志位ADC_FLAG(也是A/D 转换结束标志位)。

IPH、IP:中断优先级控制寄存器,该寄存器的定义如表3.9所示:

表3.9IPH、IP寄存器定义

PADCH,PADC,A/D转换中断优先级控制位。

当PADCH=0且PADC=0时,A/D转换中断为最低优先级中断(优先级0)

当PADCH=0且PADC=1时,A/D转换中断为较低优先级中断(优先级1)

当PADCH=1且PADC=0时,A/D转换中断为较高优先级中断(优先级2)

当PADCH=1且PADC=1时,A/D转换中断为最高优先级中断(优先级3)

4.实验步骤

4.1编写实验源代码文件

4.1.1打开Keil集成开发环境,打开配套光盘\源代码\单片机原理与技术\实验5下的工程文件,编译源码,生成ADC.hex可执行文件,该可执行文件自动保存在配套光盘\源代码\单片机原理与技术\实验5目录下。(注意:请根据该目录下ADC.hex文件的生成时间,判断该文件是否是自己刚刚编译完成的)

4.1.2将12号节点的开关S1拨打到左边,让STC单片机与DB9相连。

4.1.3根据配套光盘\第三方应用软件\STC_ISP\STC-ISP软件使用说明书

4.2实验源代码解析

ADC.c源代码

/**************************************************************

*晶振频率:选取用RC11.0592MHz

*文件名:ADC.c

*功能说明:STC12C5A16S2单片机的A/D转换演示实验

*制作

*变更记录:2013.05.5

*变更内容:新建造

**************************************************************/

/************* 用户系统配置**************/

#define模拟串口和和延时会自动适应。5~35MHZ

/************* 以下宏定义用户请勿修改**************/

#include "reg51.H"

#define uchar unsignedchar

#defineuint unsignedint

/****************特殊寄存器声明************************/

sfrP1ASF=0x9D; //12C5A60AD/S2系列模拟输入(AD或LVD)选择

sfrADC_CONTR=0xBC; //带AD系列

sfrADC_RES=0xBD; //带AD系列

sfrADC_RESL=0xBE; //带AD系列

#defineADC_OFF() ADC_CONTR=0//ADC转换关

#defineADC_ON (1<<7) //ADC转换开

#defineADC_90T (3<<5) //90个时钟周期转换一次

#defineADC_180T (2<<5) //180个时钟周期转换一次

#defineADC_360T (1<<5) //360个时钟周期转换一次

#defineADC_540T 0 //540个时钟周期转换一次

#defineADC_FLAG (1<<4) //软件清0

#defineADC_START (1<<3) //开始ADC转换

#defineADC_CH0 0 //P1_0作为AD转换通道

#defineADC_CH1 1 //P1_1作为AD转换通道

#defineADC_CH2 2 //P1_2作为AD转换通道

#defineADC_CH3 3 //P1_3作为AD转换通道

#defineADC_CH4 4 //P1_4作为AD转换通道

#defineADC_CH5 5 //P1_5作为AD转换通道

#defineADC_CH6 6 //P1_6作为AD转换通道

#defineADC_CH7 7 //P1_7作为AD转换通道

相关文档
最新文档