你可以把这个等待当成应答,或者写入完成标志位,怎么叫都行,你理解就行了
1: 把写入一个完整数据(这包括写下地址,读写标志等等)和等待分开写,写两个函数
2: 声明一个僵局位,或者一个全局u8变量都行,看实际情况吧,我这行就用 F 来代替吧, 现在定义规则: F == 1 就是正在写入, F !=1 就是写入完成
3:这个是你的写入函数
- void E2_WriteByte(unsigned char addr,unsigned char dat)
- {
- unsigned char sta;
- SPI_CS = 0;
- spiWriteByte(WREN);
- SPI_CS = 1;
- SPI_CS = 0;
- spiWriteByte(WRITE);
- spiWriteByte(addr);
- spiWriteByte(dat);
- SPI_CS = 1;
- F = 1://写入完整的数据后,F置位
- }
这个是读取函数,这个函数可以是有返回值的,也可以是不返回,在函数中操作F就可以了有的单片机返回参数代码量和RAM占用多一点,对于几十B运行内存的单片机来说,这很重要,看你自己的情况
- void read(void)
- {
- SPI_CS = 0;
- spiWriteByte(RDSR);
- sta = spiReadByte();
- SPI_CS = 1;
- if((sta & 0x01) == 0)
- {
- F = 0;
- }
- }
那么好,在主程序中就可以通过F的值来进行其它操作了
|