打印
[AVR单片机]

AVR AD转换后的数据处理

[复制链接]
2064|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
yangguanghaozi|  楼主 | 2012-2-13 22:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
其他地方都没错,就是标注的部分,我想要求100个点中最大的5个,和最小的5个,用的是1k的正弦波,幅值0~20V,AD是12位,DA是8位,望高手指点



#include <iom16v.h>
#inlcude <macros.h>
#include <stdio.h>
#include <AVR_PQ1A.h>
#define uchar unsigned char
#define uint  unsigned int


uchar max1,max2,max3,max4,max5,min1,min2,min3,min4,min5;
unsigned  int AD_DATA;


void ad_accept()
{
    uchar STS;
uchar i;
uchar AD_H,AD_L;
PORTD|=BIT(6);//STS输入带上拉电阻
STS=PIND;
STS=STS&0X40;
    while(STS!=0)
{
    STS = PIND;
    STS&=BIT(6);
}

PORTD|=BIT(4);//RC输出1,读取数据
PORTB=0XFF;//AD4-11输入带上拉电阻
AD_H=PINB;
PORTD=PORTD|0X0F;//AD0-3位输入带上拉电阻
AD_L=PIND;
  
PORTD&=~BIT(4);//RC输出0,启动AD转换
  
AD_L=AD_L&0X0F;
AD_DATA=AD_H;
AD_DATA=AD_DATA<<4;
AD_DATA=AD_DATA+AD_L;
   
}

main()
{
     
   uchar mum;
  uchar  hemp = 0 ;
   
  DDRB=0;//AD4-11位设置为输入
  DDRD=0X30;//AD0-3位设置为输入;RC(AD)输出;CE(AD)输出;STS(AD)输出
  DDRA=0xFF;//DA0-7位设置为输出
  DDRC|=BIT(0)|BIT(1);//CS(DA),CE(DA)设置为输出
  PORTC=PORTC&0XFC;
  
  PORTD|=BIT(5);//CE输出1

  PORTD&=~BIT(4);//RC输出0,启动AD转换
  max1=max2=max3=max4=max5=0;
  min1=min2=min3=min4=min5=255;
  while(1)
  {
     ad_accept();
  AD_DATA=AD_DATA/16;//12位输入转8位输出
  hemp=(uchar)AD_DATA;
/*********关键部分,要问的就是一下的数据处理***********/
if(hemp>=128)
{ if(max5<=hemp)       max5=hemp;
   else if(max4<=hemp)  max4=hemp;
   else if(max3<=hemp)  max3=hemp;
   else if(max2<=hemp)  max2=hemp;
   else if(max1<=hemp)  max1=hemp;
  }
else{  
  if(min5>=hemp)       min5=hemp;
  else if(min4>=hemp)  min4=hemp;
  else if(min3>=hemp)  min3=hemp;
  else if(min2>=hemp)  min2=hemp;
  else if(min1>=hemp)  min1=hemp;
  }
/*********关键部分,要问的就是以上的数据处理***********/
  mum++;
  if(mum==100)
  {
      mum=0;
      mum=(max2+max3+max4-min2-min3-min4)/3;
       PORTA=mum
      max1=max2=max3=max4=max5=0;
      min1=min2=min3=min4=min5=255;
   
  }
        
  }
}

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

9

帖子

0

粉丝