找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机8位和16位定时器区别?

[复制链接]
跳转到指定楼层
楼主
ID:711481 发表于 2020-4-20 13:46 来自手机 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这是5ms定时,为什么两者的灯光差距有点大?

Screenshot_20200420_134103.jpg (182.04 KB, 下载次数: 99)

Screenshot_20200420_134103.jpg

Screenshot_20200420_134057.jpg (159.57 KB, 下载次数: 108)

Screenshot_20200420_134057.jpg
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:510933 发表于 2020-4-20 16:40 | 只看该作者
定时器单步计数一致的话,16位就比8位的定时器行程更长一些
回复

使用道具 举报

板凳
ID:213173 发表于 2020-4-20 17:06 | 只看该作者
设置8位自动重装定时器,当TL0溢出时将TR0硬件置1,并将TH0存放的值自动重装入TL0。最多定时256us,不可能定时5ms。楼主这两个程序都写错了。
回复

使用道具 举报

地板
ID:711481 发表于 2020-4-20 18:07 来自手机 | 只看该作者
wulin 发表于 2020-4-20 17:06
设置8位自动重装定时器,当TL0溢出时将TR0硬件置1,并将TH0存放的值自动重装入TL0。最多定时256us,不可能定 ...

我赋初值6,循环了20次,=(256-6)*20这样也不对吗,能指点一下这两个程序错的地方吗?刚开始学,好多地方不懂?谢谢
回复

使用道具 举报

5#
ID:711481 发表于 2020-4-20 18:08 来自手机 | 只看该作者
limuzi2012 发表于 2020-4-20 16:40
定时器单步计数一致的话,16位就比8位的定时器行程更长一些

您看一下,这两个程序有问题吗,我弄了一天了,刚开始学,好多地方不懂,谢谢
回复

使用道具 举报

6#
ID:213173 发表于 2020-4-20 20:56 | 只看该作者
可爱萌萌哒 发表于 2020-4-20 18:07
我赋初值6,循环了20次,=(256-6)*20这样也不对吗,能指点一下这两个程序错的地方吗?刚开始学,好多地 ...

以下两个程序定时器设置不同,但得到的延时时间是一样的。
  1. #include <reg51.h>
  2. #include <intrins.h>

  3. void Timer0Init()        //50毫秒@12.000MHz
  4. {
  5.         TMOD= 0x01;                //设置定时器模式
  6.         TL0 = 0xB0;                //设置定时初值
  7.         TH0 = 0x3C;                //设置定时初值
  8.         TF0 = 0;                        //清除TF0标志
  9.         TR0 = 1;                        //定时器0开始计时
  10. }

  11. void main()
  12. {
  13.         unsigned char i;
  14.         Timer0Init();
  15.         P1=0xfe;
  16.         while(1)
  17.         {
  18.                 if(TF0==1)       
  19.                 {
  20.                         TF0=0;
  21.                         TL0 = 0xB0;                //重装值
  22.                         TH0 = 0x3C;                //重装值
  23.                         i++;
  24.                         if(i==20)  //50ms*20=1s
  25.                         {
  26.                                 i=0;
  27.                                 P1=_crol_(P1,1);
  28.                         }
  29.                 }
  30.         }
  31. }
复制代码

  1. #include <reg51.h>
  2. #include <intrins.h>

  3. void Timer0Init(void)//250微秒@12.000MHz
  4. {
  5.         TMOD= 0x02;                //设置定时器模式
  6.         TL0 = 0x06;                //设置定时初值
  7.         TH0 = 0x06;                //设置定时重载值
  8.         TF0 = 0;                        //清除TF0标志
  9.         TR0 = 1;                        //定时器0开始计时
  10. }

  11. void main()
  12. {
  13.         unsigned int i;
  14.         Timer0Init();
  15.         P1=0xfe;
  16.         while(1)
  17.         {
  18.                 if(TF0==1)       
  19.                 {
  20.                         TF0=0;
  21.                         i++;
  22.                         if(i==4000)//250us*4000=1s
  23.                         {
  24.                                 i=0;
  25.                                 P1=_crol_(P1,1);
  26.                         }
  27.                 }
  28.         }
  29. }
复制代码
回复

使用道具 举报

7#
ID:711481 发表于 2020-4-21 21:44 来自手机 | 只看该作者
wulin 发表于 2020-4-20 20:56
以下两个程序定时器设置不同,但得到的延时时间是一样的。

谢谢,研究一下
回复

使用道具 举报

8#
ID:582109 发表于 2020-4-21 22:21 | 只看该作者
这定时器活活用成了软件延时了,高手
回复

使用道具 举报

9#
ID:717594 发表于 2020-4-22 11:19 | 只看该作者
8位的时间很短。最多256us
回复

使用道具 举报

10#
ID:711481 发表于 2020-4-23 02:08 来自手机 | 只看该作者
miss999 发表于 2020-4-21 22:21
这定时器活活用成了软件延时了,高手

刚开始学,那应该怎么用?刚接触单片机,
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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