|
- 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;
- ask=init_18b20();
- while(ask)
- {
- ask=init_18b20();
- }
- write_18b20_byte(0xf0);
- for(i=0; i<8; i++)
- {
- for(j=0; j<8; j++)
- {
- loop:
- k=0;
- k|=read_bit();
- k<<=1;
- k|=read_bit();
- switch(k)
- {
- case 0: if(8*i+j<low) low=8*i+j; _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: 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;
- //以下為修改后,添加部分
- ask=init_18b20();
- while(ask)
- {
- ask=init_18b20();
- }
- write_18b20_byte(0xf0);
- _00bit = 0;
- for(i=0; i<8; i++)
- {
- buff[i] = 0;
- for(j=0; j<8; j++)
- {
- if(8*i+j == high) //抄寫上一個(gè)ROM到最高00位。。。
- {
- k=0;
- k|=read_bit();
- k<<=1;
- k|=read_bit();
- high = _00bit;
- buff[i]>>=1;
- buff[i]|=0x80;
- if(j<7)
- j++;
- else
- {
- j=0;
- i++;
- }
- write_bit(1);
- goto loop; //抄寫完成返回讀2寫1循環(huán)中。。。。。。
- }
- k=0;
- k|=read_bit();
- k<<=1;
- k|=read_bit();
- if(k==0)
- _00bit = 8*i+j;
- buff[i]>>=1;
- if((prom[_ROM_x-1][i])>>j&0x01)
- {
- buff[i]|=0x80;
- write_bit(1);
- }
- else
- write_bit(0);
- }
- }
- return 0;
- }
復(fù)制代碼
自己剛寫成的。。。太長了。。。
你的程序不完整。。。。
網(wǎng)上找到一個(gè)。。。需要使用外部存儲(chǔ)器。。。。
這個(gè)不用外部存儲(chǔ)器。。。就是太長了。。。。
看一下,能不能精簡。。。。。。。。 |
|