这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 综合技术 » 基础知识 » 5402 [初学者]程序进不了定时器中断怎么调试[5402]?

共2条 1/1 1 跳转至

5402 [初学者]程序进不了定时器中断怎么调试[5402]?

院士
2006-09-17 18:14:16     打赏
5402 [初学者]程序进不了定时器中断怎么调试[5402]?



关键词: 初学者     程序     不了     定时器     中断     怎么     调试    

院士
2006-12-22 22:43:00     打赏
2楼
问 请高手指点下,可能是什么地方出了问题?

===========主程序如下:==========

interrupt void time_int(void){
  timeflag=1;  
}

void main(){
    c54_init();
    timeflag=0;
    for (;;){
       if (timeflag==1){
        timeflag=0;
       }    
    }
}

==========重新映射的中断向量表==========
    .def    Interrupt_Vectors
    .ref    _int0_int,_time_int    
    .sect    ".vectors"
    
Interrupt_Vectors:
reset:    
    RETE    ;BD _c_int00
    NOP
     NOP
     NOP
nmi:    RETE
    NOP
    NOP
    NOP
    
sint17    .space 4*16
sint18    .space 4*16
sint19    .space 4*16
sint20    .space 4*16
sint21    .space 4*16
sint22    .space 4*16
sint23    .space 4*16
sint24    .space 4*16
sint25    .space 4*16
sint26    .space 4*16
sint27    .space 4*16
sint28    .space 4*16
sint29    .space 4*16
sint30    .space 4*16
    
int0:    
    BD _int0_int
    NOP
    NOP
int1:    RETE
    NOP
    NOP
    NOP            
int2:    RETE
    NOP
    NOP
    NOP            
tint:
    BD _time_int
    NOP
    NOP            
rint0:    RETE
    NOP
    NOP
    NOP            
xint0:    RETE
    NOP
    NOP
    NOP            
rint2:    RETE
    NOP
    NOP
    NOP            
xint2:    RETE
    NOP
    NOP
    NOP            
int3:    RETE
    NOP
    NOP
    NOP            
hintp:    RETE
    NOP
    NOP
    NOP            
rint1:    RETE
    NOP
    NOP
    NOP
xint1:    RETE
    NOP
    NOP
    NOP            
    .space 4*16                                                
        .end

1: 同问,我也是新手,需要include什么吗? 2: 我是省略了,只是想问问目前这个程序段中有错误不 3: 能不能给个具体的呢? 4: 大家共同进步啊~~~需要INCLUDE什么?? 5: 目前这个是不需要的。 6: 检查一下1、中断向量表正确吗?要保证中断向量表的起始地址的低七位为0
2、可以查看定时器0的相关寄存器是否按照所设定的变化。 7: 个人见解进入中断后应该清除中断标志位,否则会引起反复中断。
调试定时中断很简单,在定时中断服务程序中设置一个断点,run就可以了 如果停到了断点处说明中断正常发生,否则检查定时器设置和中断入口 8: 应该是定时器没有设置好,程序没有问题看看IMR有没有屏蔽定时器中断 9: 请教!!我也遇到定时器问题,它只跳进中断服务程序并执行一次,然后就不再进中断了
   各位同行中人,我在调试程序中遇到这样一个问题,我设置了定时器1周期中断,每1ms发生一次,但是程序的结果是只跳进中断子服务程序中一次,就不再进去了,我百思不得其解,恳请各位拔刀相助,十万火急!!
QQ:30785678   


#include "f2407c.h"
   void initial(void);
   void time1int(void);  
   int flag=0x0000;  
   int i=0;        
   main()
{
   asm(" setc INTM");
   initial();
   time1int();
   asm(" clrc INTM");
   T1CON=0x164C;              /*启动定时中断,开始中断*/
   while(1)
   {                           /*等待中断*/                                        
     ;           
   }
}
   void initial(void)  
  {
    asm(" setc SXM");
    asm(" clrc OVM");
    asm(" clrc CNF");
    SCSR1=0x02FD;                  /***配置系统控制和状态寄存器,二倍频***/
     WDCR=0xE8;                     /***禁止看门狗定时器计数***/
     IMR=0x0002;                    /*允许INT2中断*/
     IFR=0x0FFFF;                   /*清除中断标志位*/
     WSGR=0x0000;                    /*不使能等待状态*/
  }                
     void time1int(void)
  {
     EVAIMRA=0x0080;               /*允许定时器1周期中断*/
     EVAIFRA=0x0080;               /*清定时器1周期中断标志*/
     T1CON=0x160C;                 /*定时器1连续增计数,预分频64,内部时钟*/
     T1PR=0x177;                    /*定时周期1ms*/
     T1CNT=0x00;
  }
   void interrupt T1INT()
   {
    
     flag= EVAIFRA&0x0080;          /*检验是否定时期1中断*/
     if(flag!=0x0080)                  /*若不是,返回*/
     {  
        asm(" clrc INTM");
        return;
     }
     if (i<50)                        /*如果是1中断,当i<50时,I增加1,(加1的目的是为了检验进入中断的次数,执行一次中断I的值增加一次)
        {i++;       
          T1CNT=0x00;             /*计数器清零*/
          EVAIFRA=0x0080;        /*清中断标志位*/
          asm(" clrc INTM");        /*开总中断*/
           return;
        }
      else i=52;  
   }
    void interrupt nothing()           
    {
       asm(" clrc INTM");
        return;
    }
     

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]