|
我用keil编译时提示
compiling ds18b20_driver.c...
compiling ds18b20_apply.c...
DS18B20_DRIVER.H(3): error C202: 'P3': undefined identifier
DS18B20_DRIVER.H(5): error C141: syntax error near 'dat', expected ')'
DS18B20_DRIVER.H(7): error C129: missing ';' before 'read_byte'
很奇怪,单个ds18b20_driver.c可以通过,为什么加入ds18b20_apply.c会不行呢?高人指点
两个.c和一个.h文件如下:
#ifndef _DS18B20_DRIVER_H_
#define _DS18B20_DRIVER_H_
sbit dq = P3^4;
extern bit rst1820(void);
extern void write_byte(uchar dat);
extern void wait(void);
extern uchar read_byte(void);
#endif
#include "m_type.h"
#include
#include
#include "ds18b20_driver.h"
uchar bdata Bit_Volatile;
sbit Bit_Volatile_0=Bit_Volatile^0;
/*--------------------------------------
复位函数
发出复位信号,接受从ds18b20返回的存在信号
返回值ready为0为准备好
--------------------------------------*/
bit rst1820(void)
{
uchar i;
bit ready;
dq=1;
dq=0;
for(i=0;i<166;i++);
dq=1;
for(i=0;i<30;i++);
ready=dq;
for(i=0;i<100;i++);
dq=1;
return ready;
}
/*--------------------------------------
写一位数据函数
--------------------------------------*/
void write_bit(bit dat)
{
uchar i;
dq=1;
dq=0;
for(i=0;i<3;i++);
dq=dat;
for(i=0;i<16;i++);
dq=1;
}
/*--------------------------------------
读一位数据函数
--------------------------------------*/
bit read_bit(void)
{
uchar i;
bit dat;
dq=1;
dq=0;
_nop_();
_nop_();
dq=1;
for(i=0;i<3;i++);
dat=dq;
for(i=0;i<17;i++);
dq=1;
return dat;
}
/*--------------------------------------
写一字节数据函数
--------------------------------------*/
void write_byte(uchar dat)
{
uchar i;
Bit_Volatile=dat;
for(i=0;i<8;i++)
{
write_bit(Bit_Volatile_0);
Bit_Volatile=_cror_(Bit_Volatile,1);
}
}
/*---------------------------------------
读一字节数据函数
---------------------------------------*/
uchar read_byte(void)
{
uchar i;
for(i=0;i<8;i++)
{
Bit_Volatile_0=read_bit();
Bit_Volatile=_cror_(Bit_Volatile,1);
}
return Bit_Volatile;
}
/*--------------------------------------
判忙函数
--------------------------------------*/
void wait(void)
{
uchar dat;
do
{
dat=read_byte();
}while(dat!=0xff);
}
#include "ds18b20_driver.h"
char tmes;
void set18b20(void) //设置ds18b20使其测温并开始转换
{
bit ready;
do{ready=rst1820();} //发出复位信号
while(ready==1); //接受到存在信号
write_byte(0xcc); //skip rom
write_byte(0x44); //convert t
}
void gettemp(void) //获取温度,复位ds18b20后空闲
{
uchar tem0,tem1;
wait(); //等待ds18b20完成转换
do{ready=rst1820();} //发出复位信号
while(ready==1); //接受到存在信号
write_byte(0xcc); //skip rom
write_byte(0xbe); //Read Scratchpad
tem0=read_byte(); //读出数据
tem1=read_byte();
reset(); //发出复位信号打断ds18b20继续发出数据
tmes=(tem1<<4)|(tem0>>4);
//xiao=tem0&0x0f;
}
|
|