Board logo

标题: 一个定时中断的问题 [打印本页]

作者: purplewpp    时间: 2006-8-14 14:05     标题: 一个定时中断的问题

 各位大侠:


  请帮帮忙。


我在定时中断中遇到一个问题,变量 P_Timer,在定时中断中,运行正常,每执行一次定时中断,则 P_Timer 加1。


问题是我在主程序中需要调用这个变量P_Timer, 可在主程序中这个变量一直为0, 死活不动。


 我用的芯片是MC9S08AW32。


下面是我的程序:


1、main.c



#define main
 #include <hidef.h> /* for EnableInterrupts macro */
#include "derivative.h" /* include peripheral declarations */


 #include  "TIMERI-8-14.H"


#undef main


  static unsigned char p_slot; 
 
void MCU_init(void) /* Device initialization function declaration */
 {
 
    ICGC2  = 0X00;      
    ICGC1  = 0X00;


 }
void main(void) {
    
  MCU_init(); 
  
  TPM1SC=0X31;
  TPM1MODH=0X00;
  TPM1MODL=0X99;
  TPM1SC=0X71;
  InitTimerI();
   P_Timer=0;
  EnableInterrupts; /* enable interrupts */


while(1)
 {
 if(P_Timer >= 1)                  
        {
        p_slot++;                       
        if (p_slot >= 5)
            {
            p_slot = 0;
            }
        }
}
}


2、TIMERI-8-14.C


#define timeri
#include "derivative.h"
#include "timeri-8-14.h"


#undef timeri
void InitTimerI(void)
    {
    P_Timer = 0;
 }


 void interrupt  TIME1(void)
{
 _Timer++;                    
}


3、TIMERI-8-14.h


#ifdef EXT                                            
  #undef EXT                                    
#endif#ifdef LOCAL_GLOBAL                               
  #undef LOCAL_GLOBAL                                
#endif#ifdef timeri                                        
  #define LOCAL_GLOBAL
#else
  #define EXT extern
#endif
#ifdef LOCAL_GLOBAL
#endif
#undef LOCAL_GLOBAL


EXT unsigned char P_Timer;


void InitTimerI(void);


 


有劳各位了。

[此贴子已经被作者于2006-8-14 14:05:25编辑过]


作者: purplewpp    时间: 2006-8-14 14:08

在线等待,期待答复

[此贴子已经被作者于2006-8-14 14:08:30编辑过]


作者: strongchen    时间: 2006-8-14 14:18

设置断点看一下,是否进了定时中断,P_Timer是否有变化。
作者: purplewpp    时间: 2006-8-14 14:21

我用断点看过了,可以进定时中断且P_Timer有变化。但就是在主程序调用时,用断点看,P_Timer一直都是0.
作者: purplewpp    时间: 2006-8-14 14:24

在中断程序中P_Timer是正确的,没有任何问题, 可一旦进入主程序,P_Timer就一直是0。我错在哪了呢。
作者: strongchen    时间: 2006-8-14 14:24

COP复位了?
作者: purplewpp    时间: 2006-8-14 14:32

我在主程序中没有设置cop, 也没有启用COP
作者: purplewpp    时间: 2006-8-14 14:39

除了ICGC2 = 0X00;
ICGC1 = 0X00;
及定时器的寄存器设置外,其它的寄存器我一个都没有设置
作者: strongchen    时间: 2006-8-14 14:59

AW32应该是用SOPT寄存器控制COP,且复位缺省状态是开启COP。
作者: purplewpp    时间: 2006-8-14 15:13

我刚看了datasheet,我认为复位缺省状态应是关闭COP。
作者: strongchen    时间: 2006-8-14 15:26

在哪一页,怎么写的?
作者: purplewpp    时间: 2006-8-14 15:48

aw60的datasheet 第74页。
我找到问题了,是因为我的中断标志没有清零, 所以总是在中断里。

谢谢 版主对我的支持,谢谢, 您对新手的耐心帮助。
谢谢




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