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

📄 fasong.lst

📁 很实用的单片机例程
💻 LST
字号:
C51 COMPILER V7.00  FASONG                                                                 06/13/2011 19:08:41 PAGE 1   


C51 COMPILER V7.00, COMPILATION OF MODULE FASONG
OBJECT MODULE PLACED IN Fasong.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Fasong.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          //1.      程序分别下载到2个开发板,注意两个板都要接上USB电源供电。
   2          //2.    然后按KEY后发送信息,发送完毕后蜂鸣器响一下,对方受到信息后同样 响一下。
   3          //3.    而且两个开发板都可以做为发送和接收,一个做为发送,对应另一即为接收,实现及时双向通信。
   4          //4.    HJ-1G开发板上最下角第一个按键
   5          //慧净电子
   6          //注;如果你的不是慧净HJ-1G开发板,请自己修改IO口。
   7          
   8          #include <reg52.h>
   9          #include <ABSACC.h>
  10          #include <intrins.h>
  11          #include <stdio.h>
  12          //--------------------------------------------------------------------------------------------------------
             ---------
  13          #define uint unsigned int
  14          #define uchar unsigned char
  15          //--------------------------------------------------------------------------------------------------------
             ---------
  16          #define BYTE_BIT0       0x01
  17          #define BYTE_BIT7       0x80
  18          //--------------------------------------------------------------------------------------------------------
             ---------
  19          bdata unsigned  char DATA_BUF;
  20          #define DATA7   ((DATA_BUF&BYTE_BIT7) != 0)
  21          #define DATA0   ((DATA_BUF&BYTE_BIT0) != 0)
  22          sbit    flag    =DATA_BUF^7;
  23          sbit    flag1   =DATA_BUF^0;
  24          //---------------------------------------------------发送数据缓冲区---------------------------------------
             -----------
  25          #define TxRxBuf_Len 4
  26          unsigned char TxRxBuf[TxRxBuf_Len]={0x29,0x30,0x31,0x32,};
  27          code TxAddress[4]={0xcc,0xcc,0xcc,0xcc};
  28          char tf;
  29          //----------------------------------------NRF905工作模式控制端口------------------------------------------
             -------------
  30          sbit    TXEN=P1^0;
  31          sbit    TRX_CE=P3^2;
  32          sbit    PWR=P1^1;
  33          //----------------------------------------LED显示端口---------------------------------------------------
  34          sbit    LED=P2^3; //蜂鸣器
  35          //----------------------------------------NRF905 数据交换端口---------------------------------------------
             -------
  36          sbit    MISO=P1^6;
  37          sbit    MOSI=P1^5;
  38          sbit    SCK=P1^7;
  39          sbit    CSN=P1^3;
  40          //----------------------------------------nrf905状态端口--------------------------------------------------
             --------
  41          sbit    AM=P1^4;
  42          sbit    DR=P3^3;
  43          sbit    CD=P1^2;
  44          //--------------------------------------------------------------------------------------------------------
             --------
  45          //----------------------------------------按键端口-------------------------------------------------------
  46          sbit    KEY=P3^4;  //HJ-1G开发板上最下角第一个按键,
  47          //----------------------------------------nrf905控制指令-------------------------------------------
