nrf24l01程序avr 硬件spi.doc_第1页
nrf24l01程序avr 硬件spi.doc_第2页
nrf24l01程序avr 硬件spi.doc_第3页
nrf24l01程序avr 硬件spi.doc_第4页
nrf24l01程序avr 硬件spi.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

发送:/avr24l01.c#include#define SS_portPORTB#define SS0x10#define CE_portPORTB#define CE_ddrDDRB#define CE0x01#define IRQ_portPORTB#define IRQ_ddrDDRB#define IRQ0x02#define CONFIG0x00#define EN_AA0x01#define EN_RXADDR0x02#define SETUP_AW0x03#define SETUP_RETR0x04#define RF_CH0x05#define RF_SETUP0x06#define STATUS0x07#define OBSERVE_TX0x08#define CD0x09#define RX_ADDR_P00x0a#define RX_ADDR_P10x0b#define RX_ADDR_P20x0c#define RX_ADDR_P30x0d#define RX_ADDR_P40x0e#define RX_ADDR_P50x0f#define TX_ADDR0x10#define RX_PW_P00x11#define RX_PW_P10x12#define RX_PW_P20x13#define RX_PW_P30x14#define RX_PW_P40x15#define RX_PW_P50x16#define FIFO_STATUS0x17unsigned char get_buf=0;unsigned char RX_ADDRESS=0x01,0x02,0x03,0x04,0x01;unsigned char TX_ADDRESS=0x01,0x02,0x03,0x04,0x00;void spi_io_init(void)CE_ddr|=CE;CE_port&=CE;IRQ_ddr&=IRQ;IRQ_port|=IRQ;DDRB|=0xb0;DDRB&=0xbf;PORTB&=0x0f;void spi_init(void)spi_io_init();SS_port|=SS;SPCR=0x51;SPSR=0x00;unsigned char w_spi(unsigned char dat)unsigned char return_buf=0;SPSR&=0x7f;SPDR=dat;while(SPSR&0x80)=0);return_buf=SPDR;return(return_buf);unsigned char r_reg(unsigned char addr)unsigned char return_buf=0;SS_port&=SS;w_spi(addr);return_buf=w_spi(0);SS_port|=SS;return(return_buf);unsigned char w_reg(unsigned char addr,unsigned char dat)/return statusunsigned char return_buf=0;SS_port&=SS;return_buf=w_spi(addr+0x20);w_spi(dat);SS_port|=SS;return(return_buf);unsigned char r_buf(unsigned char *rx_buf,unsigned char num)/return statusunsigned char return_buf=0;unsigned char count=0;SS_port&=SS;return_buf=w_spi(0x61);for(count=0;countnum;count+)rx_bufcount=w_spi(0);SS_port|=SS;return(return_buf);unsigned char w_buf(unsigned char addr,unsigned char *tx_buf,unsigned char num)unsigned char return_buf=0;unsigned char count=0;SS_port&=SS;return_buf=w_spi(addr);for(count=0;countnum;count+)w_spi(tx_bufcount);SS_port|=SS;return(return_buf);void rx_mode(void)CE_port&=CE;w_buf(RX_ADDR_P0+0x20),RX_ADDRESS,5);/接收节点地址,长度为5w_reg(EN_AA,0x00);/使能接收通道0自动应答w_reg(EN_RXADDR,0x01);/使能接收通道0w_reg(RF_CH,0x40);/射频通道w_reg(RX_PW_P0,4);/有效数据宽度w_reg(RF_SETUP,0x07);/1M传输率,发射功率1dbmw_reg(CONFIG,0x0f);/16位CRC校验CE_port|=CE;void tx_mode(void)CE_port&=CE;w_buf(TX_ADDR+0x20),TX_ADDRESS,5);/发送地址,长度为5w_buf(RX_ADDR_P0+0x20),RX_ADDRESS,5);/接收节点地址w_reg(EN_AA,0x00);/使能接收通道0自动应答w_reg(EN_RXADDR,0x01);/使能接收通道0w_reg(SETUP_RETR,0x0a);/自动重发10次w_reg(RF_CH,0x40);/射频通道w_reg(RX_PW_P0,4);/有效数据宽度w_reg(RF_SETUP,0x07);/1M传输率,发射功率1dbmw_reg(CONFIG,0x0e);/16位CRC校验CE_port|=CE;void tx_data(unsigned char *dat,unsigned char num)CE_port&=CE;w_buf(TX_ADDR+0x20),TX_ADDRESS,5);/发送地址,长度为5w_buf(RX_ADDR_P0+0x20),RX_ADDRESS,5);/接收节点地址w_buf(0xa0,dat,num);w_reg(EN_AA,0x00);/使能接收通道0自动应答w_reg(EN_RXADDR,0x01);/使能接收通道0w_reg(SETUP_RETR,0x0a);/自动重发10次w_reg(RF_CH,0x40);/射频通道w_reg(RX_PW_P0,4);/有效数据宽度w_reg(RF_SETUP,0x07);/1M传输率,发射功率1dbmw_reg(CONFIG,0x0e);/16位CRC校验CE_port|=CE;void tx(unsigned char *dat,unsigned char num)CE_port&=CE;w_buf(0xa0,dat,num);CE_port|=CE;/main.c#includeextern unsigned char get_buf;void delay(unsigned int i)unsigned int j,k;for(j=0;ji;j+)for(k=0;k500;k+);int main(void)unsigned char aa5=0x04,0x03,0x02,0x01,0x00;spi_init();get_buf=r_reg(0x00);/get_buf=w_reg(0x00,0x08);/get_buf=r_buf(aa,3);tx_mode();while(1)tx(aa,4);delay(400);接收:/avr24l01.c#include#define SS_portPORTB#define SS0x10#define CE_portPORTB#define CE_ddrDDRB#define CE0x01#define IRQ_portPORTB#define IRQ_ddrDDRB#define IRQ0x02#define CONFIG0x00#define EN_AA0x01#define EN_RXADDR0x02#define SETUP_AW0x03#define SETUP_RETR0x04#define RF_CH0x05#define RF_SETUP0x06#define STATUS0x07#define OBSERVE_TX0x08#define CD0x09#define RX_ADDR_P00x0a#define RX_ADDR_P10x0b#define RX_ADDR_P20x0c#define RX_ADDR_P30x0d#define RX_ADDR_P40x0e#define RX_ADDR_P50x0f#define TX_ADDR0x10#define RX_PW_P00x11#define RX_PW_P10x12#define RX_PW_P20x13#define RX_PW_P30x14#define RX_PW_P40x15#define RX_PW_P50x16#define FIFO_STATUS0x17unsigned char get_buf=0;unsigned char RX_ADDRESS=0x01,0x02,0x03,0x04,0x00;unsigned char TX_ADDRESS=0x01,0x02,0x03,0x04,0x05;void spi_io_init(void)CE_ddr|=CE;CE_port&=CE;IRQ_ddr&=IRQ;IRQ_port|=IRQ;DDRB|=0xb0;DDRB&=0xbf;PORTB&=0x0f;void spi_init(void)spi_io_init();SS_port|=SS;SPCR=0x51;SPSR=0x00;unsigned char w_spi(unsigned char dat)unsigned char return_buf=0;SPSR&=0x7f;SPDR=dat;while(SPSR&0x80)=0);return_buf=SPDR;return(return_buf);unsigned char r_reg(unsigned char addr)unsigned char return_buf=0;SS_port&=SS;w_spi(addr);return_buf=w_spi(0);SS_port|=SS;return(return_buf);unsigned char w_reg(unsigned char addr,unsigned char dat)/return statusunsigned char return_buf=0;SS_port&=SS;return_buf=w_spi(addr+0x20);w_spi(dat);SS_port|=SS;return(return_buf);unsigned char r_buf(unsigned char *rx_buf,unsigned char num)/return statusunsigned char return_buf=0;unsigned char count=0;SS_port&=SS;return_buf=w_spi(0x61);for(count=0;countnum;count+)rx_bufcount=w_spi(0);SS_port|=SS;return(return_buf);unsigned char w_buf(unsigned char addr,unsigned char *tx_buf,unsigned char num)unsigned char return_buf=0;unsigned char count=0;SS_port&=SS;return_buf=w_spi(addr);for(count=0;countnum;count+)w_spi(tx_bufcount);SS_port|=SS;return(return_buf);void rx_mode(void)CE_port&=CE;w_buf(RX_ADDR_P0+0x20),RX_ADDRESS,5);/接收节点地址,长度为5w_reg(EN_AA,0x00);/使能接收通道0自动应答w_reg(EN_RXADDR,0x01);/使能接收通道0w_reg(RF_CH,0x40);/射频通道w_reg(RX_PW_P0,4);/有效数据宽度w_reg(RF_SETUP,0x07);/1M传输率,发射功率1dbmw_reg(CONFIG,0x0f);/16位CRC校验CE_port|=CE;void tx_mode(void)CE_port&=CE;w_buf(TX_ADDR+0x20),TX_ADDRESS,5);/发送地址,长度为5w_buf(RX_ADDR_P0+0x20),RX_ADDRESS,5);/接收节点地址w_reg(EN_AA,0x00);/使能接收通道0自动应答w_reg(EN_RXADDR,0x01);/使能接收通道0w_reg(SETUP_RETR,0x0a);/自动重发10次w_reg(RF_CH,0x40);/射频通道w_reg(RX_PW_P0,4);/有效数据宽度w_reg(RF_SETUP,0x07);/1M传输率,发射功率1dbmw_reg(CONFIG,0x0e);/16位CRC校验CE_port|=CE;void tx_data(unsigned char *dat,unsigned char num)CE_port&=CE;w_buf(TX_ADDR+0x20),TX_ADDRESS,5);/发送地址,长度为5w_buf(RX_ADDR_P0+0x20),RX_ADDRESS,5);/接收节点地址w_buf(0xa0,dat,num);w_reg(EN_AA,0x00);/使能接收通道0自动应答w_reg(EN_RXADDR,0x01);/使能接收通道0w_reg(SETUP_RETR,0x0a);/自动重发10次w_reg(RF_CH,0x40);/射频通道w_reg(RX_PW_P0,4);/有效数据宽度w_reg(RF_SETUP,0x07);/1M传输率,发射功率1dbmw_reg(CONFIG,0x0e);/16位CRC校验CE_port|=

温馨提示

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

评论

0/150

提交评论