关于51单片机定时器的疑问

void T0_Init(void)
{
TMOD|=0x01;
TMOD&=0xf1;
EA=1;ET0=1;
TR0=1;

}

这是什么意思?为什么要这样鉴值?又与又或的,而且还两次,这样做有什么好处?

TH0=a/256;TL0=a%256;

/或%256是什么意思?/或%256后会怎么样?数值上有何变化?和用(65536-计数初值)X机器周期计算有何不同?

1、这个函数是初始化TO,意思是将T0初始化为16位定时器(置位TMOD的0位,清TMOD的1、2、3位),并开启T0和中断总开关。
这样操作是有些繁琐,你也可以直接写为TMOD=设定值,但这样写有一个缺点,就是也直接改动了对T1的设置,如果T1在其它地方已做了初始化,那你也就无意中改动了T1,会造成你不想要的结果。所以这样对TO初始化虽有此繁但也有它的优点。
2、TH0=a/256;TL0=a%256; 这样写是将16位写时器初值直接符给INT类型数值A,A也可以是予定义值, 如:#define a 65530也就是 a= 0xfffa
TH0=A/256,TL0=A%256,也就是TH0=0XFF;TL0=0XFA. 这样写是A可以定义在头文件中,增强了程序的可读性。如果你程序中有多处要对定时器符初值,你可要改头文件就行了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-11-05
不改变以前是设置。
TH0=a/256; 取高八位
TL0=a%256; 取低八位

八位最大是256,第1个是a除以256,到底高八位
第2个是a对256求余,指的是除以256后,留下的余数,即低八位。
都是通过后边的公式算出来的。
第2个回答  2008-11-05
TMOD|=0x01的意思是把TMOD的是低位置1,TMOD&=0xf1是把TMOD的低三位置零
EA=1;开放全局中断,ET0=1;开放定时器0中断

TH0=a/256;是把THO等于a除以256意思是取a的高16位,TL0=a%256;是把TL0取a的低16位
这个a就是要定时的机器周期数,
第3个回答  2008-11-05
/256是对a求模,也就是整型变量a的高8位,%/256是对a求256的余数,也就是a的低8位
第4个回答  2008-11-05