根据51单片机对P0赋值就应该是 *(unsigned char *)P0 = 0X00;为什么我们都用的 P0 = 0X00呢?

根据51单片机的地址映射 sfr P0 = 0x80; 那对P0赋值就应该是 *(unsigned char *)P0 = 0X00;为什么我们都用的 P0 = 0X00呢?

因为在#include〈reg51〉.h头文件中有#define 0x80 P0这句宏定义,也就是说以下两句语句是完全一样的 P0=0x00; 0x80=0x00; 这样的好处是我们只要看到p0就知道它是哪个端口,如何写成后一种我们只看到一个十文进制数,我们很难记得住这个寄存器干啥的,只有看书才能知道它其实是p0端口的数据寄存器追问

0x80是一个内存地址,想在0x80上保存0xff,就应该先将0X80转化为指针即(unsigned char *)0x80,然后在把数保存在0x80上,即*(unsigned char *)0x80 = 0xff;
哪里出了问题?

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-03-17
跟其他变量一样,比如 unsigned char x;你不会每次赋值时都用unsigned char x=##吧,这是一个道理。既然已经声明了,以后就可以直接使用。不必每次都将其头衔都搬出来。本回答被提问者和网友采纳
第2个回答  2014-03-17
前面有声明了,就不用加那个unsigned char直接调用