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

📄 tag.lst

📁 用C语言开发环境编写的nRF2401无线通信程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V8.02   TAG                                                                   08/12/2008 00:06:05 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE TAG
OBJECT MODULE PLACED IN tag.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil\C51\BIN\C51.EXE tag.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*---------------------------------------------------------
   2          标签的防碰撞的初步程序
   3          ---------------------------------------------------------*/
   4          #include<stdio.h>
   5          #include<c8051f020.h>
   6          
   7          #define BYTE_BIT0  0X01
   8          #define BYTE_BIT1  0X02
   9          #define BYTE_BIT2  0X04
  10          #define BYTE_BIT3  0X08
  11          #define BYTE_BIT4  0X10
  12          #define BYTE_BIT5  0X20
  13          #define BYTE_BIT6  0X40
  14          #define BYTE_BIT7  0X80
  15          sbit CLK1  =P0^2;
  16          sbit DATA=P0^3;   
  17          
  18          #define LED_ON 0xE3   
  19          #define LED_OFF 0X1c
  20          #define PWR_UP1 0X10
  21          #define PWR_UP0 0XEF
  22          #define CS0 0XF7
  23          #define CS1 0X08
  24          #define CE1 0X04
  25          #define CE0 0XFB
  26          #define DR1 0X02    //0000 0010
  27          #define DR0 0XFD        //1111 1101
  28          
  29          #define TEST_2 0x8E //MSB D143~D136
  30          #define TEST_1 0x08 // D135~D128
  31          #define TEST_0 0x1C // D127~D120
  32          #define DATA2_W 0x10 //0x10=2 字节 //频道2 发送/接收数据长度(单位:Bit)
  33          #define DATA1_W 0x80 //0x80=16字节 //频道1 发送/接收数据长度(单位:Bit)
  34          #define ADDR2_4 0x00
  35          #define ADDR2_3 0x1c
  36          #define ADDR2_2 0xcc
  37          #define ADDR2_1 0xcc
  38          #define ADDR2_0 0xcc
  39          //频道1 接收地址 (当前模块地址) <- 只使用到频道1
  40          #define ADDR1_4 0x00
  41          #define ADDR1_3 0xcc
  42          #define ADDR1_2 0xcc
  43          #define ADDR1_1 0xcc
  44          #define ADDR1_0 0xcc
  45          #define ADDR_W 0x10  //0x10=2字节 //发送/接收地址宽度(单位:Bit)
  46          #define CRC_L 0x1 //CRC模式 0:8位 1:16位
  47          #define CRC_EN 0x1 //CRC校验 0:禁用 1:启用
  48          #define RX2_EN 0x0  //双频道功能 0:禁用 1:启用
  49          #define CM 0x1 //0:Direct mode 1:ShockBurst mode
  50          #define RFDR_SB 0x0 //传输速率 0:250kbps 1:1Mbps (250kbps比1Mbps传输距离更远)
  51          #define XO_F 0x3 //16M //nRF2401晶振频率
  52          #define RF_PWR 0x3 //信号发射功率
  53          #define RF_CH 0x2  //Channel RF 频率设置
  54          //Channel = 2400MHz + RF_CH * 1.0MHz
  55          #define RXEN 0x1 //0:Tx 1:Rx   阅读器最先处于发送状态;
C51 COMPILER V8.02   TAG                                                                   08/12/2008 00:06:05 PAGE 2   

  56          //<将设置信息组合成每个字节的数据信息,此区域无需修改>
  57          #define RFConfig_Bit0 TEST_2
  58          #define RFConfig_Bit1 TEST_1
  59          #define RFConfig_Bit2 TEST_0
  60          #define RFConfig_Bit3 DATA2_W
  61          #define RFConfig_Bit4 DATA1_W
  62          #define RFConfig_Bit5 ADDR2_4
  63          #define RFConfig_Bit6 ADDR2_3
  64          #define RFConfig_Bit7 ADDR2_2
  65          #define RFConfig_Bit8 ADDR2_1
  66          #define RFConfig_Bit9 ADDR2_0
  67          #define RFConfig_Bit10 ADDR1_4
  68          #define RFConfig_Bit11 ADDR1_3
  69          #define RFConfig_Bit12 ADDR1_2
  70          #define RFConfig_Bit13 ADDR1_1
  71          #define RFConfig_Bit14 ADDR1_0
  72          #define RFConfig_Bit15 (ADDR_W<<2 | CRC_L<<1 | CRC_EN)
  73          #define RFConfig_Bit16 (RX2_EN<<7 | CM<<6 | RFDR_SB<<5 | XO_F <<2 | RF_PWR)
  74          #define RFConfig_Bit17 (RF_CH<<1 | RXEN)
  75          //通过宏定义将18字节的寄存器参数按照各个功能分解,以便于参数的调整
  76          unsigned char code nRF2401_Conf[18] ={
  77                                                                                          RFConfig_Bit0, RFConfig_Bit1, RFConfig_Bit2, RFConfig_Bit3, RFConfig_Bit4,
  78                                                                                          RFConfig_Bit5, RFConfig_Bit6, RFConfig_Bit7, RFConfig_Bit8, RFConfig_Bit9,
  79                                                                                          RFConfig_Bit10, RFConfig_Bit11, RFConfig_Bit12, RFConfig_Bit13, RFConfig_Bit14,
  80                                                                                          RFConfig_Bit15, RFConfig_Bit16, RFConfig_Bit17
  81                                                                                   };
  82          bdata unsigned char DATA_BUF;      //用于ByteRead 和 ByteWrite函数
  83          unsigned char Manchesterbuf[16];
  84          #define DATA7 ((DATA_BUF&BYTE_BIT7) != 0)  //判断数据的最高位是否为1
  85          #define DATA0 ((DATA_BUF&BYTE_BIT0) != 0)  //判断数据的最低位是否为1
  86          #define SYSCLK  11059200                           //系统时钟  
  87          #define BAUDRATE  9600                                     //系统波特率
  88          //??¨?3?¨?¨???o?¨?y
  89          void Delay100(void)
  90          {
  91   1              unsigned int i;
  92   1              for(i=0;i<100;i++);
  93   1      }
  94          
  95          void Delay(void)
  96          {
  97   1              unsigned int i;
  98   1              for(i=0;i<10;i++);
  99   1      }
 100          
 101          //系统设置
 102          void SYSCLK_Init(void)
 103          {
 104   1        int i;
 105   1       OSCXCN=0x67;                   //设置系统时钟
 106   1       for(i=0;i<256;i++);
 107   1       while(!(OSCXCN&0x80));    //等待外部时钟稳定
 108   1       OSCICN=0x88;  
 109   1       XBR0=0X04;                //设置串口引脚
 110   1       XBR2=0X40;                       //交叉IO口使能
 111   1       P6=P6&LED_ON;              //LED灯亮
 112   1       Delay100();
 113   1       Delay100();
 114   1       P6=P6|LED_OFF;             //LED灯灭
 115   1      }
 116          //串口初始化函数
 117          void UART0_Init(void)
