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

📄 已调试过的ptr8000.txt

📁 i/o口对spi的模拟程序
💻 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 + -