常驻嘉宾
- 积分
- 3034
- 威望
- 1650
- 贡献
- 780
- 兑换币
- 625
- 注册时间
- 2012-7-6
- 在线时间
- 302 小时
|
我想问一下我看往届的报告,采用AD单通道实现对8个传感器的采样。下面是AD部分的程序,他是用dara[0~7]来存储8个传感器的采样值,但是在AD采集时都是用 “while(!ATD0STAT0_SCF); ad_result=ATD0DR0;”这句话来判断转换是否结束,以及保存结果。我不明白一直读ATD0DR0中的值不只是0通道转换的值么??1~7通道的值能从ATD0DR0读出?? 难道在单通道下任意读一个结果寄存器??? 求高手啊!!!
/********************** AD初始化**********************************/
void ad_init (void)
{
ATD0CTL1 = 0x00; //00为转换精度 无外部触发 40=12位 20=10位 00=8位
ATD0CTL2 = 0x40; //禁止外部触发, 中断禁止
ATD0CTL3 = 0x88; //右对齐无符号,每序列转换1次(6543-8421), No FIFO, Freeze模式下继续转
ATD0CTL4 = 0x63; //765:采样时间为10个AD时钟周期(000=4 001=6 010=8 100=12 101=16 110=20)
//(moren 011=10)prs(5:0)ATDClock=[BusClock*0.5]/[PRS+1]
ATD0CTL5 = 0x20|i; //设置采样通道 i通道导通
ATD0DIEN = 0x00; //禁止数字信号输入
}
/********************** AD collect ***************************/
int ad_convent(void) //return v-pp of sensor[i];
{
int ad_result,max=0,min=256;// give your owm times ;
char n=0;
for(n=0;n<16;n++) //the times of the convent, the more you give the ans is more corrct;
{
ad_init();
while(!ATD0STAT0_SCF); //waiting changed;
ad_result=ATD0DR0;
if(ad_result>max) max=ad_result;
if(ad_result<min) min=ad_result;
}
return (max-min);
}
/***********************Digital filter*************************/
void ad_answer(void)
{
for(i=0;i<8;i++) //give the solutions to the data[i]
{
data[i]=ad_convent();
}
}
|
|