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

📄 89lv51.lst

📁 51单片机通过无线收发模块nRF24L01实现通信的程序,以及和PC通信的串口程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
 135                  test=test&0x20;                                 // check if have Data sent TX FIFO interrupt (TX_DS=1)
 136                  if(test==0x20)                                  // TX_DS =1
 137                  {
 138                          P0=0x00;                                        // turn on all led
 139                      delay100();                                 // delay 100ms
 140                          P0=0xff;
 141                  }
 142          }
 143          /**************************************************/
 144          
 145          /**************************************************
 146          Function: Uart_TxData();
 147          
 148          Description:
 149            write data x to SBUF
 150          /**************************************************/
 151          void Uart_TxData (BYTE x)
 152          {
 153   1              SBUF=x;                 // write data x to SBUF
 154   1              while(TI==0);
 155   1                      TI=0;
 156   1      }
 157          /**************************************************/
 158          
 159          /**************************************************
 160          Function: CheckButtons();
 161          
 162          Description:
 163            check buttons ,if have press,read the key values,
 164            turn on led and transmit it;  after transmition,
 165            if received ACK, clear TX_DS interrupt and enter RX Mode;
 166            turn off the led
 167          /**************************************************/
 168          void CheckButtons()
 169          {
 170   1              BYTE Temp,xx,Tempi;
 171   1      
 172   1              P0=0xff;
 173   1              Temp=P0&0x0f;                            //read key value from port P0
 174   1              if (Temp!=0x0f)
C51 COMPILER V7.06   89LV51                                                                05/08/2007 23:29:40 PAGE 4   

 175   1              {       
 176   2                      delay_ms(10);
 177   2                      Temp=P0&0x0f;                           // read key value from port P0
 178   2                      if (Temp!=0x0f)
 179   2                      {
 180   3                                      xx=Temp;
 181   3                                      Tempi=Temp<<4;          // Left shift 4 bits
 182   3                                      P0=Tempi;                   // Turn On the led
 183   3                                      tx_buf[0]=Tempi;        // Save to tx_buf[0]
 184   3                                      RF_TX_Mode();                   // set TX Mode and transmitting
 185   3                                      Uart_TxData(xx);                        // send data to uart
 186   3                                      SPI_Write(WRITE_REG+STATUS,SPI_Read(READ_REG+STATUS));  // clear interrupt flag(TX_DS)
 187   3                                      delay_ms(200);
 188   3                                      P0=0xff;                        // Turn off the led                             
 189   3                                      RF_RX_Mode();                   // set receive mode
 190   3      
 191   3                                      while((P0&0x0f)!=0x0f);
 192   3                      }
 193   2              }
 194   1      }
 195          /**************************************************/
 196          void main(void)
 197          {
 198   1              RFFlag =0;
 199   1              UartFlag = 0;
 200   1              SPI_Init();             // Initialize IO port and spi 
 201   1              InitUart();             // initialize 232 uart
 202   1              Init_int0();    // enable int0 interrupt
 203   1              RF_RX_Mode();           // set RX mode
 204   1              while(1)
 205   1              {
 206   2                      CheckButtons(); // scan key value and transmit
 207   2                  //////////////////
 208   2                      if(RFFlag)              // RF finish received
 209   2                      {
 210   3                              RFFlag=0;               //      set flag=0
 211   3                              P0= 0x0f;       // turn on led
 212   3                              delay_ms(200);
 213   3                              P0= 0xff;               // turn off led
 214   3                              ///
 215   3                              Uart_TxData(rx_buf[0]);         // send data to uart
 216   3                      }
 217   2                      if(UartFlag) //发送串口接收的数据
 218   2                      {
 219   3                              UartFlag = 0;
 220   3                              P0= 0x0f;       // turn on led
 221   3                              ////////////
 222   3                              RF_TX_Mode();           // set TX Mode and transmitting
 223   3                              SPI_Write(WRITE_REG+STATUS,SPI_Read(READ_REG+STATUS));  // clear interrupt flag(TX_DS)
 224   3                              delay_ms(200);                  
 225   3                              RF_RX_Mode();                   // set receive mode
 226   3                              /////////////
 227   3                              P0= 0xff;       // turn off led
 228   3                      }
 229   2              }
 230   1      }
 231          /**************************************************/
 232          
 233          /**************************************************
 234          Function: ISR_int0() interrupt 0;
 235          
 236          Description:
C51 COMPILER V7.06   89LV51                                                                05/08/2007 23:29:40 PAGE 5   

 237            if RX_DR=1 or TX_DS or MAX_RT=1,enter this subprogram;
 238            if RX_DR=1,read the payload from RX_FIFO and set flag;
 239          /**************************************************/
 240          void ISR_int0(void) interrupt 0
 241          {
 242   1              sta=SPI_Read(READ_REG+STATUS);  // read register STATUS's value
 243   1              if(RX_DR)                               // if receive data ready (RX_DR) interrupt
 244   1              {
 245   2                      SPI_Read_Buf(RD_RX_PLOAD,rx_buf,RX_PLOAD_WIDTH);// read receive payload from RX_FIFO buffer
 246   2                      RFFlag=1;
 247   2              }
 248   1              if(MAX_RT)
 249   1              {
 250   2                      SPI_Write(FLUSH_TX,0);
 251   2              }
 252   1                      SPI_Write(WRITE_REG+STATUS,sta);// clear RX_DR or TX_DS or MAX_RT interrupt flag
 253   1      }
 254          /**************************************************/
 255          void Uart_int4(void) interrupt 4
 256          {
 257   1              if(RI)//处理接收中断
 258   1              {
 259   2                      RI = 0;
 260   2                      tx_buf[0] = SBUF;
 261   2                      UartFlag = 1;
 262   2              }
 263   1              if(TI)//处理发送中断
 264   1              {
 265   2                      TI = 0;
 266   2              }
 267   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    594    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     48      11
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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