📄 已调试过的ptr8000.txt
字号:
共有4个文件
PTR8000_t.h文件
/*-----------------------------------------------
nrf905命令控制字
------------------------------------------------*/
/*SPI串行接口指令设置*/
#define WC 0x00 // Write configuration register command /*配置寄存器,指出写操作开始地址*/
#define RC 0x10 // Read configuration register command /*配置寄存器,指出读操作开始地址*/
#define WTP 0x20 // Write TX Payload command
#define RTP 0x21 // Read TX Payload command
#define WTA 0x22 // Write TX Address command
#define RTA 0x23 // Read TX Address command
#define RRP 0x24 // Read RX Payload command
/*位可操作*/
sbit CSN = P1^3;
sbit TX_EN = P1^4;
sbit TRX_EN = P1^5;
sbit PWR = P1^6;
sbit CD = P2^3;
sbit AM = P2^4;
sbit DR = P2^5;
/*外部函数*/
extern void Config905(void);
extern void Delay(unsigned long int t);
extern void Send_Data(void);
配置文件
/////////////////////////////////////
// Generated Initialization File //
/////////////////////////////////////
#include "C8051F020.h"
// Peripheral specific initialization functions,
// Called from the Init_Device() function
void Reset_Sources_Init() /*看门狗*/
{
WDTCN = 0xDE;
WDTCN = 0xAD;
}
void SPI_Init()
{
SPI0CN = 0x03;
SPI0CKR = 0xDC;
}
void Port_IO_Init()
{
// P0.0 - TX0 (UART0), Open-Drain, Digital
// P0.1 - RX0 (UART0), Open-Drain, Digital
// P0.2 - SCK (SPI0), Push-Pull, Digital
// P0.3 - MISO (SPI0), Open-Drain, Digital
// P0.4 - MOSI (SPI0), Push-Pull, Digital
// P0.5 - NSS (SPI0), Push-Pull, Digital
// P0.6 - Unassigned, Open-Drain, Digital
// P0.7 - Unassigned, Open-Drain, Digital
// P1.0 - Unassigned, Open-Drain, Digital
// P1.1 - Unassigned, Open-Drain, Digital
// P1.2 - Unassigned, Open-Drain, Digital
// P1.3 - Unassigned, Open-Drain, Digital
// P1.4 - Unassigned, Open-Drain, Digital
// P1.5 - Unassigned, Open-Drain, Digital
// P1.6 - Unassigned, Open-Drain, Digital
// P1.7 - Unassigned, Open-Drain, Digital
// P2.0 - Unassigned, Open-Drain, Digital
// P2.1 - Unassigned, Open-Drain, Digital
// P2.2 - Unassigned, Open-Drain, Digital
// P2.3 - Unassigned, Open-Drain, Digital
// P2.4 - Unassigned, Open-Drain, Digital
// P2.5 - Unassigned, Open-Drain, Digital
// P2.6 - Unassigned, Open-Drain, Digital
// P2.7 - Unassigned, Open-Drain, Digital
// P3.0 - Unassigned, Open-Drain, Digital
// P3.1 - Unassigned, Open-Drain, Digital
// P3.2 - Unassigned, Open-Drain, Digital
// P3.3 - Unassigned, Open-Drain, Digital
// P3.4 - Unassigned, Open-Drain, Digital
// P3.5 - Unassigned, Open-Drain, Digital
// P3.6 - Unassigned, Open-Drain, Digital
// P3.7 - Unassigned, Open-Drain, Digital
P0MDOUT = 0x34;
P1MDOUT = 0x78;
XBR0 = 0x06;
XBR2 = 0x40;
}
void Oscillator_Init()
{
int i = 0;
OSCXCN = 0x67; /*外部采用晶体振荡器22.1184MHz */
for (i = 0; i < 3000; i++); // Wait 1ms for initialization /* 等待晶振稳定*/
while ((OSCXCN & 0x80) == 0);
OSCICN = 0x08;
}
// Initialization function for device,
// Call Init_Device() from your main program
void Init_Device(void)
{
Reset_Sources_Init();
SPI_Init();
Port_IO_Init();
Oscillator_Init();
}
PTR8000_t.c文件
////////////////////////////////////////////////////////////////////////////////////////////////////////
// PTR8000_t
//说明:收发数据时发送方和接收方的地址应该一致,为简便起见,配置时都设为E7*4
// TX_address指的接收数据方地址 对应RX_address
// 发指令前必须有CSN的下降沿
////////////////////////////////////////////////////////////////////////////////////////////////////////
#include"c8051f020.h"
#include"PTR8000_t.h"
unsigned char S[16]={0xD5,0xE6,0xCA,0xC7,0xB2,0xBB,0xD6,0xAA,0xB5,0xC0,0xC4,0xE3,0xCA,0xC7,0xD4,0xF5};
unsigned char Temp;
bit Data_Ready;
void Delay(unsigned long int t) //延时t毫秒
{
unsigned char i;
while(t--)
{for(i=0;i<250;i++){}}
}
/***********************************向spi0写数据函数*********************************************/
void SpiWrite(unsigned char val)
{
SPIF=0;
Temp=val;
SPI0DAT=val;
while(!SPIF); //正在串行发送,等待标志置位
SPIF=0;
}
/************************************配置nRF905函数 *******************************************/
void Config905()
{
CSN=1; //新指令由spi的下降沿开始
Delay(1);
CSN=0;
SpiWrite(WC);
SpiWrite(0x6C); //中心频率低8位 0x6C=180d
SpiWrite(0x02); //发射-10dBm,发射频率880.8MHz,中心频率第9位=0,正常模式且不重发
SpiWrite(0x44); //接收地址宽度4字节,发送地址宽度4字节
SpiWrite(0x10); //接收数据宽度16字节
SpiWrite(0x10); //发送数据宽度16字节
SpiWrite(0xE7); //RX_address,发送数据方地址
SpiWrite(0xE7);
SpiWrite(0xE7);
SpiWrite(0xE7);
SpiWrite(0xDF); //CRC16模式使能,晶体振荡器频率16MHz
CSN=1; //Disable Spi
}
/*************************************发送数据函数************************************************/
void Send_Data()
{
unsigned char i;
TX_EN=1;
PWR=1;
TRX_EN=0;
CSN=1; //新指令由spi的下降沿开始
Delay(1);
CSN=0;
SpiWrite(WTA); //写TX_address,这是接受数据方的地址
SpiWrite(0xE7); //发送有效地址第1字节,
SpiWrite(0xE7); //发送有效地址第2字节
SpiWrite(0xE7); //发送有效地址第3字节
SpiWrite(0xE7); //发送有效地址第4字节
CSN=1; //新指令由spi的下降沿开始
Delay(1);
CSN=0;
SpiWrite(WTP); //写TX有效数据
for(i=0;i<16;i++)
SpiWrite(S[i]);
TRX_EN=1; //启动数据发送,只用1次启动即可
while(!DR);
Data_Ready=1;
TRX_EN=0; //数据已经发送完毕,结束动作
CSN=1; //Disable Spi
}
//说明:收发数据时发送方和接收方的地址应该一致,为简便起见,配置时都设为E7*4
// TX_address指的接收数据方地址 对应RX_address
// 发指令前必须有CSN的下降沿
////////////////////////////////////////////////////////////////////////////////////////////////////////
#include"c8051f020.h"
#include"PTR8000_t.h"
unsigned char S[16]={0xD5,0xE6,0xCA,0xC7,0xB2,0xBB,0xD6,0xAA,0xB5,0xC0,0xC4,0xE3,0xCA,0xC7,0xD4,0xF5};
unsigned char Temp;
bit Data_Ready;
void Delay(unsigned long int t) //延时t毫秒
{
unsigned char i;
while(t--)
{for(i=0;i<250;i++){}}
}
/***********************************向spi0写数据函数*********************************************/
void SpiWrite(unsigned char val)
{
SPIF=0;
Temp=val;
SPI0DAT=val;
while(!SPIF); //正在串行发送,等待标志置位
SPIF=0;
}
/************************************配置nRF905函数 *******************************************/
void Config905()
{
CSN=1; //新指令由spi的下降沿开始
Delay(1);
CSN=0;
SpiWrite(WC);
SpiWrite(0x6C); //中心频率低8位 0x6C=180d
SpiWrite(0x02); //发射-10dBm,发射频率880.8MHz,中心频率第9位=0,正常模式且不重发
SpiWrite(0x44); //接收地址宽度4字节,发送地址宽度4字节
SpiWrite(0x10); //接收数据宽度16字节
SpiWrite(0x10); //发送数据宽度16字节
SpiWrite(0xE7); //RX_address,发送数据方地址
SpiWrite(0xE7);
SpiWrite(0xE7);
SpiWrite(0xE7);
SpiWrite(0xDF); //CRC16模式使能,晶体振荡器频率16MHz
CSN=1; //Disable Spi
}
/*************************************发送数据函数************************************************/
void Send_Data()
{
unsigned char i;
TX_EN=1;
PWR=1;
TRX_EN=0;
CSN=1; //新指令由spi的下降沿开始
Delay(1);
CSN=0;
SpiWrite(WTA); //写TX_address,这是接受数据方的地址
SpiWrite(0xE7); //发送有效地址第1字节,
SpiWrite(0xE7); //发送有效地址第2字节
SpiWrite(0xE7); //发送有效地址第3字节
SpiWrite(0xE7); //发送有效地址第4字节
CSN=1; //新指令由spi的下降沿开始
Delay(1);
CSN=0;
SpiWrite(WTP); //写TX有效数据
for(i=0;i<16;i++)
SpiWrite(S[i]);
TRX_EN=1; //启动数据发送,只用1次启动即可
while(!DR);
Data_Ready=1;
TRX_EN=0; //数据已经发送完毕,结束动作
CSN=1; //Disable Spi
}
测试文件(主函数)
#include"c8051f020.h"
#include"PTR8000_t.h"
extern void Init_Device();
void main()
{
Init_Device();
Delay(5); //等待时间
Config905();
Send_Data();
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -