[其它应用]

不进入定时器3,哪里设置有问题啊?

[复制链接]
1060|21
手机看帖
扫描二维码
随时随地手机跟帖
zhuhuis|  楼主 | 2018-6-14 10:44 | 显示全部楼层 |阅读模式
#include<SH79F166.h>
#include<intrins.H>
#define uchar unsigned char
#define uint unsigned int


void ISR_Timer3 (void);
void init_devices(void);

void main(void)
{init_devices();}

void init_devices()
{EA=0;
Time3_init();
CLKCON=0x00;  //
PWM10ms_data=PWM10ms;
EA=1;
}

void Time3_init (void)
{T3CON=0x90;
TL3=0x96;
TR3=1;
}

void ISR_Timer3 (void)
    {
if(in_AC_cycle!=0)in_AC_cycle--;
if(Cycle_dat<0xfe){Cycle_dat++;}else{Input_AcValue=0;}
if(delay_us_timer!=0)delay_us_timer--;//
if(OnInvDelay!=0){OnInvDelay--;}
//off_RedLED;//  
if(sys==bat_work||sys==Test)
      {   
      
               if(OnInvDelay==0)
                 {if(PWMflag==0){run_pwm0();}
           if(PWMflag==1){run_pwmx();}
           if(PWMflag==2){run_pwm1();}
           if(PWMflag==3){run_pwmx();} }
               
        }
       else{close_PWM();}
    }

不进入定时器3,哪里设置有问题啊?
tian111| | 2018-6-14 10:49 | 显示全部楼层
你没有开启TIMER3对于的中断使能控制位,IEN1的第四位ET3

使用特权

评论回复
zhuhuis|  楼主 | 2018-6-14 10:53 | 显示全部楼层

怎么搞

使用特权

评论回复
tian111| | 2018-6-14 10:57 | 显示全部楼层
在EA=1那句的前面加入“IEN1 = Bin(00010000); ”就可以了。

使用特权

评论回复
zhuhuis|  楼主 | 2018-6-14 11:00 | 显示全部楼层
我已经是这样设置的了,可是就是不进入定时器啊 。

使用特权

评论回复
songqian17| | 2018-6-14 11:07 | 显示全部楼层
#include<SH79F166.h>
#include<intrins.H>
#define uchar unsigned char
#define uint unsigned int


void ISR_Timer3 (void);
void init_devices(void);

void main(void)
{init_devices();
while(1); //程序不能运行结束。


void init_devices()
{EA=0;
Time3_init();
CLKCON=0x00;  //
PWM10ms_data=PWM10ms;
IEN1 = 0x10; // 打开Timer3中断
EA=1;

}

void Time3_init (void)
{T3CON=0x90;
TL3=0x96;
TR3=1;
}

void ISR_Timer3 (void) interrupt 11 //中断响应需要采用关键字,中断地址在0x5B
    {
if(in_AC_cycle!=0)in_AC_cycle--;
if(Cycle_dat<0xfe){Cycle_dat++;}else{Input_AcValue=0;}
if(delay_us_timer!=0)delay_us_timer--;//
if(OnInvDelay!=0){OnInvDelay--;}
//off_RedLED;//  
if(sys==bat_work||sys==Test)
      {   
      
               if(OnInvDelay==0)
                 {if(PWMflag==0){run_pwm0();}
           if(PWMflag==1){run_pwmx();}
           if(PWMflag==2){run_pwm1();}
           if(PWMflag==3){run_pwmx();} }
               
        }
       else{close_PWM();}
    }

使用特权

评论回复
chenho| | 2018-6-14 11:11 | 显示全部楼层
应该是MCU自己复位了,还没到1秒就再次初始化了TIMER3

使用特权

评论回复
zhuhuis|  楼主 | 2018-6-14 11:15 | 显示全部楼层

嗯,难道这款芯片的定时器还有什么特殊的设置吗

使用特权

评论回复
zhuhuis|  楼主 | 2018-6-14 11:22 | 显示全部楼层
我仿真的时候。设置断点在定时器那 就是没进去过

使用特权

评论回复
chenho| | 2018-6-14 11:33 | 显示全部楼层
没有什么特殊的,应该还是你的程序不对。

使用特权

评论回复
gongche| | 2018-6-14 11:36 | 显示全部楼层
timer3的寄存器在bank1
INSCON = 0x40;//切回BANK1
T3CON=0x90;
TL3=0x96;
TR3=1;
INSCON = 0x00;//切回BANK0

使用特权

评论回复
huwr| | 2018-6-14 11:39 | 显示全部楼层
如果你开启了看门狗,而且设置的WDT时间小于1秒就会出现复位

使用特权

评论回复
tian111| | 2018-6-14 14:38 | 显示全部楼层
因为你在main主程序中没有做清看门狗的动作。

使用特权

评论回复
zhuhuis|  楼主 | 2018-6-14 14:41 | 显示全部楼层

哦!但是我还没启用WDT功能啊,没设置看门狗啊!

使用特权

评论回复
wenfen| | 2018-6-14 14:43 | 显示全部楼层
由于timer3控制寄存器在bank1,所以在写之前要置bank

一下的程序我调试过,可以运行。
#include<SH79F166.h>
#include<intrins.H>
#define uchar unsigned char
#define uint unsigned int



void init_devices(void);
void Time3_init (void);
void ISR_Timer3(void);





void main(void)
{
init_devices();
while(1); //程序不能?行?束。
}

void init_devices()
{EA=0;
Time3_init();
CLKCON=0x00;  //
//PWM10ms_data=PWM10ms;
IEN1 = 0x10; // 打?Timer3中?
EA=1;

}

void Time3_init (void)
{
INSCON = 0x40;
T3CON=0x00;
TL3=0x96;
TH3=0xFF;
TR3=1;
INSCON = 0x00;
}

void ISR_Timer3(void) interrupt 11 //中???需要采用??字,中?地址在0x5B
    {
//if(in_AC_cycle!=0)in_AC_cycle--;
//if(Cycle_dat<0xfe){Cycle_dat++;}else{Input_AcValue=0;}
//if(delay_us_timer!=0)delay_us_timer--;//
//if(OnInvDelay!=0){OnInvDelay--;}
//off_RedLED;//  
//if(sys==bat_work||sys==Test)
//    {   
//     
//             if(OnInvDelay==0)
//               {if(PWMflag==0){run_pwm0();}
//         if(PWMflag==1){run_pwmx();}
//         if(PWMflag==2){run_pwm1();}
//         if(PWMflag==3){run_pwmx();} }
//               
//        }
//     else{close_PWM();}
      if(ACC == 0);
      
   }

使用特权

评论回复
bqyj| | 2018-6-14 14:46 | 显示全部楼层
楼上主要是加了两句INSCON = 0x40;INSCON = 0x00,你试试行不行

使用特权

评论回复
huwr| | 2018-6-14 14:49 | 显示全部楼层
对,应该没问题

使用特权

评论回复
zhuhuis|  楼主 | 2018-6-14 14:52 | 显示全部楼层
谢谢了,我试试

使用特权

评论回复
zhuhuis|  楼主 | 2018-6-14 14:55 | 显示全部楼层
可以进入定时器中断了

使用特权

评论回复
gongche| | 2018-6-14 14:58 | 显示全部楼层

遇到过这个问题, 补充一下解决方案
对于某些SH79F型号 如79F6484, 还需要将 IENC1中的ET3位置1.

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

728

主题

8464

帖子

6

粉丝