标题: 请教P3^0 和P3_0什么区别? [打印本页]

作者: a333    时间: 2011-9-30 22:12
标题: 请教P3^0 和P3_0什么区别?
我在用51hei单片机开发板附带的程序的时候把把P3_0换成P3^0程序就不对了呢?
作者: admin    时间: 2011-9-30 22:14

肯定是你那个程序用的头文件是 at89x52.h 吧,,在这个头文件里已经定义了好了P3_0的,P3^0是不能直接使用的哦,必须要把P3^0定义为一个sbit的变量才可以.

 

 

 


作者: a333    时间: 2011-9-30 22:18
那怎么有时候用sbit DUAN=P2^7这个语句呢? 而不是P2_7
作者: admin    时间: 2011-9-30 22:20

那肯定是因为头文件是 reg52.h吧    这个头文件里面没有定义P2_7 ,所以必须手工定义sbit DUAN=P2^7


作者: a333    时间: 2011-9-30 22:22
#include"AT89x52.h"
#include"intrins.h"
 
#define uint unsigned int
#define uchar unsigned char

sbit WEI=P2^7;      //U2 74HC573的LE端    数码管的位选端
sbit SJ=P1^4;       //LED发光管的使能端


这个程序里有AT8952 怎么还能用P2^7??

作者: admin    时间: 2011-9-30 22:25

这么说把 reg52.h 里没有定义P2_7  所以不能用 P2_7

而P2^7这个不是自己定义的是c51的语言规定的,所以P2^7在 reg52.h和 at89x52.h里都能使用,而P2_7 则只能在at89x52.h里使用


作者: a333    时间: 2011-9-30 22:28
P2^7既然通用 既然都能使用 还是那个问题 把P3_0换成P3^0程序就不对了呢?
作者: admin    时间: 2011-9-30 22:30

因为P3^0不是一个变量,你给他赋值当然会提示错误,这是不符合语法的,你要给他赋值首先得定义它才行

比如说在顶部定义

sbit p30=P3^0;

 

然后赋值的时候就写p30=0或者p30=1

这样就不会提示错误了.

[此贴子已经被作者于2011-9-30 22:35:17编辑过]

作者: a333    时间: 2011-9-30 22:38
明白点了 那P3^0表示的是什么类型的量?
作者: admin    时间: 2011-9-30 22:44

在reg51.h中 P3是这样定义的

sfr P3    = 0xB0;

而P3^0 的意思是P3口的第0位,但P3^0 这是一个表达式,就像是1+1一样 ,所以这是不能直接使用的, 你必须把他定义为一个sbit类型的变量才能使用.

 


作者: windwithgone    时间: 2012-3-28 18:53
P3^0需定义,P3_0无需定义,好像是这样的




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