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

📄 test905slave.c

📁 基于905无线模块的通讯从设备程序
💻 C
字号:
#include <reg51.h>
#include <absacc.h>
#include <intrins.h>

#define WRITE_CONFIG  0x00
#define READ_CONFIG   0x10
#define WRITE_TX_DATA 0x20
#define READ_TX_DATA  0x21
#define WRITE_TX_ADDRESS 0x22
#define READ_TX_ADDRESS 0x23
#define READ_RX_DATA    0x24
#define CHANNEL_CONFIG  0x80

#define nop          _nop_()

void SPIWrite(unsigned char);
unsigned char SPIRead(void);
void SPIWriteData(unsigned char,unsigned char,unsigned char*);
void SPIReadData(unsigned char,unsigned char,unsigned char*);
unsigned char correct(unsigned char*,unsigned char);
typedef union
{
    struct
    {
        unsigned char ch_nol:8;
        unsigned char ch_noh:1;
        unsigned char hfreq_pll:1;
        unsigned char pa_pwr:2;
        unsigned char rx_red_pwr:1;
        unsigned char auto_retran:1;
        unsigned char byte1nouse:2;
        unsigned char rx_afw:3;
        unsigned char rx_afwnouse:1;
        unsigned char tx_afw:3;
        unsigned char tx_afwnouse:1;
        unsigned char rx_pw:6;
        unsigned char rx_pwnouse:2;
        unsigned char tx_pw:6;
        unsigned char tx_pwnouse:2;
        unsigned char rx_address1:8;
        unsigned char rx_address2:8;
        unsigned char rx_address3:8;
        unsigned char rx_address4:8;
        unsigned char up_clk_freq:2;
        unsigned char up_clk_en:1;
        unsigned char xof:3;
        unsigned char crc_en:1;
        unsigned char crc_mode:1;

    }bit_define;
    unsigned char ConfigReg[10];
}UConfigRegister;

sbit TXEN=P1^0;
sbit PWR_UP=P1^1;
sbit TRX_CE=P1^2;
sbit CD=P1^3;
sbit DR=P1^4;
sbit AM=P1^5;
sbit SI=P1^6;
sbit SO=P1^7;
sbit CSN=P3^4;
sbit SCK=P3^5;
sbit LAMP=P2^0;

void main(void)
{
    UConfigRegister TConfig;//,RConfig;
    unsigned char tx_address[2];
    unsigned char tx_data[10];
    unsigned char rx_data[4];
    unsigned int i;
    unsigned char j;
    for(j=0;j<3;j++)
    {
        LAMP=0;
        for(i=0;i<10000;i++);
        LAMP=1;
        for(i=0;i<10000;i++);

    }
    TRX_CE=0;
    TXEN=0;
    PWR_UP=1;
//    TMOD=0x01;
//    TH0=0x00;
//    TL0=0x00;
    EA=0;
    TConfig.ConfigReg[0]=0x6c;
    TConfig.ConfigReg[1]=0x00;
    TConfig.bit_define.pa_pwr=0x03;
//    TConfig.bit_define.hfreq_pll=0x01;
    TConfig.bit_define.tx_afw=0x02;
    TConfig.bit_define.rx_afw=0x02;
    TConfig.bit_define.tx_pw=0x0a;
    TConfig.bit_define.rx_pw=0x04;
    TConfig.bit_define.rx_address1=0x01;
    TConfig.bit_define.rx_address2=0x02;
    TConfig.bit_define.up_clk_en=0;
    TConfig.bit_define.xof=0x03;
    TConfig.bit_define.crc_en=1;
    TConfig.bit_define.crc_mode=0;

    tx_address[0]=0x05;
    tx_address[1]=0x00;

    tx_data[0]=0x00;
    tx_data[1]=0x01;
    tx_data[2]=0x02;
    tx_data[3]=0x03;
    tx_data[4]=0x04;
    tx_data[5]=0x05;
    tx_data[6]=0x06;
    tx_data[7]=0x07;
    tx_data[8]=0x08;
    tx_data[9]=correct(tx_data,9);

    SPIWriteData(WRITE_CONFIG,10,TConfig.ConfigReg);
    nop;
    nop;
//    SPIReadData(READ_CONFIG,10,RConfig.ConfigReg);
//    nop;
//    nop;
    SPIWriteData(WRITE_TX_ADDRESS,2,tx_address);
    nop;
    nop;
    SPIWriteData(WRITE_TX_DATA,10,tx_data);
    while(1)
    {
        TRX_CE=1;
        while(!DR);
        TRX_CE=0;
        SPIReadData(READ_RX_DATA,4,rx_data);
        if(rx_data[0]==0x00&&rx_data[1]==0x01&&rx_data[2]==0x02&&rx_data[3]==0x03)
        {
              LAMP=0;
              TXEN=1;
              nop;
              nop;
              TRX_CE=1;
              while(!DR);
              TRX_CE=0;
              TXEN=0;
              nop;
              nop;
              for(i=0;i<4000;i++);
              LAMP=1;
        }
        nop;        
    }
}





//-----------------------------------------------
//SPI写入子程序
//-----------------------------------------------
void SPIWrite(unsigned char AByte)
{
	unsigned char i=8;

	while(i--)
	{
		SCK=0;
		if(AByte&0x80)
			SI=1;
		else
			SI=0;
		SCK=1;
		AByte<<=1;
	}
	SI=0;
}
//-----------------------------------------------
//SPI 读出子程序
//-----------------------------------------------
unsigned char SPIRead(void)
{
	unsigned char i=8;
	unsigned char result=0;

	while(i--)
	{
		result<<=1;
		SCK=0;
		result&=0xFE;
		if(SO)
			result|=0x01;
		SCK=1;
	}
	return result;
}
void SPIWriteData(unsigned char command,unsigned char num,unsigned char*pb)
{

    SCK=0;
    CSN=0;
    SPIWrite(command);
    while(num--)
    {
        SPIWrite(*pb++);
    }
	SCK=0;
	CSN=1;

}
void SPIReadData(unsigned char command,unsigned char num,unsigned char*pb)
{
    SCK=0;
    CSN=0;
    SPIWrite(command);
    while(num--)
    {
        *pb++=SPIRead();
    }
    SCK=0;
    CSN=1;
}
unsigned char correct(unsigned char *p,unsigned char length)
{
	unsigned char i=0;
	unsigned char creatcode=0;
	while(length--)
	{
		for(i=0;i<8;i++)
		{
			if((creatcode^*p)&0x01)
				creatcode=(creatcode>>1)^0x8c;

			else
				creatcode=creatcode>>1;
			*p=_cror_(*p,1);

		}
		p++;
	}
	return(creatcode);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -