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

S12DP256AD进不了中断[求助]

请各位前辈帮帮我吧

好痛苦
这一句是怎么回事:

for(i=0;i EnableInterrupts;
海纳百川  有容乃大
ATD配置混乱,程序不全。

S12DP256AD进不了中断[求助]

为什么我的程序进不了中断呢,运行到while(ATD0CTL2_ASCIF==1);处就不动了也不循环了,麻烦各位给指点一下
我的程序如下:
#include /* common defines and macros */
#include /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12dp256b"

#define N 4
#define unsigned char uchar
//#define unsigned int uint
uchar ad_result[N],i;

void delay(int num)
{
 int i;
 for(i=0;i<num;i++);
}


/* unchar AD_GetValue(void)
{
return ATD0DR0;
}
*/

void main(void)
{

uchar j,max,min;
uint temp;

DDRB=0XFF;
PORTB=0X55;

for(i=0;i<N;i++)ad_result=0;

EnableInterrupts;

ATD0CTL2=(ATD0CTL2_ADPU_MASK|!ATD0CTL2_AFFC_MASK|ATD0CTL2_ASCIE_MASK);

ATD0CTL3=ATD0CTL3_S4C_MASK;//队列长度4,单通道
ATD0CTL4=(ATD0CTL4_SRES8_MASK|ATD0CTL4_PRS2_MASK|ATD0CTL4_PRS0_MASK);

ATD0CTL5=(ATD0CTL5_DJM_MASK|ATD0CTL5_SCAN_MASK|!ATD0CTL5_MULT_MASK);

ATD0DIEN=0X00;
i =0;
for(;;)
{
while(ATD0CTL2_ASCIF==1); // 4次采样求均值,实现滤波
if(i>=N)
{

i=0;
temp=0;
for(j=0;j {
max=ad_result[0];
min=ad_result[0];
if(max
if(min>ad_result[j])min=ad_result[j];

temp+=ad_result[j];
}
temp=(temp-max-min)/(N-2);

PORTB=(uchar)temp;

/*delay(5000);
delay(5000);
delay(5000);
delay(5000);
delay(5000);
delay(5000);
//delay(5000);
//delay(5000);
//delay(5000);
//delay(5000);
//delay(5000);
//delay(5000);
PORTB=0xff;

delay(5000);
delay(5000);
delay(5000);
delay(5000);
delay(5000);
delay(5000); */
}
}


}

#pragma CODE_SEG NON_BANKED
interrupt 41 void _ADC_int(void)
{
ATD0CTL2=!ATD0CTL2_ASCIE_MASK; //禁止中断
ad_result=ATD0DR0L; //读取结果寄存器
i++;

ATD0CTL2=ATD0CTL2_ASCIE_MASK;; //开中断
}
#pragma CODE_SEG DEFAULT

[此贴子已经被作者于2007-2-8 18:51:56编辑过]

[此贴子已经被作者于2007-2-8 18:54:58编辑过]

to strongchen:
粘贴漏了,已经添加了,请陈工,继续帮我解答,谢谢。
to xingzou:

ATD配置哪些地方不当,请明示。
1. 中断号为什么选41?
2. 在中断中不必有关中断再开中断的动作,MCU进中断时,会自动关中断(I),出中断时也会自动开中断。
海纳百川  有容乃大
to strongchen:
41是DP256 ATD0的中断向量号,故而。我的理解有错误吗?请继续指导
你为什么说41是ATD0的中断向量号呢?
海纳百川  有容乃大
to strongchen :

我是这样从查的:
1>从256book.pdf 第145页,Table 24 interrupt Vector Table 中查得ATD0的向量地址为:$FFD2,$FFD3
2>.然后在codewarrior 工程中的Vector.c文件中诸如
 const tIsrFunc_vect[]@65408={ /*interrupt table*/
Cpu_Interrupt, /*0 Default(unused) interrupt,address 0xFF80*/
Cpu_Interrupt, /*1 Default(unused) interrupt,address 0xFF82*/
Cpu_Interrupt, /*2 Default(unused) interrupt,address 0xFF84*/
Cpu_Interrupt, /*3 Default(unused) interrupt,address 0xFF86*/
..... .... ...
Cpu_Interrupt, /*41 Default(unused) interrupt,address 0xFFD2*/
在1>中知道ATD0对应的中断向量地址为0xFFD2,zai 在2>中0xFFD2对应的号是41。

不知道我这样查的中断向量号,对不对?不对的话,应该怎么查?谢谢版主,请指点。
明白了,第二步是错误的,中断向量号应该从0xFFFE,隔二递减的地址向下算起,中断向量号应该为22,谢谢版主的指点。

可是,
const tIsrFunc_vect[]65408={ /*interrupt table*/
Cpu_Interrupt, /*0 Default(unused) interrupt,address 0xFF80*/
Cpu_Interrupt, /*1 Default(unused) interrupt,address 0xFF82*/
Cpu_Interrupt, /*2 Default(unused) interrupt,address 0xFF84*/
Cpu_Interrupt, /*3 Default(unused) interrupt,address 0xFF86*/

这个列表是什么意思阿?有什么用处?
这应该是给未用的中断向量置一个缺省值。当程序意外地进入这些中断时,可以跳到设定的中断程序中。
海纳百川  有容乃大
多谢陈工!
返回列表