您的位置:首页 > 其它

STC15F2K60S2实现A/D转换

2016-03-03 19:24 218 查看

1 实现功能

以中断方式进行A/D转换,取10位精度,并送P3和P2口LED灯显示(低电平驱动),P3口显示最高2位,P2口显示第8位。

2 程序代码

#include"STC15F2K60S2.h"
unsigned char data adc_datah;         //定义保存AD转换结果的绝对地址
unsigned char data adc_datal;
void main()
{
unsigned int i;
P1ASF=0x10;                         //设置P1.4为模拟量输入功能
ADC_CONTR=0x84;                     //打开A/D转换电源,设置输入通道
for(i=1000;i>0;i--);                //适当延时
CLK_DIV|=0x20;                      //ADRJ=1.设置A/D转换结果的存储格式
ADC_CONTR=0x8c;                     //启动A/D转换
EA=1;
EADC=1;
while(1);
}
void ADC_ISR() interrupt 5
{
ADC_CONTR=0x84;                     //将ADC_FLAG清0;
adc_datah=ADC_RES&0x03;             //保存A/D转换结果高2位
P3=~adc_datah;                      //转换结果高2位送P3口LED灯显示
adc_datal=ADC_RESL;                 //保存A/D转换结果低8位
P2=~adc_datal;                      //转换结果高2位送P3口LED灯显示
ADC_CONTR=0xc0;                     //重新启动A/D转换
}


3 遇到的问题

3.1 仿真器设置

通过在stc官网下载最新版本的烧录软件–>点击keil仿真设置–>点击添加型号和头文件到keil中。具体参照

http://jingyan.baidu.com/article/4ae03de3f80ef73eff9e6bac.html

3.2 程序运行时表示找不到头文件

将STC15F2K60S2.h文件放到工程目录下面。

具体参照

http://www.51hei.com/bbs/dpj-36960-1.html

4 新的知识点

4.1 寄存器P1ASF的8个位对应于P1口的8根口线,某个位置1,对应的P1口线被设置为A/D转换器的输入通道;某个位清0,对应的P1口线被设置为I/O口功能。

4.2 寄存器ADC_CONTR



SPEED1、SPEED0位作用于选择A/D转换速度,

0,0表示90个系统时钟周期转换一次;

0,1表示180个系统时钟周期转换一次;

1,0表示360个系统时钟周期转换一次;

1,1表示540个系统时钟周期转换一次;

CHS2、CHS1、CHS0作用于A/D转换器模拟量输入通道的选择

0,0,0 表示P1.0作为A/D转换器模拟量输入通道

1,1,1 表示P1.7作为A/D转换器模拟量输入通道

4.3 寄存器CLK_DIV中的ADRJ位作用于设置A/D转换结果的保存格式

寄存器ADC_RES和ADC _RESL用于保存A/D转化结果

ADRJ=0,10位A/D转换结果的高8位存放在ADC_RES寄存器中,低2位存放在ADC _RESL中。

ADRJ=1,10位A/D转换结果的高2位存放在ADC_RES寄存器中,低8位存放在ADC _RESL中。

4.4 对多通道模拟量进行A/D转换,在更替AD转换通道后要适当延时,使输入电压稳定,延时一般取20-200us左右。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: