📄 com.c
字号:
}
}
/*----------------------------- Subroutine -------------------------------------
Name: spi read
Function:
Entry:
Exit:
Caution:
-------------------------------------------------------------------------------*/
uchar SpiRead(void)
{
uchar i;
for (i=0;i<8;i++) // Setup byte circulation bits
{
DATA_BUF=DATA_BUF<<1; // Right shift DATA_BUF
SCK=1; // Set clock line high
if (MISO)
flag1=1; // Read data
else
flag1=0;
SCK=0; // Set clock line low
}
return DATA_BUF; // Return function parameter
}
/*----------------------------- Subroutine -------------------------------------
Name: config 905
Function:
Entry:
Exit:
Caution:
-------------------------------------------------------------------------------*/
void Config905(void){
uchar i;
CSN=0; // Spi enable for write a spi command
SpiWrite(WC); // Write config command写放配置命令
for (i=0;i<RxTxConf.n;i++) // Write configration words 写放配置字
{
SpiWrite(RxTxConf.buf[i]);
}
CSN=1; // Disable Spi
}
/*----------------------------- Subroutine -------------------------------------
Name: Tx Packet
Function:
Entry:
Exit:
Caution:
-------------------------------------------------------------------------------*/
void TxPacket(void){
uchar i;
//Config905();
CSN=0; // Spi enable for write a spi command
SpiWrite(WTP); // Write payload command
for (i=0;i<32;i++)
{
SpiWrite(TxBuf[i]); // Write 32 bytes Tx data
}
CSN=1; // Spi disable
Delay(1);
CSN=0; // Spi enable for write a spi command
SpiWrite(WTA); // Write address command
for (i=0;i<4;i++) // Write 4 bytes address
{
SpiWrite(RxTxConf.buf[i+5]);
}
CSN=1; // Spi disable
TRX_CE=1; // Set TRX_CE high,start Tx data transmission
Delay(1); // while (DR!=1);
TRX_CE=0; // Set TRX_CE low
}
/*----------------------------- Subroutine -------------------------------------
Name: Rx Packet
Function:
Entry:
Exit:
Caution:
-------------------------------------------------------------------------------*/
void RxPacket(void)
{
uchar i;
TRX_CE=0; // Set nRF905 in standby mode
CSN=0; // Spi enable for write a spi command
SpiWrite(RRP); // Read payload command
for (i=0;i<32;i++)
{
RxBuf[i]=SpiRead(); // Read data and save to buffer
}
CSN=1; // Disable spi
while(DR||AM);
// P0=RxBuf[0]; // Buffer[0] output from P0 port...
TRX_CE=1;
// TRX_CE=1; // Set TRX_CE high,start Tx data transmission
// Delay(1); // while (DR!=1);
// TRX_CE=0; // Set TRX_CE low
}
/*----------------------------- Subroutine -------------------------------------
Name: datbuf_clr
Function:
Entry:
Exit:
Caution:
-------------------------------------------------------------------------------*/
void datbuf_clr(void){
unsigned char i;
for(i=0;i<7;i++){
TxBuf[i]=0xff;
}
}
/*----------------------------- Subroutine -------------------------------------
Name: com_initial
Function:
Entry:
Exit:
Caution:
-------------------------------------------------------------------------------*/
void com_initial(void){
//================NRF905初始化
CSN=1; // Spi disable
SCK=0; // Spi clock line init high
DR=1; // Init DR for input
AM=1; // Init AM for input
PWR_UP=1; // nRF905 power on
TRX_CE=0; // Set nRF905 in standby mode
TX_EN=0;
nRF905Init();
Delay(13); //80*13
Config905(); // Config nRF905 module
SetTxMode(); // Set Tx Mode
TxPacket(); // Transmit Tx buffer data
Delay(500); // delay for led light
SetRxMode(); // Set nRF905 in Rx mode
// 发
Delay(500);
// load data to send
TxBuf[0]=0xaa;
TxBuf[1]=0x55;
TxBuf[2]=Read_COM_DATA;
TxBuf[3]=0x00;
TxBuf[4]=0xaa;
TxBuf[5]=0x55;
SetTxMode(); // Set Tx Mode
TxPacket(); // Transmit Tx buffer data
datbuf_clr();
SetRxMode(); // Set nRF905 in Rx mode
b_send_fg=0;
}
/*----------------------------- Subroutine -------------------------------------
Name: com
Function:
Entry:
Exit:
Caution:
-------------------------------------------------------------------------------*/
void com_do_ne(void){
if(RxBuf[3]==comdata){ //数据相等
b_disp=1;
lcm_md=0x02;
dataresult=0x00;
}
else { //不等,重发
comcmd=Write_COM_DATA;
b_send_fg=1;
}
}
void com_do(void){
if(RxBuf[2]==Feedback_CW_DATA){ //0xa3 下位机反馈写入数据
com_do_ne();
fbuzz_en();
}
else if(RxBuf[2]==Feedback_CR_DATA){ //0xa4 下位机反馈要读的数据数据
comdata=RxBuf[3];
b_disp=1;
lcm_md=0x01;
fbuzz_en();
}
else if(RxBuf[2]==RST_COM_DATA){ //0xa5 下位机复位
b_disp=1;
lcm_md=0x04;
fbuzz_en();
}
}
void com(void){
if (DR){ // If recive data ready...
TR0 = 0; //start t0
RxPacket(); // ... recive data
TR0 = 1;
// if((RxBuf[0]==RxBuf[4])&&(RxBuf[1]==RxBuf[5])){
_nop_();
_nop_();
_nop_();
_nop_();
//b_disp=1;
dsip_r0=RxBuf[0];
dsip_r1=RxBuf[1];
dsip_ra=RxBuf[2];
dsip_rb=RxBuf[3];
dsip_r4=RxBuf[4];
dsip_r5=RxBuf[5];
com_do();
// if(RxBuf[2]==Feedback_CW_DATA){ //0xa3 下位机反馈写入数据
// if(RxBuf[3]==comdata){ //数据相等
// b_disp=1;
// lcm_md=0x02;
// dataresult=0x00;
// }
// else { //不等,重发
// comcmd=Write_COM_DATA;
// b_send_fg=1;
// }
// }
//
// else if(RxBuf[2]==Feedback_CR_DATA){ //0xa4 下位机反馈要读的数据数据
// comdata=RxBuf[3];
// b_disp=1;
// lcm_md=0x01;
// }
}
// TR0 = 1; //start t0
// }
if(b_send_fg==1){
b_send_fg=0;
Delay(500);
TR0 = 0;
TxBuf[0]=0xaa;
TxBuf[1]=0x55;
TxBuf[2]=comcmd;
TxBuf[3]=comdata;
TxBuf[4]=0xaa;
TxBuf[5]=0x55;
SetTxMode(); // Set Tx Mode
TxPacket(); // Transmit Tx buffer data
datbuf_clr();
SetRxMode(); // Set nRF905 in Rx mode
TR0 = 1; //start t0
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -