智能车制作

标题: NRF24L01 [打印本页]

作者: 日新    时间: 2010-9-10 17:49
标题: NRF24L01
#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;                 
  }
}
作者: 野狼明明    时间: 2010-9-14 16:18
好东西
作者: zhu_xuekui    时间: 2012-2-23 16:45
好东西。。。
作者: Solemn胜威    时间: 2012-3-6 15:09
zhu_xuekui 发表于 2012-2-23 16:45
好东西。。。

你调试成功了吗?nrf2401,xs128的,一起交流一下嘛,
作者: zhu_xuekui    时间: 2012-3-6 18:36
研究中。。。。。呵呵。。。。。
作者: 松林族    时间: 2012-3-21 20:59
比较有压力
作者: 79270300    时间: 2012-6-13 21:51
你就不能给一个完整的程序啊!




欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2