Board logo

标题: MC9S12XDT512写了一个周期中断定时器,中断未产生,请高手指点 [打印本页]

作者: zhanliana    时间: 2009-5-22 13:06     标题: MC9S12XDT512写了一个周期中断定时器,中断未产生,请高手指点

高手请指点,我使用思卡尔单片机MC9S12XDT512写了一个周期中断定时器函数,代码在附件里,请问为什么我在使用full chip simulation时,中断处理程序有用(看到静态变量K是在变化的,PITCNT0也在变化。)
但是使用TBDML仿真的时候,程序下载到板子里,PITCNT0是在变化,但K就是不变化,PORTA口的I/O情况也未做改变。
参考手册上写着:PIT使能后会使定时器中断清零,我就特别的把中断使能写在定时器开始运行的下面,而且,总中断也放在最下边。就是不明白,请已经调通了程序的高手指点下。谢谢啦。
#include <hidef.h> /* common defines and macros */
#include <mc9s12xdt512.h> /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12xdt512"

static int k=0;

void main(void)
{
// int i,j;


DDRA=0xFF;
DDRE=0x04;


PITMTLD0=99; //8位定时器重装载寄存器赋值 ,0.5S
PITLD0=1999;//16位定时器重装载寄存器赋值

PITMUX=0x00;//复用第0路8位微定时器
PITCE=0x01;// 16位定时开始运行
PITFLT=0x01;
PITCFLMT=0x81;//8位定时器装载并开始运行

PITINTE=PITINTE | 0x01;//容许定时器0中断
EnableInterrupts;



for(;;)
{
/* for(i=0;i<350;i++)
for(j=0;j<450;j++)
;

k++; */
//if (PITCNT0%20!=0)
if (k%2!=0)
{
PORTAB_PA6=1;
PORTAB_PA5=0;
PORTAB_PA4=1;
PORTAB_PA3=0;

}
else
{
PORTAB_PA6=0;
PORTAB_PA5=1;
PORTAB_PA4=0;
PORTAB_PA3=1;

}

}
}


void interrupt 66 Timer0_Out()
{//EnableInterrupts;
PITCE=0x01;
PITTF=0x01;
k++;
}



http://bbs.21ic.com/upfiles/img/20095/200952011546931.rar
2wsLX2xL.rar (558.46 KB)


附件: [MC9S12XDT512写了一个周期中断定时器,中断未产生,请高手指点] 2wsLX2xL.rar (2009-5-22 12:42, 558.46 KB) / 下载次数 210
http://bbs.eccn.com/attachment.php?aid=6885&k=4d0194f7436ad250f4452a200c6dfb92&t=1717693518&sid=dbIGgj
作者: strongchen    时间: 2009-5-22 15:55

首先要注意,中断函数必须放入非分页地址中;其次可以检查一下,中断矢量地址是否正确。
作者: chiusir    时间: 2009-5-27 18:12

在中断前面加上一句话即可:#pragma CODE_SEG __NEAR_SEG NON_BANKED

cheers!






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