历史上的今天
今天是:2025年06月20日(星期五)
2018年06月20日 | STC单片机的DS18B20的C程序
2018-06-20 来源:eefocus
由于STC单片机的速度比8051速度快,属于1个时钟/机器周期高速单片机。速度快当然是它的优点,但对于要移植传统的8051程序而言,需要修改时序来实现某功能.
以下程序是ds18b20简单的驱动程序,其实是在网上Down的,经本人稍作修改之后,在STC12C5A32S2中调试通过的,最后读温度返回一个unsigned int,低12位就是温度数据。在主程序里进行运算即可得到实际温度值。呵呵~~
/***********ds18b20子程序*************************/
/***********ds18b20延迟子函数(晶振11.0592MHz )*******/
void delay_18B20(unsigned int i)
{
while(i--);
}
/**********ds18b20初始化函数**********************/
void Init_DS18B20(void)
{
unsigned char x=0;
DQ = 1; //DQ复位
delay_18B20(80); //稍做延时
DQ = 0; //单片机将DQ拉低
delay_18B20(800); //精确延时 大于 480us
DQ = 1; //拉高总线
delay_18B20(140);
x=DQ; delay_18B20(200);
}
/***********ds18b20读一个字节**************/
unsigned char ReadOneChar(void)
{
uchar i=0;
uchar dat = 0;
for (i=8;i>0;i--)
{
DQ = 0; // 给脉冲信号
dat>>=1;
DQ = 1; // 给脉冲信号
if(DQ)
dat|=0x80;
delay_18B20(40); //40
}
return(dat);
}
/*************ds18b20写一个字节****************/
void WriteOneChar(uchar dat)
{
unsigned char i=0;
for (i=8; i>0; i--)
{
DQ = 0;
DQ = dat&0x01;
delay_18B20(50); //50
DQ = 1;
dat>>=1;
}
}
/**************读取ds18b20当前温度************/
unsigned int ReadTemp(void)
{
unsigned char a=0;
unsigned char b=0;
unsigned int temp_value=0;
Init_DS18B20();
WriteOneChar(0xCC);
WriteOneChar(0x44);
delay_18B20(1000);
Init_DS18B20();
WriteOneChar(0xCC);
WriteOneChar(0xBE);
delay_18B20(1000);
a=ReadOneChar(); //读取温度值低位
b=ReadOneChar(); //读取温度值高位
temp_value = b<<8;
temp_value |= a;
return temp_value;
}
史海拾趣
|
ASIC Verification Engineer LSI上海研发中心高薪诚聘通讯存储领域人才,薪水待遇优厚,部分人员有出国培训机会。(部门内部推荐,成功机会更大) 有意者请将中英文简历发送至:asic_tapeout@hotmail.com ASIC Verification Engineer DESCRIPTION ...… 查看全部问答> |
|
首先问一下,硬件唯一标识是不是就是指IMEI号。 如果硬件唯一标识是指IMEI号,那么在WinCE5.0下如何取得呢,我找了资料了,很多人说用“lineGetGeneralInfo”这个方法,但是我在WinCE5.0上试了,首先WinCE5.0的SDK中没有CellCore.lib,我下载了WM ...… 查看全部问答> |
|
我用VISUAL STUDIO2003编写WINCE 4.2程序, 想在窗体上画个BMP图片,这个图片我已经其它的画图工具画好了,存成了一个a.bmp文件.然后我把它拷贝到工程的debug目录下,编译后, 将exe文件和该图片一起拷贝到wince4.2设备(我的电路板)的同一个目录下,,, ...… 查看全部问答> |
|
大家好,我在网上看到很多卖单火线开关的,我很困惑的是,他们都声称自己的无线遥控开关静态功耗做到40uA,我也查了一些无线接收模块,这些模块接收的功耗都至少有mA级,请问这个是怎么样实现静态功耗做到40u ...… 查看全部问答> |
|
在网上看见的,赶紧转发过来,以前一直想自己做一个,后来一连上了好几个项目,没有时间来玩了,其实工作了的朋友可以找利尔达买,透露个小秘密他们是可以讲价的,喊价400,买一送一,实际上和淘宝上价格差不多了,但是他们有技术支持和服务的,比 ...… 查看全部问答> |
|
DSP的地址线和数据线有相应的寄存器吗?如果没有,那么怎么写数据呢? 另外,我在一本书上见到用DSP的低8位数据线连接LCD的数据线,用DSp的8-12位做LCD的控制线,不明白该怎样控制,是何道理,各位高手帮我解决一下吧,我是初学者,这些问题困扰我 ...… 查看全部问答> |




