求求大神帮忙,这是一个单片机C语言头文件(.h),出错的地方在程序里标号了 5
#defineucharunsignedchar#defineuintunsignedint/******************IO引脚定义**************...
#define uchar unsigned char
#define uint unsigned int
/******************IO引脚定义******************/
sbit Dsl8btip = P3^2;//定义DS18B20接口
/*************延时子函数***********************/
void restb(uint dacoutt)//延时函数名称
{
uint j; //定义变量
while(dacoutt)
{
j=200;
while(j>0)
j--;
dacoutt--;
}
}
/***********DS18B20初始化*************/
void Ds18b20set(void)
{
uint h;
Dsl8btip = 0;
h = 103;
while(h > 0)h-- ;
Dsl8btip = 1;
h=4;
while ( h > 0)h--;
}
/*************读一位*********************/
bit readonebit(void)
{
uint k;
bit data;//这里出错了:DS18B20.H(56): error C141: syntax error near ';'
Dsl8btip = 0;k;
k++;//延时一小下;
Dsl8btip =1;
k++;
k++;
data = Dsl8btip;//这里也出错DS18B20.H(68): error C141: syntax error near 'data'
k = 8;
whi1e(k>0)k--;
return (data);
}
/*************读一个字节***********************/
uchar readoneword(void)
{
uchar m, n, data;
data=0;
for (m=1; m<=8 ; m++)
{
n = readonebit();
data= (n<<7)|(data>>1);
}
return (data);//函数返回值
}
/*************写一个字节**************************/
void wronebyte(uchar data)
{
uint m;
uchar n;
bit testb;
for (n=1; n<=8; n++)
{
testb = data&0x01;
data=data>>1;
if(testb) //如果testb为1,进行写1操作
{
Dsl8btip =0;
m++;m++;
Dsl8btip = 1;
m=8;
whi1e( m > 0 )m--;
}
else
{
Dsl8btip = 0;//写0操作
m=8;
whi1e( m > 0 )m--;
Dsl8btip = 1;
m++;m++;
}
}
}
/************发送温度转换命令********************/
void Swittem(void)
{
Ds18b20set();//调用初始化DS18B20子函数进行初始化
restb(1) ;//调用延时子函数延时
wronebyte(0xcc);//调用跳过序列号子函数
wronebyte(0x44);//调用发送温度转换命令子函数开始温度转换
}
/***********获得温度**********************/
int Gettemprature()
{
int temper;
uchar am, bm;//定义变量
Ds18b20set();
restb (1);//延时
wronebyte(0xcc);
wronebyte (0xbe) ;//调读取温度数据子函数
am = readoneword();//连续读取两个字节数据
bm = readoneword();
temper = bm;
temper <<= 8;
temper = temper | am;
return temper;//返回温度数值
} 展开
#define uint unsigned int
/******************IO引脚定义******************/
sbit Dsl8btip = P3^2;//定义DS18B20接口
/*************延时子函数***********************/
void restb(uint dacoutt)//延时函数名称
{
uint j; //定义变量
while(dacoutt)
{
j=200;
while(j>0)
j--;
dacoutt--;
}
}
/***********DS18B20初始化*************/
void Ds18b20set(void)
{
uint h;
Dsl8btip = 0;
h = 103;
while(h > 0)h-- ;
Dsl8btip = 1;
h=4;
while ( h > 0)h--;
}
/*************读一位*********************/
bit readonebit(void)
{
uint k;
bit data;//这里出错了:DS18B20.H(56): error C141: syntax error near ';'
Dsl8btip = 0;k;
k++;//延时一小下;
Dsl8btip =1;
k++;
k++;
data = Dsl8btip;//这里也出错DS18B20.H(68): error C141: syntax error near 'data'
k = 8;
whi1e(k>0)k--;
return (data);
}
/*************读一个字节***********************/
uchar readoneword(void)
{
uchar m, n, data;
data=0;
for (m=1; m<=8 ; m++)
{
n = readonebit();
data= (n<<7)|(data>>1);
}
return (data);//函数返回值
}
/*************写一个字节**************************/
void wronebyte(uchar data)
{
uint m;
uchar n;
bit testb;
for (n=1; n<=8; n++)
{
testb = data&0x01;
data=data>>1;
if(testb) //如果testb为1,进行写1操作
{
Dsl8btip =0;
m++;m++;
Dsl8btip = 1;
m=8;
whi1e( m > 0 )m--;
}
else
{
Dsl8btip = 0;//写0操作
m=8;
whi1e( m > 0 )m--;
Dsl8btip = 1;
m++;m++;
}
}
}
/************发送温度转换命令********************/
void Swittem(void)
{
Ds18b20set();//调用初始化DS18B20子函数进行初始化
restb(1) ;//调用延时子函数延时
wronebyte(0xcc);//调用跳过序列号子函数
wronebyte(0x44);//调用发送温度转换命令子函数开始温度转换
}
/***********获得温度**********************/
int Gettemprature()
{
int temper;
uchar am, bm;//定义变量
Ds18b20set();
restb (1);//延时
wronebyte(0xcc);
wronebyte (0xbe) ;//调读取温度数据子函数
am = readoneword();//连续读取两个字节数据
bm = readoneword();
temper = bm;
temper <<= 8;
temper = temper | am;
return temper;//返回温度数值
} 展开
2个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询