⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 spi._c

📁 nrf905无线收发模块利用模拟spi通信的程序 经此程序可转成串口通信
💻 _C
字号:
#include <iom128v.h>
#include <iom128.h>
#include <macros.h>
#include <BIT.h>
#define  uchar unsigned char
#define  uint  unsigned int

#define  CSN   _PB0
#define  SCK   _PB1
#define  MOSI  _PB2
#define  MISO  READ_PB3

/*#define BYTE_BIT0	0x01
#define BYTE_BIT1	0x02
#define BYTE_BIT2	0x04
#define BYTE_BIT3	0x08
#define BYTE_BIT4	0x10
#define BYTE_BIT5	0x20
#define BYTE_BIT6	0x40
#define BYTE_BIT7	0x80

uchar DATA_BUF;
#define DATA7	((DATA_BUF&BYTE_BIT7) != 0)
#define DATA0   ((DATA_BUF&BYTE_BIT0) != 0)

/*从最高位到最低位依次是:hafc debg
uchar table[]=//这个译码数组0、123467已经改好了! by张强
              //589也已改好  lly
{0x7e, 0x12,  0x4f,0x5b
,0x33, 0x79, 0x7d, 0x52,
 0x7f,0x7b};//段选编码*/

/*******************************************
函数名称: delayus
功    能: 延时指定微秒(8.31M晶振)
参    数: us--延时的微秒数(大约,不是很精确,MS越大越准确)
返回值  : 无
/*******************************************
void delayus(uint us)		  
{
 uint i;
 us=us*13/10;		  	 //13/10是在8.31MHz晶振下,通过软件仿真反复实验得到的数值
 for( i=0;i<us;i++); 
} */

/*******************************************
函数名称: delay()
功    能: 8.31MHz晶振下延时 z ms 
参    数: z
返回值  : 无
/********************************************/
void delayms(uint z)
{
   uint x,y;
   for(x=z;x>0;x--)
    for(y=1185;y>0;y--);
}

void SpiInit(void)
{
    DDRA=0XFF;
    DDRB|=BIT(0)|BIT(1)|BIT(2);
	DDRB&=~BIT(3);
	PORTB|=BIT(3);
	CSN=1;	// Spi 	disable	
	SCK=0;	// Spi clock line init low	
}
/*
unsigned char SpiRead(void)
{
	unsigned char i;
	for (i=0;i<8;i++)
	{
		DATA_BUF=DATA_BUF<<1;
		SCK=1;
		//OED&=0XFD;			//	DATA=1;		//设置为输入状态
		if (MISO)	//读取最高位,保存至最末尾,通过左移位完成整个字节
		{
			DATA_BUF|=BYTE_BIT0;
		}
		else
		{
			DATA_BUF&=~BYTE_BIT0;
		}
		//OED|=0X02;
		SCK=0;
	 }
	 return DATA_BUF;
}

void SpiWrite(unsigned char send)
{
	unsigned char i;
	DATA_BUF=send;
	for (i=0;i<8;i++)
	{
		if (DATA7)	//总是发送最高位
		{
			MOSI=1;
		}
		else
		{
			MOSI=0;
		}
		SCK=1;
		DATA_BUF=DATA_BUF<<1;
		SCK=0;
	}
}
*/

void main()
{
   uint num;
   SpiInit();
   PORTA=0X55;
   while(1)
   {
      if(MISO==0)
	  {
	     num++;
	  }
	  PORTA=num;
	  delayms(1000);
   }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -