📄 com.c
字号:
/*----------------------------- Program Overview -------------------------------
Device Name: AT89S52
ROM: 8 K bytes
RAM: 512 bytes
Chip Basic Functions: 40pin, 32I/O, 16 bit Timer *3, 8 bit UART *1, Eight Interrupt Sources
4.0V to 5.5V Operating Range, OSC 11.0592 MHz (0.9216 us)
Complier: keil C 750
Simulator: keil C 750
Programmer:
File Name: com.c
File Functtion: RF communication function
Copyright: XIAZHAOJUN
First Version Finished Date: 2007.11.6
Others:
------------------------------- Modified Note ----------------------------------
Old Version:
New Version:
New CheckSum:
Modifier:
Modified Date:
Modified Causation:
Modified Mean:
-------------------------------------------------------------------------------*/
//----------------------------- Include ----------------------------------------
#include <reg52.h>
//#include <stdio.h>
#include <intrins.h>
#include <com.h>
#include <lcm.h>
#include <fbuzz.h>
//----------------------------- SFR Definition ---------------------------------
//<nRF905>
sbit TX_EN =P2^6;
sbit TRX_CE =P2^5;
sbit PWR_UP =P2^4;
sbit AM =P3^2;
sbit DR =P3^3;
sbit CD =P3^5;
//<SPI>
sbit MISO =P2^3;
sbit MOSI =P2^2;
sbit SCK =P2^1;
sbit CSN =P2^0;
//----------------------------- Macro Definition -------------------------------
#define uchar unsigned char
#define uint unsigned int
#define WC 0x00 // Write configuration register command
#define RC 0x10 // Read configuration register command
#define WTP 0x20 // Write TX Payload command
#define RTP 0x21 // Read TX Payload command
#define WTA 0x22 // Write TX Address command
#define RTA 0x23 // Read TX Address command
#define RRP 0x24 // Read RX Payload command
#define CH_NO_FREQ_422_4MHz 0x0000 //工作频率422.4MHz(433MHz频段最低频率)
#define CH_NO_FREQ_422_5MHz 0x0001 //工作频率422.5MHz
#define CH_NO_FREQ_425_0MHz 0x001a //工作频率425.0MHz
#define CH_NO_FREQ_427_5MHz 0x0033 //工作频率427.5MHz
#define CH_NO_FREQ_430_0MHz 0x004c //工作频率430.0MHz
#define CH_NO_FREQ_433_0MHz 0x006a //工作频率433.0MHz(433MHz频段基准频率)
#define CH_NO_FREQ_433_1MHz 0x006b //工作频率433.1MHz
#define CH_NO_FREQ_433_2MHz 0x006c //工作频率433.2MHz
#define CH_NO_FREQ_434_7MHz 0x007b //工作频率434.7MHz
#define CH_NO_FREQ_473_5MHz 0x01ff //工作频率473.5MHz(433MHz频段最高频率)
#define CH_NO_FREQ_844_8MHz 0x0000 //工作频率844.8MHz(868MHz频段最低频率)
#define CH_NO_FREQ_862_0MHz 0x0056 //工作频率862.0MHz
#define CH_NO_FREQ_868_0MHz 0x0074 //工作频率868.0MHz(868MHz频段基准频率)
#define CH_NO_FREQ_868_2MHz 0x0075 //工作频率868.2MHz
#define CH_NO_FREQ_868_4MHz 0x0076 //工作频率868.4MHz
#define CH_NO_FREQ_869_8MHz 0x007d //工作频率869.8MHz
#define CH_NO_FREQ_895_8MHz 0x00ff //工作频率895.8MHz
#define CH_NO_FREQ_896_0MHz 0x0100 //工作频率896.0MHz
#define CH_NO_FREQ_900_0MHz 0x0114 //工作频率900.0MHz
#define CH_NO_FREQ_902_2MHz 0x011f //工作频率902.2MHz
#define CH_NO_FREQ_902_4MHz 0x0120 //工作频率902.4MHz
#define CH_NO_FREQ_915_0MHz 0x015f //工作频率915.0MHz(915MHz频段基准频率)
#define CH_NO_FREQ_927_8MHz 0x019f //工作频率927.8MHz
#define CH_NO_FREQ_947_0MHz 0x01ff //工作频率947.0MHz(915MHz频段最高频率)
#define CH_NO_FREQ CH_NO_FREQ_433_0MHz //工作频率433.0MHz
//--------------------------------------------------------------
//<RF-Configuration-Register 配置信息>
#define CH_NO CH_NO_FREQ //freq=422.4+76/10=430MHz
#define HFREQ_PLL 0x00 //433Mhz / 868/915Mhz
#define PA_PWR 0x03 //最大输出功率
#define RX_RED_PWR 0x00 //接收功率
#define AUTO_RETRAN 0x00 //自动重新发送
#define RX_AWF 0x04 //Rx 本地接收地址宽度
#define TX_AWF 0x04 //Tx 本地发送地址宽度
#define RX_PW 0x20 //Rx 本地接收有效数据宽度
#define TX_PW 0x20 //Tx 本地发送有效数据宽度
#define RX_ADDR_Bit0 0xcc //本机地址 最高字节
#define RX_ADDR_Bit1 0xcc
#define RX_ADDR_Bit2 0xcc
#define RX_ADDR_Bit3 0xcc //本机地址 最低字节
#define UP_CLK_FREQ 0x00 //输出时钟频率
#define UP_CLK_EN 0x00 //输出时钟使能
#define XOF 0x03 //晶体振荡器频率,必须依据外部晶体的标称频率设置
#define CRC_EN 0x01 //CRC校验允许
#define CRC_MODE 0x00 //CRC模式 0b0-8位CRC校验位; 0b1-16位CRC校验位 (默认)
//-----------------------------------------------------------
//<将设置信息组合成每个字节的数据信息,此区域无需修改>
#define RFConfig_Bit0 (CH_NO & 0xff)
#define RFConfig_Bit1 (AUTO_RETRAN<<5 | RX_RED_PWR<<4 | PA_PWR<<2 | HFREQ_PLL<<1 | CH_NO>>8)
#define RFConfig_Bit2 (TX_AWF<<4 | RX_AWF)
#define RFConfig_Bit3 RX_PW
#define RFConfig_Bit4 TX_PW
#define RFConfig_Bit5 RX_ADDR_Bit0
#define RFConfig_Bit6 RX_ADDR_Bit1
#define RFConfig_Bit7 RX_ADDR_Bit2
#define RFConfig_Bit8 RX_ADDR_Bit3
#define RFConfig_Bit9 (CRC_MODE<<7 | CRC_EN<<6 | XOF<<3 | UP_CLK_EN<<2 | UP_CLK_FREQ)
//----------------------------- Variable Definition ----------------------------
uchar data TxBuf[32];
uchar data RxBuf[32];
uchar data comcmd;
uchar data comdata;
//uchar data comdata_old;
uchar data dataresult;
//----------------------------- Bit Definition ---------------------------------
bit b_send_fg;
uchar bdata DATA_BUF;
sbit flag =DATA_BUF^7;
sbit flag1 =DATA_BUF^0;
//----------------------------- RF Config -------------------------------------
typedef struct
{
uchar n;
uchar buf[10];
}RFConfig;
code RFConfig RxTxConf =
{
10,
RFConfig_Bit0,
RFConfig_Bit1,
RFConfig_Bit2,
RFConfig_Bit3,
RFConfig_Bit4,
RFConfig_Bit5,
RFConfig_Bit6,
RFConfig_Bit7,
RFConfig_Bit8,
RFConfig_Bit9
// 0x01, 0x0c, 0x44, 0x20, 0x20, 0xcc, 0xcc, 0xcc,0xcc, 0x58
};
// The content of this struct is nRF905's initialize data.初始化数据
// CH_NO=1;433MHZ;Normal Opration,No Retrans;RX,TX Address is 4 Bytes
// RX TX Payload Width is 32 Bytes;Disable Extern Clock;Fosc=16MHZ
// 8 Bits CRC And enable
//----------------------------- Program Code -----------------------------------
/*----------------------------- Subroutine -------------------------------------
Name: Delay
Function:
Entry:
Exit:
Caution:
-------------------------------------------------------------------------------*/
void Delay(uchar n)
{
uint i;
while(n--)
for(i=0;i<80;i++);
}
/*----------------------------- Subroutine -------------------------------------
Name: 905 SPI Iinitial
Function:
Entry:
Exit:
Caution:
-------------------------------------------------------------------------------*/
void SPI_Init(void){
CSN=1; // Spi disable
SCK=0; // Spi clock line init low
MOSI=1;
MISO=1;
}
/*----------------------------- Subroutine -------------------------------------
Name: nRF905init
Function:
Entry:
Exit:
Caution:
-------------------------------------------------------------------------------*/
void nRF905Init(void){
SPI_Init();
/*ICO*/
DR=1; // Init DR for input
AM=1; // Init AM for input
CD=1; // Init CD for input
/*模式设置*/
PWR_UP=1; // nRF905 power on
TRX_CE=0; // Set nRF905 in standby mode
TX_EN=0; // set radio in Rx mode
}
/*----------------------------- Subroutine -------------------------------------
Name: setRxMode
Function:
Entry:
Exit:
Caution:
-------------------------------------------------------------------------------*/
void SetRxMode(void){
TX_EN=0;
TRX_CE=1;
Delay(1); // delay for mode change(>=650us)
}
/*----------------------------- Subroutine -------------------------------------
Name: setTxMode
Function:
Entry:
Exit:
Caution:
-------------------------------------------------------------------------------*/
void SetTxMode(void){
TX_EN=1;
TRX_CE=0;
Delay(1); // delay for mode change(>=650us)
}
/*----------------------------- Subroutine -------------------------------------
Name: spi write
Function:
Entry:
Exit:
Caution:
-------------------------------------------------------------------------------*/
void SpiWrite(uchar byte){
uchar i;
DATA_BUF=byte; // Put function's parameter into a bdata variable
for (i=0;i<8;i++) // Setup byte circulation bits
{
if (flag) // Put DATA_BUF.7 on data line
MOSI=1;
else
MOSI=0;
SCK=1; // Set clock line high
DATA_BUF=DATA_BUF<<1; // Shift DATA_BUF
SCK=0; // Set clock line low
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -