无线模块nrf905的发送模块

来源:本站
导读:目前正在解读《无线模块nrf905的发送模块》的相关信息,《无线模块nrf905的发送模块》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《无线模块nrf905的发送模块》的详细说明。
简介:本文介绍的主要是无线模块nrf905的发送模块

//数传发送2007/8/1 AT89C2051 11.0592MHz//Module nRF905_TX#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 AN2  =    P3^1;//传感器sbit DQ =P3^0;      //DS18B20接在P30//-------------------------------------------------//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 dis_buf[4]; //温度传感器发射数据缓存//--------------------------------------void DelayMs(uint n)      //j=115@F=11.0592MHz{ uchar j;                 while(n--) {for(j=0;j<115;j++);}}//---------------------------void delayUs(uchar us)//15us延时{  for(;us>0;us--);}//---------------------------uchar reset(void)//DS18B20复位{  uchar yes;  DQ = 0;   delayUs(29);   //延时 480us  DQ = 1;   delayUs(3);   yes = DQ;   delayUs(25);   return(yes);   //yes=0有芯片,}     //---------------------------uchar read_byte(void)//从单总线上读一个字节{  uchar i;  uchar value = 0;  for (i=8;i>0;i--)  {    value>>=1;    DQ = 0;     DQ = 1;     delayUs(1);   //延时15us    if(DQ)value|=0x80;    delayUs(6);  }    return(value);}//---------------------------void write_byte(uchar val)//向单总线上写一个字节{  uchar i;  for (i=8; i>0; i--)  {    DQ = 0;     DQ = val&0x01;    delayUs(5);     DQ = 1;    val=val/2;  }  delayUs(5);}//---------------------------uint Read_Temp(void)//读取温度{  union{        uchar tc[2];        uint tx;       }temp;  reset();  write_byte(0xCC);   // Skip ROM  write_byte(0xBE);   // Read Scratch Pad  temp.tc[1]=read_byte();  temp.tc[0]=read_byte();  reset();  write_byte(0xCC);   //Skip ROM  write_byte(0x44);   //Start Conversion  return temp.tx;}void Do_Temp(void)   //温度数据处理{       uint tx;     tx=Read_Temp();   if (tx>=0x0800)   //温度为负值   {   tx=~(tx)+1;   dis_buf[3]=(tx&0x000f)*625/1000;//小数部分   tx=tx>>=4;    //负值符号和整数部分   dis_buf[0]=0x13;   dis_buf[1]=tx/10;   dis_buf[2]=tx%10;   }   else    {   dis_buf[3]=(tx&0x000f)*625/1000;//小数部分   tx=tx>>=4;    //正值整数部分   dis_buf[0]=tx/100;   dis_buf[1]=(tx%100)/10;   dis_buf[2]=(tx%100)%10;   }    }//延时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;}/*;写发射数据命令:20H;读发射数据命令:21H;写发射地址命令:22H;读发射地址命令:23H;读接收数据命令:24H*/void TxPacket(void){    TXEN=1;    CSN=0;    SpiWrite(0x22);        //写发送地址,后面跟4字节地址//    SpiWrite(0xE7);    SpiWrite(0xE7);    SpiWrite(0xE7);    SpiWrite(0xE7);    CSN=1;    _nop_();_nop_();    CSN=0;    SpiWrite(0x20);        //写发送数据命令    SpiWrite(dis_buf[0]);  //四字节数据,符号位或百位    SpiWrite(dis_buf[1]);  //十位    SpiWrite(dis_buf[2]);  //个位 SpiWrite(dis_buf[3]);  //小数位    CSN=1;    _nop_();_nop_();    TRX_CE=1;              //使能发射模式//    Delay(50);             //等待发送完成    TRX_CE=0;    while(!DR); LED1=0;                //发送完成LED亮一秒    Delay(10000);    LED1=1;}//初始化配置寄存器void Ini_System(void){    uchar i;        CSN=1;    SCK=0;    PWR=1;    TRX_CE=0;    TXEN=0;    _nop_();    CSN=0;    for(i=0;i<11;i++){        SpiWrite(RFConf);    }    CSN=1;    PWR=1;    Delay(1000);}//-----------------------------------------------        void main(void){    DelayMs(100); LED1=0; DelayMs(1000); LED1=1; Do_Temp(); LED2=0; DelayMs(1000); LED2=1;  Ini_System(); while(1) {        Do_Temp();        TxPacket();   DelayMs(10000);//10秒定时发送数据 }    }

提醒:《无线模块nrf905的发送模块》最后刷新时间 2024-03-14 01:20:13,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《无线模块nrf905的发送模块》该内容的真实性请自行鉴别。