📄 tx433.c
字号:
/*******************************************
无线接收的发送收端程序:
将从串口接收到的字符发送出去。
******************************************/
#include <Nordic\reg24e1.h>
struct RFConfig
{
unsigned char n;
unsigned char buf[15];
};
typedef struct RFConfig RFConfig;
#define ADDR_INDEX 8 // Index to address bytes in RFConfig.buf
#define ADDR_COUNT 4 // Number of address bytes
const RFConfig txconf =
{
15,
0x28, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x12, 0x34, 0x56, 0x78, 0x83, 0x6c, 0x04
};
/*
0x08 :通道2数据接收包的位数(此处为8bit即一个字节)
0x08 :通道1数据接收包的位数
0x00, 0x00, 0x00, 0x00, 0x00:CH2地址
发射地址在发射时再设置。
0x00, 0x12, 0x34, 0x56, 0x78:CH1地址(高于设定的地址宽度补0,即本行的第一个字节)
0x83=100000 11 前6位:四个字节(32位)地址宽度(CH1及CH2);
后2位:CRC使能且为16bit
0x6C=0 1 1 011 00 B7最高位:0表示一通道(1表示2通道)
B6 :1表示收发子系统处于ShockBurst模式(0表示直接模式)
B5 :1表示1Mbps(0为250kbps)
B4-B2 :011表示外部的晶振为16M
B1-B0 :00表示发射功率为-20dBm
0x04=0000010 0 B7-B1 :表示发射频率 和 CH1接收频率
B0 :0表示发射模式(1为接收模式)
*/
const RFConfig rxconf =
{
15,
0x28, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x87, 0x65, 0x43, 0x21, 0x83, 0x6c, 0x05
};
//延时函数
void Delay100us(volatile unsigned char n)
{
unsigned char i;
while(n--)
for(i=0;i<35;i++)
;
}
unsigned char SpiReadWrite(unsigned char b)
{
EXIF &= ~0x20; // Clear SPI interrupt
SPI_DATA = b; // Move byte to send to SPI data register
while((EXIF & 0x20) == 0x00) // Wait until SPI hs finished transmitting
;
return SPI_DATA;
}
void Transmitter(unsigned char *str,unsigned char strlen)
{
unsigned char i;
CE = 1;
Delay100us(0);
for(i=0;i<ADDR_COUNT;i++) // Start with the address of the receiver:
SpiReadWrite(rxconf.buf[ADDR_INDEX+i]);
for(i=0;i<strlen;i++)
SpiReadWrite(*(str + i));
CE = 0;
T1 = ~T1; //发送闪烁
Delay100us(200); // Wait ~300us
}
//2401子系统初始化
void Init(void)
{
unsigned char j;
// P0_ALT |= 0x06; // Select alternate functions on pins P0.1 and P0.2
// P0_DIR = 0xA2; // 方向要设对,P0.1(RxD) ,P0.5,P0.7为输入,P0.4,P0.6为输出
PWR_UP=1;
Delay100us(30); // Wait > 3ms
SPICLK = 0; // Max SPI clock (XTAL/8)
SPI_CTRL = 0x02; // Connect internal SPI controller to Radio
CE = 0; // Configure Radio:
CS = 1;
Delay100us(0);
for(j=0;j<txconf.n;j++)
{
SpiReadWrite(txconf.buf[j]);
}
CS = 0;
}
//串口初始化
void Uart_init(void)
{
TH1 = 0xE6; // 9600@16MHz (when T1M=1 and SMOD=1)
CKCON |= 0x10; // T1M=1 (/4 timer clock)
PCON = 0x80; // SMOD=1 (double baud rate)
SCON = 0x50; // Serial mode1, enable receiver
TMOD = 0x20; // Timer1 8bit auto reload
TR1 = 1; // Start timer1
P0_ALT |= 0x06; // Select alternate functions on pins P0.1 and P0.2
P0_DIR = 0xA2; // P0.1 (RxD) is an input
}
void main(void)
{
unsigned char UART_BUFFER[5]={0x04,0x65,0x78,0xff,0x32};
Init();
Uart_init();
if(!T0)
{
Transmitter(UART_BUFFER,(UART_BUFFER[0]+1));
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -