📄 spidvr.c
字号:
#include "18f6520PinDef.h"
/****************************************************************/
//: delay1*/
//: 延时dlenght个_nop_()的时间*/
//: unsigned char dlength*/
//: None*//****************************************************************/
void delay1(unsigned char dlength)
{
unsigned char i;
for (i=0;i<dlength;i++)
{
_nop_();
}
}
/****************************************************************/
//: rev *///: 该函数从FM1702SL的SPI口接收一个字节*/
//: N/A */
//: 接收的字节*/
/****************************************************************/
//时钟由MCU提供,在每一个时钟的上升沿,MCU读RF-MISO上的电平,8BIT为一个字节
//先高位,后低位
unsigned char rev()
{
unsigned char i;
unsigned char var;
HQCCLK=0;
var=0;
for (i=0;i<8;i++)
{
HQCCLK=1; // 产生SCK脉冲
var<<=1;
var=(var&(unsigned char HQCDI));
HQCCLK=0;
}
HQCCLK=0;
return(var); // 返回
}
/****************************************************************/
//: Send */
//: 该函数发送一个字节到FM702SL*/
//: 待发送的数据 */
//: N/A*/
/****************************************************************/
void Send(unsigned char var)
{
unsigned char data i,tem;
for (i=0;i<8;i++) // 8位字节输出
{
HQCCLK=0;
tem=var&0x80; // 选择高位
if (tem==0x80) HQCDO=1; // 输出高位
else HQCDO=0;
HQCCLK=1; // 使SCK为1,上升沿有效
_nop_();
var<<=1; // 左移1位
delay1(1);
HQCCLK=0; // 使SCK为低电平
}
HQCDO=1;
}
/****************************************************************/
//: read_reg */
//: 该函数根据给定的地址读取FM1702SL的寄存器*/
//: 寄存器地址 */
//: 寄存器值*/
/****************************************************************/
unsigned char read_reg(unsigned char SpiAddress)
{
unsigned char rdata;
SpiAddress=SpiAddress<<1; //将地址的低6位放在BYTE的中间
SpiAddress=SpiAddress | 0x80; //因为是读数据,所以最高位要置1
HQCMN=0; //打开片选
Send(SpiAddress); //发送一个字节到FM1702
rdata=rev(); //接受一个字节
// Send(0); //停止SIP总线
HQCMN=1; //
return(rdata);
}
/****************************************************************/
//: write_reg */
//: 该函数根据给定的地址写入FM1702SL的寄存器*/
//: 寄存器地址,待写入的值 */
//: N/A*/
/****************************************************************/
void write_reg(unsigned char SpiAddress,unsigned char dat)
{
SpiAddress=SpiAddress<<1; //将地址的低6位放在BYTE的中间
SpiAddress=SpiAddress &0x7f; //因为是读数据,所以最高位要置0
HQCMN=0; //打开片选
//HQCDI=0;
Send(SpiAddress); //发送一个地址字节到FM1702
Send(dat); //发送一个字节数据到FM1702
HQCMN=1; //关闭片选
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -