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

📄 spi.c

📁 FM1702SL.rar
💻 C
字号:

#include <reg51.h>				//51寄存器定义头文件
#include "main.h"				//主程序头文件
#include "globe.h"				//全局变量定义头文件
#include <absacc.h>
#include <intrins.h>

sbit RF_NSS		=	P1^4;
sbit RF_MISO	=	P1^3;
sbit RF_MOSI	=	P1^2;
sbit RF_SCK		=	P1^1;
sbit RF_RST  	=   P3^5;	//由高变低时启动内部复位程序	

void delay1(unsigned char dlength)
{ 
  unsigned char i;
  for (i=0;i<dlength;i++)
  {
       _nop_();
  }
}


/****************************************************************/
/*名称: rev */
/*功能: 该函数从FM1702SL的SPI口接收一个字节*/
/*输入: N/A */
/*输出: 接收的字节*/
/****************************************************************/
unsigned char rev()
{
	unsigned char idata i;
	unsigned char idata var;
		RF_SCK=0;		
		var=0;
		for (i=0;i<8;i++)    
		{ 

			RF_SCK=1;                 // 产生SCK脉冲
			CY=RF_MISO;                // SO移进位位
			if (CY) var+=1;
			
			RF_SCK=0;
			//var=var<<1;     
			var = _crol_(var,1);
			
	 	}
	
	RF_SCK=0;	
	
	return(var);          // 返回
	 	
} 


/****************************************************************/
/*名称: Send */
/*功能: 该函数发送一个字节到FM702SL*/
/*输入: 待发送的数据 */
/*输出: N/A*/
/****************************************************************/
void Send(unsigned char var) 

{ 
	unsigned char data i,tem;
	
	for (i=0;i<8;i++)          		// 8位字节输出
	{
		RF_SCK=0; 
	    tem=var&0x80;            // 选择高位
		if (tem==0x80) RF_MOSI=1;     // 输出高位
      		else RF_MOSI=0;
		RF_SCK=1;                   // 使SCK为1,上升沿有效
		var = _crol_(var,1);
		_nop_();
//		var<<=1;					// 左移1位
//		delay1(1);	
//		RF_SCK=0; 	// 使SCK为低电平						
	}         
	RF_MOSI=1;
}                  


/****************************************************************/
/*名称: read_reg */
/*功能: 该函数根据给定的地址读取FM1702SL的寄存器*/
/*输入: 寄存器地址 */
/*输出: 寄存器值*/
/****************************************************************/
unsigned char read_reg(unsigned char idata SpiAddress)
{
		unsigned char idata rdata;
		SpiAddress=SpiAddress<<1;
		SpiAddress=SpiAddress | 0x80; 
		RF_NSS=0;	
		Send(SpiAddress);
		rdata=rev();
//		Send(0);			
		RF_NSS=1;		
		return(rdata);

}


/****************************************************************/
/*名称: write_reg */
/*功能: 该函数根据给定的地址写入FM1702SL的寄存器*/
/*输入: 寄存器地址,待写入的值 */
/*输出: N/A*/
/****************************************************************/
void write_reg(unsigned char idata SpiAddress,unsigned char dat)
{
		SpiAddress=SpiAddress<<1;
		SpiAddress=SpiAddress &0x7f;
		RF_NSS=0; 
		//RF_MISO=0;
		Send(SpiAddress);
		Send(dat);
		RF_NSS=1;
}

⌨️ 快捷键说明

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