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

📄 com.c

📁 rfproV02发送程序和80C51演示程序
💻 C
📖 第 1 页 / 共 2 页
字号:

/*----------------------------- 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 + -