Board logo

标题: 请教采集短时间脉冲的ad转换结果的问题 [打印本页]

作者: dongwanjing1128    时间: 2007-4-14 15:51     标题: 请教采集短时间脉冲的ad转换结果的问题

为了减少能量的消耗,我想发一个很短的脉冲,然后用ad采集这个脉冲所带来的电压的变化不知道用9s12dg128b如何实现?
我试图将ATDCTRL2的ETRIGL和EETRIGP设为1,但是没成功,是不是我的程序有问题呀?
原程序:
#include /* common defines and macros */
#include /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"

/*$OSEKDecl$*//*$XGATEDecl$*/
word AD_wData[8]; //全局变量存放 AD0,AD1,AD2的结果
void main(void) {
dword i;
AD_Init(); //AD 初始化
initsci();
DDRB = 0xFF;
PORTB = 0x00;
AD_wData[0] = 0; //全局变量初始化
AD_wData[1] = 0;
AD_wData[2] = 0;
AD_wData[3] = 0;
AD_wData[4] = 0;
AD_wData[5] = 0;
AD_wData[6] = 0;
AD_wData[7] = 0;
//EnableInterrupts;
for(;;)
{
//if(ATD0CTL2_ASCIE == 0) //采用查询方式
//{
while(!ATD0STAT1_CCF0); //等待通道0转换结束
AD_wData[0] = ATD0DR0; //读通道0的转换结果
while(!ATD0STAT1_CCF1); //等待通道1转换结束
AD_wData[1] = ATD0DR1; //读通道1的转换结果
while(!ATD0STAT1_CCF2); //等待通道2转换结束
AD_wData[2] = ATD0DR2; //读通道2的转换结果
while(!ATD0STAT1_CCF3); //等待通道3转换结束
AD_wData[3] = ATD0DR3;
while(!ATD0STAT1_CCF4); //等待通道4转换结束
AD_wData[4] = ATD0DR4;
while(!ATD0STAT1_CCF5); //等待通道5转换结束
AD_wData[5] = ATD0DR5;
while(!ATD0STAT1_CCF6); //等待通道6转换结束
AD_wData[6] = ATD0DR6;
while(!ATD0STAT1_CCF7); //等待通道7转换结束
AD_wData[7] = ATD0DR7;
send_sci(AD_wData);
// }
//PORTB = (byte)AD_wData[0]; //用PORT B来显示AD0的值
//for(i=0;i<0xFFFFF;i++); //delay
//PORTB = (byte)AD_wData[1]; //用PORT B来显示AD1的值
//for(i=0;i<0xFFFFF;i++); //delay
//PORTB = (byte)AD_wData[2]; //用PORT B来显示AD1的值
//for(i=0;i<0xFFFFF;i++); //delay
}
}
AD_Init(void) //AD初始化
{
//控制寄存器2: 上电,标志位快速清零,开中断
ATD0CTL2 = (ATD0CTL2_ADPU_MASK|ATD0CTL2_AFFC_MASK|ATD0CTL2_ETRIGP_MASK|ATD0CTL2_ETRIGE_MASK|ATD0CTL2_ASCIE_MASK);
//控制寄存器3:转换序列长度为3,FIFO模式
ATD0CTL3 = (ATD0CTL3_S8C_MASK|ATD0CTL3_FIFO_MASK);
//控制寄存器4:
ATD0CTL4 = (ATD0CTL4_SRES8_MASK|ATD0CTL4_PRS1_MASK|ATD0CTL4_PRS0_MASK);
//控制寄存器5:
ATD0CTL5 = (ATD0CTL5_DJM_MASK|ATD0CTL5_MULT_MASK);

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


initsci(void){
SCI0BDL=0x34;
SCI0BDH=0x00;
SCI0CR1=0x00;

}


send_sci(word *A)
{
int i;
SCI0CR2=0x08;
for(i=0;i<8;i++)
{
SCI0DRL=A;
while(SCI0SR1!=0X80)
{;}
}
}

//#pragma CODE_SEG NON_BANKED //中断服务程序
//void interrupt 22 Int_AD0(void)
//{
// AD_wData[0] = ATD0DR0; //将结果寄存器中的值存放到数组中
// AD_wData[1] = ATD0DR1; //将结果寄存器中的值存放到数组中
// AD_wData[2] = ATD0DR2; //将结果寄存器中的值存放到数组中
// AD_wData[3] = ATD0DR3;
// AD_wData[4] = ATD0DR4;
// AD_wData[5] = ATD0DR5;
// AD_wData[6] = ATD0DR6;
//AD_wData[7] = ATD0DR7;
// send_sci(AD_wData);
//}
#include /* common defines and macros */
#include /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"

/*$OSEKDecl$*//*$XGATEDecl$*/
word AD_wData[8]; //全局变量存放 AD0,AD1,AD2的结果
void main(void) {
dword i;
AD_Init(); //AD 初始化
initsci();
DDRB = 0xFF;
PORTB = 0x00;
AD_wData[0] = 0; //全局变量初始化
AD_wData[1] = 0;
AD_wData[2] = 0;
AD_wData[3] = 0;
AD_wData[4] = 0;
AD_wData[5] = 0;
AD_wData[6] = 0;
AD_wData[7] = 0;
//EnableInterrupts;
for(;;)
{
//if(ATD0CTL2_ASCIE == 0) //采用查询方式
//{
while(!ATD0STAT1_CCF0); //等待通道0转换结束
AD_wData[0] = ATD0DR0; //读通道0的转换结果
while(!ATD0STAT1_CCF1); //等待通道1转换结束
AD_wData[1] = ATD0DR1; //读通道1的转换结果
while(!ATD0STAT1_CCF2); //等待通道2转换结束
AD_wData[2] = ATD0DR2; //读通道2的转换结果
while(!ATD0STAT1_CCF3); //等待通道3转换结束
AD_wData[3] = ATD0DR3;
while(!ATD0STAT1_CCF4); //等待通道4转换结束
AD_wData[4] = ATD0DR4;
while(!ATD0STAT1_CCF5); //等待通道5转换结束
AD_wData[5] = ATD0DR5;
while(!ATD0STAT1_CCF6); //等待通道6转换结束
AD_wData[6] = ATD0DR6;
while(!ATD0STAT1_CCF7); //等待通道7转换结束
AD_wData[7] = ATD0DR7;
send_sci(AD_wData);
// }
//PORTB = (byte)AD_wData[0]; //用PORT B来显示AD0的值
//for(i=0;i<0xFFFFF;i++); //delay
//PORTB = (byte)AD_wData[1]; //用PORT B来显示AD1的值
//for(i=0;i<0xFFFFF;i++); //delay
//PORTB = (byte)AD_wData[2]; //用PORT B来显示AD1的值
//for(i=0;i<0xFFFFF;i++); //delay
}
}
AD_Init(void) //AD初始化
{
//控制寄存器2: 上电,标志位快速清零,开中断
ATD0CTL2 = (ATD0CTL2_ADPU_MASK|ATD0CTL2_AFFC_MASK|ATD0CTL2_ETRIGP_MASK|ATD0CTL2_ETRIGE_MASK|ATD0CTL2_ASCIE_MASK);
//控制寄存器3:转换序列长度为3,FIFO模式
ATD0CTL3 = (ATD0CTL3_S8C_MASK|ATD0CTL3_FIFO_MASK);
//控制寄存器4:
ATD0CTL4 = (ATD0CTL4_SRES8_MASK|ATD0CTL4_PRS1_MASK|ATD0CTL4_PRS0_MASK);
//控制寄存器5:
ATD0CTL5 = (ATD0CTL5_DJM_MASK|ATD0CTL5_MULT_MASK);

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


initsci(void){
SCI0BDL=0x34;
SCI0BDH=0x00;
SCI0CR1=0x00;

}


send_sci(word *A)
{
int i;
SCI0CR2=0x08;
for(i=0;i<8;i++)
{
SCI0DRL=A;
while(SCI0SR1!=0X80)
{;}
}
}

//#pragma CODE_SEG NON_BANKED //中断服务程序
//void interrupt 22 Int_AD0(void)
//{
// AD_wData[0] = ATD0DR0; //将结果寄存器中的值存放到数组中
// AD_wData[1] = ATD0DR1; //将结果寄存器中的值存放到数组中
// AD_wData[2] = ATD0DR2; //将结果寄存器中的值存放到数组中
// AD_wData[3] = ATD0DR3;
// AD_wData[4] = ATD0DR4;
// AD_wData[5] = ATD0DR5;
// AD_wData[6] = ATD0DR6;
//AD_wData[7] = ATD0DR7;
// send_sci(AD_wData);
//}
//#pragma CODE_SEG DEFAULT_ROM
作者: strongchen    时间: 2007-4-16 11:00

你现在的问题是什么,是不能将ATDCTRL2的ETRIGL和EETRIGP设为1吗?你可以试试先将ETRIGE位清零,再将ATDCTRL2的ETRIGL和EETRIGP设为1,然后再将ETRIGE位置1。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0