📄 tx_data.c
字号:
#include <C8051f330.h>
#include <Intrins.h>
#define uchar unsigned char
#define uint unsigned int
//发射模块接在P1口上,分别是:CE:P1.4 CS:P1.3 CLK:P1.5 DATA:P1.6 DR:P1.4
sbit CE2 = P1^3;
sbit CS2 = P1^4;
sbit CLK2 = P1^5;
sbit DATA2 = P1^6;
sbit LedR=P1^2;
sbit LedG=P1^7;
char idata Config_Data[18]; //初始化配置字
char idata Tx_Data[6];
bdata unsigned char temp;
sbit bflag = temp^7;
void SYSCLK_Init (void)
{
OSCICN = 0x83; // start external oscillator with
}
void Init_IO(void)
{
XBR0 = 0x01;
XBR1 = 0x40;
P1MDOUT = 0xFF;
}
void delay600ns() //延时580ns,14个时钟周期
{
_nop_();
_nop_();
_nop_();
}
void delay1(unsigned int x) //x=1,41个时钟周期,1.7us;x=2,56个周期,2.3us(15个周期0.6us)
{ //该函数延时最长即x=65535为40ms
unsigned int i;
for(i=0;i<x;i++)
;
}
void Config_Tx()
{
char xdata Bytesend,Bitsend;
Config_Data[0]=0x8e; //test
Config_Data[1]=0x08;
Config_Data[2]=0x1c;
Config_Data[3]=0x18; //Data_width(channel 2)
Config_Data[4]=0x18; //Data_width(channel 1)
Config_Data[5]=0x00; //103:64,channel 2 address
Config_Data[6]=0x00;
Config_Data[7]=0xcc;
Config_Data[8]=0xcc;
Config_Data[9]=0xcc;
Config_Data[10]=0x00; //63:24,channel 1 address
Config_Data[11]=0x00;
Config_Data[12]=0xcc;
Config_Data[13]=0xcc;
Config_Data[14]=0xcc;
Config_Data[15]=0x63; //address width,CRC 16bits
Config_Data[16]=0x6f;
Config_Data[17]=0x04; //RF_Frequency_channel & RX/TX(1/0)
CE2 = 0;
CS2 = 0;
CLK2 = 0;
DATA2=0;
delay600ns(); //延时580ns,Td min 50ns
CS2 = 1; //配置模式,CS=1,CE=0
delay1(7); //延时5458ns,Tcs2data min 5us
for(Bytesend=3;Bytesend<18;Bytesend++)//前三个测试字节可以不发!!!
{
temp = Config_Data[Bytesend];
for(Bitsend=0;Bitsend<8;Bitsend++)
{
//CLK2 = 0; //可省,前面已拉低
DATA2 = bflag;
delay600ns(); //延时580ns
CLK2 = 1;
delay600ns(); //延时580ns,Th min 500ns
CLK2 = 0;
temp = temp<<1;
}
}
CS2 = 0; //CS置低使配置有效
}
void Tx_Send(unsigned char num)
{
int i,j;
Tx_Data[0]=0xcc;
Tx_Data[1]=0xcc;
Tx_Data[2]=0xcc;
Tx_Data[3]=0xcc; //接收方通道硬件地址
Tx_Data[4]=num;
Tx_Data[5]=num;
CE2 = 0;
CS2 = 0;
CLK2 = 0;
DATA2=0;
delay600ns(); //延时580ns,Td min 50ns
CE2 = 1; //工作模式
delay1(7); //延时5458ns,Tcs2data min 5us
for(i=0;i<6;i++)
{
temp=Tx_Data[i];
for(j=0;j<8;j++)
{
//CLK1=0; //可省,前面已拉低
DATA2 = bflag;
delay600ns(); //延时580ns
CLK2 = 1;
delay600ns(); //延时580ns,Th min 500ns
CLK2 = 0;
temp = temp<<1;
}
}
CE2 = 0; //CE置低使发送有效
}
void Init()
{
SYSCLK_Init ();
Init_IO();
}
void main()
{
int k;
PCA0MD &= ~0x40; // 禁止看门狗
Init();//初始化
LedR=1;
LedG=1;
Config_Tx();
while(1)
{
Tx_Send(0x55);
LedR=~LedR;
for(k=0;k<20;k++)
delay1(65535);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -