智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 3614|回复: 6
打印 上一主题 下一主题

NRF24L01

[复制链接]

5

主题

21

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2193
QQ
威望
975
贡献
1166
兑换币
0
注册时间
2009-12-26
在线时间
26 小时
跳转到指定楼层
1#
发表于 2010-9-10 17:49:43 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
#include <STC12C54.h>
#include <intrins.h>
#define uchar unsigned char
#define uint  unsigned int
uchar time=0;//按键次数
char shi=9,ge=9,xiaoshu=9;//各位报警温度
uchar rx_buf[]={0,0,0};//接收数据包数组
uchar flag=0;//接收数据成功标志位
uchar table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x39};  //共阴显示字库
uchar table1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef};//共阴==带小数点
//uchar table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xc6};  //共阳显示字库
//uchar table1[]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10};          //共阳带小数点
/**************************************************************
nrf24l01与MCUAT89S52对应引脚
**************************************************************/
sbit  CE=P1^3;//芯片收发使能
sbit  CSN=P1^4;//SPI使能,低电平有效
sbit  SCK=P1^7;//SPI时钟
sbit  MOSI=P1^5;//SPI输入,主机对从机写入数据
sbit  MOSO=P1^6;//SPI输出,主机从从机读数据
sbit  IRQ=P3^2;//数据传送完标志位,0表示数据发送或接收完毕
/*****************************************
nrf24l01置发送模式涉及的SPI指令与寄存器地址等
*******************************************/
#define config          0x00 //配置寄存器config地址
#define write_reg       0x20//写寄存器指令
//#define status          0x07//状态寄存器地址
#define rd_rx_pload     0x61//接收数据寄存器地址
#define wr_tx_pload     0xa0//发送数据寄存器地址
#define rx_addr_p0      0x0a//rx address通道p0地址
#define en_aa           0x01//自动重发使能地址
#define en_rxaddr       0x02//使能p0
#define setup_retr      0x04//配置自动重发次数地址
#define rf_ch           0x05//通讯频率选择寄存器
#define rf_setup        0x06//配置发射参数(低噪放大器增益、发射功率、无线速率)
#define rx_pw_p0        0x11 // 写接收数据长度寄存器
#define tx_adr_width    0x05//接收机地址长度
#define tx_pload_width  0x03//数据有效长度
#define statu          0x07 // 状态寄存器地址
#define flush_rx       0xe2
uchar tx_address[tx_adr_width]={0xE7,0xE7,0xE7,0xE7,0xE7};//接收机地址
void Com_Init(void);
void ComSend(uchar *Puchar);
void delay(uint z)              //1ms延时
{
uint x,y;
for(x=z;x>0;x--)
  for(y=110;y>0;y--);
}
/**********************************
nrf24l01无线发送涉及函数
***********************************/
//延时130us函数
void delayus(uchar t)
{
uchar j;
while(t--)
{for(j=2;j>0;j--);}
}
//写一个字节到24l01,同时读出一个字节
uchar SPI_RW(uchar byte)
{
uchar i;
for(i=0;i<8;i++)//一个字节8位
{
  MOSI=(byte&0x80);
  byte=(byte<<1);
  SCK=1;
  byte|=MOSO;
  SCK=0;
   }
  return byte;
}
//向寄存器reg写一个字节,同时返回一个字节
uchar SPI_RW_REG(uchar reg,uchar value)
{
  uchar status;
  CSN=0;
  status=SPI_RW(reg);
  SPI_RW(value);
  CSN=1;
  return status;  
}
//写入butes字节的数据
uchar SPI_wbyt(uchar reg,uchar *byt,uchar bytes)
{
uchar status,i;
CSN=0;
status=SPI_RW(reg);
   for(i=0;i<bytes;i++)
  SPI_RW(*byt++);
  CSN=1;
  return status;
  }
//读出bytes字节的数据
uchar SPI_rbyt(uchar reg,uchar *byt,uchar bytes)
{
uchar status,i;
CSN=0;
status=SPI_RW(reg);
for(i=0;i<bytes;i++)
byt[i]=SPI_RW(0);
CSN=1;
return status;
}
//设定nrf24l01为接收模式
void set_RX_Mode()
{
CE=0;
    CSN=1;
    SCK=0;
    CE=0;
SPI_wbyt(write_reg + rx_addr_p0, tx_address, tx_adr_width);//写Rx节点的地址
SPI_RW_REG(write_reg +en_aa, 0x01); // 使能自动重发
SPI_RW_REG(write_reg + en_rxaddr, 0x01); // 使能通道0
SPI_RW_REG(write_reg+ rf_ch, 0x02); // 选择通讯频率 40
SPI_RW_REG(write_reg + rx_pw_p0, tx_pload_width);//选择接收数据有效长度
SPI_RW_REG(write_reg + rf_setup, 0x01);//配置发射参数(低噪放大器增益、发射功率、无线速率
SPI_RW_REG(write_reg + config, 0x0f); // 配置config进入接收模式
CE = 1;
delayus(130);
}
/***********************************************************
主函数
***********************************************************/
void main()
{
  EA=1;
  IT0=0;
  EX0=1;
  Com_Init();
set_RX_Mode();
  while(1)
{
     if(flag==1)
   ComSend(rx_buf);
}
}
void  extr0() interrupt 0
{
  SPI_RW_REG(write_reg +statu,0x7e);
  SPI_RW(flush_rx);
  SPI_rbyt( rd_rx_pload,rx_buf,tx_pload_width);//读数据存到数组中
  flag=1;
}
void Com_Init(void)
{
     TMOD = 0x20;
     PCON = 0x00;
     SCON = 0x50;   
     TH1 = 0xFd;
     TL1 = 0xFd;
     TR1 = 1;  
}
void ComSend(uchar *Puchar)
{
while(*Puchar)
{
  SBUF=*Puchar;
  while(!TI)                  
  {
   _nop_();
  }
  Puchar++;
  TI = 0;                 
  }
}

1

主题

15

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
348
威望
228
贡献
78
兑换币
2
注册时间
2012-2-29
在线时间
21 小时
毕业学校
石河子大学
7#
发表于 2012-6-13 21:51:31 | 只看该作者
你就不能给一个完整的程序啊!
回复 支持 反对

使用道具 举报

2

主题

56

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
431
QQ
威望
310
贡献
65
兑换币
0
注册时间
2011-12-1
在线时间
28 小时
6#
发表于 2012-3-21 20:59:42 | 只看该作者
比较有压力
回复 支持 反对

使用道具 举报

21

主题

274

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3307
威望
1082
贡献
1863
兑换币
72
注册时间
2011-3-26
在线时间
181 小时
5#
发表于 2012-3-6 18:36:34 | 只看该作者
研究中。。。。。呵呵。。。。。
回复 支持 反对

使用道具 举报

3

主题

83

帖子

0

精华

高级会员

Rank: 4

积分
584
威望
401
贡献
85
兑换币
6
注册时间
2012-2-20
在线时间
49 小时
4#
发表于 2012-3-6 15:09:39 | 只看该作者
zhu_xuekui 发表于 2012-2-23 16:45
好东西。。。

你调试成功了吗?nrf2401,xs128的,一起交流一下嘛,
回复 支持 反对

使用道具 举报

21

主题

274

帖子

0

精华

常驻嘉宾

Rank: 8Rank: 8

积分
3307
威望
1082
贡献
1863
兑换币
72
注册时间
2011-3-26
在线时间
181 小时
3#
发表于 2012-2-23 16:45:25 | 只看该作者
好东西。。。
回复 支持 反对

使用道具 举报

6

主题

66

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2113
QQ
威望
309
贡献
1654
兑换币
0
注册时间
2010-8-14
在线时间
75 小时
2#
发表于 2010-9-14 16:18:49 | 只看该作者
好东西
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-12-27 21:23 , Processed in 0.047423 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表