发新帖我要提问
12
返回列表
打印

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

[复制链接]
楼主: LKC134
手机看帖
扫描二维码
随时随地手机跟帖
21
cjseng| | 2019-7-23 20:07 | 只看该作者 回帖奖励 |倒序浏览
先去掉其它乱七八糟的东西,只保留两个定时器,定时器里翻转个指示灯啥的,直接观察结果。

使用特权

评论回复
22
LKC134|  楼主 | 2019-7-23 20:31 | 只看该作者
cjseng 发表于 2019-7-23 20:07
先去掉其它乱七八糟的东西,只保留两个定时器,定时器里翻转个指示灯啥的,直接观察结果。
...

我都试过了,如:

使用特权

评论回复
23
cjseng| | 2019-7-23 20:36 | 只看该作者
定时器0中断太频繁,不设置高优先级的话,定时100us精度无法保证,会有很大误差。这个芯片自带PWM的,为啥要用定时器模拟?

使用特权

评论回复
24
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才有作用
   

使用特权

评论回复
25
LKC134|  楼主 | 2019-7-23 20:40 | 只看该作者
看了网上一些例程这样设置是有作用,这把我搞懵了.

使用特权

评论回复
26
LKC134|  楼主 | 2019-7-23 20:46 | 只看该作者

这位兄台,请教下switch(pause_state),这个'pause_state'从那定义来的?

使用特权

评论回复
27
叶春勇| | 2019-7-23 21:27 | 只看该作者
LKC134 发表于 2019-7-23 20:46
这位兄台,请教下switch(pause_state),这个'pause_state'从那定义来的?

状态机的写法 ,自己定义个

使用特权

评论回复
28
cjseng| | 2019-7-23 22:05 | 只看该作者
LKC134 发表于 2019-7-23 20:38
如:/*********定时器初始化*********/
void time0_Init(void)   interrupt 1
{

你是不是把定时器0的初始化和中断写反了?

使用特权

评论回复
29
LKC134|  楼主 | 2019-7-24 08:02 | 只看该作者
@cjseng  上面只是例句,不小心写多了,(void timer0()).

使用特权

评论回复
30
LKC134|  楼主 | 2019-7-24 08:04 | 只看该作者
@叶春勇  多谢了,有疑问再向你计教。

使用特权

评论回复
31
LKC134|  楼主 | 2019-7-24 08:05 | 只看该作者
是讨教,上面打错了。

使用特权

评论回复
32
cjseng| | 2019-7-24 11:51 | 只看该作者
把定时器0的中断优先级提高,否则定时器0会错过很多次中断。
另外,我的习惯是,定时器赋初值前,先把定时器关闭,赋值以后再打开比较好,否则赋值的同时,定时器还在工作(计时),打开、关闭、赋值,都需要消耗时间,所以,初始值要调整一下,根据晶振频率,适当调整。

使用特权

评论回复
33
LKC134|  楼主 | 2019-7-24 14:45 | 只看该作者
多谢各位!现在两个定时器都可以工作了,原因是由于定时器0设置在PWM输出,占空比设置100会没有波形输出一直是高电平,以为定时器不工作,因为刚开始是没问题的,占空比设置0也不行,不知这是不是算死区了?

使用特权

评论回复
34
LKC134|  楼主 | 2019-7-24 16:28 | 只看该作者

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

第一次用PID控温项目,目前通电PID没加热,怀疑AD采样部分有问题,另外PID部分有劳各位大神指点下看对不对?

使用特权

评论回复
35
LKC134|  楼主 | 2019-7-24 17:28 | 只看该作者
没有显示部分,不用查数据表吧?

使用特权

评论回复
36
JasonLee27| | 2019-7-25 09:48 | 只看该作者
定时器2的中断里面的执行代码追朔下去有调用延时,感觉应该是你定时器2的代码执行时间超过了执行周期,且优先级大于定时器1,所以导致1无法响应,可以抬高定时器1中断优先级确认问题,但要解决的话还是要处理好定时器2执行时间过长的问题

使用特权

评论回复
37
JasonLee27| | 2019-7-25 09:51 | 只看该作者
JasonLee27 发表于 2019-7-25 09:48
定时器2的中断里面的执行代码追朔下去有调用延时,感觉应该是你定时器2的代码执行时间超过了执行周期,且优 ...

或者说你把LED_TSK2中的延时注释掉,应该就不会出现你说的问题了。

使用特权

评论回复
38
LKC134|  楼主 | 2019-7-25 14:51 | 只看该作者
@JasonLee27      我已经删掉了,改用定时器作闪灯,编译没出现问题,但就是不发热。我改用一路独立AD输入,目标值设在500的AD值,都是没反应。

使用特权

评论回复
39
叶春勇| | 2019-7-25 17:57 | 只看该作者
LKC134 发表于 2019-7-25 14:51
@JasonLee27      我已经删掉了,改用定时器作闪灯,编译没出现问题,但就是不发热。我改用一路独立AD输入 ...

先写过开关控制,到某温度停,到某温度加热。确定软件框架能工作不?

使用特权

评论回复
40
LKC134|  楼主 | 2019-7-25 20:36 | 只看该作者
叶春勇 发表于 2019-7-25 17:57
先写过开关控制,到某温度停,到某温度加热。确定软件框架能工作不?

多谢! 明天先写个简单的控制模式找下原因.

使用特权

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

本版积分规则