//数传接收2007/8/1 AT89C2051 11.0592MHz//Module nRF905_RX VCC=3V#include <reg51.H>#include <intrins.h>//_nop_()typedef unsigned char uchar;typedef unsigned int uint; //配置口定义//sbit TXEN = P1^7;sbit TRX_CE = P1^6;sbit PWR = P1^5;//SPI口定义//sbit MISO = P1^1;sbit MOSI = P1^0;sbit SCK = P3^7;sbit CSN = P3^3;//状态输出口//sbit CD = P1^4;sbit AM = P1^3;sbit DR = P3^2;sbit LED1 = P3^4;sbit LED2 = P3^5;//控制按钮sbit AN1 = P3^0;sbit AN2 = P3^1;//--------------------------------------void Init_MCU(void){ TMOD=0x20; TH1=0xfd; //Baudrate=19200 TL1=0xfd; PCON=0x80; SCON=0x50; TR1=1; LED1=1; LED2=1;}//-----------------------------------------------void Send_PC(uchar mess){ SBUF=mess; while(TI==0); TI=0;} //----------------------------------------------//RF寄存器配置//unsigned char idata RFConf[11]={ 0x00, //配置命令 0x6C, //CH_NO,配置频段在433.2MHZ 0x0C, //输出功率为10db,不重发,节电为正常模式 0x44, //地址宽度设置,为4字节 0x04,0x04, //接收发送有效数据长度为4字节 0xE7,0xE7,0xE7,0xE7,//接收地址 0xDE, //CRC充许,16位CRC校验,外部时钟信号使能,16M晶振};uchar TxRxBuffer[5];bit lcdbit;//延时void Delay(uint x){ uint i; for(i=0;i<x;i++){ _nop_(); }}//SPI口写数据到nRF905void SpiWrite(uchar b){ uchar i=8; while (i--) { Delay(10); SCK=0; MOSI=(bit)(b&0x80); b<<=1 ; Delay(10); SCK=1; Delay(10); SCK=0; } SCK=0;}//由nRF905读数据uchar SpiRead(void){ uchar i=8; uchar ddata=0; while (i--) { ddata<<=1 ; SCK=0; _nop_();_nop_(); ddata|=MISO; SCK=1 ; _nop_();_nop_(); } SCK=0; return ddata;}//接收数据包void RxPacket(void){ uchar i; i=0; while(DR) { TxRxBuffer = SpiRead(); i++; }}/*;写发射数据命令:20H;读发射数据命令:21H;写发射地址命令:22H;读发射地址命令:23H;读接收数据命令:24H*///--------------------------------------void DelayMs(uint n) //j=115@F=11.0592MHz{ uchar j; while(n--) {for(j=0;j<115;j++);}}//等待接收数据包uchar temp;void Wait_Rec_Packet(void){ TXEN=0; TRX_CE=1; while(1) { if(DR) { TRX_CE=0; //若数据准备好则进入待机模式,操作SPI CSN=0; SpiWrite(0x24); RxPacket(); CSN=1; LED2=0; DelayMs(200); LED2=1; //如果接收的数据正确 //} break; } }}//初始化配置寄存器void Ini_System(void){ uchar i; LED1=0; Delay(10000); LED1=1; lcdbit=1; CSN=1; SCK=0; PWR=1; TRX_CE=0;//SPI写入 TXEN=0; _nop_(); CSN=0; for(i=0;i<11;i++){ SpiWrite(RFConf); } CSN=1; PWR=1; TRX_CE=1;// TXEN=0; Delay(1000);}//----------------------------------------------- void main(void){ uint i; DelayMs(100); LED1=0; DelayMs(1000); LED1=1; Init_MCU(); Send_PC(0xAA); Send_PC(0xBB); Ini_System(); while(1) { Wait_Rec_Packet(); //等待接收完成 for(i=0;i<4;i++) Send_PC(TxRxBuffer); }}
导读:目前正在解读《无线收发nfr905接收程序》的相关信息,《无线收发nfr905接收程序》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《无线收发nfr905接收程序》的详细说明。
简介:本文介绍的主要是无线收发nfr905的接收程序
提醒:《无线收发nfr905接收程序》最后刷新时间 2024-03-14 01:20:13,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《无线收发nfr905接收程序》该内容的真实性请自行鉴别。