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

📄 ptr8000.lst

📁 实现了PTR8000的初始化和收发的程序。
💻 LST
字号:
C51 COMPILER V8.05a   PTR8000                                                              04/15/2008 22:00:51 PAGE 1   


C51 COMPILER V8.05a, COMPILATION OF MODULE PTR8000
OBJECT MODULE PLACED IN PTR8000.OBJ
COMPILER INVOKED BY: E:\Keil2008\C51\BIN\C51.EXE PTR8000.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include <sst89x5x4.h>
   2          #include <ABSACC.h>
   3          #include <intrins.h>
   4          #include <stdio.h>
   5          #define uint unsigned int
   6          #define uchar unsigned char
   7          
   8          ////////////SPI指令
   9          #define WC              0x00
  10          #define RC              0x10
  11          #define WTP             0x20
  12          #define RTP             0x21
  13          #define WTA             0x22
  14          #define RTA             0x23
  15          #define RRP             0x24
  16          
  17          #define TxRxBuf_Len 32
  18          unsigned char RxBuf[TxRxBuf_Len];
  19          unsigned char TxBuf[TxRxBuf_Len]=
  20          {
  21          
  22          0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,
  23          0x09,0x10,0x11,0x12,0x13,0x14,0x15,0x16,
  24          0x17,0x18,0x19,0x20,0x21,0x22,0x23,0x24,
  25          0x25,0x26,0x27,0x28,0x29,0x30,0x31,0x32,
  26          };
  27          //配置口定义//
  28          sbit    TX_EN=P1^0;
  29          sbit    TRX_CE=P3^2;
  30          sbit    PWR=P1^1;
  31          sbit    MISO=P1^6;
  32          sbit    MOSI=P1^5;
  33          sbit    SCK=P1^7;
  34          sbit    CSN=P1^4;
  35          /////////////////////////////////////////////////////
  36          sbit    AM=P1^3;
  37          sbit    DR=P3^3;
  38          sbit    CD=P1^2;
  39          ///////////////////////////////////////////////////////
  40          //sbit      DQ=P3^5       ;
  41          
  42          //RF寄存器配置//
  43          unsigned char idata RFConf[11]=
  44          {
  45            0x00,                             //配置命令//
  46            0x4c,                             //CH_NO,配置频段在433MHZ                            0100 1100
  47            0x0C,                             //输出功率为10db,不重发,节电为正常模式     0000 1100
  48            0x44,                             //地址宽度设置,为4字节        0100 0100
  49            0x20,0x20,                        //接收发送有效数据长度为32字节
  50            0xCC,0xCC,0xCC,0xCC,              //接收地址
  51            0x58,                             //CRC充许,8位CRC校验,外部时钟信号不使能,16M晶振          0101 1000
  52          };
  53          bit lcdbit;
  54          code TxAddress[4]={0xcc,0xcc,0xcc,0xcc};
  55          
