[求助] 为啥定时器0的1通道开了中断,但不进中断函数呢,但中断标志TMIF01会置1

wugx   2015-8-29 10:46 楼主
为啥定时器0的1通道开了中断,但不进中断函数呢,但中断标志TMIF01会置1,而且程序会跑飞,以前还能用呢 部分代码如下 void TAU_Init(void) { TAU0EN = 1; /* Supplies input clock */ TPS0 = 0x05; /* CK00, fMCLK = fCLK/(2^5) = 625kHz ,fclk=20M*/ TMR01H = 0; /* TPS0 setting available, only software trigger */ TMR01L = 0; /* Falling edge, Interval timer mode */ TDR01H = 0xf4; /* Interval time = (0xf423+1)/625kHz = 100ms */ TDR01L = 0x23; TMIF01 = 0; TMMK01 = 0; /* Enables INTTM01 interrupt */ //TMPR101 = 0; /* Sets INTTM01 low priority */ //TMPR001 = 1; } void TAU0_Channel1_Interrupt(void) { g_Cnt100ms++; if (g_Cnt100ms == 10) { g_Flag1s = 1; g_Cnt100ms = 0; P0.1=~P0.1; } if(g_Cnt100ms==20) { g_Cnt100ms = 0; P0.0=~P0.0; } } void main(void) { System_Init(); /* Initializes each module */ P0 &= 0xc3; TS0 |= 0x02; /* Starts TAU01 */ while ( !(TE0 & 0x02) ); /* Waiting TAU01 works */ while (1) { while (TMIF01 == 0); TMIF01 = 0; /* Clears interrupt flag bit */ } } 本帖最后由 wugx 于 2015-8-29 11:30 编辑
人生有许多选项是灰色的、不可选的,但至少你可以选择生活的态度。。。韬光养晦,志存高远http://www.xzroad.com/

回复评论 (18)

2推荐 wugx 

引用: 数码小叶 发表于 2015-8-31 11:49
楼主这个问题怎么解决的?

#pragma interrupt INTTM01 TAU0_Channel1_Interrupt
这句在定时器源文件开头,容易和注释一起删了
人生有许多选项是灰色的、不可选的,但至少你可以选择生活的态度。。。韬光养晦,志存高远http://www.xzroad.com/
点赞  2015-8-31 22:05
是不是中断函数的声明有问题啊……
只有求知欲,没有求偶欲的人是植物,只有求偶欲,没有求知欲的人叫动物,既没求知欲,又没求偶欲的人是矿物。
点赞  2015-8-29 19:10
申明是写在头文件里的,主程序调用
人生有许多选项是灰色的、不可选的,但至少你可以选择生活的态度。。。韬光养晦,志存高远http://www.xzroad.com/
点赞  2015-8-29 19:18
引用: wangjiafu1985 发表于 2015-8-29 19:10
是不是中断函数的声明有问题啊……

申明是写在头文件里的,主程序调用
人生有许多选项是灰色的、不可选的,但至少你可以选择生活的态度。。。韬光养晦,志存高远http://www.xzroad.com/
点赞  2015-8-29 19:19
一般程序,如果以前好用,现在不好用了,说明你改了某个不起眼的地方,然后你自己还检查不出来,仔细对比一下声明的那句和中断函数名声是否相同,没准中间少了一个字母或者多了一个字母或者大小写或者空格什么的
只有求知欲,没有求偶欲的人是植物,只有求偶欲,没有求知欲的人叫动物,既没求知欲,又没求偶欲的人是矿物。
点赞  2015-8-29 19:25
引用: wangjiafu1985 发表于 2015-8-29 19:25
一般程序,如果以前好用,现在不好用了,说明你改了某个不起眼的地方,然后你自己还检查不出来,仔细对比一 ...

那他应该报错啊
人生有许多选项是灰色的、不可选的,但至少你可以选择生活的态度。。。韬光养晦,志存高远http://www.xzroad.com/
点赞  2015-8-29 19:31
引用: wugx 发表于 2015-8-29 19:31
那他应该报错啊

如果声明的时候把中断函数声明成了别的定时器中断就不会报错,而且跑飞也解释得通
只有求知欲,没有求偶欲的人是植物,只有求偶欲,没有求知欲的人叫动物,既没求知欲,又没求偶欲的人是矿物。
点赞  2015-8-29 19:54
引用: wangjiafu1985 发表于 2015-8-29 19:54
如果声明的时候把中断函数声明成了别的定时器中断就不会报错,而且跑飞也解释得通

那你这个函数不申明也会报错的啊,
申明:
#ifndef _TAU_
#define _TAU_

/******************************************************************************
Exported global variables and functions (to be accessed by other files)
******************************************************************************/
void TAU_Init(void);
__interrupt void TAU0_Channel1_Interrupt(void);

#endif

调用

void TAU0_Channel1_Interrupt(void)
{
    g_Cnt100ms++;
    if (g_Cnt100ms == 10)
    {
        g_Flag1s = 1;      
        g_Cnt100ms = 0;       
        P0.1=~P0.1;       
    }
    if(g_Cnt100ms==20)
    {
        g_Cnt100ms = 0;       
        P0.0=~P0.0;           
    }
}
人生有许多选项是灰色的、不可选的,但至少你可以选择生活的态度。。。韬光养晦,志存高远http://www.xzroad.com/
点赞  2015-8-29 20:41
你中断函数貌似和例程不一样
例程中ADC中断:
#pragma interrupt INTAD Adc_Interrupt

__interrupt void Adc_Interrupt(void)
{
。。。。。
}
点赞  2015-8-29 21:26
引用: bkn1860 发表于 2015-8-29 21:26
你中断函数貌似和例程不一样
例程中ADC中断:
#pragma interrupt INTAD Adc_Interrupt

__interrupt vo ...

但定时器里的是这个啊
人生有许多选项是灰色的、不可选的,但至少你可以选择生活的态度。。。韬光养晦,志存高远http://www.xzroad.com/
点赞  2015-8-29 22:08
引用: bkn1860 发表于 2015-8-29 21:26
你中断函数貌似和例程不一样
例程中ADC中断:
#pragma interrupt INTAD Adc_Interrupt

__interrupt vo ...

#pragma sfr 就把所有特殊功能寄存器的申明定义放在里面了
人生有许多选项是灰色的、不可选的,但至少你可以选择生活的态度。。。韬光养晦,志存高远http://www.xzroad.com/
点赞  2015-8-29 22:40
引用: bkn1860 发表于 2015-8-29 21:26
你中断函数貌似和例程不一样
例程中ADC中断:
#pragma interrupt INTAD Adc_Interrupt

__interrupt vo ...

楼主对的,我看见瑞萨前面的注释太难看了,就删来着,结果把一句删了

#pragma interrupt INTTM01 TAU0_Channel1_Interrupt
人生有许多选项是灰色的、不可选的,但至少你可以选择生活的态度。。。韬光养晦,志存高远http://www.xzroad.com/
点赞  2015-8-29 23:16
引用: wangjiafu1985 发表于 2015-8-29 19:54
如果声明的时候把中断函数声明成了别的定时器中断就不会报错,而且跑飞也解释得通

楼主对的,果然把最重要的一句删了
人生有许多选项是灰色的、不可选的,但至少你可以选择生活的态度。。。韬光养晦,志存高远http://www.xzroad.com/
点赞  2015-8-29 23:18
楼主这个问题怎么解决的?
点赞  2015-8-31 11:49
引用: wugx 发表于 2015-8-31 22:05
#pragma interrupt INTTM01 TAU0_Channel1_Interrupt
这句在定时器源文件开头,容易和注释一起删了

我把0和1都开了,这句改成0没问题。一写这一句就报错,还没解决
点赞  2015-9-1 00:19
#pragma interrupt INTTM01 TAU0_Channel1_Interrupt  在头文件上面加一句中断入口啊。
失恋中。。。
点赞  2015-9-2 09:38
引用: 数码小叶 发表于 2015-9-1 00:19
我把0和1都开了,这句改成0没问题。一写这一句就报错,还没解决

在要仔细看看吧,不行就把原来的例程再贴回来,坚持
人生有许多选项是灰色的、不可选的,但至少你可以选择生活的态度。。。韬光养晦,志存高远http://www.xzroad.com/
点赞  2015-9-3 16:51
引用: liaoyuanhong 发表于 2015-9-2 09:38
#pragma interrupt INTTM01 TAU0_Channel1_Interrupt  在头文件上面加一句中断入口啊。

恩,改过了,好了
人生有许多选项是灰色的、不可选的,但至少你可以选择生活的态度。。。韬光养晦,志存高远http://www.xzroad.com/
点赞  2015-9-3 16:52
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复