欢迎来到天天文库
浏览记录
ID:40640513
大小:36.50 KB
页数:6页
时间:2019-08-05
《基于cc2530的18B20温度检测》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、CC2430外接多个ds18b20程序其中的delay函数参考了tizstack中的MicroWait函数.最后数据显示在128*64的液晶上。voidDelay_nus(uint16s){ while(s--) { asm("NOP"); asm("NOP"); asm("NOP"); }}/********************************************************************* *文件名:18B20.c*功能:DS18B20温度采集*@data:2009.4.24*bymche
2、n*********************************************************************/ #include"18b20.h"#include"LCD128_64.h"unsignedcharid[8];unsignedcharsensor_data_value[2];unsignedcharflag;voidDelay_nus(uint16s){ while(s--) { asm("NOP"); asm("NOP"); asm("NOP"); }}voidwrite_1820(
3、unsignedcharx) { unsignedcharm; SET_OUT; for(m=0;m<8;m++) { CL_DQ; if(x&(1<4、n; temp=0; for(n=0;n<8;n++) { CL_DQ; SET_DQ; SET_IN; k=IN_DQ; //读数据,从低位开始 if(k) temp5、=(1<6、820(); //resert write_1820(0x33); for(unsignedcharii=0;ii<8;ii++) {id[ii]=read_1820(); }}/*功能匹配*/BYTEmatch_rom(unsignedchar*rom){ unsignedchari; init_1820(); write_1820(0x55); for(i=8;i>0;i--) { write_1820(*(rom+i-1)); } return1;}BYTEinit_1820(v7、oid){ //cli(); SET_OUT; SET_DQ;//输出1 CL_DQ; Delay_nus(550);//拉低一段时间 SET_DQ;//释放 SET_IN;//输入 Delay_nus(40);//释放总线后等待15-60us while(IN_DQ) {;}//等待回复 Delay_nus(240);//回复的低电平在60到240us SET_OUT; SET_DQ;//回到初始DQ=1; return1; } voidread_data(unsignedchar*serial) { unsignedintj; 8、 unsignedchartemh,teml; unsignedchara,b,c; init_1820(); //复位18b20 write_1820(0xcc); //发出转换命令搜索器件 write_1820(0x44); //启动 for(j=20;j>1;j--) Delay_nus(50000); init_1820(); //write_1820(0xcc); match_rom(serial); //匹配 write_1820(0xbe); teml9、=read_1820(); //读数据 temh=read_1820(); if(temh&0x80)//判断正负 { flag=1;
4、n; temp=0; for(n=0;n<8;n++) { CL_DQ; SET_DQ; SET_IN; k=IN_DQ; //读数据,从低位开始 if(k) temp
5、=(1<6、820(); //resert write_1820(0x33); for(unsignedcharii=0;ii<8;ii++) {id[ii]=read_1820(); }}/*功能匹配*/BYTEmatch_rom(unsignedchar*rom){ unsignedchari; init_1820(); write_1820(0x55); for(i=8;i>0;i--) { write_1820(*(rom+i-1)); } return1;}BYTEinit_1820(v7、oid){ //cli(); SET_OUT; SET_DQ;//输出1 CL_DQ; Delay_nus(550);//拉低一段时间 SET_DQ;//释放 SET_IN;//输入 Delay_nus(40);//释放总线后等待15-60us while(IN_DQ) {;}//等待回复 Delay_nus(240);//回复的低电平在60到240us SET_OUT; SET_DQ;//回到初始DQ=1; return1; } voidread_data(unsignedchar*serial) { unsignedintj; 8、 unsignedchartemh,teml; unsignedchara,b,c; init_1820(); //复位18b20 write_1820(0xcc); //发出转换命令搜索器件 write_1820(0x44); //启动 for(j=20;j>1;j--) Delay_nus(50000); init_1820(); //write_1820(0xcc); match_rom(serial); //匹配 write_1820(0xbe); teml9、=read_1820(); //读数据 temh=read_1820(); if(temh&0x80)//判断正负 { flag=1;
6、820(); //resert write_1820(0x33); for(unsignedcharii=0;ii<8;ii++) {id[ii]=read_1820(); }}/*功能匹配*/BYTEmatch_rom(unsignedchar*rom){ unsignedchari; init_1820(); write_1820(0x55); for(i=8;i>0;i--) { write_1820(*(rom+i-1)); } return1;}BYTEinit_1820(v
7、oid){ //cli(); SET_OUT; SET_DQ;//输出1 CL_DQ; Delay_nus(550);//拉低一段时间 SET_DQ;//释放 SET_IN;//输入 Delay_nus(40);//释放总线后等待15-60us while(IN_DQ) {;}//等待回复 Delay_nus(240);//回复的低电平在60到240us SET_OUT; SET_DQ;//回到初始DQ=1; return1; } voidread_data(unsignedchar*serial) { unsignedintj;
8、 unsignedchartemh,teml; unsignedchara,b,c; init_1820(); //复位18b20 write_1820(0xcc); //发出转换命令搜索器件 write_1820(0x44); //启动 for(j=20;j>1;j--) Delay_nus(50000); init_1820(); //write_1820(0xcc); match_rom(serial); //匹配 write_1820(0xbe); teml
9、=read_1820(); //读数据 temh=read_1820(); if(temh&0x80)//判断正负 { flag=1;
此文档下载收益归作者所有