DS2431DS18B20读写程序_第1页
DS2431DS18B20读写程序_第2页
DS2431DS18B20读写程序_第3页
DS2431DS18B20读写程序_第4页
DS2431DS18B20读写程序_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、DS2431DS18B20onewire读写程序最近公司有一个产品用到了DS2431,我就将先前一个DS18B20的程序中加入了DS2431的按规定函数。先传给大家分享.大家可以使用,转载时请说明出处.此程序不够完善,希望能支持多节点设备连接。单总线适用于单,能够控制一个或多个从机设备。主机可以是微控制器,从机可以是单总线器件,它们之间的数据交换只通过一条信号线。当只有一个从机设备时,系统可按单节点系统操作;当有多个从机设备时,系统则按多节点系统操作。以下是程序:# incIude"system,h"# incIude"onewire.h"unsigne

2、dchara_DS24318;/codebyIyxandRyanHsiung# defineDS_DQ_INPORTAbits.RA4# defineDS_DQ_OUTLATAbits.LATA4# defineDS_DQ_TRISDTRISAbits.TRISA4voiddeIay_us(unsignedchartime)/deIayms=1usof20Mhzosc/不准确1uswhiIe(time);CRC校验unsignedcharcrccheck(unsignedchar*p,unsignedcharIen)1unsignedcharbitO,cbit,r,temp,i,j,byte;

3、temp=0;for(j=0;j<len;j+)byte=pj;for(i=0;i<8;i+)(cbit=temp&0x01;bit0=byte&0x01;temp=temp»1;r=cbit'bitO;if(r=1)temp=temp"0x8c;byte=byte»1;returntemp;/xJn z|x xjx x|x Jx xjx xj>检查DS1820是否存在:如果DS1820不存在返回1,否则返回0/zjs/unsignedcharOneWire_ack(void)(unsignedcharack;DS_DQ_

4、TRISDR;/输/出DS_DQ_OUT=O;/输/出LOW/deIay_us(500);deIay_us(250);deIay_us(250);deIay_us(100);DS_DQ_0UT=1;/输/出HIGHDS_DQ_TRISD=1;/RE2输入delay_us(40);/deIay_us(45);if(DSDQIN=1)ack=1;/«MB,eIseack=O;/deIay_us(500);deIay_us(250);deIay_us(250);deIay_us(100);returnack;/从DS1820读1字节数据unsignedcharOneWire_read(vo

5、id),unsignedchari,byte,temp;byte=0x00;for(i=0;i<8;i+)DS_DQ_TRISD=O;/RE2输出DS_DQ_OUT=0;/输/出LOWdelay_us(1);/delay_us(3);DS_DQ_0UT=1;/输/出HIGHDS_DQ_TRISD=1;/RE2输入delay_us;/delay_us(10);if(DS_DQ_IN)byte|=0x80;/读入if(i<7)byte=byte»1;delay_us(120);/delay_us(100);DS_DQ_TRISD=O;/RE2输出deIay_us;/deIay

6、_us(5);returnbyte;/1写ROM或存贮器命令到彳IJ<J/IIJII/voidOneWire_write(unsignedcharcmd)(unsignedchari,j;DS_DQ_TRISD=O;/RE2输出for(j=0;j<=7;j+)(i=cmd&0x01;if(i=0x01)(DS_DQ_OUT=O;/输/出LOWdelay_us(5);DS_DQ_OUT=1;/输/出HIGHdelay_us(120);eIseIDS_DQ_OUT=O;/输/出LOWdelay_us(120);DS_DQ_0UT=1;/输/出HIGHdelay_us(5);cm

7、d=cmd»1;匹配DS1820voidOneWire_match(unsignedchar*p)unsignedchari;doi=0neWire_ack();while(i=0x01);OneWire_write(0x55);for(i=0;i<8;i+)OneWire_write(pi);uint8DS2431_WriteOneByte(uint16address,uint8*p_data)1uint8tem8h,tem81,i,data,errors,temp8;tem8h=(unsignedchar)(address»=4);tem81=(unsignedc

8、har)address;if(OneWire_ack()return;/跳过ROM匹配/发送写暂存器 命令/发送地址低 17OneWire_write(Oxcc);OneWire_write(OxOf);OneWire_write(tem81);OneWire_write(tem8h);for(i=0;i<8;i+)Idata=*p_data;p_data+;OneWirewrite(data);/ClrWDTO;deIay_us(25);i千(OneWire_ack()return;OneWire_write(Oxcc);/跳过ROM匹配复制暂存器数据到存储OneWire_write(

9、OxAA);/temp8=0neWire_read();temp8«=8;temp8+=0neWire_read();errors=OneWire_read0;if(errors!=0x07)returnO;i千(OneWire_ack()return;/跳过ROM匹配/发出启动转换命令/发送地址低位/发送地址高位等待写时序结束510usOneWire_write(Oxcc);OneWire_write(0x55);OneWire_write(tem81);OneWire_write(tem8h);OneWire_write(errors);for(i=0;i<50;i+)de

10、lay_us(100);/if(OneWireread()!=OxAA)returnO;returnl;/*unsignedchari=1;if(OneWire_ack()return;OneWire_write(Oxcc);/旦先过ROMOneWire_write(OxOf);/writescrachpadOneWire_write(0x20);/ta1OneWire_write(0x00);/ta2OneWire_write(data);/dataa_DS24310=0neWire_read();a_DS24311=0neWire_read();crccheck(a_DS2431,2);*

11、/uint8DS2431_WriteString(uint16address,uint8*p_data)iuint8tem8h,tem81,i,data,errors,temp8;tem8h=(unsignedchar)(address»=4);tem81=(unsignedchar)address;/跳过ROM匹配/发送写暂存器 命令/发送地址低i千(OneWire_ack()return;OneWire_write(Oxcc);OneWire_write(OxOf);OneWire_write(tem81);OneWire_write(tem8h);for(i=0;i<8;

12、i+)data=*p_data;p_data+;OneWire_write(data);IdeIay_us(25);i千(OneWire_ack()return;OneWi re_wr i te(Oxcc);/跳过ROM匹配复制暂存器数据到存储OneWire_write(OxAA);/temp8=0neWire_read();temp8«=8;temp8+=0neWire_read();errors=OneWire_read0;if(errors!=0x07)returnO;i千(OneWire_ack()return;/跳过ROM匹配/发出启动转换命令/发送地址低位/发送地址高位O

13、neWire_write(Oxcc);OneWire_write(0x55);OneWire_write(tem81);OneWire_write(tem8h);OneWire_write(errors);for(i=0;i<50;i+)delay_us(100);/returnO;returnl;/*unsignedchari=1;i千(OneWire_ack()return;OneWire_write(Oxcc);/旦先过ROMOneWire_write(OxOf);/writescrachpadOneWire_write(0x20);/ta1OneWire_write(0x00);

14、/ta2OneWire_write(data);/dataa_DS24310=OneWire_read0;a_DS24311=0neWire_read();crccheck(a_DS2431,2);*/uint8DS2431_ReadOneByte(uint16address)(i千(OneWire_ack()return;OneWire_write(Oxcc);/旦先过ROMOneWire_write(OxfO);/发出读存储器命令OneWire_write(LS_BYTE(address);/地址低8位OneWire_write(HS_BYTE(address);/地址高8位a_DS243

15、10=0neWire_read();/readdatareturna_DS24310;/*unsignedchari=1;i千(OneWire_ack()return;OneWi re_wr ite(Oxaa) ;/a DS2431 O=OneWire read 0/readtaia DS2431 1=0neWire read 0a DS2431 2=0neWire read 0a DS2431 3=0neWire read 0a DS2431 4=0neWire read 0a DS2431 5=0neWire read 0crccheck (&a DS2431 4, 2);*/re

16、adta2/reades/readdata/crc/CRCu i nt8*DS2431_ReadStr i ng (u i nt16addressuint8i ;i f (OneWi re ack () return;OneWi re wr ite (Oxcc) :/ 跳过 ROM 匹配OneWire_write(Oxf0);/发出读存储器命令OneWire_write(LS_BYTE(address);/地址低8位OneWire_write(HS_BYTE(address);/地址图8位for(i=8;i>0;i")/ClrWDT0;returna_DS2431;voidSt

17、art_convert_ds18b20(void)unsignedchari=1;i千(OneWire_ack()return;OneWi re wr ite (Oxcc) ;/ 跳过 ROM 匹配OneWire_write(0x44);/启动DS1820转换unsignedintRead_convert_ds18b20(unsignedcharfIag_Ianguage)unsignedchari;unsignedchar0neWire9:/存放从DS18B20读取的9字节数据unsignedintOneWire_temp;unsignedcharfIag_temp=0;if(OneWire

18、_ack()return0x5fff;OneWirewrite(Oxcc);/跳过ROM匹配OneWire_write(Oxbe):/读转换后温度值for(i=0;i<9;i+)OneWire_temp=OneWire1;OneWire_temp=OneWire_temp«8;OneWire_temp+=OneWire0;if(OneWire_temp&Oxf800)!=0)/判断是否小于0度IOneWire_temp="OneWire_temp;OneWire_temp+;fIag_temp=1;I0neWire_temp+=8;/四舍五入8*0.0625=0.52k90717OneWire_temp»=4;if(OneWire_temp>0)OneWir

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论