STC15F2K60S2实现A/D转换

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

STC15F2K60S2实现A/D转换_第1张图片

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左右。

你可能感兴趣的:(STC15)