首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

一个关于AD转换的问题

一个关于AD转换的问题

为什么我写的A/D转换程序 转换后ATD0DR0~2都只能返回最大值或最小值(无论我把AD7接多少伏特电压都返回最大(255),接地就返回0)
程序是:
void ATD0_Init(void){

ATD0CTL2 = 0xC0; //AD模块上电, 快速清零, 无等待模式, 禁止外部触发, 中断关闭
ATD0CTL3 = 0x18; //三个通道转换,FIFO模式 |ATD0CTL3_FIFO_MASK
ATD0CTL4 = 0x83; //转换精度8位,2个AD转换周期,最高AD转换时钟为2MHz,即:24MHz/(5+1)*0.5=2MHz
// ATD0CTL5 = (ATD0CTL5_DJM_MASK|ATD0CTL5_SCAN_MASK|ATD0CTL5_MULT_MASK); //八位精度只能采用右对齐方式,结果数据无符号表示,选择多路转换,通道选择码为000(cc,cb,ca)即从0通道开始的3个通道被采样
// ATD0DIEN=0x00; // 不允许数字输入
}
int ATD0(void){
int temp1;
int temp2;
temp2=0x7d;
ATD0CTL5=0x87; //DJM|DSGN|SCAN|MULT| 0 |CC|CB|CA|
// 1 0 0 0 0 1 1 1
gate_v=0x7d;//2.50
temp1=0;
while (!(ATD0STAT1_CCF0));
//等待ATD0第一次转换完成
if((ATD0DR0)>temp2)
temp1++;

send_int(ATD0DR0);
send_string("temp2:");
send_int(temp2);
send_int(temp1);

while (!(ATD0STAT1_CCF1));
//等待ATD0第二次转换完成
if((ATD0DR1)>temp2)
temp1++;

send_int(ATD0DR1);
send_string("temp2:");
send_int(temp2);
send_int(temp1);

while (!(ATD0STAT1_CCF2));
//等待ATD0第三次转换完成
if((ATD0DR2)>temp2)
temp1++;

send_int(ATD0DR2);
send_string("temp2:");
send_int(temp2);
send_int(temp1);


if(temp1>=1) ///////////
return 0;
else
return 1;

}
刚刚发现要接参考电平的- -.................我的一天就这样没了.....
这是新手常犯的错误,没事的,很正常。
海纳百川  有容乃大
返回列表