完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
这是最重要的延时函数(delay.h文件)
#ifndef __DELAY_H__ #define __DELAY_H__ #include "intrinsics.h" #define F_CPU 8000000 #define delay_us(A) __delay_cycles( (unsigned long)((double)(F_CPU) *((A)/1000000.0) + 0.5)) #define delay_ms(A) __delay_cycles( (unsigned long)((double)(F_CPU)*((A)/1000.0) + 0.5)) #define delay_s(A) __delay_cycles( (unsigned long)((double)(F_CPU)*((A)/1.0) + 0.5)) #endif 下面18B20程序(ds18b20.c) #include "ds18b20.h" #include "iom16.h" #include "delay.h" #define DQ_OUT DDRD_Bit6=1 #define DQ_IN DDRD_Bit6=0 #define DQ_CLR PORTD_Bit6=0 #define DQ_SET PORTD_Bit6=1 #define DQ_R PIND_Bit6 uchar rst_18b20() //18B20复位 { uchar a; DQ_OUT; delay_us(1); DQ_CLR; delay_us(500); DQ_SET; delay_us(55); DQ_IN; delay_us(1); a=DQ_R; DQ_OUT; DQ_SET; delay_us(400); if(a) return 1;//初始化失败 else return 0; //初始化成功 } void write_18b20(uchar x) //18B20写一个字节数据 { uchar i; for(i=0;i<8;i++) { DQ_SET; delay_us(1); //稍作延时 DQ_CLR; //启动写时序 //DQ=x&0x01; //向数据线传送最低位 if(x&0x01) DQ_SET; else DQ_CLR; delay_us(40); //延时约50us,供18b20采样数据 DQ_SET; //释放总线 delay_us(1); x>>=1; //右移一位 } delay_us(2); //写完一个指令稍作延时 } uchar read_18b20() //18B20读一个数据 { uchar i=0,dat; for(i=0;i<8;i++) { dat>>=1; DQ_CLR; delay_us(6); DQ_SET; delay_us(8); DQ_IN; delay_us(1); if(DQ_R) dat|=0x80; delay_us(45); DQ_OUT; DQ_SET; delay_us(10); } return(dat); } void ready_18b20() //18B20初始化 { rst_18b20(); //复位 write_18b20(0xcc); //跳过序列号操作 write_18b20(0x44); //启动温度转换 delay_ms(200); //温度转换时间 rst_18b20(); //复位 write_18b20(0xcc); //跳过序列号操作 write_18b20(0xbe); //读取数据 } float Temperature_read() //温度读取函数 { uchar TL; //定义低字节 uint TH; //定义高字节 uint TempH,TempL,temp; float temperature; //定义温度 ready_18b20(); //18B20初始化 TL=read_18b20(); //读低字节 TH=read_18b20(); //读高字节 TH<<=8; temp=TH+TL; if(temp&0x8000) //如果温度为负 { temperature=-1; //温度负号标志 temp=~temp; //取反加1 temp+=1; } else //温度为正 { temperature=1; //温度正号标志 } TempH=temp>>4; TempL=temp&0x0F; TempL=TempL*6/10; //小数近似处理 temperature*=(TempH+0.1*TempL); //计算温度 return temperature; //返回温度值 } |
|
相关推荐
1 个讨论
|
|
只有小组成员才能发言,加入小组>>
AVR Atmega16 Bootloader程序与上位机LabView程序
5110 浏览 6 评论
#include <ioavr.h>这个头文件我应该下什么编译器
7758 浏览 0 评论
3016 浏览 2 评论
3100 浏览 1 评论
10046 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-15 12:04 , Processed in 0.599618 second(s), Total 48, Slave 36 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号