51单片机定时器设置:

TMOD = (TMOD & 0XF0) | 0X01; //定时器0工作在模式1,16Bit定时器模式
上述表达式中0XF0的作用是什么?
问题补充:难道高四位要为1111?

TMOD = (TMOD & 0XF0) | 0X01; //定时器0工作在模式1,16Bit定时器模式
上述表达式中0XF0的作用是什么?
1 (TMOD & 0XF0) 其中&为逻辑与指令,按位与操作,定时器的模式寄存器TMOD与上0XF0的作用是高4位不变,低4位被清零。(1与上任何数 不变 0与上任何数 被清零)
(TMOD & 0XF0) | 0X01其中 | 为或指令,也叫逻辑加。这里的作用是高7位或上0 不变
最低位或上1 被置1.
操作完成后,TMOD =高4位不变(定时器1的模式字不变)低4位被设为0001(即定时器0被设为定时方式、工作在方式1)

总结:表达式中0XF0的作用是在设置定时器0的模式字时,不影响不改变定时器1的模式控制字。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-07-09
0xF0是清除低4位的值然后再与上0x01
高4位是不受影响的,与运输是全1出1有0出0,所以高4位的值不会改变。低4位就全部变成0了。
最后的|0x01就给低4位赋值1
主要就是在不影响T1的情况下给T0重新赋值。
第2个回答  2012-07-09
这个的意思是报纸TMOD的高四位为原值不变化,低四位则全变为0.后面|0x01则是把第0位置1
整体的意思是TMOD高四位不变,低四位设置为0x01,即定时器0工作在方式1.
TMOD假设为0X22
TMOD&0XF0之后就变为0x20
再|0x01之后就变为0x21
懂了么,楼主?
第3个回答  2015-11-07
主程序中:
TMOD = 0x01;//定时器0工作方式1
TL0 = (65536-50000)%256;//定时50ms,在12MHz外部晶振下
TH0 = (65536-50000)/256;
ET0 = 1;
TR0 = 1;
EA = 1;

定时器中断:
void timer0() interrupt 1
{
TL0 = (65536-50000)%256;
TH0 = (65536-50000)/256;
{此处添加你想通过定时要干的事情,也可以添加标志位,延长定时时间}
}
第4个回答  2012-07-09
取决于这个表达式之前的TMOD值是什么