⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 s.c

📁 PTR8000发送接收驱动程序。只需在主程序中只需做小小的改动就可以
💻 C
字号:
//接收
/*************火箭发射点火系统***************************/
#include "reg52.h"  
void mode1(void);
void mode2(void);
void mode3(void);
void mode4(void);
void mode5(void);
void  Config905(void);     //对PTR8000进行配置
unsigned int a[8],b[8];  
unsigned int flag=0;
int i,t;
 
sbit SCK = P2^5;
sbit MISO= P2^7;
sbit MOSI= P2^6;
sbit DR  = P2^1;     //数据就绪输出
sbit CSN = P2^4;     //SPI使能
sbit PWR = P2^2;     //Power Down 模式
sbit TX_EN= P2^3;    //'1'发射模式 '0'接收模式
sbit TRX_CE=P2^0;    //使能发射/接收模式

/**********************************/
//延时大约为1S左右  
//以0.1S为单位计时 
//即 定时时间 time=t*0.1 S 
/*********************************/ 
void delay()
{
int i,j;
//for(k=0;k<t;k++)
for(i=0;i<500*5;i++)
for(j=0;j<100;j++);
}
/********************************/
//任意延时
/*******************************/
void Delay(int x)
{
     unsigned int i;
    for(i=0;i<x;i++);
}
/*******十进制数转二进制数*************************/
void fun2(int n)	
{
unsigned int i,t=n;
for(i=0;i<8;i++)
{
a[i]=t%2;
t/=2;
}
}
/********************************/
//函数名:int fun22(int n)
//功能:计算2的n 次方  
/********************************/
int fun22(int n)
{
unsigned int i;
int f=1;
for(i=0;i<n;i++)
f*=2;
return f;
}
/**********将高位和低位进行交换*********************/
int fun21(void)
{
unsigned int  i,t;
int s=0;
for(i=0;i<4;i++)
{
t=b[i];               //高低位进行交换      
b[i]=b[7-i];
b[7-i]=t;       //   在PTR800发送时先发高位,再发低位
}
for(i=0;i<8;i++)
s+=(b[i]*fun22(i));   //将二进制数转为十进制数
return s;
}

/*************************************/
void SpiWrite(int c)       //SPI写         将单片机中数据写到ptr8000中
{
    unsigned int i=8;
	fun2(c);               //将c转换为二进制数
	for(i=0;i<8;i++)
	{
		Delay(10);
        SCK=0;
        MOSI=a[7-i];        //从高位到低位写
        Delay(10);
        SCK=1;             ///sck给一个上升沿发送一位数据
        Delay(10);          //延时83us
        SCK=0;
	}
  SCK=0;
}
/**************************************/
int SpiRead(void)      //SPI读           从外部ptr8000中读入单片机
{
     unsigned int i=8;
     int ddata=0;
	for(i=0;i<8;i++)
	{

SCK=1 ;
if(MISO) b[i]=1;
else b[i]=0;
        
 SCK=0;
Delay(20);
	}
   SCK=0;
    Delay(20);
	ddata=fun21();       //data十进制数 
    return ddata;
}
/*******接收子程序********************************/
int PtrRead()      //PTR8000读     
{
int key;
 Config905();     

 PWR=1; 
 TX_EN=0;
 TRX_CE=1;                    //接收      
 
while(!DR) ;                 //等待接收

 while(DR)                    //接收数据准备就绪
    {
     PWR=1;                      //进入待机模式 
     TRX_CE=0;
     TX_EN=0;
     CSN=0;                      //片选
     SpiWrite(0x24);             //写读rx(接收)有效数据(配置)
	{
     key=SpiRead();
	Delay(20);
	}
     CSN=1;
	Delay(20);
	return key;
}
}
/**********************************/
void Config905(void)          //配置nRF905 
{   CSN=1;
    SCK=0;
    PWR=1;
    TRX_CE=0;
    TX_EN=0;
    Delay(2);
    CSN=0;
    SpiWrite( 0x00);             //配置命令//
    SpiWrite( 0x4C);          //CH_NO,配置频段在430MHZ  4c
    SpiWrite( 0x0C);          //输出功率为10db,不重发,节电为正常模式  0c
    SpiWrite( 0x44);          //地址宽度设置,为4字节
    SpiWrite( 0x01);
    SpiWrite( 0x01);             //接收发送有效数据长度为1字节
    SpiWrite( 0x19);          //接收地址 4字节
    SpiWrite( 0x85);
    SpiWrite( 0x06);
    SpiWrite( 0x27);       
    SpiWrite( 0x58);          //16位CRC校验,CRC充许,16M晶振        
 CSN=1;
}
/***********************************/
void TxPacket(int ddata)  //数据包发送
{	
int x=ddata;   
PWR=1;                    //待机和SPI编程模式
TRX_CE=0;
    TX_EN=1;     
    CSN=0;         
    SpiWrite(0x22);            //写发送地址,后面跟4字节地址//
    SpiWrite(0x19);             //0x19
    SpiWrite(0x85);             //0x85
    SpiWrite(0x06);               //0x06
    SpiWrite(0x27);            //0x27
    CSN=1;
    Delay(20);                 //延时1/6ms
    CSN=0;
    SpiWrite(0x20);            //写发送数据命令,后面跟一字节数据//
    SpiWrite(x);            //发送到数据
    CSN=1;
    Delay(20);
    TRX_CE=1;                  //使能发射模式//
    Delay(255);                //等带发送完成//延时2ms
    TRX_CE=0;    
}
/*******主函数******************************/
void main()
{int key,i=0;
P1=0xff;                  //P1口初始化
Config905();

while(1)
{key=PtrRead(); 
if(key==1)
{
	P1=0x0f;
    Delay(40000);
    P1=0xff;
 
//while(1)                //一直循环查询
for(i=0;i<5;i++)	  
   TxPacket(2);
}
 // key=0;
// key=PtrRead(); 
}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -