ad13写c语言,AD转换的C语言代码

/*编写时间2016.2.9*/

#include

#include

#define uint unsigned int

#define uchar unsigned char

#define PC7_1 PORTC|=1<<7

#define PC7_0 PORTC&=~(1<<7)

#define PC6_1 PORTC|=1<<6

#define PC6_0 PORTC&=~(1<<6)

void m16_init()//单片机初始化

{

DDRA=0x00;

PORTA=0x00;

DDRB=0xff;

PORTB=0x00;

DDRD=0xff;

PORTD=0x00;

DDRC=0xC0;

PORTC=0x00;

}

void delay(uint ms)        //延时0.25ms

{

uint i,j;

for(i=0; i

for(j = 0; j < 250; j++);

}

//AD初始化

void adc7_init()

{

ADMUX = 0x07;   //外部参考电源,右对齐选,择通道7

ADCSRA = 0x80;         //使能,转换器2分频IE=0

}

/*

uint16_t ADC_Convert(void)              // 得到AD结果

{

uint16_t temp1,temp2;

temp1=(uint16_t)ADCL;

temp2=(uint16_t)ADCH;

temp2=(temp2<<8)+temp1;

return(temp2);

}

*/

uint ADC_Convert(void)

{

uint i;

uint ret;

uint max_id, min_id, max_value, min_value;

ADMUX  = (1<

ADCSRA = (1<

// 连续转换8次

for(i=0;i<8;i++)

{

ADCSRA |= (1<

delay(100);

while(ADIF==1)

delay(100);

ret = ADCL;

ret |= (uint16_t)(ADCH<<8);

g_aAdValue[i] = ret;            //单次

}

ret = 0;

for(i=1;i<8;i++)

ret += g_aAdValue[i];

// 找到最大和最小值索引

ret /= 7;

max_id = min_id = 1;

max_value = min_value = 0;

for(i=1;i<8;i++)

{

if(g_aAdValue[i] > ret)

{

if(g_aAdValue[i] - ret > max_value)

{

max_value = g_aAdValue[i] - ret;

max_id = i;

}

}

else

{

if(ret - g_aAdValue[i] > min_value)

{

min_value = ret - g_aAdValue[i];

min_id = i;

}

}

}

// 去掉第一个和最大最小值后的平均值

ret = 0;

for(i=1;i<8;i++)

{

if((i!=min_id) && (i!=max_id))

ret += g_aAdValue[i];

}

if(min_id != max_id)

ret /= 5;

else

ret /= 6;

ADCSRA = 0x00;                  // 关闭ADC

return ret;

}

void Process(uint16_t i,uint8_t *p)

{

p[0]=i/1000;

i=i%1000;

p[1]=i/100;

i=i%100;

p[2]=i/10;

i=i%10;

p[3]=i;

}

int main(void)

{

uint16_t ret;

m16_init();

adc7_init();//就是这里卡住了  不往下执行了

while(1)

{

ret = ADC_Convert();

//i = (i*5.0/1024)*1000;    // 此处浮点也,MCU开支可不小!

ret *= 4.88;            // 输出原值

Process(ret,Data);

Display(Data);

}

return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值