单片机程序 TMOD&=0x0f; TMOD|=0x01;有什么作用

如题所述

TMOD &= 0x0F; 按位与,就是把 TMOD 的 最右边的 二进制 4 位 留着不变,其它位全部清 0。
即 TMOD = TMOD & 0x0f; [清 T1, 保留 T0]
TMOD |= 0x01; 则是 把 刚才留下的 4 位里 最 右 1 位 二进制 设为 1。
即 TMOD = TMOD | 0x01 [运行T0的要求,最右1位 二进制 设为 1]。追问

tmod│=0x01 最右设为一 这样做有什么用呢 假如tmod为0x02 那么或0x01不就成0x03了?

追答

2进制1位对应1条线,或1个事件。例如 1111 对应4条线
0x02 为 0010 3条线0,1条线 1
0x03 为 0011 它不影响 原来那条线的状态。
运行T0要求 最右1位开通,设 1。

追问

tmod不是设置工作方式么
tmod最右一位不是m0吗 m0和m1不是用来设置定时器工作方式吗 为什么运行t0要求 最右一位开通?

追答

TMOD|=0x01 就是 设 tmod最右一位 为 1。 原来是1,设后还是1,原来不是1 ,设置为1。
至于为何,我说不上来,应当是硬件要求吧。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-05-15
TMOD&=0x0F; //这样是为了清除低位,即: bxxxx0000
TMOD|=0x01;//是置最后一位1,即 bxxxx0000 | b00000001 = bxxxx0001追问

tmod│=0x01 最右设为一 这样做有什么用呢 假如tmod为0x02 那么或0x01不就成0x03了?tmod不是用来设置定时器的工作方式吗

追答

tmod是设定时模式,tmod已经在前一句通过&运算低变成0了,哪来的0x02?

追问

第一句是高四位清零吧

追答

哦,确实,
TMOD默认是0值,系统简单可以直接或值,复杂的常操作就像你说的,可以连低位一起清掉,防止意外。

相似回答