欢迎来到得力文库 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
得力文库 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    最新DS2431 DS18B20读写程序.doc

    • 资源ID:33806433       资源大小:217KB        全文页数:17页
    • 资源格式: DOC        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    最新DS2431 DS18B20读写程序.doc

    精品资料DS2431 DS18B20读写程序.DS2431 DS18B20 one wire 读写程序最近公司有一个产品用到了DS2431,我就将先前一个DS18B20的程序中加入了DS2431的按规定函数。先传给大家分享.大家可以使用,转载时请说明出处. 此程序不够完善,希望能支持多节点设备连接。单总线适用于单,能够控制一个或多个从机设备。主机可以是微控制器,从机可以是单总线器件,它们之间的数据交换只通过一条信号线。当只有一个从机设备时,系统可按单节点系统操作;当有多个从机设备时,系统则按多节点系统操作。 以下是程序:#include"system.h"#include"one wire.h"unsigned char a_DS24318;/code by lyx and RyanHsiung#define DS_DQ_IN PORTAbits.RA4#define DS_DQ_OUT LATAbits.LATA4#define DS_DQ_TRISD TRISAbits.TRISA4void delay_us(unsigned char time) /delayms=1us of 20Mhz osc /不准确1us while(time-); /* CRC校验*/unsigned char crccheck(unsigned char *p,unsigned char len)unsigned char bit0,cbit,r,temp,i,j,byte;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=cbitbit0; if(r=1) temp=temp0x8c; byte=byte>>1; return temp;/* 检查DS1820是否存在:如果DS1820不存在返回1,否则返回0*/unsigned char OneWire_ack(void) unsigned char ack; DS_DQ_TRISD=0; /输出 DS_DQ_OUT=0; /输出LOW /delay_us(500); delay_us(250); delay_us(250); delay_us(100); DS_DQ_OUT=1;/输出HIGH DS_DQ_TRISD=1;/RE2输入 delay_us(40);/delay_us(45); if(DS_DQ_IN=1) ack=1; / else ack=0;/ /delay_us(500); delay_us(250); delay_us(250); delay_us(100); return ack;/* 从DS1820读1字节数据*/ unsigned char OneWire_read(void) unsigned char i,byte,temp; byte=0x00; for (i=0;i<8;i+) DS_DQ_TRISD=0;/RE2输出 DS_DQ_OUT=0;/输出LOW delay_us(1);/delay_us(3); DS_DQ_OUT=1;/输出HIGH DS_DQ_TRISD=1;/RE2输入 delay_us(5);/delay_us(10); if(DS_DQ_IN) byte|=0x80; / 读入 if (i<7) byte=byte>>1; delay_us(120);/delay_us(100); DS_DQ_TRISD=0;/RE2输出 delay_us(2);/delay_us(5); return byte;/* 写ROM或存贮器命令到DS1820*/void OneWire_write(unsigned char cmd) unsigned char i,j; DS_DQ_TRISD=0;/RE2输出 for (j=0;j<=7;j+) i=cmd&0x01; if (i=0x01) DS_DQ_OUT=0;/输出LOW delay_us(5); DS_DQ_OUT=1;/输出HIGH delay_us(120); else DS_DQ_OUT=0;/输出LOW delay_us(120); DS_DQ_OUT=1;/输出HIGH delay_us(5); cmd=cmd>>1; /* 匹配DS1820*/ void OneWire_match(unsigned char *p) unsigned char i; do i=OneWire_ack(); while (i=0x01); OneWire_write(0x55); for(i=0;i<8;i+) OneWire_write(pi); uint8 DS2431_WriteOneByte(uint16 address, uint8 * p_data)uint8 tem8h,tem8l,i,data,errors,temp8;tem8h=(unsigned char)(address>>=4);tem8l =(unsigned char)address; if(OneWire_ack() return;OneWire_write(0xcc);/跳过ROM匹配OneWire_write(0x0f);/发送写暂存器命令OneWire_write(tem8l);/发送地址低位OneWire_write(tem8h);/发送地址高位 for(i=0;i<8;i+)data=*p_data;p_data+;OneWire_write(data);/ClrWDT();delay_us(25); if(OneWire_ack() return;OneWire_write(0xcc);/跳过ROM匹配OneWire_write(0xAA); /复制暂存器数据到存储器中temp8=OneWire_read();temp8<<=8;temp8+=OneWire_read();errors=OneWire_read(); if(errors!=0x07)return 0; if(OneWire_ack() return;OneWire_write(0xcc);/跳过ROM匹配OneWire_write(0x55);/发出启动转换命令OneWire_write(tem8l);/发送地址低位OneWire_write(tem8h);/发送地址高位 OneWire_write(errors);for(i=0;i<50;i+)delay_us(100); /等待写时序结束510usif(OneWire_read()!=0xAA)return 0;return 1;/*unsigned char i=1; if(OneWire_ack() return;OneWire_write(0xcc);/跳过ROM匹配OneWire_write(0x0f); / write scrachpadOneWire_write(0x20); / ta1OneWire_write(0x00); / ta2OneWire_write(data); / dataa_DS24310 = OneWire_read();a_DS24311 = OneWire_read();crccheck(a_DS2431,2);*/uint8 DS2431_WriteString(uint16 address, uint8 * p_data)uint8 tem8h,tem8l,i,data,errors,temp8;tem8h=(unsigned char)(address>>=4);tem8l =(unsigned char)address; if(OneWire_ack() return;OneWire_write(0xcc);/跳过ROM匹配OneWire_write(0x0f);/发送写暂存器命令OneWire_write(tem8l);/发送地址低位OneWire_write(tem8h);/发送地址高位 for(i=0;i<8;i+)data=*p_data;p_data+;OneWire_write(data);delay_us(25); if(OneWire_ack() return;OneWire_write(0xcc);/跳过ROM匹配OneWire_write(0xAA); /复制暂存器数据到存储器中temp8=OneWire_read();temp8<<=8;temp8+=OneWire_read();errors=OneWire_read(); if(errors!=0x07)return 0; if(OneWire_ack() return;OneWire_write(0xcc);/跳过ROM匹配OneWire_write(0x55);/发出启动转换命令OneWire_write(tem8l);/发送地址低位OneWire_write(tem8h);/发送地址高位 OneWire_write(errors);for(i=0;i<50;i+)delay_us(100); /等待写时序结束510usif(OneWire_read()!=0xAA)return 0;return 1;/*unsigned char i=1; if(OneWire_ack() return;OneWire_write(0xcc);/跳过ROM匹配OneWire_write(0x0f); / write scrachpadOneWire_write(0x20); / ta1OneWire_write(0x00); / ta2OneWire_write(data); / dataa_DS24310 = OneWire_read();a_DS24311 = OneWire_read();crccheck(a_DS2431,2);*/uint8 DS2431_ReadOneByte(uint16 address ) if(OneWire_ack() return;OneWire_write(0xcc);/跳过ROM匹配OneWire_write(0xf0);/发出读存储器命令OneWire_write(LS_BYTE(address) );/地址低8位OneWire_write(HS_BYTE(address);/地址高8位a_DS24310 = OneWire_read(); / read datareturn a_DS24310;/*unsigned char i=1; if(OneWire_ack() return;OneWire_write(0xcc);/跳过ROM匹配OneWire_write(0xaa); /a_DS24310 = OneWire_read(); / read ta1a_DS24311 = OneWire_read(); / read ta2a_DS24312 = OneWire_read(); / read es a_DS24313 = OneWire_read(); /read dataa_DS24314 = OneWire_read(); /crca_DS24315 = OneWire_read(); /CRCcrccheck(&a_DS24314,2);*/uint8* DS2431_ReadString(uint16 address) uint8 i; if(OneWire_ack() return;OneWire_write(0xcc);/跳过ROM匹配OneWire_write(0xf0);/发出读存储器命令OneWire_write(LS_BYTE(address) );/地址低8位OneWire_write(HS_BYTE(address);/地址高8位for(i=8;i>0;i-)a_DS24318-i=OneWire_read();/ClrWDT();return a_DS2431;void Start_convert_ds18b20(void)unsigned char i=1; if(OneWire_ack() return;OneWire_write(0xcc);/跳过ROM匹配OneWire_write(0x44); /启动DS1820转换unsigned int Read_convert_ds18b20(unsigned char flag_language)unsigned char i;unsigned char OneWire9;/存放从DS18B20读取的9字节数据unsigned int OneWire_temp;unsigned char flag_temp=0;if(OneWire_ack() return 0x5fff;OneWire_write(0xcc);/跳过ROM匹配OneWire_write(0xbe); /读转换后温度值for (i=0;i<9;i+) OneWirei=OneWire_read(); OneWire_temp=OneWire1; OneWire_temp=OneWire_temp<<8; OneWire_temp+=OneWire0; if (OneWire_temp&0xf800)!=0)/判断是否小于0度 OneWire_temp=OneWire_temp; OneWire_temp+; flag_temp=1; OneWire_temp+=8; /四舍五入 8*0.0625=0.5 2k90717 OneWire_temp>>=4; if(OneWire_temp>0) OneWire_temp-; if(flag_language!=0) OneWire_temp=OneWire_temp*9/5; if(flag_temp=1) if(OneWire_temp>=32) OneWire_temp=OneWire_temp-32; else OneWire_temp=32-OneWire_temp; flag_temp=0; else OneWire_temp=OneWire_temp+32; OneWire_temp&=0x00ff; if(flag_temp=1) OneWire_temp|=0xff00; return(OneWire_temp);

    注意事项

    本文(最新DS2431 DS18B20读写程序.doc)为本站会员(1595****071)主动上传,得力文库 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知得力文库 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于得利文库 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

    © 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

    黑龙江省互联网违法和不良信息举报
    举报电话:0468-3380021 邮箱:hgswwxb@163.com  

    收起
    展开