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

求教!关于AT89C52定时器初值问题!

时间:10-02 整理:3721RD 点击:
#include<reg52.h>
sbit d1=P1^0;
int m,num;
main()
{ m=40;
  
  TMOD=0x01;
  TH0=(65536-m)/256;
  TL0=(65536-m)%256;
  EA=1;
  ET0=1;
  TR0=1;

  while(1);
  
  
}
void T0_timer() interrupt 1
{
  TH0=(65536-m)/256;
  TL0=(65536-m)%256;
  d1=~d1;
}
****************************************************************
#include<reg52.h>
sbit d1=P1^0;
int m,num;
main()
{   
  TMOD=0x01;
  TH0=(65536-40)/256;
  TL0=(65536-40)%256;
  EA=1;
  ET0=1;
  TR0=1;

  while(1);
  
  
}
void T0_timer() interrupt 1
{
  TH0=(65536-40)/256;
  TL0=(65536-40)%256;
  d1=~d1;
}
************************************************************
晶振的频率为11.0592,为什么直接赋值40的时候,频率为几K,而赋值为m的时候,频率只有314HZ?求高人指点!

如果,定时器初值不能装变量m的话,如何用定时器分时产生两个频率?比如先产生一个5K的频率,5ms后再产生一个10K的频率,跪求高人指点!

你最后是怎么解决这个问题的   时效性问题我现在也遇到了 跪求解答

你最后是怎么解决这个问题的   时效性问题我现在也遇到了 跪求解答

可能是不同数据类型运算出错,试试:
#include<reg52.h>
sbit d1=P1^0;
unsigned int m,num;
main()
{
        m=40;
       
        TMOD=0x01;
        TH0=(65536-m)/256;
        TL0=(65536-m)%256;
        EA=1;
        ET0=1;
        TR0=1;
       
        while(1);
       
       
}
void T0_timer() interrupt 1
{
        TH0=(65536-m)/256;
        TL0=(65536-m)%256;
        d1=~d1;
}
/*****************************************************************/
#include<reg52.h>
sbit d1=P1^0;
unsigned int m,num;
main()
{   
  TMOD=0x01;
  TH0=(65536-40)/256;
  TL0=(65536-40)%256;
  EA=1;
  ET0=1;
  TR0=1;
  while(1);
  
  
}
void T0_timer() interrupt 1
{
  TH0=(65536-40)/256;
  TL0=(65536-40)%256;
  d1=~d1;
}

不行改为:unsigned char型,因为TH0、TL0都是8位寄存器。

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

网站地图

Top