标题: 请问单片机定时器怎样精确延时1S [打印本页]

作者: goldbirderman    时间: 2021-4-16 13:01
标题: 请问单片机定时器怎样精确延时1S
    定时器最高只能达到65536次,也就是只能延时60MS,我想延时1S,不想用在中断函数里,有什么方法?

作者: 林神经    时间: 2021-4-16 16:04
先定时10MS,在中断里面给一个标志位然后在清掉,在定义一个变量,在其他程序里面判断有这个标志位然后变量++,加到100次。
作者: goldbirderman    时间: 2021-4-16 16:24
林神经 发表于 2021-4-16 16:04
先定时10MS,在中断里面给一个标志位然后在清掉,在定义一个变量,在其他程序里面判断有这个标志位然后变量 ...

这个我明白,可是我想要的是好像DELAY函数这种延时,用在定时器里面,1S
作者: 1490211360a    时间: 2021-4-16 16:33
这是我们课件上的

用T1方式0实现1秒延时函数如下:
void delay1s()
{  
  unsigned char i;
  TMOD=0x00;               // 置T1为工作方式0
  for(i=0;i<200;i++)       // 设置200次循环次数
{     
   TH1=(8192-5000)/32;     // 设置定时器初值
   TL1=(8192-5000)%32;
   TR1=1;                    // 启动T1
   while(!TF1);   // 查询计数是否溢出,即定时5ms时间到,TF1=1。
   TF1=0;        // 5ms定时时间到,将定时器溢出标志位TF1清零。
   }
作者: goldbirderman    时间: 2021-4-16 17:23
1490211360a 发表于 2021-4-16 16:33
这是我们课件上的

用T1方式0实现1秒延时函数如下:

好,谢谢你的帮忙
作者: xqleft    时间: 2021-4-16 19:09
goldbirderman 发表于 2021-4-16 16:24
这个我明白,可是我想要的是好像DELAY函数这种延时,用在定时器里面,1S

不是很明白你的意思? 都用定时器了为什么还要用延时呢? 即使你需要用延时,也完全可以用定时来带替延时啊。 比如三个灯分别在 1 2  3秒的时候亮,到第2秒的时候把第一个关闭了,第3的时候把第一第二关了一样的想过啊。 这也可以理解为延时啊。 并且这样的程序容易修改啊。 程序要有可读性, 可改性。不是说写出来就完事了,要方便自己下次有需求的时候修改,或者人家能修改。
作者: 51hei团团    时间: 2021-4-16 19:30
精确延时可以这样调试:http://www.51hei.com/bbs/dpj-4711-1.html
作者: npn    时间: 2021-4-16 22:50
林神经 发表于 2021-4-16 16:04
先定时10MS,在中断里面给一个标志位然后在清掉,在定义一个变量,在其他程序里面判断有这个标志位然后变量 ...

不如50MS加20次,这样误差更小。
作者: goldbirderman    时间: 2021-4-16 23:23
谢谢各位的帮忙
作者: 人人学会单片机    时间: 2021-4-17 07:45
你去看完我这个贴子,你就会发现你的想法很不好 http://www.51hei.com/bbs/dpj-204176-1.html




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1