求助,DS18B20搜索ROM問題
因為不會畫流程圖。。。。。。
想一步,寫一步。寫到最后自己也不清楚哪里出了問題。。。。。
4個DS18B20搜索ROM分別為
28A0A0A0...........................
28B0B0B0...........................
28C0C0C0...........................
28D0D0D0...........................
搜索結果。。沒找到28B0B0B0搜出2個2828A0A0A0
捕獲.PNG (31.25 KB, 下載次數: 65)
下載附件
2021-9-4 05:51 上傳
- bit search_rom(uchar (*prom)[8])
- {
- bit ask=0, end=0;
- uchar i=0,j=0, k=0, buff[8]={0};
- uchar _ROM_x=0, _00bit=0, high=0xff, low=0xff;
- loop:
- ask=init_18b20();
- while(ask)
- {
- ask=init_18b20();
- }
- write_18b20_byte(0xf0);
- for(i=0; i<8; i++)
- {
- for(j=0; j<8; j++)
- {
- k=0;
- k|=read_bit();
- k<<=1;
- k|=read_bit();
- switch(k)
- {
- case 0: if(8*i+j<low) low=8*i+j;
- if(8*i+j==high)
- {
- high=_00bit;
- buff[i]>>=1; buff[i]|=0x80; write_bit(1);
- }
- else
- {
- _00bit=8*i+j;
- buff[i]>>=1; write_bit(0);
- }
- break;
- case 1: buff[i]>>=1; write_bit(0); break;
- case 2: buff[i]>>=1; buff[i]|=0x80; write_bit(1); break;
- case 3: if(i==0) return 0;
- }
- }
- }
- for(i=0; i<8; i++)
- prom[_ROM_x][i]=buff[i];
- _ROM_x++;
- if(end && high==low)
- return 1;
- if(high==0)
- end = 1;
- high = _00bit;
- goto loop;
- }
復制代碼
ds18b20.rar
(824 Bytes, 下載次數: 13)
2021-9-4 05:55 上傳
點擊文件名下載附件
|