C51单片机编程用KEIL,难道不能在子函数中定义sbit?
voidkeyEvent(){for(i=0;i<4;i++){P3=0xff;sbitb=P3^i;//报错。。。b=0;for(j=4;j<8;j++)if(!P3^...
void keyEvent()
{
for (i=0; i<4; i++) {
P3 = 0xff;
sbit b = P3^i; //报错。。。
b = 0;
for (j=4; j<8; j++)
if (!P3^j) {
sleep(10);
if (!P3^j) {
key = i * 4 + j - 4;
while (!P3^j);
break;
}
}
}
}
代码如上,到底是什么问题?
i改成常数是一样的
另报错如下:
error C141: syntax error near 'sbit'
error C202: 'b': undefined identifier 展开
{
for (i=0; i<4; i++) {
P3 = 0xff;
sbit b = P3^i; //报错。。。
b = 0;
for (j=4; j<8; j++)
if (!P3^j) {
sleep(10);
if (!P3^j) {
key = i * 4 + j - 4;
while (!P3^j);
break;
}
}
}
}
代码如上,到底是什么问题?
i改成常数是一样的
另报错如下:
error C141: syntax error near 'sbit'
error C202: 'b': undefined identifier 展开
3个回答
展开全部
你可以将提示错的信息发出来,sbit声明的是可位寻址的RAM块,你可以先将sbit b=P3^i中i改成一个常数试下。
这个我也试了,好像不能在函数里定义sbit 变量,主函数也不行。另请高明吧。
这个我也试了,好像不能在函数里定义sbit 变量,主函数也不行。另请高明吧。
追问
那请问一下如果想动态修改寄存器某一位的值怎么做比较方便呢?
追答
其实在reg51.h、reg52.h等头文件中有许多特殊功能寄存器的声明,
比如P3是。sfr P3=0xB0;
sbit P3_0=P3^0;
当然也可以这样:sbit P3_0=0xB0;
sbit P3_1=0xB1;
这样的声明你可以放在函数外,在函数里直接给P3_0、P3_1这样的变量赋值即可。
在51单片机中有一块可以位寻址的RAM区(20H----7FH)。
你可以通过关键字bdata来声明(关于bdata,KEIL编译器help中有)。
比如:
unsigned char bdata VA=0x20; //20是VA的地址
sbit VA0=VA^0;
sbit VA1=VA^1;
sbit VA2=VA^2;
sbit VA3=VA^3;
sbit VA4=VA^4;
sbit VA5=VA^5;
sbit VA6=VA^6;
sbit VA7=VA^7;
这样你就可以在某一位存储自己的变量。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询