C51 COMPILER V8.05a   PTR8000                                                              04/15/2008 22:00:51 PAGE 2   

  56          ///////////延时/////////////////
  57          static void Delay(uchar n)
  58          {
  59   1              uint i;
  60   1              while(n--)
  61   1              for(i=0;i<80;i++);
  62   1      }
  63          
  64          void Spi_Init(void)
  65          {
  66   1              SPCR = 0x50;                                    //SPI使能,主机模式,高位在先,4分频=11.0592/4
  67   1      
  68   1      }
  69          
  70          unsigned char SpiRead_Write(unsigned char DATA)
  71          {
  72   1              unsigned char b;
  73   1              unsigned char temp;
  74   1              Spi_Init();
  75   1              SPDR = DATA;            //写入要发送数据发送的同时也得到数据
  76   1              do
  77   1              {temp = SPSR&0x80;}
  78   1              
  79   1              while(temp!=0x80);
  80   1              SPSR = 0x00;    
  81   1              b    = SPDR;            //把得到数据保存
  82   1              return b;
  83   1              }
  84          
  85          
  86          ///////////////
  87          unsigned char SpiRead(void)
  88          {
  89   1              unsigned char temp;
  90   1              SPDR = 0x00;
  91   1              do {
  92   2                      temp = SPSR&0x80;
  93   2                      }
  94   1              while(temp!=0x80);
  95   1      //      SPSR = 0x00;
  96   1              return SPDR;
  97   1      /*      unsigned char i;
  98   1              for (i=0;i<8;i++)
  99   1              {
 100   1                      DATA_BUF=DATA_BUF<<1;
 101   1                      SCK=1;
 102   1                      if (MISO)       //读取最高位,保存至最末尾,通过左移位完成整个字节
 103   1                      {
 104   1                              DATA_BUF|=BYTE_BIT0;
 105   1                      }
 106   1                      else
 107   1                      {
 108   1                              DATA_BUF&=~BYTE_BIT0;
 109   1                      }
 110   1                      SCK=0;
 111   1               }
 112   1               return DATA_BUF;  */     //模拟SPI
 113   1      }
 114          
 115          void SpiWrite(unsigned char send)
 116          {
 117   1              unsigned char temp;
C51 COMPILER V8.05a   PTR8000                                                              04/15/2008 22:00:51 PAGE 3   

 118   1              SPDR = send;
 119   1              do {
 120   2                      temp = SPSR&0x80;
 121   2                      }
 122   1              while(temp!=0x80);
 123   1      //      SPSR = 0x00;
 124   1      /*      unsigned char i;
 125   1              DATA_BUF=send;
 126   1              for (i=0;i<8;i++)
 127   1              {
 128   1                      if (DATA7)      //总是发送最高位
 129   1                      {
 130   1                              MOSI=1;
 131   1                      }
 132   1                      else
 133   1                      {
 134   1                              MOSI=0;
 135   1                      }
 136   1                      SCK=1;
 137   1                      DATA_BUF=DATA_BUF<<1;
 138   1                      SCK=0;
 139   1              }                  */                   //模拟SPI
 140   1      }
 141          ////////////////初始化nRF905///////////////////
 142          void nRF905Init(void)
 143          {
 144   1          CSN=1;                                              // Spi  disable
 145   1              SCK=0;                                          // Spi clock line init low
 146   1              DR=0;                                           // Init DR for input
 147   1              AM=0;                                           // Init AM for input
 148   1              CD=0;                                           // Init CD for input
 149   1              PWR=1;                                  // nRF905 power on
 150   1              TRX_CE=0;                                       // Set nRF905 in standby mode
 151   1              TX_EN=0;                                        // set radio in Rx mode
 152   1      }
 153          ////////初始化寄存器
 154          void Config905(void)
 155          {
 156   1              uchar i;
 157   1              CSN=0;                                          // Spi enable for write a spi command
 158   1              //SpiWrite(WC);                         // Write config command写放配置命令
 159   1              for (i=0;i<11;i++)      // Write configration words  写放配置字
 160   1              {
 161   2                 SpiWrite(RFConf[i]);
 162   2              }
 163   1              CSN=1;                                  // Disable Spi
 164   1      }
 165          /////////////初始化
 166          void Uart_Init(void)
 167          {
 168   1              TMOD = 0x20;                            //timer1 working mode 1
 169   1              TL1  = 0xfd;                                    //f7=9600 for 16mhz Fosc,and ...
 170   1              TH1  = 0xfd;                                    //...fd=19200 for 11.0592mhz Fosc
 171   1              SCON = 0xd8;                            //uart mode 3,ren==1
 172   1              PCON = 0x80;                            //smod=1
 173   1              TR1  = 1;                                       //start timer1
 174   1      }
 175          
 176          
 177          //////////////////////////////////发送数据//////////////////////////////////
 178          void TxPacket(void)
 179          {
C51 COMPILER V8.05a   PTR8000                                                              04/15/2008 22:00:51 PAGE 4   

 180   1              uchar i;
 181   1              //Config905();
 182   1              CSN=0;
 183   1              SpiWrite(WTP);                          // Write payload command
 184   1              for (i=0;i<32;i++)
 185   1              {
 186   2                      SpiWrite(TxBuf[i]);         // Write 32 bytes Tx data
 187   2              }                                                       // Spi enable for write a spi command
 188   1              CSN=1;
 189   1              Delay(1);                                       // Spi disable
 190   1              CSN=0;                                          // Spi enable for write a spi command
 191   1              SpiWrite(WTA);                          // Write address command
 192   1              for (i=0;i<4;i++)                       // Write 4 bytes address
 193   1              {
 194   2                      SpiWrite(TxAddress[i]);
 195   2              }
 196   1              CSN=1;                                          // Spi disable
 197   1              TRX_CE=1;                                       // Set TRX_CE high,start Tx data transmission
 198   1              Delay(1);                                       // while (DR!=1);
 199   1              TRX_CE=0;                                       // Set TRX_CE low
 200   1      }
 201          ////////////////////////////////////////////////////
 202          void SetTxMode(void)
 203          {
 204   1              TRX_CE=0;
 205   1              TX_EN=1;
 206   1              Delay(1);                                       // delay for mode change(>=650us)
 207   1      }
 208          unsigned char CheckCD(void)             //Pin->检查是否已存在 同频率载波
 209          {
 210   1              if (CD==1)
 211   1              {
 212   2                      return 1;
 213   2              }
 214   1              else
 215   1              {
 216   2                      return 0;
 217   2              }
 218   1      }
 219          void TX(void)
 220          {
 221   1                     SetTxMode(); // Set nRF905 in Tx mode
 222   1                                 TxPacket();  // Send data by nRF905
 223   1                                 CheckCD();   // 返回CD的当前电平
 224   1      
 225   1              // SetRF_PA_PWR(unsigned char i);       //设置发射功率
 226   1      }
 227          
 228          ////////////////////////////////////////////////////////////////////////////////////////
 229          
 230          
 231          //////////////////////////////////接收数据//////////////////////////////////
 232          void SetRxMode(void)
 233          {
 234   1              TX_EN=0;
 235   1              TRX_CE=1;
 236   1              Delay(1);                                       // delay for mode change(>=650us)
 237   1      }
 238          
 239          unsigned char CheckDR(void)             //检查是否有新数据传入 Data Ready
 240          {
 241   1              if (DR=1&&TRX_CE==1&&TX_EN==0)
C51 COMPILER V8.05a   PTR8000                                                              04/15/2008 22:00:51 PAGE 5   

 242   1              {
 243   2             // Delay(50)  ;
 244   2                      return 1;
 245   2              }
 246   1              else
 247   1              {
 248   2                      return 0;
 249   2              }
 250   1      }
 251          void RxPacket(void)                                                     //读数据
 252          {
 253   1              uchar i;
 254   1          Delay(1);
 255   1              TRX_CE=0;                                       // Set nRF905 in standby mode
 256   1          Delay(100);    
 257   1              CSN=0;                                          // Spi enable for write a spi command
 258   1          Delay(1);
 259   1              SpiWrite(RRP);
 260   1        // Delay(10000);
 261   1        // Delay(10000);                      // Read payload command
 262   1              for (i = 0 ;i < 32 ;i++)
 263   1              {    
 264   2               //    Delay(10000); 
 265   2                      RxBuf[i]=SpiRead();             // Read data and save to buffer
 266   2               // Delay(10000);
 267   2                  
 268   2              }
 269   1              CSN=1;
 270   1          Delay(10);
 271   1                      // Delay(10);
 272   1              TRX_CE=1;                                                       
 273   1      }
 274          ////////////////
 275          void  RX(void)
 276          {
 277   1               SetRxMode();                   // Set nRF905 in Rx mode
 278   1                       //Delay(10000);
 279   1               while (CheckDR()==0);
 280   1               //Delay(10000);
 281   1                       Delay(10);
 282   1                       RxPacket();
 283   1               //Delay(10000);                        // Recive data by nRF905
 284   1                       Delay(10);
 285   1      }
 286          
 287          void R_S_Byte(uchar R_Byte)
 288          {       
 289   1               SBUF = R_Byte;  
 290   1           while( TI == 0 );                          //查询法
 291   1               TI = 0;
 292   1           
 293   1      }
 294          
 295          
 296          void main(void)
 297          {
 298   1              Uart_Init();
 299   1              nRF905Init();
 300   1              Config905();
 301   1              while(1)
 302   1                      {
 303   2                     TX();
C51 COMPILER V8.05a   PTR8000                                                              04/15/2008 22:00:51 PAGE 6   

 304   2                      }
 305   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    351    ----
   CONSTANT SIZE    =      8    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     64    ----
   IDATA SIZE       =     11    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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