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

📄 hotpower_nrf905.lst

📁 nrf905配置程序发送接收及应用
💻 LST
📖 第 1 页 / 共 2 页
字号:
 124          #define TX_ADDRESS_0         TX_ADDRESS >> 24          //发送有效地址第1字节
 125          #define TX_ADDRESS_1         (TX_ADDRESS >> 16) & 0xff //发送有效地址第2字节
 126          #define TX_ADDRESS_2         (TX_ADDRESS >> 8) & 0xff  //发送有效地址第3字节
 127          #define TX_ADDRESS_3         TX_ADDRESS & 0xff         //发送有效地址第4字节
 128          
 129          /*-----------------------------------------------
 130                  nrf905命令控制字
 131          ------------------------------------------------*/
 132          #define WC        0x00            // Write configuration register command
 133          #define RC        0x10             // Read  configuration register command
 134          #define WTP        0x20             // Write TX Payload  command
 135          #define RTP        0x21            // Read  TX Payload  command
 136          #define WTA        0x22            // Write TX Address  command
 137          #define RTA        0x23            // Read  TX Address  command
 138          #define RRP        0x24            // Read  RX Payload  command
 139           
 140          
 141          
 142          void Config905(void) using 0//配置nRF905
 143          {
 144   1        CSN = 0;                        // Spi enable for write a spi command
*** ERROR C202 IN LINE 144 OF HOTPOWER_NRF905.C: 'CSN': undefined identifier
 145   1        SpiReadWrite(WC);                // Write config command
 146   1        SpiReadWrite(CH_NO_BYTE);                      //中心频率低8位
 147   1        SpiReadWrite(PA_PWR_10dBm | HFREQ_PLL_433MHz); //发射+10dBm,发射频率433MHz,中心频率第9位=0
 148   1        SpiReadWrite(TX_AFW_4BYTE | RX_AFW_4BYTE);     //接收地址宽度4字节,发送地址宽度4字节
 149   1        SpiReadWrite(RX_PW_32BYTE);                    //接收数据宽度32字节
 150   1        SpiReadWrite(TX_PW_32BYTE);                    //发送数据宽度32字节
 151   1        SpiReadWrite(RX_ADDRESS_0);                    //接收有效地址第1字节
 152   1        SpiReadWrite(RX_ADDRESS_1);                    //接收有效地址第2字节
 153   1        SpiReadWrite(RX_ADDRESS_2);                    //接收有效地址第3字节
 154   1        SpiReadWrite(RX_ADDRESS_3);                    //接收有效地址第4字节
 155   1        SpiReadWrite(CRC16_EN | XOF_16MHz);            //CRC16模式使能,晶体振荡器频率16MHz
 156   1        CSN = 1;                        // Disable Spi
 157   1      }
 158          
 159          /*------------------------------------------------
 160                  SPI读写一体化函数SpiReadWrite()
C51 COMPILER V7.06   HOTPOWER_NRF905                                                       03/28/2008 15:03:59 PAGE 4   

 161          入口参数:
 162                  val  写入命令或数据
 163          出口参数:
 164                  R7   读出数据
 165          ------------------------------------------------*/
 166          unsigned char SpiReadWrite(unsigned char val) using 0
 167          {
 168   1      unsigned char i;
 169   1        ACC = val;
 170   1        for (i = 8; i > 0; i --)
 171   1        {
 172   2           CY = MISO;//取数据SO
 173   2          _rlca_();//存数据ACC.0读数据ACC.7同时进行
 174   2          MOSI = CY;//送数据SI
 175   2          SCK = 1;//上升沿打入数据
 176   2          _nop_();
 177   2          SCK  = 0;//下降沿读入数据(首次为假动作)
 178   2        }
 179   1        return ACC;
 180   1      }
 181          
 182          
 183          //******************************************************
 184          //以下是maochao老师的SPI的Demo
 185          
 186          #define SIZE 100     
 187          unsigned char SPI_rx_buff[SIZE];     
 188          unsigned char SPI_tx_buff[SIZE];     
 189          unsigned char rx_wr_index,rx_rd_index,rx_counter,rx_buffer_overflow;     
 190          unsigned char tx_wr_index,tx_rd_index,tx_counter,SPI_ok;     
 191          
 192          #pragma interrupt_handler spi_stc_isr:18     
 193          void spi_stc_isr(void)     
 194          {     
 195   1        SPI_rx_buff[rx_wr_index] = SPDR;    //从ISP口读出收到的字节   
 196   1        SPI_ok = 1;                         // SPI 空闲   
 197   1        if (++rx_wr_index == SIZE) rx_wr_index = 0;    //放入接收缓冲区,并调整队列指针     
 198   1        if (++rx_counter == SIZE)     
 199   1        {     
 200   2          rx_counter = 0;     
 201   2          rx_buffer_overflow = 1;     
 202   2        }     
 203   1        if (tx_counter)        //如果发送缓冲区中有待发的数据     
 204   1        {     
 205   2           --tx_counter;     
 206   2           SPDR = SPI_tx_buff[tx_rd_index]; //发送一个字节数据,并调整指针     
 207   2           if (++tx_rd_index == SIZE) tx_rd_index = 0;    
 208   2           SPI_ok = 0;                      // SPI 发送工作  
 209   2        }     
 210   1      }     
 211          
 212          unsigned char getSPIchar(void)     
 213          {     
 214   1        unsigned char data;     
 215   1        while (rx_counter == 0);     //无接收数据,等待     
 216   1        data = SPI_rx_buff[rx_rd_index];    //从接收缓冲区取出一个SPI收到的数据     
 217   1        if (++rx_rd_index == SIZE) rx_rd_index = 0;    //调整指针     
 218   1        CLI();     
 219   1        --rx_counter;     
 220   1        SEI();     
 221   1        return data;     
 222   1      }     
