打印

SH79F166定时器的问题

[复制链接]
3448|20
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
happy_10|  楼主 | 2011-9-8 13:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#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,哪里设置有问题啊?
沙发
冰清玉洁| | 2011-9-8 14:19 | 只看该作者
你没有开启TIMER3对于的中断使能控制位,IEN1的第四位ET3

使用特权

评论回复
板凳
happy_10|  楼主 | 2011-9-8 14:35 | 只看该作者
怎么搞

使用特权

评论回复
地板
冰清玉洁| | 2011-9-8 14:48 | 只看该作者
在EA=1那句的前面加入“IEN1 = Bin(00010000); ”就可以了。

使用特权

评论回复
5
happy_10|  楼主 | 2011-9-8 15:13 | 只看该作者
我已经是这样设置的了,可是就是不进入定时器啊 。

使用特权

评论回复
6
chenho| | 2011-9-8 15:28 | 只看该作者
#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
宋倩2010| | 2011-9-8 15:34 | 只看该作者
应该是MCU自己复位了,还没到1秒就再次初始化了TIMER3

使用特权

评论回复
8
happy_10|  楼主 | 2011-9-8 16:42 | 只看该作者
嗯,难道这款芯片的定时器还有什么特殊的设置吗

使用特权

评论回复
9
happy_10|  楼主 | 2011-9-8 16:43 | 只看该作者
我仿真的时候。设置断点在定时器那 就是没进去过

使用特权

评论回复
10
gongche| | 2011-9-8 16:52 | 只看该作者
没有什么特殊的,应该还是你的程序不对。

使用特权

评论回复
11
bananarer| | 2011-9-8 17:24 | 只看该作者
timer3的寄存器在bank1
INSCON = 0x40;//切回BANK1
T3CON=0x90;
TL3=0x96;
TR3=1;
INSCON = 0x00;//切回BANK0

使用特权

评论回复
12
宋倩2010| | 2011-9-8 22:03 | 只看该作者
如果你开启了看门狗,而且设置的WDT时间小于1秒就会出现复位

使用特权

评论回复
13
宋倩2010| | 2011-9-8 22:03 | 只看该作者
因为你在main主程序中没有做清看门狗的动作。

使用特权

评论回复
14
happy_10|  楼主 | 2011-9-8 22:08 | 只看该作者
哦!但是我还没启用WDT功能啊,没设置看门狗啊!

使用特权

评论回复
15
chenho| | 2011-9-8 22:10 | 只看该作者
由于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
tian111| | 2011-9-8 22:23 | 只看该作者
楼上主要是加了两句INSCON = 0x40;INSCON = 0x00,你试试行不行

使用特权

评论回复
17
tian111| | 2011-9-8 22:24 | 只看该作者
应该没问题

使用特权

评论回复
18
happy_10|  楼主 | 2011-9-8 22:31 | 只看该作者
谢谢了,我试试

使用特权

评论回复
19
happy_10|  楼主 | 2011-9-8 22:43 | 只看该作者
可以进入定时器中断了

使用特权

评论回复
20
happy_10|  楼主 | 2011-9-8 22:44 | 只看该作者
谢谢大家,结贴了

使用特权

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

本版积分规则

744

主题

7973

帖子

6

粉丝