完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
为什么我今天早上用nrf905还可以通信,到了下午就不行了呢?
谁能帮忙找找问题,找了一晚上了,还是不行!!! #include #include #define uint unsigned int #define uchar unsigned char //SPI接口指令的宏定义 #define WC 0X00 #define RC 0X10 #define WTP 0X20 #define RTP 0X21 #define WTA 0X22 #define RTA 0X23 #define RRP 0X24 ***it TRX_CE=P1^0; ***it AM=P1^1; ***it MISO=P1^2; ***it SCK=P1^3; ***it TX_EN=P1^4; ***it PWR_UP=P1^5; ***it CD=P1^6; ***it DR=P1^7; ***it MOSI=P2^6; ***it CSN=P2^7; ***it P2_0=P2^0; ***it P2_1=P2^1; ***it P2_2=P2^2; ***it P2_3=P2^3; ***it P2_4=P2^4; uchar DATA_BUF; uchar TxBuf[2]={0xf0,0xf1}; uchar RxBuf[4]; //NRF905寄存器配置参数 uchar code RFconf[11]={ 0x00, //配置命令 0x4c, //CH_NO,配置频段在423MHZ 0x0C, //输出功率为10db,不重发,节电为正常模式 0x44, //地址宽度设置,为4字节 0x04,0x04, //接收发送有效数据长度为4字节 0xCC,0xCC,0xCC,0xCC, //接收地址 0x58 }; //接收地址 uchar code tx_add[4]={0xcc,0xcc,0xcc,0xcc}; void delay(uint z) { uchar x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } //SPI写操作 void spi_write(uchar byte) { uchar i; DATA_BUF=byte; for(i=0;i<8;i++) { if(DATA_BUF&0X80) MOSI=1; else MOSI=0; SCK=1; DATA_BUF=DATA_BUF<<1; SCK=0; } } /* //SPI读操作 uchar spi_read() { uchar i; for(i=0;i<8;i++) { DATA_BUF=DATA_BUF<<1; SCK=1; if(MISO) DATA_BUF|=0X01; else DATA_BUF&=0XFE; SCK=0; delay1(); } return DATA_BUF; } */ //主机通过SPI接口向905配置寄存器写入信息 void Config905() { uchar i; CSN=0; for(i=0;i<11;i++) { spi_write(RFconf[i]); } CSN=1; } //发送数据包 void tx_packet() { uchar i; CSN=0; spi_write(WTP); spi_write(TxBuf[0]); spi_write(TxBuf[1]); CSN=1; delay(1); CSN=0; spi_write(WTA); for(i=0;i<4;i++) { spi_write(tx_add[i]); } CSN=1; TRX_CE=1; delay(1); TRX_CE=0; // while(!DR); } /* //接收数据包 void rx_packet() { uchar i; TRX_CE=0; CSN=0; spi_write(RRP); for(i=0;i<4;i++) { RxBuf[i]=spi_read(); } CSN=1; while(DR||AM); TRX_CE=1; } */ //设置为发送模式 void set_tx_mode() { TX_EN=1; TRX_CE=0; delay(1); } /* //设置为接收模式 void set_rx_mode() { TX_EN=0; TRX_CE=1; delay(5); } */ //NRF905初始化 void nrf_init() { CSN=1; // Spi disable SCK=0; // Spi clock line init high DR=0; // Init DR for input PWR_UP=1; // nRF905 power on TRX_CE=0; // Set nRF905 in standby mode TX_EN=0; // set radio in Rx mode Config905(); } /* //CPU初始化 void cpu_init() { TMOD=0X20; TL1=0XFD; TH1=0XFD; SCON=0XD8;//工作方式3,SM2=1,TB8=1; TR1=1; P0=DISBUFF;; } */ /* void send(uchar c) { SBUF=c; while(!ti); TI=0; } */ void main() { // cpu_init(); nrf_init(); P2_4=0; while(1) { if(P2_0==0) { delay(5); if(P2_0==0) { while(!P2_0); set_tx_mode(); tx_packet(); CD=0; } } } } 从机程序 #include #include #define uint unsigned int #define uchar unsigned char #define WC 0X00 #define RC 0X10 #define WTP 0X20 #define RTP 0X21 #define WTA 0X22 #define RTA 0X23 #define RRP 0X24 ***it TRX_CE=P1^0; ***it AM=P1^1; ***it MISO=P1^2; ***it SCK=P1^3; ***it TX_EN=P1^4; ***it PWR_UP=P1^5; ***it CD=P1^6; ***it DR=P1^7; ***it MOSI=P2^6; ***it CSN=P2^7; ***it P2_0=P2^0; ***it P2_1=P2^1; ***it P2_2=P2^2; ***it P2_3=P2^3; ***it P2_4=P2^4; uchar DATA_BUF; uchar RxBuf[4]; uchar code RFconf[11]={ 0x00, //配置命令// 0x4c, //CH_NO,配置频段在423MHZ 0x0C, //输出功率为10db,不重发,节电为正常模式 0x44, //地址宽度设置,为4字节 0x04,0x04, //接收发送有效数据长度为4字节 0xCC,0xCC,0xCC,0xCC, //接收地址 0x58 }; uchar tx_add[4]={0xcc,0xcc,0xcc,0xcc}; void delay(uint z) { uchar x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } void spi_write(uchar byte) { uchar i; DATA_BUF=byte; for(i=0;i<8;i++) { if(DATA_BUF&0X80) MOSI=1; else MOSI=0; SCK=1; DATA_BUF=DATA_BUF<<1; SCK=0; } } uchar spi_read() { uchar i; for(i=0;i<8;i++) { DATA_BUF=DATA_BUF<<1; SCK=1; if(MISO) DATA_BUF|=0X01; else DATA_BUF&=0XFE; SCK=0; delay(1); } return DATA_BUF; } void Config905() { uchar i; CSN=0; for(i=0;i<11;i++) { spi_write(RFconf[i]); } CSN=1; } void rx_packet() { uchar i; TRX_CE=0; CSN=0; spi_write(RRP); for(i=0;i<4;i++) { RxBuf[i]=spi_read(); } CSN=1; while(DR||AM); TRX_CE=1; } /* void set_tx_mode() { TX_EN=1; TRX_CE=0; delay(5); } */ void set_rx_mode() { TX_EN=0; TRX_CE=1; delay(1); } void nrf_init() { CSN=1; // Spi disable SCK=0; // Spi clock line init high DR=1; // Init DR for input AM=1; // Init AM for input PWR_UP=1; // nRF905 power on TRX_CE=0; // Set nRF905 in standby mode TX_EN=0; // set radio in Rx mode Config905(); } void main() { nrf_init(); while(1) { set_rx_mode(); rx_packet(); P0=RxBuf[0]; delay(1000); P0=RxBuf[1]; delay(1000); } } |
|
相关推荐
5个回答
|
|
这种一般是硬件问题,自己找一下
|
|
|
|
应该不是硬件的问题,现在的现象是一上电从机的P0口就是0x00(现象是第一个数码管通,蜂鸣器叫);但是在主机上发送数据,从机上只是闪一下又变为0x00了。
所以说能发过去就不是硬件上的问题了。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
物联网工程师必备:怎么选择不同的无线连接技术,本指南帮你忙!
3256 浏览 1 评论
【DFRobot TinkerNode NB-IoT 物联网开发板试用连载】WIFI功能测试
3900 浏览 0 评论
【DFRobot TinkerNode NB-IoT 物联网开发板试用连载】Arduino的替代SublimeText3+STino
3410 浏览 0 评论
使用端口扩展器轻松高效地向IIoT端点添加具有成本效益的子节点
3962 浏览 1 评论
20601 浏览 11 评论
模组有时候复位重启后输出日志为“REBOOT_CAUSE_SECURITY_PMU_POWER_ON_RESET”的原因?
735浏览 2评论
917浏览 2评论
950浏览 1评论
1076浏览 1评论
358浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-20 02:35 , Processed in 0.602055 second(s), Total 89, Slave 71 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号