C51 COMPILER V8.02   TAG                                                                   08/12/2008 00:06:05 PAGE 3   

 118          {
 119   1        SCON0=0X50;                   //方式1,8位UART,允许接收                                      
 120   1        TMOD=0X20;                    //定时器1,模式2,8位重装载                            
 121   1        TH1=-(SYSCLK/BAUDRATE/16);    //根据波特率设置定时器1的重载值;
 122   1        TR1=1;                                                //启动定时器1; 
 123   1        CKCON|=0X10;                              //定时器1使用SYSCLK为时基;
 124   1        PCON|=0X80;                                   //SMOD00=1; 
 125   1      }
 126          
 127          //写每一位的数据。
 128          void ByteWrite(unsigned char send)
 129          {
 130   1              unsigned char i;
 131   1              DATA_BUF=send;
 132   1              for (i=0;i<8;i++)
 133   1                      {
 134   2                          CLK1=0;
 135   2                              if (DATA7) //总是发送最高位
 136   2                              {
 137   3                                       DATA=1;
 138   3                               }
 139   2                              else
 140   2                              {
 141   3                                   DATA=0;
 142   3                              }
 143   2                              Delay();
 144   2                              CLK1=1;//       CLK1=1; 0000 0001 P4^0;
 145   2                              Delay();
 146   2                  CLK1=0;     
 147   2                              DATA_BUF=DATA_BUF<<1;
 148   2                      }
 149   1      }
 150          // <2401配置寄存器的写入方式>
 151          void Config2401(void)
 152          {
 153   1        unsigned int i;
 154   1        unsigned char variablel;
 155   1        P4=P4&CS0;       // P4=P4&0XF7;//CS=0;  1111 0111 P4.3;
 156   1        P4=P4&CE0;       //P4=P4&0XFB;//CE=0;  1111 1101 P4.2
 157   1        CLK1=0;
 158   1      
 159   1        P4=P4|PWR_UP1;   //P4=P4|0X10;//PWR_UP=1; P4.4 0001 0000
 160   1              for(i=0;i<10;i++)
 161   1                Delay100();
 162   1       //从上电到进入配置模式需要3ms的延时             
 163   1        P4=P4|CS1;          //使RF2401进入配置方式
 164   1           Delay100();
 165   1              for(i=3;i<18;i++)
 166   1              {
 167   2                      variablel=nRF2401_Conf[i];
 168   2                      ByteWrite(variablel);
 169   2              }
 170   1          Delay100();
 171   1          P4=P4&CS0;      //CS置低使配置有效
 172   1          Delay100();
 173   1      }
 174          
 175          //读每一位的数据;
 176          unsigned char ByteRead(void)
 177          {
 178   1       unsigned char i;
 179   1              for (i=0;i<8;i++)
C51 COMPILER V8.02   TAG                                                                   08/12/2008 00:06:05 PAGE 4   

 180   1              {
 181   2                      DATA_BUF=DATA_BUF<<1;
 182   2                      CLK1=1;   //P4=P4|0X01;  //     CLK1=1;  0000 0001
 183   2                      DATA=1; //设置为输入状态
 184   2                      if (DATA)  //读取最高位,保存至最末尾,通过左移位完成整个字节 
 185   2                              {
 186   3                              DATA_BUF|=BYTE_BIT0;
 187   3                              }
 188   2                      else
 189   2                              {
 190   3                              DATA_BUF&=~BYTE_BIT0;
 191   3                              }
 192   2                      CLK1=0;//P4=P4&0XFE;  //                 1111 1110
 193   2                        Delay100();
 194   2              }
 195   1      return DATA_BUF;
 196   1      }
 197          
 198          //将读出的数据存储在RxBuf;
 199          void nrf2401_Rxpack(unsigned char *RxBuf,unsigned int *x)
 200          {
 201   1        unsigned int i;
 202   1        *x=0;
 203   1        for(i=0;i<DATA1_W/8;i++)
 204   1          {
 205   2                *RxBuf=ByteRead();
 206   2                RxBuf++;
 207   2                *x=*x+1;
 208   2              }
 209   1      }
 210          
 211          void SetTxMode(void)
 212          {
 213   1              P4=P4|PWR_UP1;    //PWR_UP=1; 4.4  0001 0000
 214   1              P4=P4&CE0;        //CE=0; 4.2       1111 1011
 215   1              P4=P4|CS1;        //CS=1;4.3 0000 1000;
 216   1      
 217   1              CLK1=0;
 218   1              DATA =0;        

⌨️ 快捷键说明

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