标题: 单片机8位和16位定时器区别? [打印本页]

作者: 可爱萌萌哒    时间: 2020-4-20 13:46
标题: 单片机8位和16位定时器区别?
这是5ms定时,为什么两者的灯光差距有点大?

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

Screenshot_20200420_134103.jpg

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

Screenshot_20200420_134057.jpg

作者: limuzi2012    时间: 2020-4-20 16:40
定时器单步计数一致的话,16位就比8位的定时器行程更长一些
作者: wulin    时间: 2020-4-20 17:06
设置8位自动重装定时器,当TL0溢出时将TR0硬件置1,并将TH0存放的值自动重装入TL0。最多定时256us,不可能定时5ms。楼主这两个程序都写错了。
作者: 可爱萌萌哒    时间: 2020-4-20 18:07
wulin 发表于 2020-4-20 17:06
设置8位自动重装定时器,当TL0溢出时将TR0硬件置1,并将TH0存放的值自动重装入TL0。最多定时256us,不可能定 ...

我赋初值6,循环了20次,=(256-6)*20这样也不对吗,能指点一下这两个程序错的地方吗?刚开始学,好多地方不懂?谢谢
作者: 可爱萌萌哒    时间: 2020-4-20 18:08
limuzi2012 发表于 2020-4-20 16:40
定时器单步计数一致的话,16位就比8位的定时器行程更长一些

您看一下,这两个程序有问题吗,我弄了一天了,刚开始学,好多地方不懂,谢谢
作者: wulin    时间: 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. }
复制代码

作者: 可爱萌萌哒    时间: 2020-4-21 21:44
wulin 发表于 2020-4-20 20:56
以下两个程序定时器设置不同,但得到的延时时间是一样的。

谢谢,研究一下
作者: miss999    时间: 2020-4-21 22:21
这定时器活活用成了软件延时了,高手
作者: azure1986    时间: 2020-4-22 11:19
8位的时间很短。最多256us
作者: 可爱萌萌哒    时间: 2020-4-23 02:08
miss999 发表于 2020-4-21 22:21
这定时器活活用成了软件延时了,高手

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




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