完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
单片机使用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的时序部分都找到了。 |
|
相关推荐
|
|
你正在撰写讨论
如果你是对讨论或其他讨论精选点评或询问,请使用“评论”功能。
228 浏览 1 评论
【瑞萨RA8D1 CPK开发板】RA8D1移植ThreadX操作系统
276 浏览 0 评论
STC32G8K64 单片机 的P00(ADC8)脚短路到GND 会死机,怎么解决?
1874 浏览 3 评论
嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-Linux C接口编程入门之ioctl操作
1061 浏览 0 评论
《DNK210使用指南 -CanMV版 V1.0》第十七章 machine.WDT类实验
713 浏览 0 评论
【youyeetoo X1 windows 开发板体验】少儿AI智能STEAM积木平台
11507 浏览 31 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-10-21 15:30 , Processed in 0.625124 second(s), Total 35, Slave 28 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号