完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
#include
#include #define uchar unsigned char #define uint unsigned int ***it DQ0 = P0^0; //数据口define interface ***it LED1 = P1^0; ***it LED2 = P1^1; uint temp0,t0; //温度值 variable of temperature uchar x=0; //测试是否初始化成功 void led1shan(void); //1号灯闪烁 void led2shan(void); //2号灯闪烁 /*************延时ms子程序start********/ void Delay1ms(unsigned int count) { unsigned int i,j; for(i=0;i } /*************延时子程序end********/ /*************精确延时函数*****************/ void delay5us(void) { _nop_();_nop_();_nop_();_nop_();_nop_(); } void delay20us(void) { _nop_();_nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_();_nop_(); _nop_();_nop_();_nop_();_nop_();_nop_(); } void delay100us(void) { delay20us(); delay20us(); delay20us(); delay20us(); delay20us(); } void delay200us(void) { delay100us(); delay100us(); } /*****************另一个延时函数***************************/ void delay(unsigned char i) { while(i--); } /*****************DS18B20******************/ void Init_Ds18b20(void) //DS18B20初始化send reset and initialization command { uchar x = 0; DQ0 = 1; delay(8); //稍做延时 DQ0 = 0; //单片机拉低总线 delay(80); //精确延时,维持至少480us DQ0 = 1; //释放总线,即拉高了总线 delay(14); x=DQ0; //是0表明成功 delay(20); } //////////////////////// uchar Read_One_Byte() //读取一个字节的数据read a byte date //读数据时,数据以字节的最低有效位先从总线移出 { uchar i = 0; uchar dat = 0; for(i=8;i>0;i--) { DQ0 = 0; //将总线拉低,要在1us之后释放总线 //单片机要在此下降沿后的15us内读数据才会有效。 _nop_(); //至少维持了1us,表示读时序开始 dat >>= 1; //让从总线上读到的位数据,依次从高位移动到低位。 DQ0 = 1; //释放总线,此后DS18B20会控制总线,把数据传输到总线上 //延时7us,此处参照推荐的读时序图,尽量把控制器采样时间放到读时序后的15us内的最后部分 _nop_(); _nop_(); _nop_(); _nop_(); _nop_(); if(DQ0) //控制器进行采样 dat |= 0x80; //若总线为1,即DQ为1,那就把dat的最高位置1;若为0,则不进行处理,保持为0 delay20us(); //此延时不能少,确保读时序的长度60us。 delay20us(); delay20us(); } return dat; } //////////////////////// void Write_One_Byte(uchar dat) { uchar i = 0; for(i=8;i>0;i--) { DQ0 = 0; //拉低总线 _nop_(); //至少维持了1us,表示写时序(包括写0时序或写1时序)开始 _nop_(); DQ0 = (bit)dat&0x01; //从字节的最低位开始传输 //指令dat的最低位赋予给总线,必须在拉低总线后的15us内, //因为15us后DS18B20会对总线采样。 //必须让写时序持续至少60us delay20us(); delay20us(); delay20us(); DQ0 = 1; //写完后,必须释放总线, dat >>= 1; _nop_(); _nop_(); } } /////////////////////// uint Get_Tmp() //获取温度get the temperature { float tt; uchar a,b; Init_Ds18b20(); //初始化 Write_One_Byte(0xcc); //忽略ROM指令 Write_One_Byte(0x44); //温度转换指令 Init_Ds18b20(); //初始化 Write_One_Byte(0xcc); //忽略ROM指令 Write_One_Byte(0xbe); //读暂存器指令 a = Read_One_Byte(); //读取到的第一个字节为温度LSB b = Read_One_Byte(); //读取到的第一个字节为温度MSB temp0 = b; //先把高八位有效数据赋于temp temp0 <<= 8; //把以上8位数据从temp低八位移到高八位 temp0 = temp0|a; //两字节合成一个整型变量 tt = temp0*0.0625; //得到真实十进制温度值 得到的数值除以16就是10进制数值 //因为DS18B20可以精确到0.0625度 //所以读回数据的最低位代表的是0.0625度 temp0 = tt*10+5; //放大十倍,进行一个四舍五入操作。 temp0=temp0/10; return temp0; } /****** 串口通信初始化设置 **********/ void init_rs232(void) { SCON=0x90;//10010000 /* SM0=1; //方式二 SM1=0; SM2=0; REN=1; */ PCON=0x80; //波特率为375000 } /******************初始化************************************/ void init_sys(void) { LED1=1; LED2=1; t0=0; temp0=0; } /***********1号灯闪烁and 2号灯闪烁******************************/ void led1shan(void) { LED1=0; Delay1ms(200); LED1=1; } void led2shan(void) { LED2=0; Delay1ms(200); LED2=1; } void main() { init_sys(); //初始化 init_rs232(); //串口初始化 while(1) { t0=Get_Tmp(); if(x==0) // 初始化成功 { led1shan(); } Delay1ms(500); SBUF=t0; //串口发送到电脑 while(!TI); TI=0; Delay1ms(1000); } } |
|
相关推荐
14个回答
|
|
有人回答么~~急用啊
|
|
|
|
|
|
|
|
|
|
|
|
你的意思是emp0 16位的?
|
|
|
|
|
|
|
|
|
|
|
|
把b写到temp0的低八位额~~~相当于 temp0=(uint)b~~加不加(uint)效果一样额 |
|
|
|
哦 我一直都认为uint 是8位而已的 你现在是温度显示不正常 还是?
|
|
|
|
|
|
|
|
用数码管还是别的什么显示温度看看 有可能是你的串口通信问题啊
|
|
|
|
串口没有问题~~我发常数都能准确收到~~ 现在发现一个问题~~就是~用开发板上自带的DS18B20(那种小的不带封装的)是正常的 但是用那种一米长的带封装的就不行~~ 电路没错啊~~~就只有一个10K电阻呀 真郁闷 |
|
|
|
一米长的带封装的 没弄过 我都是在开发板上弄的
|
|
|
|
我就看看了、、、、、、
|
|
|
|
看下这个吧 最小系统搭的 很方便 程序也很简单 对比下 。还有注意时序 通常网上例程都是在12MHz晶振下的,如果用其他的晶振就要改下延时
http://wenku.baidu.com/view/14b4c98471fe910ef12df8e6.html |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
199 浏览 0 评论
使用Keil建立完整的工程,并使用外部中断0触发数码管显示903
748 浏览 0 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-使用AHT20进行环境监测之AHT20传感器介绍
1122 浏览 0 评论
874 浏览 0 评论
910 浏览 1 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11835 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-1 13:56 , Processed in 0.847692 second(s), Total 99, Slave 81 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号