?? f.c
字號(hào):
//發(fā)送
/*************火箭發(fā)射點(diǎn)火系統(tǒng)***************************/
#include "reg52.h"
void mode1(void);
void mode2(void);
void mode3(void);
void mode4(void);
void mode5(void);
void Config905(void); //對(duì)PTR8000進(jìn)行配置
unsigned int a[8],b[8];
unsigned int flag=0;
int i,t;
int flat=1;
sbit SCK = P2^5;
sbit MISO= P2^7;
sbit MOSI= P2^6;
sbit DR = P2^1; //數(shù)據(jù)就緒輸出
sbit CSN = P2^4; //SPI使能
sbit PWR = P2^2; //Power Down 模式
sbit TX_EN= P2^3; //'1'發(fā)射模式 '0'接收模式
sbit TRX_CE=P2^0; //使能發(fā)射/接收模式
/**********************************/
//延時(shí)大約為1S左右
//以0.1S為單位計(jì)時(shí)
//即 定時(shí)時(shí)間 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++);
}
/********************************/
//任意延時(shí)
/*******************************/
void Delay(int x)
{
unsigned int i;
for(i=0;i<x;i++);
}
/*******十進(jìn)制數(shù)轉(zhuǎn)二進(jìn)制數(shù)*************************/
void fun2(int n)
{
unsigned int i,t=n;
for(i=0;i<8;i++)
{
a[i]=t%2;
t/=2;
}
}
/********************************/
//函數(shù)名:int fun22(int n)
//功能:計(jì)算2的n 次方
/********************************/
int fun22(int n)
{
unsigned int i;
int f=1;
for(i=0;i<n;i++)
f*=2;
return f;
}
/**********將高位和低位進(jìn)行交換*********************/
int fun21(void)
{
unsigned int i,t;
int s=0;
for(i=0;i<4;i++)
{
t=b[i]; //高低位進(jìn)行交換
b[i]=b[7-i];
b[7-i]=t; // 在PTR800發(fā)送時(shí)先發(fā)高位,再發(fā)低位
}
for(i=0;i<8;i++)
s+=(b[i]*fun22(i)); //將二進(jìn)制數(shù)轉(zhuǎn)為十進(jìn)制數(shù)
return s;
}
/*************************************/
void SpiWrite(int c) //SPI寫(xiě) 將單片機(jī)中數(shù)據(jù)寫(xiě)到ptr8000中
{
unsigned int i=8;
fun2(c); //將c轉(zhuǎn)換為二進(jìn)制數(shù)
for(i=0;i<8;i++)
{
Delay(10);
SCK=0;
MOSI=a[7-i]; //從高位到低位寫(xiě)
Delay(10);
SCK=1; ///sck給一個(gè)上升沿發(fā)送一位數(shù)據(jù)
Delay(10); //延時(shí)83us
SCK=0;
}
SCK=0;
}
/**************************************/
int SpiRead(void) //SPI讀 從外部ptr8000中讀入單片機(jī)
{
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十進(jìn)制數(shù)
return ddata;
}
/*******接收子程序********************************/
int PtrRead() //PTR8000讀
{
int key;
Config905();
PWR=1;
TX_EN=0;
TRX_CE=1; //接收
while(!DR) ; //等待接收
//Delay(2000);
while(DR) //接收數(shù)據(jù)準(zhǔn)備就緒
//if(DR)
{
PWR=1; //進(jìn)入待機(jī)模式
TRX_CE=0;
TX_EN=0;
CSN=0; //片選
SpiWrite(0x24); //寫(xiě)讀rx(接收)有效數(shù)據(jù)(配置)
{
key=SpiRead();
Delay(20);
}
CSN=1;
Delay(20);
return key;
}
//else flat=1;
}
/**********************************/
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,不重發(fā),節(jié)電為正常模式 0c
SpiWrite( 0x44); //地址寬度設(shè)置,為4字節(jié)
SpiWrite( 0x01);
SpiWrite( 0x01); //接收發(fā)送有效數(shù)據(jù)長(zhǎng)度為1字節(jié)
SpiWrite( 0x19); //接收地址 4字節(jié)
SpiWrite( 0x85);
SpiWrite( 0x06);
SpiWrite( 0x27);
SpiWrite( 0x58); //16位CRC校驗(yàn),CRC充許,16M晶振
CSN=1;
}
/***********************************/
void TxPacket(int ddata) //數(shù)據(jù)包發(fā)送
{
int x=ddata;
PWR=1; //待機(jī)和SPI編程模式
TRX_CE=0;
TX_EN=1;
CSN=0;
SpiWrite(0x22); //寫(xiě)發(fā)送地址,后面跟4字節(jié)地址//
SpiWrite(0x19); //0x19
SpiWrite(0x85); //0x85
SpiWrite(0x06); //0x06
SpiWrite(0x27); //0x27
CSN=1;
Delay(20); //延時(shí)1/6ms
CSN=0;
SpiWrite(0x20); //寫(xiě)發(fā)送數(shù)據(jù)命令,后面跟一字節(jié)數(shù)據(jù)//
SpiWrite(x); //發(fā)送到數(shù)據(jù)
CSN=1;
Delay(20);
TRX_CE=1; //使能發(fā)射模式//
Delay(255); //等帶發(fā)送完成//延時(shí)2ms
TRX_CE=0;
}
/*******主函數(shù)******************************/
//先發(fā)5個(gè)1,再接收1個(gè)2,
//
/*********************************************/
void main()
{int key,i=0;
P1=0xff;
Config905(); //P1口初始化
while(1)
{
if(P0==0x01)
{
for(i=0;i<1;i++) //while(flat) //一直循環(huán)查詢
{
TxPacket(1); //發(fā)5個(gè)1出去
}
key=PtrRead();
if(key==2)
{
// for(i=0;1<3;i++)
// {
P1=~P1;
Delay(20000);
P1=0xff;
// key=0;
// }
}
// P1=0;
//模式1
//while(1)
/* */
}
}
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -