25aa160使用程序
时间:10-02
整理:3721RD
点击:
单片机使用PIC16F690使用SPI接口与25aa160通讯
void io_spi_w(uchar dat)
{
uchar value;
uchar i;
value = dat;
for(i=0;i<8;i++)
{
SCK = 0;
if(value&0x80) PSI = 1;
else PSI = 0;
SCK = 1;
value <<= 1;
}
}
uchar io_spi_r(void)
{
uchar val=0;
uchar i;
for(i = 0; i < 8; i++)
{
SCK = 0;
P_SI = 0;
SCK = 1;
val <<= 1;
if(PSO) //SO起判断返回状态的作用
val = val | 0x01; //如果是1,则置1
else
val = val & 0xfe; //如果是0,则置0
}
return val;
}
SPI:
SDO必须将TRISC<7>清零。
SCK在主模式下降TRISB<6>清0.从模式置1.
CS:低电平选择EEPROM高电平。取消选择进入待机模式。
SO:读周期中下降沿后从此引脚移除数据。
SI :将数据移入该器件,上升沿所存数据。
SCK:同步时钟
通过SPI向芯片内写入一个字节:SI引脚访问。SCK上升沿移入数据.
CS引脚保持低电平
写数据:将CS拉为低向EEPROM中写入WREN指令。8位指令发送完成,将CS拉为高将写使能寄存器
置1.
向25aa160内写入一个字节:通过SPI接口向芯片内写入WREN指令:
void Write_Ena()
{
CS =1;
CS =0;
io_spi_write(WREN); //将CS拉低并向芯片内部写入WREN指令。
CS = 0;
CS = 1; //写入指令后将CS拉高,将写使能寄存器锁定为1。
}
向25AA160写入一个字节:
写使能寄存器置为1.将CS拉为低,发送WRITE指令继续操作。随后发送地址和要写入的数据。
void Write——Ram(uint addr,uchar dat)
{
Write_Ena();
CS =1;
CS =0;
io_spi_w(RAM_WRITE);
io_spi_w(addr>>8);
io_spi_w(addr&0xff);
io_spi_w(dat);
CS =0;
CS= 1;
Dly1mS(5);
}
将CS信号拉低选择该器件。将8位READ指令发送到EEPROM发送地址存储器中此地址中
的数据通过SO引脚移出。
读序列:
uchar Read_Ram(uint addr)
{
uchar val;
CS =1;
CS = 0; //CS信号拉低选择该器件。
io_spi_w(RAM_READ); //通过SPI写入READ指令。
io_spi_w(addr>>8); //发送地址
io_spi_w(addr&0xff); //这是为了实现地址移位么?
val =io_spi_r();
CS=0;
CS =1; //拉高CS终止读操作。
return val;
}
单片机的SPI通讯的时序怎么处理,有没有知道datasheet的哪部分有详细说明。25aa160的时序部分都找到了。
void io_spi_w(uchar dat)
{
uchar value;
uchar i;
value = dat;
for(i=0;i<8;i++)
{
SCK = 0;
if(value&0x80) PSI = 1;
else PSI = 0;
SCK = 1;
value <<= 1;
}
}
uchar io_spi_r(void)
{
uchar val=0;
uchar i;
for(i = 0; i < 8; i++)
{
SCK = 0;
P_SI = 0;
SCK = 1;
val <<= 1;
if(PSO) //SO起判断返回状态的作用
val = val | 0x01; //如果是1,则置1
else
val = val & 0xfe; //如果是0,则置0
}
return val;
}
SPI:
SDO必须将TRISC<7>清零。
SCK在主模式下降TRISB<6>清0.从模式置1.
CS:低电平选择EEPROM高电平。取消选择进入待机模式。
SO:读周期中下降沿后从此引脚移除数据。
SI :将数据移入该器件,上升沿所存数据。
SCK:同步时钟
通过SPI向芯片内写入一个字节:SI引脚访问。SCK上升沿移入数据.
CS引脚保持低电平
写数据:将CS拉为低向EEPROM中写入WREN指令。8位指令发送完成,将CS拉为高将写使能寄存器
置1.
向25aa160内写入一个字节:通过SPI接口向芯片内写入WREN指令:
void Write_Ena()
{
CS =1;
CS =0;
io_spi_write(WREN); //将CS拉低并向芯片内部写入WREN指令。
CS = 0;
CS = 1; //写入指令后将CS拉高,将写使能寄存器锁定为1。
}
向25AA160写入一个字节:
写使能寄存器置为1.将CS拉为低,发送WRITE指令继续操作。随后发送地址和要写入的数据。
void Write——Ram(uint addr,uchar dat)
{
Write_Ena();
CS =1;
CS =0;
io_spi_w(RAM_WRITE);
io_spi_w(addr>>8);
io_spi_w(addr&0xff);
io_spi_w(dat);
CS =0;
CS= 1;
Dly1mS(5);
}
将CS信号拉低选择该器件。将8位READ指令发送到EEPROM发送地址存储器中此地址中
的数据通过SO引脚移出。
读序列:
uchar Read_Ram(uint addr)
{
uchar val;
CS =1;
CS = 0; //CS信号拉低选择该器件。
io_spi_w(RAM_READ); //通过SPI写入READ指令。
io_spi_w(addr>>8); //发送地址
io_spi_w(addr&0xff); //这是为了实现地址移位么?
val =io_spi_r();
CS=0;
CS =1; //拉高CS终止读操作。
return val;
}
单片机的SPI通讯的时序怎么处理,有没有知道datasheet的哪部分有详细说明。25aa160的时序部分都找到了。
