用qg8的内部spi模块读取spi接口的93c46eeprom时16位时,采用查询方式,发现输出波形正常,<br /><br />但是接受寄存器会把93c46发出的第一个零位放入spid中,请教高手如何解释。<br /><br />需要接受3个字节一位后才能是正确的数据。并且,无论在发送或接受spid一放数,就会置位SPIS_SPRF<br /><br />unsigned char rebuff1,rebuff2,rebuff3;<br /><br /><br /> b_cs=1; //93c46使能<br /> <br /> yanshi(); //延时<br /> <br /> SPID=0X01; //高7位补齐脉冲<br /> <br /> while(!SPIS_SPTEF);<br /> <br /> rebuff1=SPID; //清除标志<br /> <br /> SPID=0X80; // 低六位为读取9346的地址 <br /> <br /> while(!SPIS_SPTEF); <br /> <br /> SPID=0X00; //产生时钟 <br /> <br /> while(!SPIS_SPTEF);<br /> <br /> rebuff1=SPID; //<br /> <br /> while(!SPIS_SPRF) ;<br /> <br /> rebuff1=SPID; <br /> <br /> <br /> SPID=0X00; //产生时钟 <br /> <br /> while(!SPIS_SPTEF);<br /> <br /> rebuff1=SPID; //读取高字节,????最高位为0,实际为1<br /> <br /> <br /> while(!SPIS_SPRF) ;<br /> <br /> rebuff2=SPID;<br /> <br /> <br /> SPID=0X00; //产生时钟<br /> <br /> while(!SPIS_SPTEF);<br /> <br /> rebuff2=SPID; //读取低字节,????最高位为高字节零位,<br /> <br /> while(!SPIS_SPRF);<br /> <br /> rebuff3=SPID;<br /> <br /> <br /> SPID=0X00; //产生时钟<br /> <br /> while(!SPIS_SPTEF);<br /> <br /> rebuff3=SPID; // ????最高位为低字节零位<br /> <br /> <br /> SPIC1=0X00;<br /> <br /> <br /> yanshi(); <br /> yanshi();<br /> yanshi();<br /> yanshi(); <br /> yanshi();<br /> b_cs=0;<br /> yanshi();<br /><br />}<br /><br /> void yanshi(void){<br />unsigned char i;<br /><br />for(i=0;i<10;i++)__RESET_WATCHDOG();<br />}<br /> |
|