标题: TMOD&=0x0f;TMOD|=0x01; 这两句单片机代码什么意思? [打印本页]

作者: 进击的蜗牛    时间: 2018-1-1 21:50
标题: TMOD&=0x0f;TMOD|=0x01; 这两句单片机代码什么意思?
TMOD&=0x0f;   
  TMOD|=0x01;   


作者: HC6800-ES-V2.0    时间: 2018-1-1 21:50
TMOD是一个不能位寻址的寄存器,所以用此种方法赋值。
TMOD&=0x0f的意思是:TMOD=(TMOD&0x0f),&与运算的作用是“有0得0”,则这条语句,让TMOD高四位清零,并保存低四位不变化。
TMOD|=0x01的意思是:TMOD=(TMOD|0x01),|或运算的作用是“有1得1”,则这条语句,让TMOD低四位其它位不变,选择定时器0工作方式为方式1,即16位定时器。
作者: tomli    时间: 2018-1-2 07:29
按位与和按位或,这样是为了不影响其他函数调用TMOD的其他功能。
作者: wulin    时间: 2018-1-2 07:30
你写错了,应该是:
        TMOD &= 0xF0;                //清除定时器0模式位
        TMOD |= 0x01;                //设置为定时器0模式
作者: 747595610    时间: 2018-1-2 09:25
你那个是定时器的工作方式选择,定时器在MCU中有两个或者三个以上的定时器,主要用来定义定时器的工作方式,低四位呢是用来控制定时器0的工作方式的,高四位是用来定义定时器1的工作方式的,TMOD=0x11.就是0001 0001这样的话,就是两个定器一起定义了,两个都用了,两个定时器都为工作方式1
作者: paopao3297    时间: 2018-1-2 10:34
HC6800-ES-V2.0 发表于 2018-1-2 08:24
TMOD是一个不能位寻址的寄存器,所以用此种方法赋值。
TMOD&=0x0f的意思是:TMOD=(TMOD&0x0f),&与运算 ...

新手稍稍补充一下,0x是16进制标志,0xf0对应的二进制是1111 0000共8位,TMOD这些个寄存器都是8位的 ,也就是用这种方式来把寄存器的各个位置写成你想要的数值(0或1)。
作者: 张帅帅    时间: 2018-1-2 13:12
设置tmod控制字
作者: yzwzfyz    时间: 2018-1-2 20:25
查一下TMOD各个位的功能,就清楚其目的了。
也就知道还可以用其它方式来做这件事。
作者: 进击的蜗牛    时间: 2018-1-5 21:09
那和直接让TMOD=0x01有什么区别;
作者: dzbj    时间: 2021-5-27 01:07
进击的蜗牛 发表于 2018-1-5 21:09
那和直接让TMOD=0x01有什么区别;

结果一样但那么做可靠 因为假设之前定义第7位是1即0x80 这里再=0x01 之前的设定就被清除了 那么最终TMOD就不是0x81 而是0x01 就错了
作者: 18701931930    时间: 2021-5-27 08:24
遇到这种问题,首先你要先了解与运算和或运算到底怎么回事?
拿本子来验算一下,要不然下次碰到类似的问题还是没办法解决。
要知道:“授人以鱼,不如授之以渔”
作者: Tony5658    时间: 2023-9-22 23:06
dzbj 发表于 2021-5-27 01:07
结果一样但那么做可靠 因为假设之前定义第7位是1即0x80 这里再=0x01 之前的设定就被清除了 那么最终TMOD ...

其实很简单,TMOD |=0x01  //(0000 0001) 只对最低位赋1,设置T0定时器为工作方式1,其他定时器的工作方式和以前一样,不受影响。 如果是 TMOD=0x01,之前有其他定时器在工作,它的TMOD值就被清零了。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1