求教!关于AT89C52定时器初值问题!
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位寄存器。