单片机C语言编程关于sbit定义老是会出错,求解。
#include<reg52.h>#include<intrins.h>#defineuintunsignedint#defineucharunsignedchar#de...
#include <reg52.h>
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define ON 0
#define OFF 1
sbit RING=P2^3; //P2^3在定义在这里,编译时会出现警告
void delay(){
uchar i=10;
uint j;
while(i--)
for(j=700;j>0;j--);
}
void LED(){
uchar temp;
uchar i=80;
temp=0xFE;
while(i--){
P1=temp;
temp=_crol_(temp,1);
delay();
}
}
void RINGFM1(){
//sbit RING=P2^3; //当P2^3在定义在这里时,编译会出错,不能编译成功
RING=ON;
delay();
}
void mian(){
while(1){
LED();
RINGFM1();
}
}
//求解,为什么sbit定义会出现错误? 展开
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define ON 0
#define OFF 1
sbit RING=P2^3; //P2^3在定义在这里,编译时会出现警告
void delay(){
uchar i=10;
uint j;
while(i--)
for(j=700;j>0;j--);
}
void LED(){
uchar temp;
uchar i=80;
temp=0xFE;
while(i--){
P1=temp;
temp=_crol_(temp,1);
delay();
}
}
void RINGFM1(){
//sbit RING=P2^3; //当P2^3在定义在这里时,编译会出错,不能编译成功
RING=ON;
delay();
}
void mian(){
while(1){
LED();
RINGFM1();
}
}
//求解,为什么sbit定义会出现错误? 展开
3个回答
展开全部
keil c51 sbit为什么放到主函数外面
(http://zhidao.baidu.com/link?url=zrcL8wSdkPKJaoWDRjIHqKU5oaacOfTAe-PQmHJAna7rcrnXAFdjsaHQepZULl8fmd2DN4TGAL1En8fITLd5yK)
sbit声明的部分是编译器预处理的部分,就是为了给寄存器(位或字节)取个别名,是在函数没有编译之前必须完成的,放在主函数中就是编译中要处理的内容了,对于那些符号地址,C编译器不认识,有的名字也不允许(如P1.1),必须在编译之前进行替代,就是sbit声明,替代的内容为相应单片机寄存器的头文件里边定义的,如REG51.H
(http://zhidao.baidu.com/link?url=zrcL8wSdkPKJaoWDRjIHqKU5oaacOfTAe-PQmHJAna7rcrnXAFdjsaHQepZULl8fmd2DN4TGAL1En8fITLd5yK)
sbit声明的部分是编译器预处理的部分,就是为了给寄存器(位或字节)取个别名,是在函数没有编译之前必须完成的,放在主函数中就是编译中要处理的内容了,对于那些符号地址,C编译器不认识,有的名字也不允许(如P1.1),必须在编译之前进行替代,就是sbit声明,替代的内容为相应单片机寄存器的头文件里边定义的,如REG51.H
展开全部
sbit 这个东西相当于标准C语言里面的volatile,也就是定义了一个寄存器,地址是被指定且不能变。至于这句话的位置,LZ可以去看看sbit的定义以及非挥发性变量就知道了。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
写程序要细心的 ,你的主函数 main写错了你没发现吗?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询