void TempDelay (unsigned char idata us) { while(us--); } /************************************************************ *Function:18B20初始化 *parameter: *Return: *Modify: *************************************************************/ void Init18b20 (void) { D18B20=1; _nop_(); D18B20=0; TempDelay(80); //delay 530 uS//80 _nop_(); D18B20=1; TempDelay(14); //delay 100 uS//14 _nop_(); _nop_(); _nop_(); if(D18B20==0) flag = 1; //detect 1820 success! else flag = 0; //detect 1820 fail! TempDelay(20); //20 _nop_(); _nop_(); D18B20 = 1; } /************************************************************ *Function:向18B20写入一个字节 *parameter: *Return: *Modify: *************************************************************/ void WriteByte (unsigned char idata wr) //单字节写入 { unsigned char idata i; for (i=0;i<8;i++) { D18B20 = 0; _nop_(); D18B20=wr&0x01; TempDelay(3); //delay 45 uS //5 _nop_(); _nop_(); D18B20=1; wr >>= 1; } } /************************************************************ *Function:读18B20的一个字节 *parameter: *Return: *Modify: *************************************************************/ unsigned char ReadByte (void) //读取单字节 { unsigned char idata i,u=0; for(i=0;i<8;i++) { D18B20 = 0; u >>= 1; D18B20 = 1; if(D18B20==1) u |= 0x80; TempDelay (2); _nop_(); } return(u); } /************************************************************ *Function:读18B20 *parameter: *Return: *Modify: *************************************************************/ void read_bytes (unsigned char idata j) { unsigned char idata i; for(i=0;i<j;i++) { *p = ReadByte(); p++; } } /************************************************************ *Function:CRC校验 *parameter: *Return: *Modify: *************************************************************/ unsigned char CRC (unsigned char j) { unsigned char idata i,crc_data=0; for(i=0;i<j;i++) //查表校验 crc_data = CrcTable[crc_data^temp_buff[i]]; return (crc_data); } /************************************************************ *Function:读取温度 *parameter: *Return: *Modify: *************************************************************/ void GemTemp (void) { read_bytes (9); if (CRC(9)==0) //校验正确 { Temperature = temp_buff[1]*0x100 + temp_buff[0]; // Temperature *= 0.625; Temperature /= 16; TempDelay(1); } } /************************************************************ *Function:内部配置 *parameter: *Return: *Modify: *************************************************************/ void Config18b20 (void) //重新配置报警限定值和分辨率 { Init18b20(); WriteByte(0xcc); //skip rom WriteByte(0x4e); //write scratchpad WriteByte(0x19); //上限 WriteByte(0x1a); //下限 WriteByte(0x7f); //set 11 bit (0.125) Init18b20(); WriteByte(0xcc); //skip rom WriteByte(0x48); //保存设定值 Init18b20(); WriteByte(0xcc); //skip rom WriteByte(0xb8); //回调设定值 } /************************************************************ *Function:读18B20ID *parameter: *Return: *Modify: *************************************************************/ void ReadID (void)//读取器件 id { Init18b20(); WriteByte(0x33); //read rom read_bytes(8); } /************************************************************ *Function:18B20ID全处理 *parameter: *Return: *Modify: *************************************************************/ void TemperatuerResult(void) { p = id_buff; ReadID(); Config18b20(); Init18b20 (); WriteByte(0xcc); //skip rom WriteByte(0x44); //Temperature convert Init18b20 (); WriteByte(0xcc); //skip rom WriteByte(0xbe); //read Temperature p = temp_buff; GemTemp(); } void GetTemp() { if(TIM==100) //每隔 1000ms 读取温度 { TIM=0; TemperatuerResult(); } } /************************************* [ t1 (10ms)中断] 中断 *************************************/ void T1zd(void) interrupt 3 { TH1 = 0xD8; //10 TL1 = 0xF0; TIM++;
- 1
- xxplg2018-05-17不错,18B20能正常工作。
- 粉丝: 0
- 资源: 2
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Matlab_IEEE TVT中ris辅助双功能雷达通信系统联合波形设计与无源波束形成的Matlab代码.zip
- Matlab_IEEE TIP 2020高被引论文MatLab.zip
- Matlab_IEEE图像处理论文的Matlab代码:一种用于真实世界图像去噪的盲像素级非局部方法.zip
- Matlab_kShape的Matlab实现.zip
- Matlab_KMeans用于大数据预处理和稀疏化的Matlab实现Aka KMeans.zip
- Matlab_ifforest异常检测代码Matlab版.zip
- Matlab_LTE turbo码的编码器和解码器的Matlab仿真.zip
- Matlab_Manopt是一个Matlab工具箱,用于优化流形.zip
- Matlab_Letswave 6 Matlab脑电信号处理工具箱.zip
- 内网渗透讲义-全干货2024最新内网渗透讲解
- 2025最新英特尔手册完整中文版
- 计算机面试+Java+面试刷题相关图片+作为图片
- Nuclei POC 12W+合集
- 基于Matlab实现DOA与频率联合估计算法仿真(源码).rar
- 2024网络安全十大创新方向
- 低功耗可配置架构中HEVC解码器优化研究与应用