打印

请教51的io口地址和其他寄存器地址重复的疑惑

[复制链接]
2742|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
llt1234567|  楼主 | 2011-4-13 10:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
sfr P0      = 0x80;
sfr SP      = 0x81;
sfr DPL     = 0x82;
sfr DPH     = 0x83;
sfr PCON    = 0x87;
sfr TCON    = 0x88;

sbit P0_0 = 0x80;
sbit P0_1 = 0x81;
sbit P0_2 = 0x82;
sbit P0_3 = 0x83;
sbit P0_4 = 0x84;
sbit P0_5 = 0x85;
sbit P0_6 = 0x86;
sbit P0_7 = 0x87;

p_0,P0_1等几个口和别的有重复,执行程序的时候会不会乱,51是怎么处理的呢,很疑惑

相关帖子

沙发
ayb_ice| | 2011-4-13 10:28 | 只看该作者
一个是SFR空间(直接寻址空间80~ff)
一个是位地址(位寻址空间00~7f)

使用特权

评论回复
板凳
new1988| | 2011-4-13 11:00 | 只看该作者
请注意,这两种定义类型是不同的,sfr是定义一个字节的空间,sbit是一位的空间。p0_0只是p0这个八位的字节空间中的一位

使用特权

评论回复
地板
lyjian| | 2011-4-13 12:31 | 只看该作者
用不同的指令区分

使用特权

评论回复
5
ljm810010| | 2011-4-13 13:22 | 只看该作者
不同的地址体系

使用特权

评论回复
6
wangguojun2010| | 2011-4-20 18:07 | 只看该作者
请查看位寻址区、一般寻址区,寄存器区

使用特权

评论回复
7
sysdriver| | 2011-4-20 23:36 | 只看该作者
我理解LZ的意思

LZ知道P0的地址为什么是0x80,而不是0x84或0x85?我也不知道,我只知道这个MCU定义的,我没有权利把它变成0x84。相应的来说,字节地址0x80有和它相应的位地址0x80~0x87,但PCON = 0x87就偏偏没有位地址,我不知道为什么,这个也是由MCU定义的。
字节地址和位地址不一样。即sfr PCON =0x87;和sbit P0_7 =0x87;不一样,一个是字节地址,一个是位地址。51它就是这样区别的,不会乱。如 PCON = 0x05;那PCON就是0x05;但P0_7 =0x05;P0_7却=1;不是0就是1。

另外,sbit常用的定义是其他两种,不易混淆:sbit P0_0 = P0^0; sbit P0_0 = 0x80^0;官方手册用的是第一种,至于第二种和第三种(你那种)基本上少用,因为不直观。比如,sbit PT0 = 0xB9表示的是IP=0xB8的第二位,即sbit PT0 = 0xB9 = IP^1 = 0xB8^1。

另外,没有位地址的SFR,你不能sbit,不然会报错。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

27

帖子

0

粉丝