打印
[其它应用]

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

[复制链接]
654|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhuhuis|  楼主 | 2019-11-17 12:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

#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| | 2019-11-17 12:14 | 只看该作者
你没有开启TIMER3对于的中断使能控制位,IEN1的第四位ET3

使用特权

评论回复
板凳
zhuhuis|  楼主 | 2019-11-17 12:20 | 只看该作者
怎么搞

使用特权

评论回复
地板
tian111| | 2019-11-17 12:24 | 只看该作者
在EA=1那句的前面加入“IEN1 = Bin(00010000); ”就可以了。

使用特权

评论回复
5
zhuhuis|  楼主 | 2019-11-17 12:27 | 只看该作者
我已经是这样设置的了,可是就是不进入定时器啊 。

使用特权

评论回复
6
songqian17| | 2019-11-17 12:30 | 只看该作者

#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();}
    }

使用特权

评论回复
7
chenho| | 2019-11-17 12:32 | 只看该作者
应该是MCU自己复位了,还没到1秒就再次初始化了TIMER3

使用特权

评论回复
8
zhuhuis|  楼主 | 2019-11-17 12:36 | 只看该作者
嗯,难道这款芯片的定时器还有什么特殊的设置吗

使用特权

评论回复
9
zhuhuis|  楼主 | 2019-11-17 12:42 | 只看该作者
我仿真的时候。设置断点在定时器那 就是没进去过

使用特权

评论回复
10
chenho| | 2019-11-17 12:44 | 只看该作者
没有什么特殊的,应该还是你的程序不对。

使用特权

评论回复
11
gongche| | 2019-11-17 12:46 | 只看该作者

timer3的寄存器在bank1
INSCON = 0x40;//切回BANK1
T3CON=0x90;
TL3=0x96;
TR3=1;
INSCON = 0x00;//切回BANK0

使用特权

评论回复
12
huwr| | 2019-11-17 12:49 | 只看该作者
如果你开启了看门狗,而且设置的WDT时间小于1秒就会出现复位

使用特权

评论回复
13
tian111| | 2019-11-17 12:53 | 只看该作者
因为你在main主程序中没有做清看门狗的动作。

使用特权

评论回复
14
zhuhuis|  楼主 | 2019-11-17 12:59 | 只看该作者
哦!但是我还没启用WDT功能啊,没设置看门狗啊!

使用特权

评论回复
15
wenfen| | 2019-11-17 13:02 | 只看该作者
由于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);
      
   }

使用特权

评论回复
16
bqyj| | 2019-11-17 13:05 | 只看该作者
楼上主要是加了两句INSCON = 0x40;INSCON = 0x00,你试试行不行

使用特权

评论回复
17
huwr| | 2019-11-17 13:10 | 只看该作者
对,应该没问题

使用特权

评论回复
18
zhuhuis|  楼主 | 2019-11-17 13:13 | 只看该作者
谢谢了,我试试

使用特权

评论回复
19
zhuhuis|  楼主 | 2019-11-17 13:18 | 只看该作者
可以进入定时器中断了

使用特权

评论回复
20
gongche| | 2019-11-17 13:22 | 只看该作者

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

使用特权

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

本版积分规则

728

主题

8464

帖子

6

粉丝