标题: stc单片机ADC控制器程序 [打印本页]

作者: hujia    时间: 2015-2-18 01:07
标题: stc单片机ADC控制器程序
#include <intrins.h>
#define   ADC_POWER     0x80                  //ADC 电源控制位
#define   ADC_FLAG      0x10                  //ADC 中断标记
#define   ADC_START     0x08                  //ADC 运行允许位
#define   ADC_SPEEDLL   0x00                  //540 分频
#define   ADC_SPEEDL    0x20                  //360 分频
#define   ADC_SPEEDH    0x40                  //180 分频
#define   ADC_SPEEDHH   0x60                  //90  分频
unsigned int  xdata ADC_Data[]={0,0,0,0,0,0,0,0}; //ADC转换结果
struct ADCs
{//串口1结构数据类型
    unsigned char        ASFS;                //允许接收端口指示
    unsigned char        Speed:4;             //允许接收端口指示
    unsigned char        Data_P:4;            //当前转换端口指针
}ADCs;
//设置ADC转换
void InitADC()
{
     ADCs.Speed=ADC_SPEEDHH;               //ADC转换速度设置
     P1ASF = 0xff;                         //P1口模拟输入设置
     ADCs.Data_P=0;                        //设置初次转换的端口
     ADC_RES = 0;                          //清除ADC转换结果位
     ADC_RESL = 0;                         //清除ADC转换结果位
     //ADC控制器,电源开,设置速度,设置当前转换口,开始转换
     ADC_CONTR = ADC_POWER | ADCs.Speed | ADC_START | ADCs.Data_P;
     _nop_();
     _nop_();
     _nop_();
     _nop_();                                //4个空操作延迟,必须包含库函数 #include "intrins.h"
     EADC =1;                              //开ADC中断
     EA   =1;                              //开总中断
}
void adc_isr() interrupt 5 using 1
{
    ADC_CONTR &= !ADC_FLAG;                 //清ADC中断
    ADC_Data[ADCs.Data_P]=ADC_RES;
    ADC_Data[ADCs.Data_P]<<=2;
    ADC_Data[ADCs.Data_P]|=ADC_RESL;
    do
    {
        if(++ADCs.Data_P>7) ADCs.Data_P=0;
    }while(ADCs.ASFS|1<<(ADCs.Data_P+1));
    ADC_CONTR = ADC_POWER | ADCs.Speed | ADC_START | ADCs.Data_P;
}







欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1