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

为什么输出比较中断只进一次,以后就进不了??

为什么输出比较中断只进一次,以后就进不了??

为什么输出比较中断只进一次,以后就进不了??
#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;
}
TFLG1_C7F 在中断程序要对它清零  (俺也是初学者,不知道说的对不对)
你怎么知道输出比较中断只进一次,以后就进不了了?
海纳百川  有容乃大
第一次进中断时看PORTB =0x0f;
第二进中断时看PORTB =0xf0;但是小灯没有按设置的那样亮。

可是你的程序并不是这样控制的。仔细检查一下。
海纳百川  有容乃大
怎么不是啊?版主指教一下行吗?
照你的程序,每次进中断后最后都会执行PORTB =0x0f;。
海纳百川  有容乃大
是哦,谢谢!
还想问一下是不是TC7=TCNT=64000时进第一次中断,然后自由计数器TCNT从64000计到FFFF溢出到0000,再到TC7=TCNT=64000时进第二次中断。如果是——那岂不是进第一中断的时间跟第二次的时间不同,达不到准确定时。
你不是设置了TCRE=1吗,这样每次TC7=TCNT时,TCNT都会清零。
海纳百川  有容乃大
真的很感谢版主!!
我看到有的书对TCRE是这样定义的:TCRE=1 当OC7比较成功时复位计数器。是不是只有通道7有这功能,那其他通道有没有这样的功能?
是的,只有通道7有这个功能。
海纳百川  有容乃大
你可以将waittime设为全局变量这样你在调试的时候就可以看到中断的 次数了!
我刚用你的程序按照我的方法试验过了,可以看到中断的次数
非常乐意交流哦!@
返回列表