📄 tx.c
字号:
#include "msp430x16x.h"
#include "sfuntion.h"
#define PWR_UP BIT3 //P5.3
#define CE BIT2 //P5.2
#define CS BIT6 //P4.6
#define CLK1 BIT4 //P4.4
#define DATA BIT3 //P4.3
#define DR1 BIT5 //P4.5
#define KEY BIT4 //P2.4
uchar InitData[15];
uchar TXData[14];
uchar BitCnt;
uchar ByteCnt;
uchar tempi;
void IO_2401A();
void nRF2401_ON();
void delay(uint del);
void delayus(uchar del);
void DoSPIClock();
void CE_High();
void CE_Low();
void BuildInitWord();
void InitnRF2401();
void TXEN_LOW();
void BuildShockWord(uchar *data);
void ShockBurst();
void CheckButton();
void IO_2401A()
{P5DIR|=PWR_UP+CE;
P2DIR&=~KEY;
P4DIR|=CS+CLK1+DATA;
P4DIR&=~DR1;
P5OUT&=~(PWR_UP+CE);
P4OUT&=~(DATA+CS+CLK1);
}
void nRF2401_ON()
{P5OUT|=PWR_UP;
delay(48);//延时3MS
}
/*void nRF2401_OFF()
{P5OUT&=~PWR_UP;}*/
void delay(uint del)
{uint x,y;
for(x=0;x<del;x++)
{for(y=0;y<100;y++)
;
}
}
void delayus(uchar del)
{uchar x;
for(x=0;x<del;x++)
;
}
void DoSPIClock()//上升沿时钟
{P4OUT|=CLK1;
_NOP();
P4OUT&=~CLK1;
}
void CE_High()
{P5OUT|=CE;}
void CE_Low()
{P5OUT&=~CE;}
void BuildInitWord() //ConfigurationWord
{InitData[0]=0x50; //channel2 receiver 2,datalength 80bit(10byte)
InitData[1]=0x50; //channel1 receiver 1,datalength 80bit(10byte)
InitData[2]=0x00;
InitData[3]=0xcc; //
InitData[4]=0xcc; //
InitData[5]=0xcc; //
InitData[6]=0xcc; //channel2 5 bytes rx address
InitData[7]=0x00;
InitData[8]=0xcc; //
InitData[9]=0xcc; //
InitData[10]=0xcc; //
InitData[11]=0xcc; // channel1 5 bytes rx address
InitData[12]=0x82;//32bits address CRC(16bit) CRC (DENABLE)....................
InitData[13]=0x6f;//one channel,shock mode,datarate 1Mbps,f=16MHZ
InitData[14]=0x00;//TX MODE
}
void InitnRF2401() //Configuration Word Enter
{P5OUT&=~CE;
P4OUT|=CS; // confige mode
for(ByteCnt=0;ByteCnt<15;ByteCnt++)
{tempi=InitData[ByteCnt];
for(BitCnt=0;BitCnt<8;BitCnt++)
{if(tempi&0x80) P4OUT|=DATA;
else P4OUT&=~DATA;
tempi<<=1;
DoSPIClock();// 模拟CLOCK
}
}
P4OUT&=~CS;
}
void BuildShockWord(uchar *data)
{ uchar i;
TXData[0]=0xcc;
TXData[1]=0xcc;
TXData[2]=0xcc;
TXData[3]=0xcc; //receiver 1 address
for(i=0;i<10;i++)
TXData[4+i]=data[i];
}
void ShockBurst()
{ for(ByteCnt=0;ByteCnt<14;ByteCnt++)
{tempi=TXData[ByteCnt];
for(BitCnt=0;BitCnt<8;BitCnt++)
{ if(tempi&0x80) P4OUT|=DATA;
else P4OUT&=~DATA;
tempi<<=1;
DoSPIClock();
}
}
P5OUT&=~CE;
P4OUT&=~DATA;
delayus(40); //Tsby2txSB=195US
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -