标题:
NRF24L01单片机驱动程序(收发用同一套代码)
[打印本页]
作者:
51黑电子迷
时间:
2017-5-24 03:20
标题:
NRF24L01单片机驱动程序(收发用同一套代码)
收发用同一套代码。
注意:
单片机型号 STC12LE5A48S2
1
用到串口输出测试信息,按下唯一一个按键后,开始发送,接收端收到100个数据包后会打印一次OK,否者收到这100个包有错,打印这100个数据包的序列号。
2 晶振频率22.1184M
3
信号脚位定义:
sbit IRQ = P1^1;
sbit CE = P1^0;
sbit CSN= P1^4;
sbit SCK= P1^5;
sbit MOSI= P1^6;
sbit MISO= P1^7;
唯一一个按键定义:
sbit KEY = P1^2;
0.png
(57.68 KB, 下载次数: 69)
下载附件
2017-5-24 03:17 上传
单片机源程序如下:
#include"config.h"
#include"stdio.h"
sbit led=P0^0;
/*
unsigned char xdata re_send[100];
void send_image(unsigned char *pic,unsigned char len)
{
unsigned int send_k=0;
unsigned char temp1,temp2,temp3,a=0;
unsigned char mode_rec=0;
init_nrf24l01_io();
while(1)
{
ifnnrf_rx_mode();
IRQ=1;
SPI_RW_Reg(WRITE_REG+STATUS,0xff);
tx_buf[0]=0xaa;
tx_buf[1]=0x55;
tx_buf[2]=0xaa;
tx_buf[3]=0x55;
tx_buf[4]=0x01;
tx_buf[5]=(len/256);
tx_buf[6]=(len%256);
ifnnrf_tx_mode();
while(IRQ);
sta=SPI_Read(STATUS);
SPI_RW_Reg(WRITE_REG+STATUS,0xff);
if(sta&STA_MARK_TX)
{
com_printf("TX OK!",sta);
break;
}
else
{
com_printf("TX ER!",sta);
ifnnrf_CLERN_ALL();
}
}
while(1)
{
ifnnrf_rx_mode();
ifnnrf_CLERN_ALL();
while(IRQ==0);
_delay_us(1000);
if(IRQ==0)
{
sta=SPI_Read(STATUS);
SPI_RW_Reg(WRITE_REG+STATUS,0xff);
if(sta&STA_MARK_RX)
{
SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);// read receive payload from RX_FIFO buffer;
if((rx_buf[0]==0xaa)&&(rx_buf[1]==0x55)&&(rx_buf[2]==0xaa)&&(rx_buf[3]==0x55)&&(rx_buf[0]==0x01))
break;
}
}
}
while(1)
{
IRQ=1;
SPI_RW_Reg(WRITE_REG+STATUS,0xff);
tx_buf[0]=(send_k/256);
tx_buf[1]=(send_k%256);
for(a=0;a<30;a++)
tx_buf[a+2]=*(pic+send_k*30+a);
ifnnrf_tx_mode();
while(IRQ);
if(send_k*30<len)
send_k++;
else
break;
}
while(1)
{
ifnnrf_rx_mode();
ifnnrf_CLERN_ALL();
while(IRQ==0);
_delay_us(1000);
if(IRQ==0)
{
sta=SPI_Read(STATUS);
SPI_RW_Reg(WRITE_REG+STATUS,0xff);
if(sta&STA_MARK_RX)
{
SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);// read receive payload from RX_FIFO buffer;
if((rx_buf[0]==0xaa)&&(rx_buf[1]==0x55)&&(rx_buf[2]==0xaa)&&(rx_buf[3]==0x55)&&(rx_buf[4]==0x02))
{
mode_rec=rx_buf[4];
break;
}
}
}
}
while(temp2<mode_rec)
{
ifnnrf_rx_mode();
ifnnrf_CLERN_ALL();
while(IRQ==0);
_delay_us(1000);
if(IRQ==0)
{
sta=SPI_Read(STATUS);
SPI_RW_Reg(WRITE_REG+STATUS,0xff);
if(sta&STA_MARK_RX)
{
SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);// read receive payload from RX_FIFO buffer;
for(temp1=0;temp1<30;temp1++)
re_send[temp2+temp1]=rx_buf[temp1];
}
}
}
while(temp3<mode_rec)
{
while(1)
{
IRQ=1;
SPI_RW_Reg(WRITE_REG+STATUS,0xff);
tx_buf[0]=0;
tx_buf[1]=temp3;
for(a=0;a<30;a++)
tx_buf[a+2]=*(pic+re_send[temp3]*30+a);
ifnnrf_tx_mode();
while(IRQ);
if(send_k*30<len)
send_k++;
else
break;
}
temp3++;
}
}
*/
main()
{
unsigned char i=0;
unsigned int count_send=0;
unsigned int rec_new=0;
unsigned int rec_old=0;
unsigned int rec_err=0;
unsigned int lock_key=0;
init_cpu();
init_nrf24l01_io();
for(i=0;i<32;i++)
{
tx_buf[i]=i;
}
TI=1;
printf("hello world");
printf("hello world");
ifnnrf_rx_mode();
while(1)
{
KEY=1;
while(KEY==0)
{
IRQ=1;
SPI_RW_Reg(WRITE_REG+STATUS,0xff);
count_send++;
tx_buf[30]=count_send/256;
tx_buf[31]=count_send%256;
ifnnrf_tx_mode();
while(IRQ);
sta=SPI_Read(STATUS);
SPI_RW_Reg(WRITE_REG+STATUS,0xff);
if(sta&STA_MARK_TX)
{
if((count_send%100)==0)
{
TI=1;
printf("TX OK!%d\n\t",count_send);
}
}
else
{
TI=1;
printf("TX ER!%2XH\n\t",sta);
ifnnrf_CLERN_ALL();
}
lock_key=1;
} //发送
if(lock_key)
{
lock_key=0;
ifnnrf_rx_mode();
IRQ=1;
while(IRQ==0);
_delay_us(400);
}
//ifnnrf_rx_mode(); 每次都切换到输入 要过一段时间才能正常接收,而对方在一直发送,在发送过来后,这里还没初始化完,于是数据错误
//ifnnrf_CLERN_ALL();
IRQ=1;
if(IRQ==0)
{
sta=SPI_Read(STATUS);
SPI_RW_Reg(WRITE_REG+STATUS,0xff);
if(sta&STA_MARK_RX)
{
SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);// read receive payload from RX_FIFO buffer;
rec_new=(rx_buf[30]*256+rx_buf[31]);
if(rec_new==(rec_old+1))
{
P2=0XFF;
if((rec_new%100)==0)
……………………
…………限于本文篇幅 余下代码请从51黑下载附件…………
复制代码
所有资料51hei提供下载:
http://www.51hei.com/bbs/dpj-85697-1.html
作者:
我么得感情
时间:
2020-8-10 13:44
楼主在吗? 这款音频解码芯片切换音乐的时候会不会有卡顿,有什么比较好的解决方案呢。还是一直存在这种卡顿情况
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1