微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > spi四种模式io模拟时序

spi四种模式io模拟时序

时间:08-06 来源:互联网 点击:
#include "iom8535v.h"#define _CPOL     1#define _CPHA     0#define SCK_IO    DDRA|=0X01#define MOSI_IO   DDRA|=0X02#define MISO_IO   DDRA=0XFB#define SSEL_IO   DDRA|=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()  (PINA0X04)  void delay(){unsigned char m,n;for(n=0;n5;n++);for(m=0;m100;m++);}/************************************************端口方向配置  与输出初始化************************************************/void SPI_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          //MODE   0  0   void SPI_Send_Dat(unsigned char dat){unsigned char n;for(n=0;n8;n++){SCK_D(0);if(dat0x80)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|=0x01;else dat=0xfe;SCK_D(1);}SCK_D(0);return dat;}#endif/**********************************************模式二           写数据***********************************************/#if _CPOL==1_CPHA==0           //MODE   1  0void SPI_Send_Dat(unsigned char dat){unsigned char n;for(n=0;n8;n++){SCK_D(1);if(dat0x80)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|=0x01;else dat=0xfe;SCK_D(0);}SCK_D(1);return dat;} #endif/*********************************************模式一        写数据*********************************************/#if _CPOL==0_CPHA==1           //MODE  0  1void SPI_Send_Dat(unsigned char dat){unsigned char n;SCK_D(0);for(n=0;n8;n++){SCK_D(1);if(dat0x80)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|=0x01;else dat=0xfe;SCK_D(0);}SCK_D(0);return dat;}#endif//////////////////////////////////////////////////////////////////////////////////////////////////////////////#if _CPOL==1_CPHA==1            //MODE  1  1void SPI_Send_Dat(unsigned char dat){unsigned char n;SCK_D(1);for(n=0;n8;n++){SCK_D(0);if(dat0x80)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|=0x01;else dat=0xfe;SCK_D(1);}SCK_D(1);return dat;}#endif/**************************************************************************/void main(){SPI_Init();DDRB = 0XFF;//#if _CPOL//SCK_D(0);//#endifwhile(1){//SSEL_D(0);//SPI_Send_Dat(0x01);//SPI_Send_Dat(0x31);//SSEL_D(1);SSEL_D(0);SPI_Send_Dat(0x81);PORTB =SPI_Receiver_Dat();SSEL_D(1);//delay();}}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top