原创
CC2430驱动DS18B20
2011-5-16 23:15
3553
11
11
分类:
通信
经过验证之后,结果终于出来了,在SimpleApp程序的SimpleSensor程序中用的应该是默认的16Mhz晶振,这样我的驱动就可以直接在上面跑了,哈哈,用DS18B20程序代替原SimpleApp程序中的温度采集函数(路径即调用关系为SimpleSensor——>SimpleSensor.c——>uint8 myApp_ReadTemperature()中的这个 myApp_ReadTemperature()换成我的驱动,结果就可以正常运转了具体如下:
本程序参考的文件在前两篇日志中说明了,在此声明其中引用的代码版权归原作者,本人在此表示感谢
本人萧对本程序内容享有版权,转载或引用任何内容、资料,
请注明作者本人 萧 和 出处。谢谢。
//////////////////////////////songjie加的/////////////////////////////////////////
//默认应该是16M晶振
//
#include "ioCC2430.h" // 申明该文件中用到的头文件
/////////////////////////////////////////函数原型/////////////////////////////
/*延时函数,延时单位1ms左右*/
void delay(int a);
/*延时函数 ,延时1us左右*/
void Delay_nus(uint16 s);
/*初始化单总线*/
void dsInit(void);
/*读取温度转换数值*/
int getTmpValue(void);
/*发送读数据命令的,发送此命令后要连续读连个字节*/
void sendReadCmd(void);
/*开始温度采集函数*/
void sendChangeCmd(void);
/*写一个字节*/
void writeByte(unsigned char dat);
/*读一个字节*/
unsigned char readByte(void);
/*读取其中一位*/
unsigned char readBit(void);
///////////////////////////////////////////////函数定义////////////////////////////////////////////
/*注意在得到的温度值是负数的时候是用补码表示的,由于处于测试阶段室温为正,暂时没有对其进行处理
DS18B20(温度传感器)为排针下面的器件,其DQ引脚连接至P0.0,使用时对应连接CC2430相同引脚。
*/
#define ds P0_0//ds18b20的dq位连接到了P0.0脚
#define SET_OUT P0DIR|=0x01//设置为输出口
#define SET_IN P0DIR&=0xfe//设置为输入口
void delay(int a)
{
int i;
int j;
for(i=a;i>0;i--)
{
for(j=125;j>0;j--);
}
}
void dsInit(void)
{ //对于16MHz时钟来说大概是3.125us这只是计算的并不知道是否准确
P0SEL&=0xfe;//将P0.0口设置为普通IO口
SET_OUT;// P0DIR|=0x01; //先设置为输出口
ds=1;//手册说初始化的时候拉低480~960us,但考虑到2430会初始化自己一段时间,所以在初始化开始之前
ds=0; //可能有一段时间了,所以这里不是直接拉低,而是先给ds=1告诉18b20开始拉低初始化了,否则它不知道从哪到哪算480us。
Delay_nus(550);//要求480us~960us的低电平
ds=1;//产生一个上升沿,并释放总线进入等待应答状态
SET_IN;//当b20检测到上升沿就会wait15us~60us然后
//拉低总线,60~240us
Delay_nus(30);
while(ds){;}//检测到应答后就会跳出循环
//while(~ds);//等待其持续的低电平结束
Delay_nus(200);
SET_OUT;
ds=1;//回到初始状态
}
文章评论(0条评论)
登录后参与讨论