单片机模拟SPI程序

单片机模拟SPI程序

ID:39554463

大小:118.50 KB

页数:9页

时间:2019-07-06

单片机模拟SPI程序_第1页
单片机模拟SPI程序_第2页
单片机模拟SPI程序_第3页
单片机模拟SPI程序_第4页
单片机模拟SPI程序_第5页
资源描述:

《单片机模拟SPI程序》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、时钟相位(CPHA)和时钟极性(CPOL)的不同组合使得SPI传输有了4种方式如果CPOL=0,SCK引脚在空闲状态保持低电平;如果CPOL=1,SCK引脚在空闲状态保持高电平时序图如下:(一)AVR单片机实现代码//IO端口定义#defineSPI_SCKPC0#defineSPI_MOSIPC1#defineSPI_MISOPC2#defineSPI_DDRDDRC#defineSPI_PORTPROTC#defineSPI_PINPINC//端口操作符定义#defineSCK_SETSPI_

2、PORT

3、=_BV(SPI_SCK)#defineSCK_CLRSPI_PORT&=~_BV(SPI-SCK)#defineMOSI_SETSPI_PORT

4、=_BV(SPI_MOSI)#defineMOSI_CLRSPI_PORT&=~_BV(SPI_MOSI)#defineMISO_PINPINC&_BV(SPI_MISO)#defineDELAY_BUS//如需要延时,用延时函数替代此符号//模式1:CPOL=1CPHA=1voidspi_init(void){SCK_SET;SPI_DDR

5、

6、=_BV(SPI_MOSI)

7、_BV(SPI_SCK);}uint8_tspi_readwrite_byte(uint8_tdata){uint8_ti,ret=0;for(i=0;i<8;i++){//下降沿模拟if(data&0x80)//设置输出MOSI_SET;elseMOSI_CLR;SCK_CRL;//SCK产生下降沿DELAY_BUS;//上升沿模拟ret<<=1;if(MISO_PIN)//读数据ret

8、=1;SCK_SET;//SCK产生上升沿data<<=1;DELAY_BU

9、S;}returnret;}//模式2:CPOL=0CPHA=1voidspi_init(void){SCK_CLR;SPI_DDR

10、=_BV(SPI_MOSI)

11、_BV(SPI_SCK);}uint8_tspi_readwrite_byte(uint8_tdata){uint8_ti,ret=0;for(i=0;i<8;i++){//上升沿模拟if(data&0x80)//设置输出MOSI_SET;elseMOSI_CLR;SCK_SET;//SCK产生上升沿DELAY_BUS;//下降沿模拟r

12、et<<=1;if(MISO_PIN)//读数据ret

13、=1;SCK_CLR;//SCK产生下降沿data<<=1;DELAY_BUS;}returnret;}//模式3:CPOL=1CPHA=0voidspi_init(void){SCK_SET;SPI_DDR

14、=_BV(SPI_MOSI)

15、_BV(SPI_SCK);}uint8_tspi_readwrite_byte(uint8_tdata){uint8_ti,ret=0;//设置好输出口if(data&0x80)MOSI_SET;elseM

16、OSI_CLR;for(i=0;i<8;i++){DELAY_BUS;//下降沿模拟ret<<=1;if(MISO_PIN)//读数据ret

17、=1;SCK_CRL;//SCK产生下降沿DELAY_BUS;//上升沿模拟data<<=1;if(data&0x80)//设置输出MOSI_SET;elseMOSI_CLR;SCK_SET;//SCK产生上升沿}returnret;}//模式4:CPOL=0CPHA=0voidspi_init(void){SCK_CLR;SPI_DDR

18、=_BV(SPI_

19、MOSI)

20、_BV(SPI_SCK);}uint8_tspi_readwrite_byte(uint8_tdata){uint8_ti,ret=0;//设置好输出口if(data&0x80)MOSI_SET;elseMOSI_CLR;for(i=0;i<8;i++){DELAY_BUS;//上升沿模拟ret<<=1;if(MISO_PIN)//读数据ret

21、=1;SCK_SET;//SCK产生上升沿DELAY_BUS;//下降沿模拟data<<=1;if(data&0x80)//设置输出MOSI_

22、SET;elseMOSI_CLR;SCK_CLR;//SCK产生下降沿}returnret;}(一)其它单片机实现代码#include"iom8535v.h"#define_CPOL1#define_CPHA0#defineSCK_IODDRA

23、=0X01#defineMOSI_IODDRA

24、=0X02#defineMISO_IODDRA&=0XFB#defineSSEL_IODDRA

25、=0X08#defineSCK_D(X)(X?(PORTA

26、=0X01):(PORTA&=0XF

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。