完善资料让更多小伙伴认识你,还能领取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中,读写时序都没问题,单点测温可以出来,但是多点检测的时候加上这段程序连挂载的个数都读不出来咋回事 |
|
相关推荐 |
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
48 浏览 0 评论
【每周推荐】采用11代Intel CPU,基于youyeetoo X1开发板搭建少儿AI智能STEAM积木平台
825 浏览 0 评论
2360 浏览 2 评论
【youyeetoo X1 windows 开发板体验】+ 影音处理和AI模型移植
2226 浏览 5 评论
I.MX6ULL-飞凌 ElfBoard ELF1板卡- 移植zbar的方法
1694 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
5698 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-4-23 13:33 , Processed in 0.522879 second(s), Total 67, Slave 52 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号