单片机模拟SPI程序_第1页
单片机模拟SPI程序_第2页
单片机模拟SPI程序_第3页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、(CPHA)(CPOL)的不同组合使得SPI 4 如果CPOL = 引脚在空闲状态保持低电平;如果CPOL 引脚在空闲状态保持高电平时序图如下:(一) AVR 单片机实现代码/IO 端口定义#define SPI_SCKPC0 #define SPI_MOSI PC1 #define SPI_MISO PC2 #define SPI_DDRDDRC #define SPI_PORT #define SPI_PINPINC/端口操作符定义#define SCK_SET SPI_PORT|=_BV(SPI_SCK) #define SCK_CLR SPI_PORT&=_BV(SPI-SCK)#de

2、fine MOSI_SET SPI_PORT|=_BV(SPI_MOSI)#define MOSI_CLR SPI_PORT&=_BV(SPI_MOSI)#define MISO_PIN PINC&_BV(SPI_MISO)#define DELAY_BUS/如需要延时,用延时函数替代此符号/模式 1:CPOL=1 CPHA=1void spi_init(void)SCK_SET; SPI_DDR|=_BV(SPI_MOSI)|_BV(SPI_SCK);uint8_t spi_readwrite_byte(uint8_t data)uint8_t i,ret=0;for(i=0;i8;i+)/

3、下降沿模拟if(data&0 x80)/设置输出MOSI_SET;elseMOSI_CLR;SCK_CRL;/SCK DELAY_BUS;/ 上 升 沿 模 拟 ret=1; if(MISO_PIN)/读数据ret|=1;SCK_SET; /SCK 产生上升沿data=1;DELAY_BUS;return ret;/模式 2:CPOL=0 CPHA=1void spi_init(void)SCK_CLR; SPI_DDR|=_BV(SPI_MOSI)|_BV(SPI_SCK);uint8_t spi_readwrite_byte(uint8_t data)uint8_t i,ret=0;for

4、(i=0;i8;i+)/上升沿模拟if(data&0 x80)/设置输出MOSI_SET;elseMOSI_CLR;SCK_SET;/SCK DELAY_BUS;/ 下 降 沿 模 拟 ret=1; if(MISO_PIN)/读数据ret|=1;SCK_CLR; /SCK 产生下降沿data=1;DELAY_BUS;return ret;/模式 3:CPOL=1 CPHA=0void spi_init(void)SCK_SET; SPI_DDR|=_BV(SPI_MOSI)|_BV(SPI_SCK);uint8_t spi_readwrite_byte(uint8_t data)uint8_t

5、 i,ret=0;/设置好输出口if(data&0 x80)MOSI_SET;elseMOSI_CLR;for(i=0;i8;i+)DELAY_BUS;/ 下 降 沿 模 拟 ret=1; if(MISO_PIN)/读数据ret|=1;SCK_CRL;/SCK 产生下降沿DELAY_BUS;/上升沿模拟data=1;if(data&0 x80)/设置输出MOSI_SET;elseMOSI_CLR;SCK_SET; /SCK 产生上升沿return ret;/模式 4:CPOL=0 CPHA=0void spi_init(void)SCK_CLR; SPI_DDR|=_BV(SPI_MOSI)|

6、_BV(SPI_SCK);uint8_t spi_readwrite_byte(uint8_t data)uint8_t i,ret=0;/设置好输出口if(data&0 x80)MOSI_SET;elseMOSI_CLR;for(i=0;i8;i+)DELAY_BUS;/上升沿模拟ret=1;if(MISO_PIN)/读数据ret|=1;SCK_SET;/SCK 产生上升沿DELAY_BUS;/下降沿模拟data=1;if(data&0 x80)/设置输出MOSI_SET;elseMOSI_CLR;SCK_CLR; /SCK 产生下降沿return ret;(二) 其它单片机实现代码#inc

7、lude #define _CPOL1#define _CPHA0#define SCK_IODDRA|=0X01 #define MOSI_IODDRA|=0X02 #define MISO_IO#define SSEL_IODDRA|=0X08#define SCK_D(X) (X?(PORTA|=0X01):(PORTA&=0XFE) #define MOSI_D(X) (X?(PORTA|=0X02):(PORTA&=0XFD) #define SSEL_D(X) (X?(PORTA|=0X08):(PORTA&=0XF7)#define MISO_I()void delay()uns

8、igned char m,n; for(n=0;n5;n+); for(m=0;m100;m+);/*端口方向配置 与输出初始化*/ void SPI_Init(void)SCK_IO; MOSI_IOMISO_IO; SSEL_IO; SSEL_D(1); MOSI_D(1); #if _CPOL=0 SCK_D(0);#else SCK_D(1);#endif/*模式零写数据*/ #if _CPOL=0&_CPHA=0/MODE0void SPI_Send_Dat(unsigned char dat)unsigned char n; for(n=0;n8;n+)SCK_D(0);if(da

9、t&0 x80)MOSI_D(1); else MOSI_D(0); dat=1;SCK_D(1);SCK_D(0);/*模式零读数据*/ unsigned char SPI_Receiver_Dat(void)unsigned char n ,dat,bit_t; for(n=0;n8;n+)SCK_D(0);dat=1; if(MISO_I()dat|=0 x01; else dat&=0 xfe; SCK_D(1);SCK_D(0);return dat;#endif/*模式二写数据*/ #if _CPOL=1&_CPHA=0/MODE1void SPI_Send_Dat(unsigne

10、d char dat)unsigned char n; for(n=0;n8;n+)SCK_D(1);if(dat&0 x80)MOSI_D(1); else MOSI_D(0); dat=1;SCK_D(0);SCK_D(1);/*模式二读数据*/ unsigned char SPI_Receiver_Dat(void)unsigned char n ,dat,bit_t; for(n=0;n8;n+)SCK_D(1);dat=1; if(MISO_I()dat|=0 x01; else dat&=0 xfe; SCK_D(0);SCK_D(1);return dat;#endif/*模式一

11、写数据*/#if _CPOL=0&_CPHA=1/MODE01void SPI_Send_Dat(unsigned char dat)unsigned char n;SCK_D(0);for(n=0;n8;n+)SCK_D(1);if(dat&0 x80)MOSI_D(1); else MOSI_D(0); dat=1;SCK_D(0);/*模式一读数据*/ unsigned char SPI_Receiver_Dat(void)unsigned char n ,dat,bit_t; for(n=0;n8;n+)SCK_D(1);dat=1; if(MISO_I()dat|=0 x01; el

12、se dat&=0 xfe; SCK_D(0);SCK_D(0);return dat;#endif/#if _CPOL=1&_CPHA=1/MODE11void SPI_Send_Dat(unsigned char dat)unsigned char n;SCK_D(1);for(n=0;n8;n+)SCK_D(0);if(dat&0 x80)MOSI_D(1); else MOSI_D(0); dat=1;SCK_D(1);/*模式三读数据*/ unsigned char SPI_Receiver_Dat(void)unsigned char n ,dat,bit_t; SCK_D(0);for(n=0;n8;n+) SCK_D(0);dat=1; if(MISO_I()dat|=0 x01; else dat&=0 xfe; SCK_D(1);SCK_D(1);return dat;#endif/*/ void main()SPI

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论