avr单片机无线收发模块控制doc.doc_第1页
avr单片机无线收发模块控制doc.doc_第2页
avr单片机无线收发模块控制doc.doc_第3页
avr单片机无线收发模块控制doc.doc_第4页
avr单片机无线收发模块控制doc.doc_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

NRF24l01的与AVR的无线通信代码(接收端)(转载)默认分类 2009-10-08 15:18:06 阅读241 评论0 字号:大中小 /*nRF24L01无线模块的头文件,包含各种操作函数*/*copyright (c) Liu.D.F RoboGmae2008.USTC*author:,a member of team Blademaster*/#ifndef _NRF_H#define _NRF_H#include funcs.h/selfDefine in 0820/以下定义是为了定义地址/#define TX_ADDRESS adress/#define RX_ADDRESS adress/unsigned char adress5=0xB3,0xB3,0xB3,0xB3,0xB3;#define TX_ADR_WIDTH 5#define RX_ADR_WIDTH 5/以下定义是为了切换频道 #define D3_P (PIND&0x08)=0)#define A4_P (PINA&0x10)=0)#define CH 7+D3_P+A4_P*2/ SPI(nRF24L01) 命令定义#define READ_REG 0x00 / 定义读寄存器命令#define WRITE_REG 0x20 / 定义写寄存器命令#define RD_RX_PLOAD 0x61 / 定义接收有效载荷寄存器#define WR_TX_PLOAD 0xA0 / 定义发送有效载荷寄存器#define FLUSH_TX 0xE1 / 定义清除发送寄存器命令#define FLUSH_RX 0xE2 / 定义清除接收寄存器命令#define REUSE_TX_PL 0xE3 / 定义复用发送有效载荷寄存器命令#define NOP1 0xFF / 定义空操作,用于读取状态寄存器/ SPI(nRF24L01) registers(addresses) #define CONFIG 0x00 / “配置寄存器”地址#define EN_AA 0x01 / “使能自动应答寄存器”地址#define EN_RXADDR 0x02 / “使能接收地址寄存器”地址#define SETUP_AW 0x03 / “设置地址长度寄存器”地址#define SETUP_RETR 0x04 / “设置自动重发寄存器”地址#define RF_CH 0x05 / “RF(射频)频道寄存器”地址#define RF_SETUP 0x06 / “RF(射频)设置寄存器”地址#define STATUS 0x07 / “状态寄存器”地址#define OBSERVE_TX 0x08 / “?寄存器”地址#define CD 0x09 / “发现载波寄存器”地址#define RX_ADDR_P0 0x0A / “通道0接收寄存器”地址#define RX_ADDR_P1 0x0B / 通道1接收寄存器地址#define RX_ADDR_P2 0x0C / 通道2接收寄存器地址#define RX_ADDR_P3 0x0D / 通道3接收寄存器地址#define RX_ADDR_P4 0x0E / 通道4接收寄存器地址#define RX_ADDR_P5 0x0F / 通道5接收寄存器地址#define TX_ADDR 0x10 / ”发送寄存器“地址#define RX_PW_P0 0x11 / ”通道0有效载荷(数据)长度寄存器“地址#define RX_PW_P1 0x12 / ”通道1有效载荷长度寄存器“地址#define RX_PW_P2 0x13 / ”通道2有效载荷长度寄存器“地址#define RX_PW_P3 0x14 / ”通道3有效载荷长度寄存器“地址#define RX_PW_P4 0x15 / ”通道4有效载荷长度寄存器“地址#define RX_PW_P5 0x16 / ”通道5有效载荷长度寄存器“地址#define FIFO_STATUS 0x17 / “FIFO状态寄存器的寄存器”地址/*function declaration*/ unsigned char SPI_Read_Reg(unsigned char reg_addr); /通过SPI读寄存器函数unsigned char SPI_Write_Reg(unsigned char reg_addr,unsigned char reg_val);/通过SPI写寄存器函数 unsigned char SPI_Write_Command(unsigned char Command); /通过SPI写命令函数void SPI_Read_Buf(unsigned char reg, unsigned char *pBuf, unsigned char bytes);/通过SPI读缓冲区的函数 void SPI_Write_Buf(unsigned char reg, unsigned char *pBuf, unsigned char bytes); /通过SPI写缓冲区函数void PTX_Config(void); /PTX(发送模式)设置函数void ConfigChk(void); /设置CHK的函数void ConfigChkAll(void);void PRX_Config(void); /PRX(接收模式)设置函数/*/ /SPI_Read_Reg();SPI_Write_Reg();SPI_Write_Command(); /SPI_Read_Buf();SPI_Write_Buf(); /*/*SPI_Read_Reg*/ unsigned char SPI_Read_Reg(unsigned char reg_addr) unsigned char reg_val; CSN_0; SPI_MasterTransmit(reg_addr); / 先写入地址 reg_val = SPI_MasterReceive(0x00); /再读出数据 CSN_1; return(reg_val); / /*SPI_Write_Reg*/ unsigned char SPI_Write_Reg(unsigned char reg_addr,unsigned char reg_val) unsigned char status;CSN_0; status=SPI_MasterTransmit(reg_addr); / 选择寄存器SPI_MasterTransmit(reg_val); / 往里写数据CSN_1; return(status); / 返回状态/*SPI_Write_Command()*/ unsigned char SPI_Write_Command(unsigned char Command) unsigned char status; CSN_0; status = SPI_MasterTransmit(Command); /写命令CSN_1; return(status); / 返回状态 /*SPI_Read_Buf*/ void SPI_Read_Buf(unsigned char reg, unsigned char *pBuf, unsigned char bytes) unsigned char byte_ctr;SPI_MasterTransmit(reg); for(byte_ctr=0;byte_ctrbytes;byte_ctr+) pBufbyte_ctr = SPI_MasterReceive(0x00); /*SPI_Write_Buf*/ void SPI_Write_Buf(unsigned char reg, unsigned char *pBuf, unsigned char bytes) unsigned char byte_ctr;SPI_MasterTransmit(reg); for(byte_ctr=0; byte_ctrbytes; byte_ctr+) SPI_MasterTransmit(*pBuf+); void PTX_Config() CE_0; SPI_Write_Command(FLUSH_TX);/清空发射寄存器 /SPI_Write_Buf(WRITE_REG+TX_ADDR,TX_ADDRESS,TX_ADR_WIDTH);/发送端地址 SPI_Write_Reg(WRITE_REG+SETUP_RETR,0x00);/禁用重发 SPI_Write_Reg(WRITE_REG+EN_AA,0x00);/通道05自动应答-低05位 SPI_Write_Reg(WRITE_REG+RF_CH,CH);/设置频率2.4+0.(RF_CH)GHZ SPI_Write_Reg(WRITE_REG+RF_SETUP,0x07);/0x03,1M速率最大功率 SPI_Write_Reg(WRITE_REG+CONFIG,0x5A);/发送空闲模式一 CE_1; void PRX_Config()CE_0;/SPI_Write_Buf(WRITE_REG+RX_ADDR_P0,TX_ADDRESS,TX_ADR_WIDTH);/接收地址SPI_Write_Command(FLUSH_RX); SPI_Write_Reg(WRITE_REG+RX_PW_P0,TX_PLOAD_WIDTH);/接收SPI_Write_Reg(WRITE_REG+EN_AA,0x00);/通道05自动应答-低05位SPI_Write_Reg(WRITE_REG+EN_RXADDR,0x01);/数据通道05使能-低05位SPI_Write_Reg(WRITE_REG+RF_CH,CH);/设置频率2.4+0.(RF_CH)GHZ SPI_Write_Reg(WRITE_REG+RF_SETUP,0x07);/ox03,1M速率最大功率SPI_Write_Reg(WRITE_REG+CONFIG,0x3B);/接收空闲模式一CE_1;/检查关键寄存器设置void ConfigChk(void) unsigned char reg_val; reg_val=SPI_Read_Reg(CONFIG); while(!(UCSRA&(1UDRE);UDR=reg_val;reg_val=SPI_Read_Reg(EN_AA); while(!(UCSRA&(1UDRE);UDR=reg_val;reg_val=SPI_Read_Reg(EN_RXADDR);while(!(UCSRA&(1UDRE);UDR=reg_val;reg_val=SPI_Read_Reg(RX_PW_P0); while(!(UCSRA&(1UDRE);UDR=reg_val;/检查所有寄存器(24个)设置void ConfigChkAll(void)unsigned char i=0,reg_val=0;for(i=0;i24;i+) reg_val=SPI_Read_Reg(i); while(!(UCSRA&(1UDRE);UDR=reg_val; /*RF_Transmit*/void RF_Transmit(unsigned char *TxDataBuf) unsigned char temp,i; SPI_Write_Command(FLUSH_TX);CSN_0; SPI_MasterTransmit(WR_TX_PLOAD); for(i=0;iTX_PLOAD_WIDTH;i+) SPI_MasterTransmit(TxDataBufi);CSN_1; CE_1; /使能发送 Delayus(20); /CE_0; /返回空闲模式一 Delayus(180);/*RF_Receive()*/ void RF_Receive(unsigned char *RxDataBuf) unsigned char temp,i; CSN_0; SPI_MasterTransmit(R

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论