- UID
- 350622
- 性别
- 男
|
为什么我写的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;
}
|
|