社区导航

 

搜索
查看: 534|回复: 29

[求助] 写程序的时候看到的是TMOD=1,没有看到对每位的操作,这样8个位有啥意义? 还有些...

  [复制链接]

1048

TA的帖子

0

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

发表于 2020-6-24 11:27 | 显示全部楼层 |阅读模式

写程序的时候看到的是TMOD=1,没有看到对每位的操作,这样8个位有啥意义?还有些字节地址89H,在程序上好像也没有体现出来,那这个地址有啥作用呢?

此帖出自单片机论坛
QQ图片20200624112313.png

回复

使用道具 举报

1万

TA的帖子

143

TA的资源

版主

Rank: 6Rank: 6

技术导师勋章

发表于 2020-6-24 11:54 | 显示全部楼层

关于寄存器地址问题,一般在程序中不直接反映,因为那样程序很难直接读,涉及地址就需要查手册。所以,编程时都用头文件对一些关键的寄存器及其地址做个重定义,用一个字符串代替。字符串的含义可直接看明白,编程及读程序时就简单多了。

 

点评

你这里说的字符串是0X那样的十六进制吗   详情 回复 发表于 2020-6-24 13:44
上传了一些书籍资料,也许有你想要的:http://download.eeworld.com.cn/user/chunyang

回复

使用道具 举报

1万

TA的帖子

0

TA的资源

超级版主

Rank: 6Rank: 6

发表于 2020-6-24 11:56 | 显示全部楼层

“还有些字节地址89H,在程序上好像也没有体现出来,那这个地址有啥作用呢?”

物理上没有这么个存储单元,当然这个地址就没有意义。物理上有这么个存储单元,这个地址就有意义。至于实际上有没有这个存储单元,要看你使用的是哪个型号的单片机。


回复

使用道具 举报

1万

TA的帖子

143

TA的资源

版主

Rank: 6Rank: 6

技术导师勋章

发表于 2020-6-24 11:58 | 显示全部楼层

如前帖所言,在头文件中可以定义地址为89H的寄存器为TMOD,在程序中就使用“TMOD”这个字符串来操作寄存器。TMOD=1,就是置该寄存器的高7位为0,最低位为1。

点评

TMOD=1操作的是整个字节啊,不是位操作啊。为什么一定是0000 0001?  详情 回复 发表于 2020-6-24 12:04
上传了一些书籍资料,也许有你想要的:http://download.eeworld.com.cn/user/chunyang

回复

使用道具 举报

1万

TA的帖子

0

TA的资源

超级版主

Rank: 6Rank: 6

发表于 2020-6-24 12:02 | 显示全部楼层

对51系列单片机,地址89H对应的存储单元存在,所以该地址有意义。


回复

使用道具 举报

1048

TA的帖子

0

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

 楼主| 发表于 2020-6-24 12:04 | 显示全部楼层
chunyang 发表于 2020-6-24 11:58 如前帖所言,在头文件中可以定义地址为89H的寄存器为TMOD,在程序中就使用“TMOD”这个字符串来 ...

TMOD=1操作的是整个字节啊,不是位操作啊。为什么一定是0000 0001?

点评

“为什么一定是0000 0001?” 那是这条语句是对字节操作,也就是对8个位操作。    详情 回复 发表于 2020-6-24 14:03
正是对整个字节的操作才导致高7位为0,最低位为1。如果是位操作,高7位就不受影响。  详情 回复 发表于 2020-6-24 12:10
一些寄存器支持字节方式访问,也支持位方式访问。在一般情况下,两者运行效果没有区别。   另外不能用51单片机的概念去理解其它MCU,差别比较大,一些以前网上的教程,也容易把人带偏了。  详情 回复 发表于 2020-6-24 12:09

回复

使用道具 举报

1万

TA的帖子

143

TA的资源

版主

Rank: 6Rank: 6

技术导师勋章

发表于 2020-6-24 12:08 | 显示全部楼层

如果在不会编程、没有写过完整的嵌入式系统程序的情况下硬嚼器件手册,硬件水平足够的话,也就理解个硬件,而且还是局部理解,对编程中涉及的一些问题必然会理解不足。而嵌入式设计讲究最好软硬皆通,这样对提高开发质量很有意义,所以建议楼主先大致看器件手册,再去嚼编程,要先达到代码不出现原则性的语言应用错误和结构性错误的情况下,然后在写具体的程序时回过头来细嚼器件手册。

上传了一些书籍资料,也许有你想要的:http://download.eeworld.com.cn/user/chunyang

回复

使用道具 举报

1万

TA的帖子

13

TA的资源

版主

Rank: 6Rank: 6

测评达人

发表于 2020-6-24 12:09 | 显示全部楼层
QWE4562009 发表于 2020-6-24 12:04 TMOD=1操作的是整个字节啊,不是位操作啊。为什么一定是0000 0001?

一些寄存器支持字节方式访问,也支持位方式访问。在一般情况下,两者运行效果没有区别。

 

另外不能用51单片机的概念去理解其它MCU,差别比较大,一些以前网上的教程,也容易把人带偏了。

点评

不敢苟同。对于同时支持字节操作和位操作的寄存器而言,两个操作指令是不同的,在高级语言中的表达也不同,所以不能讲“运行效果没有区别”,只有极个别的只有最低位有效且同时支持字节及位操作的寄存器才  详情 回复 发表于 2020-6-24 12:18

回复

使用道具 举报

1万

TA的帖子

143

TA的资源

版主

Rank: 6Rank: 6

技术导师勋章

发表于 2020-6-24 12:10 | 显示全部楼层
QWE4562009 发表于 2020-6-24 12:04 TMOD=1操作的是整个字节啊,不是位操作啊。为什么一定是0000 0001?

正是对整个字节的操作才导致高7位为0,最低位为1。如果是位操作,高7位就不受影响。

点评

TMOD=1 就是0X01?TMOD=0就是0X00?  详情 回复 发表于 2020-6-24 13:41
上传了一些书籍资料,也许有你想要的:http://download.eeworld.com.cn/user/chunyang

回复

使用道具 举报

1万

TA的帖子

143

TA的资源

版主

Rank: 6Rank: 6

技术导师勋章

发表于 2020-6-24 12:18 | 显示全部楼层
本帖最后由 chunyang 于 2020-6-24 12:20 编辑
dcexpert 发表于 2020-6-24 12:09 一些寄存器支持字节方式访问,也支持位方式访问。在一般情况下,两者运行效果没有区别。   另 ...

不敢苟同。对于同时支持字节操作和位操作的寄存器而言,两个操作指令是不同的,在高级语言中的表达也不同,导致的操作结果在绝大多数情况下自然不同,所以不能讲“运行效果没有区别”,只有极个别的只有最低位有效且同时支持字节及位操作的寄存器才没有区别,这是唯一的特例。

 

上传了一些书籍资料,也许有你想要的:http://download.eeworld.com.cn/user/chunyang

回复

使用道具 举报

1万

TA的帖子

0

TA的资源

超级版主

Rank: 6Rank: 6

发表于 2020-6-24 13:37 | 显示全部楼层

“还有些字节地址89H,在程序上好像也没有体现出来,那这个地址有啥作用呢?”

你还没有理解TMOD和89H之间是什么关系。

举个例子:

你的朋友有张三、李四……刘明、赵强……共128人。刘明的手机号码是13512341234,赵强的手机号码是13543214321……。你是不是把128人的手机号码都记住?当然不会。

你要给刘明打电话,你打开手机通讯录,找到刘明,手指一点,你的手机开始拨号。你的手机拨出的号码,正是13512341234,而不是刘明。

换言之,你设置你的通讯录,“刘明” 就表示13512341234这个11位的号码。记住 “刘明” 比记住13512341234容易多了。


回复

使用道具 举报

1048

TA的帖子

0

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

 楼主| 发表于 2020-6-24 13:41 | 显示全部楼层
chunyang 发表于 2020-6-24 12:10 正是对整个字节的操作才导致高7位为0,最低位为1。如果是位操作,高7位就不受影响。

TMOD=1 就是0X01?TMOD=0就是0X00?

点评

这里看你怎么写,分2进制、8进制、10进制、16进制等表达,0x01是16进制表达,1则是10进制表达。但对于1,所有进制表达均等效,即2进制、10进制、16进制等均相等。类似的,0也如此,这是两个特例,除此就不一定一样了  详情 回复 发表于 2020-6-24 13:49

回复

使用道具 举报

1万

TA的帖子

0

TA的资源

超级版主

Rank: 6Rank: 6

发表于 2020-6-24 13:42 | 显示全部楼层

单片机的程序,无非是RAM、ROM……各存储单元的操作。要让编程者记住那么多单元地址,太麻烦了。

所以汇编程序或者C编译程序,规定了一系列保留字。TMOD是其中之一。

TMOD是 Timer Mode 的缩写。看到TMOD很容易想起来这是 “定时器模式控制” 字节。TMOD就表示或者说是代表89H。记住TMOD,比记住89H容易多了。

 

点评

TMOD=1 就是0X01?TMOD=0就是0X00?  那这样高7位也没啥意义啊  都操作不了    详情 回复 发表于 2020-6-24 13:45

回复

使用道具 举报

1048

TA的帖子

0

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

 楼主| 发表于 2020-6-24 13:44 | 显示全部楼层
chunyang 发表于 2020-6-24 11:54 关于寄存器地址问题,一般在程序中不直接反映,因为那样程序很难直接读,涉及地址就需要查手册。所以,编程 ...

你这里说的字符串是0X那样的十六进制吗 

点评

字符串一般用直观的字母、拼音之类的表示,在存储器中怎么存储不必关心。建议楼主看看任何计算机语言方面的基础书,关于各种数制和表达法的章节,基础中的基础了,没学过就看书理解。  详情 回复 发表于 2020-6-24 13:52

回复

使用道具 举报

1048

TA的帖子

0

TA的资源

一粒金砂(高级)

Rank: 3Rank: 3

 楼主| 发表于 2020-6-24 13:45 | 显示全部楼层
maychang 发表于 2020-6-24 13:42 单片机的程序,无非是RAM、ROM……各存储单元的操作。要让编程者记住那么多单元地址,太麻烦了 ...

TMOD=1 就是0X01?TMOD=0就是0X00?  那这样高7位也没啥意义啊  都操作不了

 

点评

TMOD=1,就是把00000001B或者01H或者1这个立即数赋值给TMOD这个寄存器。 TMOD=17,就是把00010001B或者11H或者17这个立即数赋值给TMOD这个寄存器。 TMOD=255,就是把11111111B或者FFH或者255这个立即数赋值  详情 回复 发表于 2020-6-24 14:11

回复

使用道具 举报

1万

TA的帖子

143

TA的资源

版主

Rank: 6Rank: 6

技术导师勋章

发表于 2020-6-24 13:49 | 显示全部楼层
QWE4562009 发表于 2020-6-24 13:41 TMOD=1 就是0X01?TMOD=0就是0X00?

这里看你怎么写,分2进制、8进制、10进制、16进制等表达,0x01是16进制表达,1则是10进制表达。但对于1,所有进制表达均等效,即2进制、10进制、16进制等均相等。类似的,0也如此,这是两个特例,除此就不一定一样了。

上传了一些书籍资料,也许有你想要的:http://download.eeworld.com.cn/user/chunyang

回复

使用道具 举报

1万

TA的帖子

143

TA的资源

版主

Rank: 6Rank: 6

技术导师勋章

发表于 2020-6-24 13:52 | 显示全部楼层
QWE4562009 发表于 2020-6-24 13:44 你这里说的字符串是0X那样的十六进制吗 

字符串一般用直观的字母、拼音之类的表示,在存储器中怎么存储不必关心。建议楼主看看任何计算机语言方面的基础书,关于各种数制和表达法的章节,基础中的基础了,没学过就看书理解。

上传了一些书籍资料,也许有你想要的:http://download.eeworld.com.cn/user/chunyang

回复

使用道具 举报

1万

TA的帖子

0

TA的资源

超级版主

Rank: 6Rank: 6

发表于 2020-6-24 14:00 | 显示全部楼层

你总不能说刘明的手机号码13512341234没有用吧?同样,有了TMOD,89H这个地址仍然有用。实际上,程序中写出TMOD,汇编或者编译时,直接把TMOD用89H替换掉。

当然,你在程序中就不能随意使用TMOD这个字符串作为标号了。如果使用就会出错。正如你的手机通讯录里面不允许出现两个 “刘明” 一样。


回复

使用道具 举报

1万

TA的帖子

0

TA的资源

超级版主

Rank: 6Rank: 6

发表于 2020-6-24 14:03 | 显示全部楼层
QWE4562009 发表于 2020-6-24 12:04 TMOD=1操作的是整个字节啊,不是位操作啊。为什么一定是0000 0001?

“为什么一定是0000 0001?”

那是因为这条语句是对字节操作,也就是对8个位操作。

 

点评

TMOD=2,就是0000 0010? 这样表示的话  也就是M1=1?  详情 回复 发表于 2020-6-24 14:12

回复

使用道具 举报

1万

TA的帖子

0

TA的资源

超级版主

Rank: 6Rank: 6

发表于 2020-6-24 14:11 | 显示全部楼层
QWE4562009 发表于 2020-6-24 13:45 TMOD=1 就是0X01?TMOD=0就是0X00?  那这样高7位也没啥意义啊  都操作不了  

TMOD=1,就是把00000001B或者01H或者1这个立即数赋值给TMOD这个寄存器。

TMOD=17,就是把00010001B或者11H或者17这个立即数赋值给TMOD这个寄存器。

TMOD=255,就是把11111111B或者FFH或者255这个立即数赋值给TMOD这个寄存器。

谁说高7位不能操作?

点评

17应该是0001 0111B吧  详情 回复 发表于 2020-6-28 08:14

回复

使用道具 举报

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

关闭

站长推荐上一条 1/8 下一条

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

词云| Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2020-7-16 03:03 , Processed in 0.533999 second(s), 40 queries , Gzip On, MemCache On.

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