📄 spi.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 + -