定时器0和1会不会冲突了,定时器1的时间变得很快

2019-07-15 17:46发布

我在写一个室温调控的程序同时用到了定时器0和1。定时器1用的是工作方式1,定时器0用的是工作方式2,(初始化不启动定时器1,在程序后边在启动定时器1,         ET1=1;TR1=1;)。可是定时器1,溢出时间变快了 ,好像是        TMOD=0x10;        TMOD=0x02;冲突了?怎么回事啊?我把TMOD=0x10;删了,结果还是不变。
实在弄不明白了 请大神指教。
        EA=1;
        TMOD=0x10;//定时器T1初始化
        TH1=0x3c;
        TL1=0xb0;

        TMOD=0x02;
        TH0=0x00;        //定时器T0初始化
        TL0=0x00;
        ET0=1;
        TR0=1;
室温调控.zip 下载积分: 积分 -1 分
70.24 KB, 下载次数: 24, 下载积分: 积分 -1 分
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
19条回答
joinking
1楼-- · 2019-07-16 19:03
本帖最后由 joinking 于 2015-3-5 14:27 编辑
joinking 发表于 2015-3-5 13:59
不说你程序问题,你这个定时器是1us加一次的吧,50000次一次中断就是50ms,50*250*40000=500000000us=500 ...

不是500s,还要加多两个0,50000s加一次miao。你能等到它加1是个奇迹。
joinking
2楼-- · 2019-07-16 21:34
 精彩回答 2  元偷偷看……
joinking
3楼-- · 2019-07-16 23:49
本帖最后由 joinking 于 2015-3-5 14:26 编辑
  1. TMOD |= 0x20;//定时器T1初始化
  2.         TH1=0x06;
  3.         TL1=0x06;
  4.         EA=1;

  5.         TMOD |= 0x02;
  6.         TH0=0x00;        //定时器T0初始化
  7.         TL0=0x00;
  8.         ET0=1;
  9.         TR0=1;
  10. 。。。。。。。。。


  11. void dsq_t1() interrupt 3
  12. {      
  13.         us_250++;
  14.         if(us_250==4000)
  15.         {
  16.                 us_250=0;
  17.                 miao++;        
  18.                 if(miao==60)
  19.                 {
  20.                         miao=0;
  21.                         fen++;
  22.                 }
  23.         }
  24. }
复制代码

主要是你的定时器1的工作方式你以为是你写的TMOD = 0X20工作方式2,其实在下面定时0那里TMOD=0x02你就把定时器1的工作方式改变了,TMOD第5位和第6位的值变成了0,定时器1的工作方式就被你改变为工作方式0,13位定时器了
joinking
4楼-- · 2019-07-17 01:06
本帖最后由 joinking 于 2015-3-5 14:33 编辑
joinking 发表于 2015-3-5 14:07
不好意思,看错了两次,你标题的和发出来的程序我混淆了,改成这样吧

下载了你的程序来看,没注释太难看下去了,你发的这个问题就是定时器工作方式被你改变了。
魏东
5楼-- · 2019-07-17 04:38
joinking 发表于 2015-3-5 14:09
下载了你的程序来看,没注释太难看下去了,你发的这个问题就是定时器工作方式被你改变了。 ...

按你说的改了  ,可是t1变慢了 大概一分钟变成一分十几秒 了。
后来我发现是优先级问题 t1的优先级比t0和int0的低,所以才导致变慢的。加了PT1=1;后
t1倒是正常了 ,可t0,好像就不正常了,我的t0是红外遥控用的 ,现在遥控不好使了。
非常感谢您关注我的问题 !


joinking
6楼-- · 2019-07-17 09:29
本帖最后由 joinking 于 2015-3-5 16:12 编辑
魏东 发表于 2015-3-5 15:55
按你说的改了  ,可是t1变慢了 大概一分钟变成一分十几秒 了。
后来我发现是优先级问题 t1的优先级比t0和 ...

优先级不是什么大问题,主要是你在中断服务函数里面处理数据,一般不会再中断里面处理数据的,建议你在中断服务函数里面给标志位,在主函数里面处理。除非一定要在中断服务函数处理数剧

一周热门 更多>