不进入定时器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,哪里设置有问题啊? 你没有开启TIMER3对于的中断使能控制位,IEN1的第四位ET3
怎么搞
在EA=1那句的前面加入“IEN1 = Bin(00010000); ”就可以了。
我已经是这样设置的了,可是就是不进入定时器啊 。
#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();}
} 应该是MCU自己复位了,还没到1秒就再次初始化了TIMER3
嗯,难道这款芯片的定时器还有什么特殊的设置吗
我仿真的时候。设置断点在定时器那 就是没进去过
没有什么特殊的,应该还是你的程序不对。
timer3的寄存器在bank1
INSCON = 0x40;//切回BANK1
T3CON=0x90;
TL3=0x96;
TR3=1;
INSCON = 0x00;//切回BANK0 如果你开启了看门狗,而且设置的WDT时间小于1秒就会出现复位
因为你在main主程序中没有做清看门狗的动作。
哦!但是我还没启用WDT功能啊,没设置看门狗啊!
由于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);
} 楼上主要是加了两句INSCON = 0x40;INSCON = 0x00,你试试行不行
对,应该没问题
其实还是不大明白,我再琢磨琢磨吧,多谢了哈
页:
[1]