完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
int search_rom(void)//搜索ROM { uchar k,l,chongtuweiFlag=0,m,n; uchar zhan[(MAXNUM-1)]={0}; uchar ss[64]; l=0; do {
Init_DS18B20(); // Delay_DS18B20(1); WriteOneChar(0xf0); // delaynus(200); for(m=0;m<8;m++) { uchar s=0;
for(n=0;n<8;n++) { k=Read2Bit();//读两位数据 k=k&0xc0; s>>=1;
switch(k) { case 0x40: //01读到的数据为0 写0 此位为0的器件响应 num1=1; write_bit (0); ss[(m*8+n)]=0;
break;
case 0x80: //10读到的数据为1 写1 此位为1的器件响应
num1=2; s=s|0x80; write_bit (1); ss[(m*8+n)]=1;
break;
case 0x00: //读到的数据为00 有冲突位 判断冲突位 //如果冲突位大于栈顶写0 小于栈顶写以前数据 等于栈顶写1 num1=3; chongtuweiFlag=m*8+n+1; if(chongtuweiFlag>zhan[l]) { num2=1; write_bit (0); ss[(m*8+n)]=0; zhan[++l]=chongtuweiFlag;
} else if(chongtuweiFlag { num2=2; s=s|((ss[(m*8+n)]&0x01)<<7); write_bit (ss[(m*8+n)]);
} else if(chongtuweiFlag==zhan[l]) { num2=3; s=s|0x80; write_bit (1); ss[(m*8+n)]=1; l=l-1; } break;
case 0xc0: //读到的数据11,不存在DS18B20 num1=4; return num; break; } }
ID[num][m]=s;
} num=num+1; }while(zhan[l]!=0&&(num
return num; }
这段代码有没有问题,DS18B20序列号搜索以及挂载的数目num计算,得到的序列号放在ID中,读写时序都没问题,单点测温可以出来,但是多点检测的时候加上这段程序连挂载的个数都读不出来咋回事 |
|
相关推荐 |
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
435 浏览 0 评论
464 浏览 0 评论
450 浏览 0 评论
806 浏览 0 评论
RT-Thread与英飞凌(infineon)合作得板子PSOC 6 板子学习
748 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
17021 浏览 31 评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-12 17:15 , Processed in 1.120106 second(s), Total 73, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
2929