当前位置:首页 > 单片机 > 单片机
[导读]/******************************** ATMega8查询方式A/D转换测试程序 文件名:main.c 编译:WinAVR-20070122 硬件环境:CA-M8X打开的开关如下 S6(1,2)-外部4MHz晶振 S1(7)-PC0连接电位器 S5(5,6)-UART通信

/********************************
ATMega8查询方式A/D转换测试程序
文件名:main.c
编译:WinAVR-20070122

硬件环境:CA-M8X打开的开关如下
S6(1,2)-外部4MHz晶振
S1(7)-PC0连接电位器
S5(5,6)-UART通信

*******************************/

#include
#include
#include
#include

staticuint16_tg_aAdValue[8];//A/D转换缓冲区

voidIoInit(void);//debugprint.c中实现

//AD转换8次去掉最高和最低后取平均值返回
uint16_tAdcConvert(void)
{
uint8_ti;
uint16_tret;
uint8_tmax_id,min_id,max_value,min_value;

ADMUX=0Xc0;//内部2.56V参考电压,0通道
ADCSRA=_BV(ADEN);//使能ADC,单次转换模式

//连续转换8次
for(i=0;i<8;i++)
{
ADCSRA|=_BV(ADSC);
_delay_loop_1(60);
while(ADCSRA&_BV(ADSC))
_delay_loop_1(60);
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=0;//关闭ADC

returnret;
}

intmain(void)
{
uint8_ti;
IoInit();

while(1)
{
scanf("%c",&i);
if(i=='c')
printf("%dn",AdcConvert());
}
}

debugprint.c

/********************************
UART初始化并设置标准I/O流
文件名:debugprint.c
编译:WinAVR-20070122

硬件:CA-M8X

芯艺设计室2004-2007版权所有
转载请保留本注释在内的全部内容
WEB:http://www.chipart.cn
Email:changfutong@sina.com
*******************************/

#include
#include

staticintuart_putchar(charc,FILE*stream);
staticintuart_getchar(FILE*stream);

staticFILEmystd=FDEV_SETUP_STREAM(uart_putchar,uart_getchar,_FDEV_SETUP_RW);

staticintuart_putchar(charc,FILE*stream)
{
if(c=='n')
uart_putchar('r',stream);
loop_until_bit_is_set(UCSRA,UDRE);
UDR=c;
return0;
}

staticintuart_getchar(FILE*stream)
{
loop_until_bit_is_set(UCSRA,RXC);
returnUDR;
}

//接口函数
voidIoInit(void)
{
//初始化uart,查询方式读写
UCSRB=_BV(RXEN)|_BV(TXEN);/*(1<UBRRL=25;//9600baud4MHz:25

stdout=&mystd;
stdin=&mystd;
}

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

瑞典利雪平2022年4月20日 /美通社/ -- 坚固耐用的移动计算机领先制造商Handheld Group今天宣布向一家物流解决方案领域的全球领先企业交付创纪录订单。 Handheld fulfills record...

关键字: a b

  摘 要: 提出了一种基于Atmega8 和Stm32F101 双处理器的投影机升降控制设计方案,介绍了其电路组成、功能以及软件流程。其中Atmega8 负责数据采集,Stm32F101 实现

关键字: atmega8 stm32f101 uln2803a

利用人工智能进行生物多样性保护有助于防止动植物灭绝,从而维持稳定的生态系统。 近年来,诸如Rhynia、Pluchea Glutinosa、渡渡鸟、大海雀、塔斯马尼亚虎和西部黑犀牛等动植物的灭绝是一个

关键字: a 人工智能 生物多样性

作为奔驰在国内最便宜的轿车,A级奔驰一直受到年轻消费者的青睐。 日前,我们于奔驰官网获悉,新款奔驰A 180L运动轿车正式上市,新车同样搭载1.3T发动机,售价为23.28万元。 与现款车型相比,新车

关键字: a 奔驰 奔驰a级 轿车 180l

Android手机将配备Android 11和Google自己的游戏服务的每台新设备都必须包含所谓的虚拟A / B分区方案。 这意味着设备必须具有某些重要系统分区的两个副本,其中一个已被积极使用,而另一个可以在不离开An...

关键字: 11 a Android b google

便宜的Android平板电脑仍然存在,并且Samsung Galaxy Tab A系列是这些产品最著名的(长期的)支持者之一。 该公司现在正在继续其Android 10更新,其中包括其中一些廉价的平板电脑,Tab A 1...

关键字: 10 a Android galaxy tab 三星

在前面的文章里,小编对Acer CB272 A显示器进行过色域、色调显示、色彩均匀性测评。而此次,小编将对它的色彩精确度加以测评,以帮助大家增进对它的了解。

关键字: a acer cb272 显示器 色彩精确度

在前面的文章里,小编对Acer CB272 A显示器进行过色域、色调显示测评。而此次,小编将对它的色彩均匀性加以测评,以帮助大家增进对它的了解。

关键字: a acer cb272 显示器 色彩均匀性

在前面的文章里,小编对Acer CB272 A显示器进行过色域测评。而此次,小编将对它的色调显示加以测评,以帮助大家增进对它的了解。

关键字: a acer cb272 显示器 色调

在这篇文章中,小编将对Acer CB272 A显示器进行色域测评。如果你对本文即将要讲解的内容存在一定兴趣,不妨继续往下阅读哦。

关键字: a acer 显示器 色域 cb272
关闭
关闭