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

📄 reader.lst

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


C51 COMPILER V8.02, COMPILATION OF MODULE READER
OBJECT MODULE PLACED IN reader.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil\C51\BIN\C51.EXE reader.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          
  16          sbit CLK1  =P0^2;           
  17          sbit DATA=P0^3;         
  18          
  19          #define LED_ON 0xE3      
  20          #define LED_OFF 0X1c    
  21          #define PWR_UP1 0X10    
  22          #define PWR_UP0 0XEF    
  23          #define CS0 0XF7        //P4.3 1111 0111
  24          #define CS1 0X08            //P4.3 0000 1000
  25          #define CE1 0X04                //P4.2 0000 0100
  26          #define CE0 0XFB                //P4.2 1111 1011
  27          #define DR1 0X02        //P4.1 0000 0010
  28          #define DR0 0XFD            //P4.1 1111 1101
  29          
  30          #define TEST_2 0x8E //MSB D143~D136
  31          #define TEST_1 0x08 // D135~D128
  32          #define TEST_0 0x1C // D127~D120
  33          #define DATA2_W 0x10 //0x10=2 字节 //频道2 发送/接收数据长度(单位:Bit)
  34          #define DATA1_W 0x80 //0x80=16字节 //频道1 发送/接收数据长度(单位:Bit)
  35          #define ADDR2_4 0x00  
  36          #define ADDR2_3 0x1c
  37          #define ADDR2_2 0xcc
  38          #define ADDR2_1 0xcc
  39          #define ADDR2_0 0xcc
  40          //频道1 接收地址 (当前模块地址) <- 只使用到频道1
  41          #define ADDR1_4 0x00
  42          #define ADDR1_3 0xcc
  43          #define ADDR1_2 0xcc
  44          #define ADDR1_1 0xcc
  45          #define ADDR1_0 0xcc
  46          
  47          #define ADDR_W 0x10        //0x10=2字节 //发送/接收地址宽度(单位:Bit)
  48          #define CRC_L 0x1         //CRC模式 0:8位 1:16位
  49          #define CRC_EN 0x1        //CRC校验 0:禁用 1:启用
  50          #define RX2_EN 0x0        //双频道功能 0:禁用 1:启用
  51          #define CM 0x1            //0:Direct mode 1:ShockBurst mode
  52          #define RFDR_SB 0x0       //传输速率 0:250kbps 1:1Mbps (250kbps比1Mbps传输距离更远)
  53          #define XO_F 0x3          //16M //nRF2401晶振频率
  54          #define RF_PWR 0x3        //信号发射功率
  55          #define RF_CH 0x2         //Channel RF 频率设置
C51 COMPILER V8.02   READER                                                                08/12/2008 00:06:09 PAGE 2   

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

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

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

⌨️ 快捷键说明

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