⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 adc.c

📁 只是一个基于飞思卡尔十六位单片机编写的C一个例程SPI
💻 C
字号:
//[ADC.c]A/D转换-----------------------------------------------------------*
//本文件包含:                                                              *
//    (1)ADCInit:A/D转换初始化                                             *
//    (2)ADCvalue:获取1路A/D转换结果                                       *
//    (3)ADCmid:获取中值滤波后的A/D转换结果                                *
//    (4)ADCave:获取均值滤波后的A/D转换结果                                *
//硬件连接:                                                                *
//    PAD1 接模拟量输入端                                                  *
//-------------------------------------------------------------------------*

//头文件
#include "ADC.h"    //A/D转换头文件

//ADCInit:A/D转换初始化----------------------------------------------------*
//功  能:初始化AD转换                                                      *
//参  数:无                                                                *
//返  回:无                                                                *
//-------------------------------------------------------------------------*
void ADCInit(void)
{
    //ATDCTL2.ADPU = 1为打开转换电源开关
    //ATDCTL2.AFFC = 1为A/D转换CCF自动清0位
    ATD0CTL2 = 0xC0;
    //ATDCTL3.S4C = 1表示序列长度为4
    //ATDCTL3.FIFO = 0为非FIFO模式
    //ATDCTL3.FRZ0~FRZ1 = 00表示冻结模式
    ATD0CTL3 = 0x20;
    //ATDCTL4.PRS4~PRS0 = 00111表示总线频率16分频
    ATD0CTL4 = 0x87;
    //ATDCTL4.SRES8 = 1表示8位转换精度
    ATD0CTL5 = 0x80;
}
//ADCvalue:1路8位A/D转换函数----------------------------------------------*
//功  能:获取通道channel的8位A/D转换结果                                  *
//参  数:channel=通道号(0~15)                                              *
//返  回:该通道的A/D转换结果(0~1023)                                       *
//-------------------------------------------------------------------------*
INT8U ADCvalue(INT8U channel)
{ 
    INT8U temp;  //暂存A/D转换的结果
	  //ATDCTL5.DJM = 0,结果寄存器数据采用右调整
	  //ATDCTL5.SCAN = 1,连续转换序列
    //ATDCTL5.CC~CA = channel,启动通道转换
	  ATDCTL5 = (0x80 | channel);
    //取A/D转换结果
  	while (1)
  	//判断ATDSTAT0的第7位是否为1
  	if ((ATDSTAT0&(1<< 7)) != 0)
  	{
  	    temp = ATD0DR0L;  //从A/D数据寄存器0中读8位数据
  	    break;
  	}
  	return  temp;
}
/*
//ADCmid:1路A/D转换函数(中值滤波)------------------------------------------*
//功  能:获取通道channel中值滤波后的A/D转换结果                            *
//参  数:channel=通道号(0~4)                                               *
//返  回:该通道中值滤波后的A/D转换结果(0~255)                              *
//内部调用函数:ADCvalue                                                    *
//-------------------------------------------------------------------------*
INT8U ADCmid(INT8U channel) 
{
    INT8U i,j,k,tmp;
    //1.取三次A/D转换结果
    i = ADCvalue(channel);
    j = ADCvalue(channel);
    k = ADCvalue(channel);
    //2.从三次A/D转换结果中取中值
    if (i > j)
    {
        tmp = i; i = j; j = tmp;
    }
    if (k >= j)
    {
        tmp = j;
    }
    else
    {
        if (k >= i)
            tmp = k;
        else
            tmp = i;
    }
    return tmp;
}
 
//ATDave:1路A/D转换函数(均值滤波)------------------------------------------*
//功  能:对通道channel的A/D转换结果求n次平均值                             *
//参  数:n=均值滤波次数(0~255),channel=通道号(0~15)                        *
//返  回:该通道均值滤波后的A/D转换结果                                     *
//内部调用函数:ADCmid                                                      *
//-------------------------------------------------------------------------*
INT8U ADCave(INT8U n,INT8U channel) 
{
    //求n次A/D转换的平均值
    INT8U i;
    INT8U j;
    if(0 == n)    n = 1;
    j = 0;
    for (i=0; i<n; i++)
        j += ADCmid(channel);
    j /= n;
    return j;
}

*/

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -