发送程序
#include <12c5a60s2.h>
#include
#define FOSC 11059200L
#define BAUD (256-FOSC/32/9600)
#define uint unsigned int
#define uchar unsigned char
uchar data TxBuf[32];
uchar data RxBuf[32];
uchar bdata DATA_BUF;
/* 定义RF905 */
#define WC 0x00 // 写配置寄存器指令
#define RC 0x10 // 读取配置寄存器命令
#define WTP 0x20 //写TX有效数据字节写操作全部从0开始
#define RTP 0x21 // 读TX有效数据字节写操作全部从0开始
#define WTA 0x22 // 写发送地址命令
#define RTA 0x23 // 读发送地址命令
#define RRP 0x24 // 读RX有效数据字节写操作全部从0开始
typedef struct RFConfig
{
uchar n;
uchar buf[10];
}RFConfig;
code RFConfig RxTxConf ={
10,
0x01, 0x0c, 0x44, 0x20, 0x20, 0xcc, 0xcc, 0xcc,0xcc, 0x58
};
//这个结构的内容是NRF905的初始化数据。
// ch_no = 1;433MHz;正常运转,没有协议;接收,发送的地址是4字节/收发有效宽度为32字节;禁用外部时钟;晶振频率= 16MHz / / 8位CRC和使/*******************************************************************************************/
/*******************************************************************************************/
void delay(uchar z)
{
uint x,y;
for(x=z;x<0;x--)
for(y=110;y>0;y--);
}
sbit SPISS=P1^4;
sbit MOSI=P1^5;
sbit MISO=P1^6;
sbit SCK=P1^7; //主器件启动一次数据传输时自动产生8个SCK时钟周期信号给从机
sbit CSN=P1^1;
sbit DR=P2^1;
sbit AM=P2^2;
sbit CD=P2^4;
sbit PWR_UP=P2^5;
sbit TRX_CE=P2^6;
sbit TX_EN=P2^7;
/*******************************************************************************************/
/*******************************************************************************************/
//function InitIO();
/*******************************************************************************************/
void InitIO(void)
{
CSN=1;// SPI禁用
SCK=0;// SPI初始化时钟线高
DR=1;// 初始化DR输入
AM=1;// 初始化AM输入
PWR_UP=1;// nRF905芯片上电
TRX_CE=0;// 在待机模式下设置nRF905
TX_EN=0;// 在接收模式设置无线
}
/*******************************************************************************************/
void SetTXmode()
{
TRX_CE=1;
TX_EN=1;
delay(1);
}
/***********************************
funtion :write spi date
***********************************/
void Spi_write(uchar date)
{
DATA_BUF=date;
SPDAT=DATA_BUF;
while(!SPIF);
SPSTAT=SPIF|WCOL;
}
void Config905(void)
{
uchar i;
CSN=0;
Spi_write(WC);
for(i=0;i
Spi_write(RxTxConf.buf[i]);
}
CSN=1;
}
/***************************************
funtion: send 32 date
****************************************/
void TxPacket(void)
{
uchar i;
CSN=0;
Spi_write(WTP);
for(i=0;i<32;i++)
{
Spi_write(TxBuf[i]);
}
CSN=1;
delay(5);
CSN=0;
Spi_write(WTP);
for(i=0;i<4;i++)
{
Spi_write(TxBuf[i+5]);
}
CSN=1;
TRX_CE=1;
delay(5);
TRX_CE=0;
}
/***************************************
funtion: SPI init
****************************************/
void SPI_init(void)
{
SPCTL=0xfd;
SPSTAT=SPIF|WCOL;
SPDAT=0;
IE2|=ESPI;
EA=1;
}
/***************************************
funtion: uart init
****************************************/
void Uart_init(void)
{
TMOD=0x20;
AUXR=0x40;
TH1=TL1=BAUD;
SCON=0x50;
PCON=0X00;
TR1=1;
}
uchar RecvUart()
{
while(!RI)
RI=0;
return SBUF;
}
void SendUart(uchar dat)
{
while(!TI);
TI=0;
SBUF=dat;
}
void main()
{
InitIO();
Uart_init();
SPI_init();
Config905();
SetTXmode();
delay(500);// 延时
while(1)
{
Scankey();
TxPacket();
if(DR)
{
beep=~beep;
delay(1000);
}
}
}
上一篇:单片机INT0外部中断脉冲计数
下一篇:关于单片机连接ESP8266模块截取其回显内容
推荐阅读最新更新时间:2024-11-09 01:36