5273|14

73

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

51中的端口的理解 [复制链接]

一个51单片机的程序如下:
  1. #include
  2. main()
  3. {
  4.    int results;
  5.    results=P2*196;
  6.    .........
  7.     .........
  8. }
复制代码

我对其中的P2不能理解,看了reg51.h中P2定义为: sfr P2  = 0xA0;  等价为:(*((volatile unsigned char *) 0xA0))
那么P2不就是内存地址为 0xA0的值吗?
可是我看书上都是把P2理解成P2这个硬件端口,比如说 P2=0x01,解释为把0x01送到P2这个端口。
我想问下程序中的P2到底是理解成P2端口的值,还是P2这个硬件端口。理解成P2端口的值的话P2就相当于一个C语言中的变量,
理解成端口的话,results=P2*196理解成P2中的值*196 赋值给results。
谢谢!

最新回复

理解比较透彻 嘿嘿  详情 回复 发表于 2009-7-26 17:37
点赞 关注

回复
举报

61

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
其实把i/o端口理解为硬件和变量都没有错。不过,它们之间的关系得明白。在程序中之所以可以把i/o端口可以当做变量来用,是因为程序中的i/o端口其实是指硬件i/o端口在内存中的映射地址。
“P2到底是理解成P2端口的值,还是P2这个硬件端口。”
可以这样理解:P2端口对应的内存中存放的数据,就是硬件P2端口从外界的电气信号采集转化过来的数据。硬件P2端口处理将真正的逻辑信号转化为电气信号(即电压信号),而在程序中使用的P2端口是将采集上来的电气信号数字化以后方便在程序中进行处理。
由此观之,从单片机外部来看i/o端口,表现出来的是其硬件特性。但从单片机内部的程序来看,i/o端口表现出来的是其“变量”特性。
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
引用 1 楼 jiqiang01234 的回复:
程序中的i/o端口其实是指硬件i/o端口在内存中的映射地址。

谢谢  这句话感觉好抽象啊  
 
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

4
 
引用 2 楼 ns22020426 的回复:
引用 1 楼 jiqiang01234 的回复:
程序中的i/o端口其实是指硬件i/o端口在内存中的映射地址。

谢谢? 这句话感觉好抽象啊?

在程序中无所谓硬件的,之所以可以操作硬件的桥梁就是将硬件采集上来的数据,对应到一块内存中,以后对硬件操作就是对这块内存中的数据进行操作,如是而已。
 
 
 

回复

92

帖子

0

TA的资源

一粒金砂(初级)

5
 
硬件基础,学习一下吧
其实就算不清楚都无妨,当变量用就了事
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(初级)

6
 
从C的角度看,它是一个变量

从体系结构上看,它是一个地址

从端口结构上看,它是一个驱动能力有限的电平


横看成岭侧成峰,远近高低各不同。

不识庐山真面目,只缘身在此山中。
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

7
 
引用 3 楼 jiqiang01234 的回复:

在程序中无所谓硬件的,之所以可以操作硬件的桥梁就是将硬件采集上来的数据,对应到一块内存中,以后对硬件操作就是对这块内存中的数据进行操作,如是而已。


    呵呵  谢谢了  你的意思是不是可以这么理解:
    P1端口本来是一个硬件设备,包括电阻 电容什么的,但是在程序中只能操作它8个引脚的电平值(数字化之后就是01的二进制值)。 这样的话就把P1简化成由8个bit位组成的容器。就相当于高级语言中的变量。是这样的吗???   
   你说把硬件对应到一块内存,这样硬件地址和对应的内存地址是不是同一个地址???
   谢谢  期待回复!!
 
 
 

回复

68

帖子

0

TA的资源

一粒金砂(初级)

8
 
引用 6 楼 ns22020426 的回复:
? ? P1端口本来是一个硬件设备,包括电阻 电容什么的,但是在程序中只能操作它8个引脚的电平值(数字化之后就是01的二进制值)。 这样的话就把P1简化成由8个bit位组成的容器。就相当于高级语言中的变量。是这样的吗????
? 你说把硬件对应到一块内存,这样硬件地址和对应的内存地址是不是同一个地址???
? 谢谢? 期待回复!!

