📄 si4133_b.c
字号:
//////////////////////////////////////////////////////
// config.h
/////////////////////////////////////////////////////
#ifndef __CONFIG_H
#define __CONFIG_H
#include <reg52.h>
#include <intrins.h>
//This segment should not be modified
#ifndef TRUE
#define TRUE 1
#endif
#ifndef FALSE
#define FALSE 0
#endif
// 数据类型定义
typedef unsigned char uint8; /* defined for unsigned 8-bits integer variable 无符号8位整型变量 */
typedef char int8; /* defined for signed 8-bits integer variable 有符号8位整型变量 */
typedef unsigned int uint16; /* defined for unsigned 16-bits integer variable 无符号16位整型变量 */
typedef int int16; /* defined for signed 16-bits integer variable 有符号16位整型变量 */
typedef unsigned long uint32; /* defined for unsigned 32-bits integer variable 无符号32位整型变量 */
typedef long int32; /* defined for signed 32-bits integer variable 有符号32位整型变量 */
typedef float fp32; /* single precision floating point variable (32bits) 单精度浮点数(32位长度) */
// 以下用户的包含文件
#include "si4133.h"
#endif
/////////////////////////////////////////////////
// SI4133.h
/////////////////////////////////////////////////
#ifndef _SI4133_H
#define _SI4133_H
//Address Define
#define Addr_MainConfiguartion 0x0
#define Addr_PhaseDetectorGain 0x1
#define Addr_PowerDown 0x2
#define Addr_RF1_N_Divider 0x3
#define Addr_RF2_N_Divider 0x4
#define Addr_IF_N_Divider 0x5
#define Addr_RF1_R_Divider 0x6
#define Addr_RF2_R_Divider 0x7
#define Addr_IF_R_Divider 0x8
//Command Define
//register 0
#define AUXSEL 3 // 1 = AUX force to low
// 3 = AUX Lock Detect
#define IF_OUT_DIVIDER 0 // 0 = IFout = IFVco Frequency
// 1 = IFout = IFVco Frequency / 2
// 2 = IFout = IFVco Frequency / 4
// 3 = IFout = IFVco Frequency / 8
#define LPWR 1 // 0 = Rload < 500 normal power mode
// 1 = Rload >= 500 low power mode
#define AUTOPDB 1 // 0 = Software powerdown is controlled by register 2
// 1 = All on
#define AUTOKP 1 // 0 = auto kp defined by user
// 1 = auto kp defined auto
#define Cmd_MainConfig ((AUXSEL << 12) + (IF_OUT_DIVIDER << 10) + (LPWR << 5) + \
(AUTOPDB << 3) + (AUTOKP << 2))
//register 1 // N value Kpi
#define IF_PHASE_DETECT 0 // <2048 00
// 2048 - 4095 01
// 4096 - 8191 10
// >8191 11
#define RF2_PHASE_DETECT 0 // <4096 00
// 4096 - 8191 01
// 8192 - 16388 10
// >16388 11
#define RF1_PHASE_DETECT 0 // <8192 00
// 8192 - 16383 01
// 16384 - 32767 10
// >32767 11
#define Cmd_PhaseDetect ((IF_PHASE_DETECT << 4) + (RF2_PHASE_DETECT << 2) + RF1_PHASE_DETECT)
//register 2
#define PDIB_IF 1 // 0 = IF synthesizer power down
// 1 = IF synthesizer on
#define PDRB_RF 1 // 0 = RF synthesizer power down
// 1 = RF synthesizer on
#define Cmd_PowerDown ((PDIB_IF << 1) + PDRB_RF)
/*************************************************************
*函数名称:Si4133_Locked
*函数功能:检测锁定位
*参 数:无
*返 回:TRUE ,锁定; FALSE ,丢失
*************************************************************/
extern bit Si4133_Locked(void);
/*************************************************************
*函数名称:Si4133_SendData
*函数功能:向Si4133发送数据
*参 数:dat,数据;addr,地址
*返 回:无
*************************************************************/
extern void Si4133_SendData(uint32 dat,uint8 addr);
#endif
//////////////////////////////////////////////////
// SI4133.c
//////////////////////////////////////////////////
/*************************************************************
* 公司名称:
* 模 块 名:SI4133驱动程序
* 创 建 人:
* 创建日期:2006/04/26
* 修 改 人:
* 修改日期:
* 功能描述:
* 其他说明:
* 版 本:
*************************************************************/
#include "config.h"
#define _Nop() _nop_()
//口线定义
sbit SENB = P2^7; // 芯片使能
sbit SCLK = P1^0; // 时钟
sbit SDATA = P1^1; // 数据
sbit AUXOUT = P0^5; // 锁定测试
/*************************************************************
*函数名称:Si4133_Locked
*函数功能:检测锁定位
*参 数:无
*返 回:TRUE ,锁定; FALSE ,丢失
*************************************************************/
bit Si4133_Locked(void)
{
AUXOUT = 1; // 断开OC
_Nop();
return ((AUXOUT == 0)?TRUE:FALSE); // 返回AUXOUT
}
/*************************************************************
*函数名称:Si4133_SendData
*函数功能:向Si4133发送数据
*参 数:dat ,数据
* addr,地址
*返 回:无
*************************************************************/
void Si4133_SendData(uint32 dat,uint8 addr)
{
uint32 sedata;
uint8 i;
sedata = ((dat << 4) | (addr & 0x0f)); // 数据 + 地址
sedata <<= 10; // 左移10位
SENB = 1;
SCLK = 0;
SDATA = 0;
SENB = 0;
for(i = 0;i < 22;i++)
{
SDATA = ((sedata & 0x80000000)?1:0); // 输出数据
SCLK = 1; // 上升沿数据锁存
SCLK = 0;
sedata <<= 1;
}
SENB = 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -