标题: 51单片机的地址冲突问题,怎么从物理层面来解释? [打印本页]

作者: 蓝野    时间: 2017-10-12 20:11
标题: 51单片机的地址冲突问题,怎么从物理层面来解释?
特殊功能寄存器TMOD的字节地址为89H,TCON的字节地址为88H,那么TCON的第1位,sbit IE0=89H,而TMOD的第0位地址也为89H,sfr TMOD=89H,
虽然TCON可以位寻址,TMOD只能字节寻址,但是按我的理解是IE0和TMOD的第0位地址都是89H,
这是不是地址冲突了呢,怎么从物理层面来解释?





作者: yzwzfyz    时间: 2017-10-13 00:37
前两个指向一个8位的的地址,后一位指向的是1位的地址。
前面说的是“第89层楼”,后面说的是“第89号房间”,虽同是89,但不至于你弄错地方。
作者: zl2168    时间: 2017-10-13 08:18
用c编程时,根本不需考虑地址,只用特殊功能寄存器名就可;用汇编编程时,89H在字节操作指令中是字节地址,在位操作指令中是位地址,CPU不会搞错,但初学者自己会搞错。
作者: tomli    时间: 2017-10-13 09:05
这样理解:89H号房间与89H号床位的区别,没毛病。
作者: 蓝野    时间: 2017-10-13 10:53
yzwzfyz 发表于 2017-10-13 00:37
前两个指向一个8位的的地址,后一位指向的是1位的地址。
前面说的是“第89层楼”,后面说的是“第89号房间 ...

89层楼的第0号房间,和第89号房间,本质上不是一样的吗?感觉自己的思维有点死,,,


是不是还可以这样理解,字节地址对应的物理层面是“一栋楼A”,位地址对应的物理层面是另外“一栋楼B”,两个是分开独立的部分
作者: NickHu    时间: 2017-10-13 11:08
执行的指令不一样,一个是字节处理指令,一个是位处理指令
作者: zl2168    时间: 2017-10-14 13:46
蓝野 发表于 2017-10-13 10:53
89层楼的第0号房间,和第89号房间,本质上不是一样的吗?感觉自己的思维有点死,,,

89H是十六进制数,既可代表数据,又可代表地址。代表地址时,既可代表字节地址,又可代表位地址。如何区分呢?在字节操作指令中是字节地址,在位操作指令中是位地址。即汇编中,字节操作指令码后跟随的89H是字节地址,在位操作指令码后跟随的89H是位地址。注意!!!指令码不一样。CPU不会搞错,但初学者自己会搞错,你就是搞不明白的初学者之一。其实,你若用c编程,就根本不用管它,只要用特殊功能寄存器名(大写)表示就可,keil c会自动正确编译。若用汇编,你也不用管它,但是指令操作符(代表指令操作码)不能搞错。这就是为什么汇编编程比c编程难学的主要原因,汇编编程,除了NOP指令,每一条指令均与操作地址有关。
作者: 春风十里吹    时间: 2019-2-25 03:24
用c编程时,根本不需考虑地址,只用特殊功能寄存器名就可;用汇编编程时,89H在字节操作指令中是字节地址,在位操作指令中是位地址,CPU不会搞错,但初学者自己会搞错。

作者: betar00    时间: 2019-11-13 10:41
本人也是初学,迷惑了挺长时间了,直到看到了一张表。现附上,希望对你有帮助……

字节地址和位地址.jpg (182.36 KB, 下载次数: 36)

字节地址和位地址.jpg





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