?? rf2401.c
字號:
#include<avr/io.h>
#define BYTE_BIT0 0x01
#define BYTE_BIT1 0x02
#define BYTE_BIT2 0x04
#define BYTE_BIT3 0x08
#define BYTE_BIT4 0x10
#define BYTE_BIT5 0x20
#define BYTE_BIT6 0x40
#define BYTE_BIT7 0x80
#define uchar unsigned char
#define uint unsigned int
#define Comd_Port PORTD
#define PWR_UP_1 Comd_Port|=(1<<2)
#define PWR_UP_0 Comd_Port&=~(1<<2)
#define CE_1 Comd_Port|=(1<<3)
#define CE_0 Comd_Port&=~(1<<3)
#define CS_1 Comd_Port|=(1<<4)
#define CS_0 Comd_Port&=~(1<<4)
#define DR1_1 Comd_Port|=(1<<5)
#define DR1_0 Comd_Port&=~(1<<5)
#define CLK1_1 Comd_Port|=(1<<6)
#define CLK1_0 Comd_Port&=~(1<<6)
#define DATA_1 Comd_Port|=(1<<7)
#define DATA_0 Comd_Port&=~(1<<7)
#define Data_OUT DDRD|=(1<<7)
#define Data_IN DDRD&=~(1<<7)
#define DR1_OUT DDRD|=(1<<5)
#define DR1_IN DDRD&=~(1<<5)
#define TEST_2 0x8E
#define TEST_1 0x08
#define TEST_0 0x1C
#define DATA2_W 0x10
#define DATA1_W 0xE8
#define ADDR2_4 0x00
#define ADDR2_3 0x1c
#define ADDR2_2 0xcc
#define ADDR2_1 0xcc
#define ADDR2_0 0xcc
#define ADDR1_4 0x00
#define ADDR1_3 0xcd
#define ADDR1_2 0xcd
#define ADDR1_1 0xcd
#define ADDR1_0 0xcd
#define ADDR_W 0X10
#define CRC_L 0X0
#define CRC_EN 0X1
#define RX2_EN 0X0
#define CM 0X1
#define RFDR_SB 0X1 // 傳輸速度
#define XO_F 0X3 //晶振頻率設置 16M
#define RF_PWR 0X3 //信號發射頻率
#define RF_CH 0X2
#define RXEN 0X0
#define RFConfig_Bit0 TEST_2
#define RFConfig_Bit1 TEST_1
#define RFConfig_Bit2 TEST_0
#define RFConfig_Bit3 DATA2_W
#define RFConfig_Bit4 DATA1_W
#define RFConfig_Bit5 ADDR2_4
#define RFConfig_Bit6 ADDR2_3
#define RFConfig_Bit7 ADDR2_2
#define RFConfig_Bit8 ADDR2_1
#define RFConfig_Bit9 ADDR2_0
#define RFConfig_Bit10 ADDR1_4
#define RFConfig_Bit11 ADDR1_3
#define RFConfig_Bit12 ADDR1_2
#define RFConfig_Bit13 ADDR1_1
#define RFConfig_Bit14 ADDR1_0
#define RFConfig_Bit15 (ADDR_W<<2|CRC_L<<1|CRC_EN)
#define RFConfig_Bit16 (RX2_EN<<7|CM<<6 |RFDR_SB<<5|XO_F<<2|RF_PWR)
#define RFConfig_Bit17 (RF_CH<<1|RXEN)
unsigned char nRF2401_Conf[18]={
RFConfig_Bit0,RFConfig_Bit1,RFConfig_Bit2,RFConfig_Bit3,
RFConfig_Bit4,
RFConfig_Bit5,RFConfig_Bit6,RFConfig_Bit7,RFConfig_Bit8,
RFConfig_Bit9,
RFConfig_Bit10,RFConfig_Bit11,RFConfig_Bit12,RFConfig_Bit13,RFConfig_Bit14,
RFConfig_Bit15,RFConfig_Bit16,RFConfig_Bit17
};
{
unsigned int i;
for (i=0;i<100;i--);
}
void delay(int a)//delay 2
{
uchar i,j;
for(i=0; i<100; i++)
for(j=0; j<a; j++) ;
}
unsigned char DATA_BUF;
#define DATA7 ((DATA_BUF&BYTE_BIT7)!=0)
#define DATA0 ((DATA_BUF&BYTE_BIT0)!=0)
unsigned char ByteRead()
{
unsigned char i,k=0;
for (i=0;i<8;i++)
{
DATA_BUF=(DATA_BUF<<1);
CLK1_1;
Data_IN;
if((PIND&0X80)==0X80)
{
DATA_BUF|=BYTE_BIT0;
}
else
{
DATA_BUF&=(~BYTE_BIT0);
}
CLK1_0;
}
return DATA_BUF;
}
void ByteWrite(unsigned char send)
{
unsigned char i;
Data_OUT;
DATA_BUF=send;
for(i=0;i<8;i++)
{
if (DATA7)
{
DATA_1;
}
else
{
DATA_0;
}
CLK1_1;
DATA_BUF=DATA_BUF<<1;
CLK1_0;
}
}
void Config2401()
{
Data_OUT;
unsigned int i;
unsigned char variable1;
CS_0;
CE_0;
PWR_UP_1;
for(i=0;i<10;i++)
delay100();
CS_1;
for(i=0;i<18;i++)
{
variable1=nRF2401_Conf[i];
ByteWrite(variable1);
}
delay100();
CS_0;
delay100();
}
void SetTxMode()//out
{
Data_OUT;
PWR_UP_1;
CE_0;
CS_1;
delay100();
DATA_0;
CLK1_1;
CLK1_0;
CS_0;
CE_1;
delay100();
}
void SetRxMode()//in
{
Data_OUT;
PWR_UP_1;
CE_0;
CS_1;
delay100();
DATA_1;
CLK1_1;
CLK1_0;
CS_0;
CE_1;
delay100();
}
unsigned char TxAddress[]={0xcd,0xcd,0xcd,0xcd};
void nRF2401_TxPacket(unsigned char TxBuf[])
{
int i;
unsigned char variable2;
CE_1;
delay100();
for(i=0;i<(ADDR_W/8);i++)
{
variable2=TxAddress[i];
ByteWrite(variable2);
delay(1);
}
for(i=0;i<(DATA1_W/8);i++)
{
variable2=TxBuf[i];
ByteWrite(variable2);
}
CE_0;
delay(3);
}
unsigned char nRF2401_RxPacket(unsigned char *RxBuf)
{
unsigned int i,k;
DR1_IN;
DR1_1;
if((PIND&0X20)==0X20)
{
for(i=0;i<(DATA1_W/8);i++)
{
*RxBuf=ByteRead();
RxBuf++;
}
return 1;
}
return 0;
}
IOinit()
{
DDRA=0XFF;
PORTA=0xff;
DDRD=0XFF;
PORTD=0xFF;
}
unsigned char TxRxBuf[32];
void main()
{
volatile uchar i,j;
int k;
IOinit();
delay(5);
Config2401();
delay100();
TxRxBuf[0]=0xff;
TxRxBuf[1]=0xff;
TxRxBuf[2]=0xff;
TxRxBuf[3]=0xff;
delay(1);
SetRxMode();
while(1)
{
/* nRF2401_TxPacket(TxRxBuf);*/
delay(6);
if(nRF2401_RxPacket(TxRxBuf)==1)
{
PORTA=0X01;
PORTA=TxRxBuf[0];
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -