微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 定时器问题求教

定时器问题求教

时间:10-02 整理:3721RD 点击:


哪位大神教我一下, 这个定时器采用模式1,16位计数模式,在TH0。TL0的设置中, 怎么初值设置是ox0005,程序得到的TH0和TL0感觉不对呀,

程序应该在EA=1之后,给TH0、TH1赋初值,如果晶振是12Mhz的话,你的LED灯亮灭一次的周期大约是65ms的时间。肉眼好像观察不出亮灭吧。

我想问的是,如果定时周期是65ms。那么TH0=(65535-65000)/256,TL0=(65535-65000)%256, 算的跟程序里面不一样吧。


你写的程序,请问你的定时周期是多少呢?
TH0 TL0的大小还跟晶振有关系的。

我现在用的是12MHZ晶振, 定时周期如果为65ms那么我算出的TH0=0x02
     TL0=0x17,为什么在实验显示上面,对于设置这个TH0、TL0,闪烁频率变化不是很明显呢

  1. #include<reg52.h>
  2. int num;
  3. void main()
  4. {
  5.   TMOD=0x01;
  6.   TH0=(65536-50000)/256; //12M晶振  周期50ms
  7.   TL0=(65536-50000)%256;
  8.   EA=1; //开总中断
  9.   ET0=1;
  10.   TR0=1;
  11.   while(1);
  12. }
  13. void timer0() interrupt 1
  14. {
  15.   TH0=(65536-50000)/256;
  16.   TL0=(65536-50000)%256;
  17.   num++;//进入中断计数器家1
  18.   if(num==20) //20*50ms=1s 1s后led灯反转
  19.   {
  20.     num=0;
  21.     P1^0=~P1^0;
  22.   }
  23. }

复制代码


记事本中写的,没有编译过,看看能不能理解

嗯!能理解了,有了 num++;//进入中断计数器家1  if(num==20) //20*50ms=1s 1s后led灯反转
  {
    num=0;
    P10=~P1^0;
  },灯闪烁的就能很明显观察到了,
谢谢!那是不是所有灯闪烁的时候都要加延时呢?偏于观察

感谢分享!加油!

因为你的中断时间太短了,没怎么看得出led的变化。

定时时间太短了,TH0 TL0这是16位计时器高低八位最大为2的16次方,如果晶振为12的话最大延时65536UM,你这里设置的是5个UM

ou,明白啦,谢谢

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top