请教高手有关51单片机 C语言编程

有一个51单片机的C语言程序中有这样一段
#define chargecurrent 0xec //P1.4 充电电流
我理解的意思是充电电流采样接到P1.4口,那为什么用0xec,现在我想把电流采样换个IO口接(比如接到P1.1),那该怎么样改这段程序呢?谢谢!

第1个回答  2012-08-17
操作特殊功能寄存器必须事先声明,如:
sfr P0 = 0x80;
sbit P11 = 0x91;
#define 只是进行一次宏定义, 在程序中遇到 chargecurrent 时就将此替换为数值0xec
此处
0xec仅仅是一个数据,此处不能写寄存器地址, 不过可以写在其它地方定义过的标号比如
#define P11 P23 就是将P1.1替换为P2.3(如果定义了P11为P1.1,P23为P2.3的情况下)
第2个回答  2012-08-17
仅此一句与端口无关的,它只是宏定义了一个变量chargecurrent并且确定它的值为0xec,貌似在下面的程序里要用它和P1.4口的采样值进行比对,进而做出判断和控制。本回答被提问者采纳
第3个回答  2012-08-17
你的理解不完全对,采样接P1.4按注释是对的,0xec是AD转换值,所以你接P1.1也是如此定义。追问

您好,源程序P1.0口至P1.7口都用了
#define ratio 0xe8 //P1.0 调节系数;然后0xe9,依次叠加的,0xec是AD转换值?这个没搞懂,那P1.0口代表调节系数,这个不需要AD转换的啊,以前看到程序都是用sbit x=Py^z这样形式来操作IO口

追答

#define这样定义就是常量,因为只有一位,除了AD值,没有看出有其他意义,调节系数也有可能是AD呀,为什么不能呢?对于一个PID调节控制而言是有可能的。

本回答被网友采纳
第4个回答  2012-08-17
为什么是P1.4呢?它是八位,高四位低四位,要是光P1.4的话应该是0xe0!追问

您好,源程序P1.0口至P1.7口都用了
#define ratio 0xe8 //P1.0 调节系数

然后0xe9,依次叠加的,我就想知道这里0xe8代表P1.0口吗?

追答

你这么就给出个0xe8什么也看不出来,因为每个I/O口都有8位,都可以这么写,而且还和你的电路图有关系,看你接的是高电平还是低电平输出,P2=0XEF;

追问

我以前看到程序都是用sbit x=Py^z这样形式来操作IO口,也可以用#define这种形式来操作IO口吗?这次因为后面有注释,所以我知道#define ratio 0xe8是P1.0口,如果没有注释怎么就能知道是P1.0口呢?同样,单片机怎么知道#define ratio 0xe8就是操作P1.0口呢?

追答

我晕!你把程序传上来我看看呗!好吗?

相似回答
大家正在搜