C51 COMPILER V7.00  FASONG                                                                 06/13/2011 19:08:41 PAGE 2   

  48          #define WC              0x00
  49          #define RC              0x10
  50          #define WTP             0x20
  51          #define RTP             0x21
  52          #define WTA             0x22
  53          #define RTA             0x23
  54          #define RRP             0x24
  55          //------------------------------------------------NRF905寄存器配置----------------------------------------
             ---------
  56          unsigned char idata RFConf[11]=
  57          {
  58            0x00,                             //配置命令//
  59            0x4c,                             //CH_NO,配置频段在430MHZ
  60            0x0c,                             //输出功率为10db,不重发,节电为正常模式
  61            0x44,                             //地址宽度设置,为4字节
  62            0x04,0x04,                        //接收发送有效数据长度为4字节
  63            0xCC,0xCC,0xCC,0xCC,              //接收地址
  64            0x58,                              //CRC充许,8位CRC校验,外部时钟信号不使能,16M晶振
  65          };
  66          //================================================延时====================================================
             -=======
  67          void nrf905_Delay(int n)
  68          {
  69   1              uint i;
  70   1              while(n--)
  71   1              for(i=0;i<80;i++);
  72   1      }
  73          //=================================================SPI读函数==============================================
             -=========
  74          unsigned char SpiRead(void)
  75          {
  76   1              unsigned char j;
  77   1              for (j=0;j<8;j++)
  78   1              {
  79   2              DATA_BUF=DATA_BUF<<1;
  80   2                      SCK=1;
  81   2                      if (MISO)       //读取最高位,保存至最末尾,通过左移位完成整个字节
  82   2                      {
  83   3                              DATA_BUF|=BYTE_BIT0;
  84   3                      }
  85   2                      else
  86   2                      {
  87   3                              DATA_BUF&=~BYTE_BIT0;
  88   3                      }
  89   2                      SCK=0;
  90   2               }
  91   1               return DATA_BUF;
  92   1      }
  93          //===========================================SPI写函数====================================================
             -===========
  94          void SpiWrite(unsigned char send)
  95          {
  96   1              unsigned char i;
  97   1              DATA_BUF=send;
  98   1              for (i=0;i<8;i++)
  99   1              {
 100   2                      if (DATA7)      //总是发送最高位
 101   2                      {
 102   3                              MOSI=1;
 103   3                      }
 104   2                      else
 105   2                      {
C51 COMPILER V7.00  FASONG                                                                 06/13/2011 19:08:41 PAGE 3   

 106   3                              MOSI=0;
 107   3                      }
 108   2                      SCK=1;
 109   2                      DATA_BUF=DATA_BUF<<1;
 110   2                      SCK=0;
 111   2              }
 112   1      }
 113          //------------------------------------------------------初始化nRF905--------------------------------------
             --------
 114          void nRF905Init(void)
 115          {
 116   1          CSN=1;                                              // Spi  disable
 117   1              SCK=0;                                          // Spi clock line init low
 118   1              DR=1;                                           // Init DR for input
 119   1              AM=1;                                           // Init AM for input
 120   1              CD=1;                                           // Init CD for input
 121   1              PWR=1;                                  // nRF905 power on
 122   1              TRX_CE=0;                                       // Set nRF905 in standby mode
 123   1              TXEN=0;                                 // set radio in Rx mode
 124   1      }
 125          //-----------------------------------------------------初始化寄存器---------------------------------------
             ---------
 126          void Config905(void)
 127          {
 128   1              uchar i;
 129   1              CSN=0;                                          // Spi enable for write a spi command
 130   1              //SpiWrite(WC);                         // Write config command写放配置命令
 131   1              for (i=0;i<11;i++)      // Write configration words  写放配置字
 132   1              {
 133   2                 SpiWrite(RFConf[i]);
 134   2              }
 135   1              CSN=1;                                  // Disable Spi
 136   1      }
 137          //-----------------------------------------------------发送数据打包---------------------------------------
             -------------
 138          void TxPacket(uchar *TxRxBuf)
 139          {
 140   1              uchar i;
 141   1              //Config905();
 142   1              CSN=0;
 143   1              SpiWrite(WTP);                          // Write payload command
 144   1              for (i=0;i<4;i++)
 145   1              {
 146   2                      SpiWrite(TxRxBuf[i]);           // Write 32 bytes Tx data
 147   2              }
 148   1              CSN=1;
 149   1              nrf905_Delay(1);                                                // Spi disable
 150   1              CSN=0;                                          // Spi enable for write a spi command
 151   1              SpiWrite(WTA);                          // Write address command
 152   1              for (i=0;i<4;i++)                       // 写入与对方地址一样的地址
 153   1              {
 154   2                      SpiWrite(TxAddress[i]);
 155   2              }
 156   1              CSN=1;                                          // Spi disable
 157   1              TRX_CE=1;                                       // Set TRX_CE high,start Tx data transmission
 158   1              nrf905_Delay(1);                                        // while (DR!=1);
 159   1              TRX_CE=0;                                       // Set TRX_CE low
 160   1      }
 161          //----------------------------------------------设置发送初始状态------------------------------------------
             ----
 162          void SetTxMode(void)
 163          {
C51 COMPILER V7.00  FASONG                                                                 06/13/2011 19:08:41 PAGE 4   

 164   1              TRX_CE=0;
 165   1              TXEN=1;
 166   1              nrf905_Delay(1);                                        // nrf905_Delay for mode change(>=650us)
 167   1      }
 168          //-----------------------------------------------设置接收初始化-------------------------------------------
             ---------
 169          void SetRxMode(void)
 170          {
 171   1              TXEN=0;
 172   1              TRX_CE=1;
 173   1              nrf905_Delay(1);                                        // nrf905_Delay for mode change(>=650us)
 174   1      }
 175          //-------------------------------------------------判断数据接收状态---------------------------------------
             ---------------
 176          unsigned char CheckDR(void)             //检查是否有新数据传入 Data Ready
 177          {
 178   1              DR=1;      
 179   1      //通过对端口写1,可以使端口为输入状态,这51的 特性。不熟悉者可以参阅51相关书籍作证(将DR端口设置为输入状态

⌨️ 快捷键说明

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