标题: 关于单片机定时器赋初值的问题,程序里的值和定时计算器的值为什么不一样呢? [打印本页]

作者: 芙蓉焊料    时间: 2022-12-17 13:58
标题: 关于单片机定时器赋初值的问题,程序里的值和定时计算器的值为什么不一样呢?
请教老师,关于定时器赋初值的问题,程序里的值和定时计算器的值为什么不一样呢?




作者: Hephaestus    时间: 2022-12-17 16:43
三张图,上下两张一样,中间不一样,2:1判断中间错了。
作者: coody_sz    时间: 2022-12-17 17:22
应该是(65536-5000)
作者: wulin    时间: 2022-12-17 20:12
谁是对的,仿真图为证。下面是验证程序。


  1. #include<reg51.h>

  2. sbit LED1=P2^0;
  3. sbit LED2=P2^1;

  4. void Timer_Init(void)//5毫秒@12.000MHz
  5. {
  6.         TMOD= 0x00;                //设置定时器模式
  7.         TL0 = 0xC0;                //设置定时初始值
  8.         TH0 = 0x63;                //设置定时初始值
  9.         TL1 = 0x78;                //设置定时初始值
  10.         TH1 = 0x0c;                //设置定时初始值
  11.         TR0 = 1;                        //定时器0开始计时
  12.         TR1 = 1;                        //定时器1开始计时
  13.         ET0 = 1;
  14.         ET1 = 1;
  15.         EA = 1;
  16. }

  17. void main(void)
  18. {
  19.         Timer_Init();
  20.         while(1);
  21. }

  22. void Timer0Interrupt() interrupt 1
  23. {
  24.         TL0 = 0xC0;                //设置定时初始值
  25.         TH0 = 0x63;                //设置定时初始值
  26.         LED1=~LED1;
  27. }

  28. void Timer1Interrupt() interrupt 3
  29. {
  30.         TL1 = 0x78;                //设置定时初始值
  31.         TH1 = 0x0c;                //设置定时初始值
  32.         LED2=~LED2;
  33. }
复制代码




作者: wulin    时间: 2022-12-18 08:32
Hephaestus 发表于 2022-12-17 16:43
三张图,上下两张一样,中间不一样,2:1判断中间错了。

恰恰相反,中间图是对的。由于很少用到13位定时器,很多人对13位定时器的理解是想当然。



作者: 芙蓉焊料    时间: 2022-12-18 09:35
wulin 发表于 2022-12-17 20:12
谁是对的,仿真图为证。下面是验证程序。

学习了,但是没看懂
作者: Y_G_G    时间: 2022-12-18 17:35
8051的定时器是计数器加到65536就溢出,产生中断和溢出
TH0和TL0是用来存放初始值的两个寄存器
其它的自己计算就行了,实在不明白,看STC89C52的定时器章节,里面有说明




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