找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 25300|回复: 11
打印 上一主题 下一主题
收起左侧

TMOD&=0x0f;TMOD|=0x01; 这两句单片机代码什么意思?

  [复制链接]
跳转到指定楼层
楼主
ID:263267 发表于 2018-1-1 21:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
7黑币
TMOD&=0x0f;   
  TMOD|=0x01;   

最佳答案

查看完整内容

TMOD是一个不能位寻址的寄存器,所以用此种方法赋值。 TMOD&=0x0f的意思是:TMOD=(TMOD&0x0f),&与运算的作用是“有0得0”,则这条语句,让TMOD高四位清零,并保存低四位不变化。 TMOD|=0x01的意思是:TMOD=(TMOD|0x01),|或运算的作用是“有1得1”,则这条语句,让TMOD低四位其它位不变,选择定时器0工作方式为方式1,即16位定时器。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶2 踩1
回复

使用道具 举报

沙发
ID:164602 发表于 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位定时器。
回复

使用道具 举报

板凳
ID:14237 发表于 2018-1-2 07:29 | 只看该作者
按位与和按位或,这样是为了不影响其他函数调用TMOD的其他功能。
回复

使用道具 举报

地板
ID:213173 发表于 2018-1-2 07:30 | 只看该作者
你写错了,应该是:
        TMOD &= 0xF0;                //清除定时器0模式位
        TMOD |= 0x01;                //设置为定时器0模式
回复

使用道具 举报

5#
ID:269986 发表于 2018-1-2 09:25 来自手机 | 只看该作者
你那个是定时器的工作方式选择,定时器在MCU中有两个或者三个以上的定时器,主要用来定义定时器的工作方式,低四位呢是用来控制定时器0的工作方式的,高四位是用来定义定时器1的工作方式的,TMOD=0x11.就是0001 0001这样的话,就是两个定器一起定义了,两个都用了,两个定时器都为工作方式1
回复

使用道具 举报

6#
ID:266854 发表于 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)。
回复

使用道具 举报

7#
ID:268704 发表于 2018-1-2 13:12 | 只看该作者
设置tmod控制字
回复

使用道具 举报

8#
ID:123289 发表于 2018-1-2 20:25 | 只看该作者
查一下TMOD各个位的功能,就清楚其目的了。
也就知道还可以用其它方式来做这件事。
回复

使用道具 举报

9#
ID:263267 发表于 2018-1-5 21:09 | 只看该作者
那和直接让TMOD=0x01有什么区别;
回复

使用道具 举报

10#
ID:47286 发表于 2021-5-27 01:07 来自手机 | 只看该作者
进击的蜗牛 发表于 2018-1-5 21:09
那和直接让TMOD=0x01有什么区别;

结果一样但那么做可靠 因为假设之前定义第7位是1即0x80 这里再=0x01 之前的设定就被清除了 那么最终TMOD就不是0x81 而是0x01 就错了
回复

使用道具 举报

11#
ID:554500 发表于 2021-5-27 08:24 | 只看该作者
遇到这种问题,首先你要先了解与运算和或运算到底怎么回事?
拿本子来验算一下,要不然下次碰到类似的问题还是没办法解决。
要知道:“授人以鱼,不如授之以渔”
回复

使用道具 举报

12#
ID:1093578 发表于 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值就被清零了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表