C51 COMPILER V7.06   HOTPOWER_NRF905                                                       03/28/2008 15:03:59 PAGE 5   

 223          
 224          void putSPIchar(char c)      
 225          {      
 226   1        while (tx_counter == SIZE);//发送缓冲区满,等待      
 227   1        CLI();      
 228   1        if (tx_counter || SPI_ok==0 )      //发送缓冲区已中有待发数据      
 229   1        {                //或SPI正在发送数据时      
 230   2          SPI_tx_buffer[tx_wr_index] = c;    //将数据放入发送缓冲区排队      
 231   2          if (++tx_wr_index == SIZE) tx_wr_index = 0;    //调整指针      
 232   2          ++tx_counter;      
 233   2        }      
 234   1        else   
 235   1        {      
 236   2          SPDR = c;        // 发送缓冲区中空且SPI口空闲,直接放入SPDR由SIP口发送      
 237   2          SPI_ok = 0;      // SPI 发送工作  
 238   2        }   
 239   1        SEI();      
 240   1      }    
 241          
 242          void spi_init(void)     
 243          {     
 244   1        unsigned chat temp;     
 245   1        DDRB |= 0x080;    //MISO=input and MOSI,SCK,SS = output     
 246   1        PORTB |= 0x80;    //MISO上拉电阻有效      
 247   1        SPCR = 0xD5;    //SPI允许,主机模式,MSB,允许SPI中断,极性方式01,1/16系统时钟速率     
 248   1        SPSR = 0x00;     
 249   1        temp = SPSR;     
 250   1        temp = SPDR;    //清空SPI,和中断标志,使SPI空闲     
 251   1        SPI_ok = 1;     // SPI 空闲   
 252   1      }     
 253          
 254          void main(void)     
 255          {     
 256   1        unsigned char I;     
 257   1        CLI();        //关中断     
 258   1        spi_init();    //初始化SPI接口     
 259   1        SEI();        //开中断     
 260   1        while()     
 261   1        {     
 262   2          putSPIchat(i);        //发送一个字节     
 263   2          i++;     
 264   2          getSPIchar();        //接收一个字节(第一个字节为空字节)     
 265   2          ………     
 266   2        }     
 267   1      }     
 268          

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

⌨️ 快捷键说明

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