两个定时器同时工作为何会没作用?

[复制链接]
4104|39
cjseng 发表于 2019-7-23 20:07 | 显示全部楼层
先去掉其它乱七八糟的东西,只保留两个定时器,定时器里翻转个指示灯啥的,直接观察结果。
 楼主| LKC134 发表于 2019-7-23 20:31 | 显示全部楼层
cjseng 发表于 2019-7-23 20:07
先去掉其它乱七八糟的东西,只保留两个定时器,定时器里翻转个指示灯啥的,直接观察结果。
...

我都试过了,如:
cjseng 发表于 2019-7-23 20:36 | 显示全部楼层
定时器0中断太频繁,不设置高优先级的话,定时100us精度无法保证,会有很大误差。这个芯片自带PWM的,为啥要用定时器模拟?
 楼主| LKC134 发表于 2019-7-23 20:38 | 显示全部楼层
如:/*********定时器初始化*********/
void time0_Init(void)   interrupt 1
{
//        AURX=0x7f;               //定时器时钟12T模式
        TMOD&=0xf0;
        TMOD|=0x01;                //设置定时器模式
        TL0=0x9C;                    //设置定时初值100uS
        TH0=0xFF;                   //设置定时初值
        
        TF0=0;           //清除TF0标志
        ET0=1;
        EA=1;                        
        TR0=1;
        }
void time2_Init(void)
{
        AUXR&=~0x04;           //12T模式
        T2L=0x18;                //设置定时初值         1ms
        T2H=0xfc;                //设置定时初值
        AUXR|=0x10;                    //定时器0开始计时     
        IE2|=0x04;
        EA=1;
        }
  void t0int()
{
       TL0=0x9C;                    //设置定时初值100uS
        TH0=0xFF;                   //设置定时初值
         j++;
}
void t2int()  interrupt 12
{
   m++;
}
void main()
{
  定时器初始化.......
while(1)
{
  if(j==50000)
      j=0;
     LED=~LED;
  if(m==500)
m=0;
LED=~LED;
}
}
像这样设置都不行,一定要在定时器里放LED才有作用
   
 楼主| LKC134 发表于 2019-7-23 20:40 | 显示全部楼层
看了网上一些例程这样设置是有作用,这把我搞懵了.
 楼主| LKC134 发表于 2019-7-23 20:46 | 显示全部楼层

这位兄台,请教下switch(pause_state),这个'pause_state'从那定义来的?
叶春勇 发表于 2019-7-23 21:27 | 显示全部楼层
LKC134 发表于 2019-7-23 20:46
这位兄台,请教下switch(pause_state),这个'pause_state'从那定义来的?

状态机的写法 ,自己定义个
cjseng 发表于 2019-7-23 22:05 | 显示全部楼层
LKC134 发表于 2019-7-23 20:38
如:/*********定时器初始化*********/
void time0_Init(void)   interrupt 1
{

你是不是把定时器0的初始化和中断写反了?
 楼主| LKC134 发表于 2019-7-24 08:02 | 显示全部楼层
@cjseng  上面只是例句,不小心写多了,(void timer0()).
 楼主| LKC134 发表于 2019-7-24 08:04 | 显示全部楼层
@叶春勇  多谢了,有疑问再向你计教。
 楼主| LKC134 发表于 2019-7-24 08:05 | 显示全部楼层
是讨教,上面打错了。
cjseng 发表于 2019-7-24 11:51 | 显示全部楼层
把定时器0的中断优先级提高,否则定时器0会错过很多次中断。
另外,我的习惯是,定时器赋初值前,先把定时器关闭,赋值以后再打开比较好,否则赋值的同时,定时器还在工作(计时),打开、关闭、赋值,都需要消耗时间,所以,初始值要调整一下,根据晶振频率,适当调整。
 楼主| LKC134 发表于 2019-7-24 14:45 | 显示全部楼层
多谢各位!现在两个定时器都可以工作了,原因是由于定时器0设置在PWM输出,占空比设置100会没有波形输出一直是高电平,以为定时器不工作,因为刚开始是没问题的,占空比设置0也不行,不知这是不是算死区了?
 楼主| LKC134 发表于 2019-7-24 16:28 | 显示全部楼层

RE: 两路AD采样PID控温问题

第一次用PID控温项目,目前通电PID没加热,怀疑AD采样部分有问题,另外PID部分有劳各位大神指点下看对不对?
 楼主| LKC134 发表于 2019-7-24 17:28 | 显示全部楼层
没有显示部分,不用查数据表吧?
JasonLee27 发表于 2019-7-25 09:48 | 显示全部楼层
定时器2的中断里面的执行代码追朔下去有调用延时,感觉应该是你定时器2的代码执行时间超过了执行周期,且优先级大于定时器1,所以导致1无法响应,可以抬高定时器1中断优先级确认问题,但要解决的话还是要处理好定时器2执行时间过长的问题
JasonLee27 发表于 2019-7-25 09:51 | 显示全部楼层
JasonLee27 发表于 2019-7-25 09:48
定时器2的中断里面的执行代码追朔下去有调用延时,感觉应该是你定时器2的代码执行时间超过了执行周期,且优 ...

或者说你把LED_TSK2中的延时注释掉,应该就不会出现你说的问题了。
 楼主| LKC134 发表于 2019-7-25 14:51 | 显示全部楼层
@JasonLee27      我已经删掉了,改用定时器作闪灯,编译没出现问题,但就是不发热。我改用一路独立AD输入,目标值设在500的AD值,都是没反应。
叶春勇 发表于 2019-7-25 17:57 | 显示全部楼层
LKC134 发表于 2019-7-25 14:51
@JasonLee27      我已经删掉了,改用定时器作闪灯,编译没出现问题,但就是不发热。我改用一路独立AD输入 ...

先写过开关控制,到某温度停,到某温度加热。确定软件框架能工作不?
 楼主| LKC134 发表于 2019-7-25 20:36 | 显示全部楼层
叶春勇 发表于 2019-7-25 17:57
先写过开关控制,到某温度停,到某温度加热。确定软件框架能工作不?

多谢! 明天先写个简单的控制模式找下原因.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部