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

[求助]关于序列通道AD转换的问题

[求助]关于序列通道AD转换的问题

编了一个8通道AD转换的程序


但转换结果是8个通道都是通道0的值


百思不得其解


AD初始化如下


void AD_Init(void)
{
 ATD0CTL2=0xC0; 


 ATD0CTL3=0x00; 


 ATD0CTL4=0x03; 


 ATD0CTL5=0xA0; 


 ATD0DIEN=0x00;  


}


单片机是9S12DG128B


恳请给位大侠指教

ATDCLT5的MULT位为什么是0?!
海纳百川  有容乃大
谢谢
我有个问题
做了两天AD了一直不好用,照着楼上的作业不行,总是输出同一个值(47,或是48之类的)
除了以上的配置还有什么需要注意的么?
拜谢!
追求想要得到的,得到我所追求的
调试通过了的程序,能用,贴出来放着,反正放在机子里也没什么作用。
忘高手指点
#include /* common defines and macros */
#include /* derivative information */

#define word unsigned int
#define dword unsigned long

#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"

uchar AD_wValue; //uint is in stdtypes.h
uchar AD_wData[8]; //全局变量存放 AD0,AD1,AD2的结果 2字节

void AD_Init(void) //AD初始化
{
//控制寄存器2: 上电,标志位快速清零
ATD0CTL2 = (ATD0CTL2_ADPU_MASK|ATD0CTL2_AFFC_MASK);
//MASK置一 ,开中断|ATD0CTL2_ASCIE_MASK
// In ‘normal flags’ mode (AFFC=0), reading the ATDSTAT1 register with CCFx set, followed by a read of data from the associated result register
// In ‘fast flags’ mode (AFFC=1), reading data from the associated result register

//控制寄存器3:转换序列长度为3,FIFO模式
ATD0CTL3 = (ATD0CTL3_S2C_MASK|ATD0CTL3_S1C_MASK); //三个通道转换,FIFO模式 |ATD0CTL3_FIFO_MASK
//控制寄存器4:
ATD0CTL4 = (ATD0CTL4_SRES8_MASK|ATD0CTL4_PRS2_MASK|ATD0CTL4_PRS0_MASK); //转换精度8位,2个AD转换周期,最高AD转换时钟为2MHz,即:24MHz/(5+1)*0.5=2MHz
//控制寄存器5:
ATD0CTL5 = (ATD0CTL5_DJM_MASK|ATD0CTL5_SCAN_MASK|ATD0CTL5_MULT_MASK); //八位精度只能采用右对齐方式,结果数据无符号表示,选择多路转换,通道选择码为000(cc,cb,ca)即从0通道开始的3个通道被采样

ATD0DIEN=0x00; // 禁止数字输入缓冲
}

/*uchar AD_GetValue(void) //读取AD转换结果
{

return ATD0DR0; //Read out the Result Register八位直接读
} */

// display via RS-232
void print(uchar data) {
uchar tem[3];
tem[0]=data/100+0x30;
tem[1]=data/10%10+0x30;
tem[2]=data%10+0x30;

/* asm{LDAA #$0A //回车
JSR 0xFE83 //print decimal format with a enter
};
*/
asm{LDAA tem[0]
JSR 0xFE83 //print decimal format with a enter
};
asm{LDAA tem[1]
JSR 0xFE83 //print decimal format with a enter
};
asm{LDAA tem[2]
JSR 0xFE83 //print decimal format with a enter
};
asm{LDAA #$5F
JSR 0xFE83 //print decimal format with a enter
};

}
// change to next row
void nextrow(void) {
asm{
LDAA #$0A //换行
JSR 0xFE83
};

asm{ //敲入回车
JSR 0xFE8C
};
}



void main(void) {

AD_Init(); //AD 初始化
DDRB = 0xFF;
PORTB = 0x55;
AD_wData[0] = 0; //全局变量初始化
AD_wData[1] = 0;
AD_wData[2] = 0;
//EnableInterrupts;
for(;;)
{
//if(ATD0CTL2_ASCIE == 0) //采用查询方式
// {
while(!ATD0STAT1_CCF0); //等待通道0转换结束
AD_wData[0] = ATD0DR0; //读通道0的转换结果 In ‘fast flags’ mode (AFFC=1), reading data from the associated result register
while(!ATD0STAT1_CCF1); //等待通道1转换结束
AD_wData[1] = ATD0DR1; //读通道1的转换结果
while(!ATD0STAT1_CCF2); //等待通道2转换结束
AD_wData[2] = ATD0DR2; //读通道2的转换结果

AD_wData[3] = ATD0DR3;
AD_wData[4] = ATD0DR4;
AD_wData[5] = ATD0DR5;
AD_wData[6] = ATD0DR6;
AD_wData[7] = ATD0DR7;
// }



print(AD_wData[0]);

print(AD_wData[1]);

print(AD_wData[2]);

print(AD_wData[3]);

print(AD_wData[4]);

print(AD_wData[5]);

print(AD_wData[6]);

print(AD_wData[7]);

// nextrow();

}
}
好好学习,天天向上 
ping-yang163@163.com
谢谢了,问题找到了,板子没做好,呵呵
追求想要得到的,得到我所追求的
JSR 0xFE83中的0xFE83是什么地址,是怎么知道的,
返回列表