zhuhuis 发表于 2022-1-1 16:34

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

#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,哪里设置有问题啊?

dengdc 发表于 2022-1-1 16:36

你没有开启TIMER3对于的中断使能控制位,IEN1的第四位ET3

zhuhuis 发表于 2022-1-1 16:38

怎么搞

wyjie 发表于 2022-1-1 16:40

在EA=1那句的前面加入“IEN1 = Bin(00010000); ”就可以了。

zhuhuis 发表于 2022-1-1 16:42

我已经是这样设置的了,可是就是不进入定时器啊 。

xxrs 发表于 2022-1-1 16: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();
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();}
    }

zhanghqi 发表于 2022-1-1 16:46

应该是MCU自己复位了,还没到1秒就再次初始化了TIMER3

zhuhuis 发表于 2022-1-1 16:49

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

zhuhuis 发表于 2022-1-1 16:53

我仿真的时候。设置断点在定时器那 就是没进去过

yszong 发表于 2022-1-1 16:58

没有什么特殊的,应该还是你的程序不对。

gongche 发表于 2022-1-1 17:00


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

hanwe 发表于 2022-1-1 17:02

如果你开启了看门狗,而且设置的WDT时间小于1秒就会出现复位

huangchui 发表于 2022-1-1 17:06

因为你在main主程序中没有做清看门狗的动作。

dingy 发表于 2022-1-1 17:10

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

dengdc 发表于 2022-1-1 17:12

由于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 发表于 2022-1-1 17:13

楼上主要是加了两句INSCON = 0x40;INSCON = 0x00,你试试行不行

jlyuan 发表于 2022-1-1 17:15

对,应该没问题

zhuhuis 发表于 2022-1-1 17:19

其实还是不大明白,我再琢磨琢磨吧,多谢了哈
页: [1]
查看完整版本: 不进入定时器3,哪里设置有问题啊?