我在写一个室温调控的程序同时用到了定时器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 分
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
不是500s,还要加多两个0,50000s加一次miao。你能等到它加1是个奇迹。
- TMOD |= 0x20;//定时器T1初始化
- TH1=0x06;
- TL1=0x06;
- EA=1;
- TMOD |= 0x02;
- TH0=0x00; //定时器T0初始化
- TL0=0x00;
- ET0=1;
- TR0=1;
- 。。。。。。。。。
- void dsq_t1() interrupt 3
- {
- us_250++;
- if(us_250==4000)
- {
- us_250=0;
- miao++;
- if(miao==60)
- {
- miao=0;
- fen++;
- }
- }
- }
复制代码主要是你的定时器1的工作方式你以为是你写的TMOD = 0X20工作方式2,其实在下面定时0那里TMOD=0x02你就把定时器1的工作方式改变了,TMOD第5位和第6位的值变成了0,定时器1的工作方式就被你改变为工作方式0,13位定时器了
下载了你的程序来看,没注释太难看下去了,你发的这个问题就是定时器工作方式被你改变了。
按你说的改了 ,可是t1变慢了 大概一分钟变成一分十几秒 了。
后来我发现是优先级问题 t1的优先级比t0和int0的低,所以才导致变慢的。加了PT1=1;后
t1倒是正常了 ,可t0,好像就不正常了,我的t0是红外遥控用的 ,现在遥控不好使了。
非常感谢您关注我的问题 !
优先级不是什么大问题,主要是你在中断服务函数里面处理数据,一般不会再中断里面处理数据的,建议你在中断服务函数里面给标志位,在主函数里面处理。除非一定要在中断服务函数处理数剧
一周热门 更多>