Board logo

标题: [求助]新手刚接触MC908QY4做溢出中断时时间不准,望示教谢谢 [打印本页]

作者: fuanzwg    时间: 2007-8-28 14:50

TSC=0x45; 改为TSC=0X06 时定时计数一直开着不会关断,如:我想让某个脚定时经过几分钟后不会关断。请各位帮我解答修改一下,谢谢!
作者: strongchen    时间: 2007-8-29 14:31

不太明白你的意思。TSC不管是0x45还是0x06都不会关断定时器,只是中断允许不同,而且分频率也不同。
作者: fuanzwg    时间: 2007-8-29 15:47

不好意思我没说清楚。
我的意思是:做个10分钟以内定时如:
if(TIMER2S5>1000) //延时
{
LED_OUT;
TIMER2S5=0;
}

以上应该如何设置犹如AVR芯片比较简单:
ISR(TIMER0_OVF_vect)
{

TCNT0=100;
TIMER2S1++;
TIMER2S2++;
TIMER2S3++;
TIMER2S4++;
TIMER2S5++;
...
void time0_init(void)
{
TCCR0 = 0x03; //定时器0分频系数为1/64
TIMSK |=0x01; //定时器中断屏蔽寄存器
}
作者: Norman1    时间: 2007-8-29 17:27

应该是这样吧:
ISR(TIMER0_OVF_vect)
{

TCNT0=100; // what's this ?
if(TIMER2S1++ >=255)
{TIMER2S1 = 0;
if(TIMER2S2++ >= 255;
{TIMER2S2 = 0;
TIMER2S3++;
}
}
}
...

作者: fuanzwg    时间: 2007-8-29 17:49

谢谢你们,我指的是Freescale 的MC908QY4,AVR用:
ISR(TIMER0_OVF_vect)
{

TCNT0=100;
TIMER2S1++;
TIMER2S2++;
TIMER2S3++;
TIMER2S4++;
TIMER2S5++;
...
void time0_init(void)
{
TCCR0 = 0x03; //定时器0分频系数为1/64
TIMSK |=0x01; //定时器中断屏蔽寄存器
}
可以搞定,可是Freescale不一样的
作者: strongchen    时间: 2007-8-30 11:59

你现在的问题是什么,不产生中断还是定时不准?你的主中断屏蔽标志I清了吗?
作者: fuanzwg    时间: 2007-8-31 09:14

你好版主!现在问题是时间不准,不知以下代码哪里出错,望指正修改 谢谢
interrupt void _TOF_Interrupt(void)
{
TSC_TOF=0;
TMOD=50000; //设置预置寄存
TIMER2S1++;
TIMER2S2++;
TIMER2S3++;
TIMER2S4++;
TIMER2S5++;
.....

}
void time0_init(void)
{
TSC=0x06;
TSC_TOIE=0X01;

}

[此贴子已经被作者于2007-8-30 12:44:31编辑过]

[此贴子已经被作者于2007-8-31 9:14:22编辑过]


作者: fuanzwg    时间: 2007-8-31 09:15     标题: [求助]新手刚接触MC908QY4做溢出中断时时间不准,望示教谢谢

程序如下可否实现:
.........
unsigned char TIMER2S1;
unsigned char TIMER2S2;
unsigned char TIMER2S3;
unsigned char TIMER2S4;
unsigned int TIMER2S5;
......
/*-----------------------------------------------------------------------------
定时器/计数器0溢出中断
------------------------------------------------------------------------------*/
interrupt void _TOF_Interrupt(void)
{

TMOD=50000; //设置预置寄存
TIMER2S1++;
TIMER2S2++;
TIMER2S3++;
TIMER2S4++;
TIMER2S5++;
.....

}
void time0_init(void)
{
TSC=0x45; //设置允许定时器溢出中断,设置分频因子为2

TCNT|=0X01;
}
可是我这样做只能实现几毫秒,如何做才能做到10分钟?请各位帮小弟修改,再此谢过了!

[此贴子已经被作者于2007-8-28 14:52:12编辑过]

[此贴子已经被作者于2007-8-29 18:09:31编辑过]

[此贴子已经被作者于2007-8-31 9:15:16编辑过]


作者: strongchen    时间: 2007-8-31 10:05

清TOF应该要先读TSC,然后对TOF写0。另外,你的TMOD是什么,为什么每次中断都要置数?TIMER2S1~TIMER2S5又有什么区别?




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