找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4576|回复: 9
打印 上一主题 下一主题
收起左侧

请问单片机定时器怎样精确延时1S

[复制链接]
跳转到指定楼层
楼主
ID:103131 发表于 2021-4-16 13:01 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    定时器最高只能达到65536次,也就是只能延时60MS,我想延时1S,不想用在中断函数里,有什么方法?
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:668693 发表于 2021-4-16 16:04 | 只看该作者
先定时10MS,在中断里面给一个标志位然后在清掉,在定义一个变量,在其他程序里面判断有这个标志位然后变量++,加到100次。
回复

使用道具 举报

板凳
ID:103131 发表于 2021-4-16 16:24 | 只看该作者
林神经 发表于 2021-4-16 16:04
先定时10MS,在中断里面给一个标志位然后在清掉,在定义一个变量,在其他程序里面判断有这个标志位然后变量 ...

这个我明白,可是我想要的是好像DELAY函数这种延时,用在定时器里面,1S
回复

使用道具 举报

地板
ID:906918 发表于 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清零。
   }
回复

使用道具 举报

5#
ID:103131 发表于 2021-4-16 17:23 | 只看该作者
1490211360a 发表于 2021-4-16 16:33
这是我们课件上的

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

好,谢谢你的帮忙
回复

使用道具 举报

6#
ID:548551 发表于 2021-4-16 19:09 | 只看该作者
goldbirderman 发表于 2021-4-16 16:24
这个我明白,可是我想要的是好像DELAY函数这种延时,用在定时器里面,1S

不是很明白你的意思? 都用定时器了为什么还要用延时呢? 即使你需要用延时,也完全可以用定时来带替延时啊。 比如三个灯分别在 1 2  3秒的时候亮,到第2秒的时候把第一个关闭了,第3的时候把第一第二关了一样的想过啊。 这也可以理解为延时啊。 并且这样的程序容易修改啊。 程序要有可读性, 可改性。不是说写出来就完事了,要方便自己下次有需求的时候修改,或者人家能修改。
回复

使用道具 举报

7#
ID:328014 发表于 2021-4-16 19:30 | 只看该作者
精确延时可以这样调试:http://www.51hei.com/bbs/dpj-4711-1.html
回复

使用道具 举报

8#
ID:57657 发表于 2021-4-16 22:50 | 只看该作者
林神经 发表于 2021-4-16 16:04
先定时10MS,在中断里面给一个标志位然后在清掉,在定义一个变量,在其他程序里面判断有这个标志位然后变量 ...

不如50MS加20次,这样误差更小。
回复

使用道具 举报

9#
ID:103131 发表于 2021-4-16 23:23 | 只看该作者
谢谢各位的帮忙
回复

使用道具 举报

10#
ID:390416 发表于 2021-4-17 07:45 | 只看该作者
你去看完我这个贴子,你就会发现你的想法很不好 http://www.51hei.com/bbs/dpj-204176-1.html
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表