"P1端口本来是一个硬件设备,包括电阻 电容什么的,但是在程序中只能操作它8个引脚的电平值(数字化之后就是01的二进制值)。 这样的话就把P1简化成由8个bit位组成的容器。就相当于高级语言中的变量。是这样的吗??? "
可以这样理解,其实这就是所谓的“抽象”,把硬件电路抽象成了可操作的程序代码。越抽象的东西往往越接近人的自然语言所描述的东西。

“  你说把硬件对应到一块内存,这样硬件地址和对应的内存地址是不是同一个地址???”
我说的可能有些含糊了,再具体说一下吧。
其实对于单片机来说外部硬件是不存在的,我们所能直接操作的只有i/o端口,真实的外部硬件和单片机都是通过i/o端口进行交换数据的。每一个i/o端口在单片机内部映射了一块内存地址。比如c51,P1的地址是0x90,也就是说0x90这个地址里面一个字节的内容代表了硬件P1端口的可操作数据。
单片机中每一个寄存器都有其对应的内存地址,以便用来进行操作。
 
 
 

回复

81

帖子

0

TA的资源

一粒金砂(初级)

9
 
引用 7 楼 jiqiang01234 的回复:
c51,P1的地址是0x90,也就是说0x90这个地址里面一个字节的内容代表了硬件P1端口的可操作数据。

   谢谢  我还想再问最后一个问题  :
   根据你的意思  因为 P2 =*((volatile unsigned char *) 0xA0)), 那么P2应该理解成P2端口的可操作数据。 可是我感觉把P2理解成P2端口 : P2=0x01时,理解成把0x01送入p2端口。results=P2*196时,把P2端口的值乘以196再赋值给results。这样更贴近硬件,便于理解。 可是我看头文件的定义,P2 =*((volatile unsigned char *) 0xA0)) ,它很显然把P2定义成了P2口的数据。
    呵呵呵呵,还是有点迷糊。不好意思啊
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

10
 
在程序中的P2口确实直接对应了硬件P2口的可操作数据,从头文件的定义也可以看出来。
我想你的迷惑可能是来源于我对于端口不同描述引起的。

“可是我感觉把P2理解成P2端口 : P2=0x01时,理解成把0x01送入p2端口。results=P2*196时,把P2端口的值乘以196再赋值给results。这样更贴近硬件,便于理解。”
你所说的P2端口准确地说是,内存中P2端口对应的数据,这些数据的最终目的是通过物理P2端口经过电气转化到单片机外部,以便供外部硬件使用。
也就是说,你把内存中端口的数据直接对应到了物理的真实端口,忽略了中间的映射过程。你这样的理解更直接。
举个例子吧:
我要直接找你,但是我不知道你的联系方式啊,于是我又找了一个中间人,他认识我们两个人。于是我就让那个人把你找过来了。但是,在外人看来不知道中间的这些寻找过程,就以为是我直接把你找过来的。
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

11
 
    你的意思是说  “我” 是数据   “我要要的人”是硬件端口    “中间的人”就是端口的变量 。
    其实P本来应该是内存的变量,数据是通过先复制给端口变量来复制给硬件端口的。    我是把P2直接理解成真实的端口,就省掉了中间先复制给变量的步骤,就相当于直接找到那个人,不要经过中间的人。是这样的吗?   本来是应该第一种,不过第二种理解法更直接。是这样的吗?? 谢谢!!!
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

12
 
对,方便了理解,未尝不可。但是中间的过程明白了更好
 
 
 

回复

72

帖子

0

TA的资源

一粒金砂(初级)

13
 
虽然还是有点迷糊   还是有点明白了  谢谢啦    结贴...
 
 
 

回复

99

帖子

0

TA的资源

一粒金砂(中级)

14
 
jiqiang01234很专业,佩服~~~~~~~~~
 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

15
 
理解比较透彻 嘿嘿
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表