欢迎来到天天文库
浏览记录
ID:57647050
大小:44.00 KB
页数:5页
时间:2020-08-30
《单片机IO口模拟SPI四种模式的程序.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、单片机IO口模拟SPI四种模式的程序#include"iom8535v.h"#define_CPOL1#define_CPHA0#defineSCK_IODDRA=0X01#defineMOSI_IODDRA=0X02#defineMISO_IODDRA&=0XFB#defineSSEL_IODDRA=0X08#defineSCK_D(X)(X?(PORTA=0X01):(PORTA&=0XFE))#defineMOSI_D(X)(X?(PORTA=0X02):(PORTA&=0XFD))#defineSSEL_D(X)(X?(POR
2、TA=0X08):(PORTA&=0XF7))#defineMISO_I()(PINA&0X04)voiddelay(){unsignedcharm,n;for(n=0;n<5;n++);for(m=0;m<100;m++);}/端口方向配置与输出初始化/voidSPI_Init(void){SCK_IO;MOSI_IO;MISO_IO;SSEL_IO;SSEL_D(1);MOSI_D(1);#if_CPOL==0SCK_D(0);#elseSCK_D(1);#endif}/模式零写数据/#if_CPOL==0&&_CPHA==0//
3、MODE00voidSPI_Send_Dat(unsignedchardat){unsignedcharn;for(n=0;n<8;n++){SCK_D(0);if(dat&0x80)MOSI_D(1);elseMOSI_D(0);dat<<=1;SCK_D(1);}SCK_D(0);}/模式零读数据/unsignedcharSPI_Receiver_Dat(void){unsignedcharn,dat,bit_t;for(n=0;n<8;n++){SCK_D(0);dat<<=1;if(MISO_I())dat=0x01;else
4、dat&=0xfe;SCK_D(1);}SCK_D(0);returndat;}#endif/模式二写数据/#if_CPOL==1&&_CPHA==0//MODE10voidSPI_Send_Dat(unsignedchardat){unsignedcharn;for(n=0;n<8;n++){SCK_D(1);if(dat&0x80)MOSI_D(1);elseMOSI_D(0);dat<<=1;SCK_D(0);}SCK_D(1);}/模式二读数据/unsignedcharSPI_Receiver_Dat(void){unsign
5、edcharn,dat,bit_t;for(n=0;n<8;n++){SCK_D(1);dat<<=1;if(MISO_I())dat=0x01;elsedat&=0xfe;SCK_D(0);}SCK_D(1);returndat;}#endif/模式一写数据/#if_CPOL==0&&_CPHA==1//MODE01voidSPI_Send_Dat(unsignedchardat){unsignedcharn;SCK_D(0);for(n=0;n<8;n++){SCK_D(1);if(dat&0x80)MOSI_D(1);elseM
6、OSI_D(0);dat<<=1;SCK_D(0);}}/模式一读数据/unsignedcharSPI_Receiver_Dat(void){unsignedcharn,dat,bit_t;for(n=0;n<8;n++){SCK_D(1);dat<<=1;if(MISO_I())dat=0x01;elsedat&=0xfe;SCK_D(0);}SCK_D(0);returndat;}#endif//////////////////////////////////////////////////////////////////////
7、////////////////////////////////////////#if_CPOL==1&&_CPHA==1//MODE11voidSPI_Send_Dat(unsignedchardat){unsignedcharn;SCK_D(1);for(n=0;n<8;n++){SCK_D(0);if(dat&0x80)MOSI_D(1);elseMOSI_D(0);dat<<=1;SCK_D(1);}}/模式三读数据/unsignedcharSPI_Receiver_Dat(void){unsignedcharn,dat,bi
8、t_t;SCK_D(0);for(n=0;n<8;n++){SCK_D(0);dat<<=1;if(MISO_I())dat=0x01;elsedat&=0xfe;SCK_D(1);}SCK_D(1);returndat
此文档下载收益归作者所有