Board logo

标题: 为什么输出比较中断只进一次,以后就进不了?? [打印本页]

作者: vincent85    时间: 2008-2-28 15:51     标题: 为什么输出比较中断只进一次,以后就进不了??

为什么输出比较中断只进一次,以后就进不了??
#include /* common defines and macros */
#include /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12dg128b"

void main(void) {
DisableInterrupts;
DDRB=0xff;
PORTB=0xff;


TIOS=0x80;
TC7=64000;
TSCR2=0x0f;
TFLG1_C7F=1;
TIE=0x80;
TSCR1_TEN= 1;

for(;;) {EnableInterrupts;} /* wait forever */
/* please make sure that you never leave this function */

}

void interrupt Timer0(void){
TFLG1_C7F=1;
waittime++;
if(waittime==2) {
waittime=0;
PORTB =0xf0;
}
PORTB =0x0f;
}
作者: haoying725    时间: 2008-2-29 11:30

TFLG1_C7F 在中断程序要对它清零  (俺也是初学者,不知道说的对不对)
作者: strongchen    时间: 2008-2-29 12:03

你怎么知道输出比较中断只进一次,以后就进不了了?
作者: vincent85    时间: 2008-2-29 12:13

第一次进中断时看PORTB =0x0f;
第二进中断时看PORTB =0xf0;但是小灯没有按设置的那样亮。


作者: strongchen    时间: 2008-2-29 12:54

可是你的程序并不是这样控制的。仔细检查一下。
作者: vincent85    时间: 2008-2-29 13:34

怎么不是啊?版主指教一下行吗?

作者: strongchen    时间: 2008-2-29 13:37

照你的程序,每次进中断后最后都会执行PORTB =0x0f;。

作者: vincent85    时间: 2008-2-29 14:22

是哦,谢谢!
还想问一下是不是TC7=TCNT=64000时进第一次中断,然后自由计数器TCNT从64000计到FFFF溢出到0000,再到TC7=TCNT=64000时进第二次中断。如果是——那岂不是进第一中断的时间跟第二次的时间不同,达不到准确定时。

作者: strongchen    时间: 2008-2-29 15:08

你不是设置了TCRE=1吗,这样每次TC7=TCNT时,TCNT都会清零。
作者: vincent85    时间: 2008-2-29 15:45

真的很感谢版主!!
我看到有的书对TCRE是这样定义的:TCRE=1 当OC7比较成功时复位计数器。是不是只有通道7有这功能,那其他通道有没有这样的功能?
作者: strongchen    时间: 2008-2-29 16:05

是的,只有通道7有这个功能。
作者: 伊独侠客    时间: 2008-3-21 21:22

你可以将waittime设为全局变量这样你在调试的时候就可以看到中断的 次数了!
我刚用你的程序按照我的方法试验过了,可以看到中断的次数




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