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

📄 fasong.lst

📁 nRF905发送程序 波特率可以调节
💻 LST
字号:
C51 COMPILER V8.08   FASONG                                                                03/28/2008 09:46:20 PAGE 1   


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

line level    source

   1          //#pragma src
   2          #include <REGX52.h>
   3          #include <stdio.h>
   4          #include <absacc.h>
   5          #include <intrins.h>
   6          /*---------------------*/
   7          //#include <nrf905.h>
   8          //#include "hotins.h"
   9          /*---------------------*/
  10          #pragma NOAREGS
  11          
  12          void MainInit(void);//系统初始化
  13          void SystemInit(void);//系统初始化
  14          void SystemSetup(void);//系统设置
  15          void SystemIoInit(void);//系统接口初始化
  16          void TimeInit(void);//定时器定时参数设置
  17          void UserSetup(void);//用户运行环境设置
  18          void ClrWdt(void);//喂狗
  19          void BeepSetup(unsigned char mode);//蜂鸣器发声模式设置
  20          void Beep(void);//蜂鸣器发声驱动
  21          void KeyInit(void);//键盘初始化
  22          void KeyCommandExec(unsigned char commgroup, unsigned char commnum);//执行键盘命令
  23          
  24          void Key00(void);//压键事件
  25          void Key01(void);
  26          void Key02(void);
  27          void Key03(void);
  28          
  29          void Key10(void);//放键事件
  30          void Key11(void);
  31          void Key12(void);
  32          void Key13(void);
  33          
  34          void Key20(void);//长键事件
  35          void Key21(void);
  36          void Key22(void);
  37          void Key23(void);
  38          
  39          /*-----------------------------------------------
  40            nrf905库函数定义
  41          ------------------------------------------------*/
  42          unsigned char SpiReadWrite(unsigned char);
  43          void WriteTXBuffer(const unsigned char[]);
  44          unsigned char ReadStatus(void);
  45          void nRFPowerUP(void);
  46          void nRFInit(void);//无线模块初始化
  47          unsigned char VerifynRFConfig(void);//校验配置nRF905
  48          void WritenRFConfig(unsigned char[]);//写配置nRF905
  49          void ReadnRFConfig(unsigned char[]);//读配置nRF905
  50          void FastWritenRFConfig(unsigned char);//快速配置nRF905
  51          void SetTxMode(void);//设置发送模式
  52          void SetRxMode(void);//设置接收模式
  53          void StartTx(void);//开始发送
  54          void nRFReadWrite(void);//无线收发模块
  55          
C51 COMPILER V8.08   FASONG                                                                03/28/2008 09:46:20 PAGE 2   

  56          
  57          //data SystemData SystemBuffers;//申请系统数据结构
  58          //idata SioData SioBuffers;//申请系统数据结构
  59          
  60          /*------------------------------------------------
  61            SPI读写一体化函数SpiReadWrite()
  62          入口参数:
  63            val  写入命令或数据
  64          出口参数:
  65            R7   读出数据
  66          ------------------------------------------------*/
  67          unsigned char SpiReadWrite(unsigned char val) using 0
  68          {
  69   1      unsigned char i;
  70   1        ACC = val;
  71   1        for (i = 8; i > 0; i --)
  72   1        {
  73   2        CY = MISO;//取数据SO
*** ERROR C202 IN LINE 73 OF FASONG.C: 'MISO': undefined identifier
  74   2          _rlca_();//存数据ACC.0读数据ACC.7同时进行,acc循环左移,acc.7移入cy(出),cy(入)移到acc.0
  75   2       MOSI = CY;//送数据SI
  76   2       SCK = 1;//上升沿打入数据
  77   2          _nop_();
  78   2       SCK  = 0;//下降沿读入数据(首次为假动作)
  79   2        }
  80   1        return ACC;
  81   1      }
  82          
  83          /*------------------------------------------------
  84            写入nRF905发送数据函数WriteTXBuffer()
  85          入口参数:
  86            buffer 发送数据包
  87          出口参数:
  88            无
  89          ------------------------------------------------*/
  90          void WriteTXBuffer(const unsigned char buffer[]) using 0
  91          {
  92   1      unsigned char i;
  93   1        TRX_CE = 0;//设置nRF905为待机方式
  94   1        _nop_();
  95   1        CSN=0;//打开SPI 
  96   1        SpiReadWrite(WTA);//写发送地址
  97   1        for (i = 0; i < 4; i++)
  98   1        {
  99   2       SpiReadWrite(buffer[i]);  // Write 32 bytes Tx data
 100   2        }
 101   1        CSN=1;//关闭SPI
 102   1        _nop_();
 103   1        CSN=0;// Spi enable for write a spi command 
 104   1        SpiReadWrite(WTP);    // Write payload command
 105   1        for (i = 0; i < 32; i++)
 106   1        {
 107   2       SpiReadWrite(buffer[i]);  // Write 32 bytes Tx data
 108   2        }
 109   1        CSN=1;// Spi disable
 110   1        TRX_CE = !TX_EN;//
 111   1      }
 112          
 113          void FastWritenRFConfig(unsigned char low_ch_no) using 0
 114          {
 115   1        TRX_CE = 0;//设置nRF905为待机方式
 116   1        _nop_();
C51 COMPILER V8.08   FASONG                                                                03/28/2008 09:46:20 PAGE 3   

 117   1        CSN=0;//打开SPI 
 118   1        SpiReadWrite(CC PA_PWR_10dBm HFREQ_PLL_433MHz CH_NO_BIT8);
 119   1        SpiReadWrite(low_ch_no);//CH_NO
 120   1        CSN=1;// Spi disable
 121   1        TRX_CE = !TX_EN;//
 122   1      }
 123          
 124          void StartTx(void) using 0
 125          {
 126   1        _nop_();
 127   1        _nop_();
 128   1        _nop_();
 129   1        TRX_CE=1;     // Set TRX_CE high,start Tx data transmission
 130   1        _nop_();
 131   1        _nop_();
 132   1        _nop_();
 133   1        _nop_();
 134   1        _nop_();
 135   1        _nop_();
 136   1        _nop_();
 137   1        _nop_();
 138   1        _nop_();
 139   1        _nop_();
 140   1        TRX_CE=0;     // Set TRX_CE low
 141   1      }
 142          
 143          /*------------------------------------------------
 144            读入nRF905状态函数ReadStatus()
 145          入口参数:
 146            无
 147          出口参数:
 148            nRF905状态字
 149          ------------------------------------------------*/
 150          unsigned char ReadStatus(void) using 0
 151          {
 152   1      unsigned char val;
 153   1        CSN = 0;//打开SPI
 154   1        val = SpiReadWrite(RC);//读状态
 155   1        CSN = 1;//关闭SPI
 156   1        return val;//返回nRF905状态字
 157   1      }
 158          
 159          void nRFPowerUP(void) using 0
 160          {
 161   1        CSN    = 1;//关闭SPI
 162   1        SCK    = 0;//拉低时钟
 163   1        DR     = 1;//设置DR为输入方式
 164   1        AM     = 1;//设置AM为输入方式
 165   1        PWR_UP = 1;// nRF905上电
 166   1        TRX_CE = 0;//设置nRF905为待机方式
 167   1        TX_EN  = 0;//设置接收方式 
 168   1      }
 169          
 170          
 171          void main(void)
 172          {
 173   1      //  ReadnRFConfig(SystemBuffers.nRFTxBuff);
 174   1      
 175   1        MainInit();//系统初始化
 176   1        while (1) {//主循环
 177   2          IE   = 0xb2;//保证中断可靠EA,ET2,ES,ET0
 178   2          TCON = 0x55;//保证定时器开
C51 COMPILER V8.08   FASONG                                                                03/28/2008 09:46:20 PAGE 4   

 179   2          PCON = SMOD_ + GF0_ + IDL_;//进入空闲状态并喂软件狗
 180   2          _nop_();
 181   2          _nop_();
 182   2        }
 183   1      }
 184          
 185          void MainInit(void) using 0//系统初始化
 186          {
 187   1        _start_();
 188   1        ClrWdt();//清除看门狗计数器
 189   1        SystemIoInit();//系统接口初始化
 190   1        SystemInit();//系统上电初始化
 191   1        SystemSetup();//系统运行环境设置
 192   1        UserSetup();//用户运行环境设置
 193   1      }
 194          
 195          void SystemInit(void) using 0//系统初始化
 196          {
 197   1      unsigned char i;
 198   1        for (i = 0; i < 32; i ++) {
 199   2          SioBuffers.SioTxBuff[i] = 0;
 200   2          SioBuffers.SioRxBuff[i] = 0;
 201   2        }
 202   1        if (SystemBuffers.RamTest != 0x55aa) {//内存初始化
 203   2          for (i = 0; i < 32; i ++) {
 204   3            SystemBuffers.nRFTxBuff[i] = 0;
 205   3            SystemBuffers.nRFRxBuff[i] = 0;
 206   3          }
 207   2          SystemBuffers.nRFRxBuff[0] = RX_ADDRESS_0;//本机地址
 208   2          SystemBuffers.nRFRxBuff[1] = RX_ADDRESS_1;
 209   2          SystemBuffers.nRFRxBuff[2] = RX_ADDRESS_2;
 210   2          SystemBuffers.nRFRxBuff[3] = RX_ADDRESS_3;
 211   2          SystemBuffers.nRFRxBuff[8] = CH_NO_BYTE;
 212   2          SystemBuffers.nRFTxBuff[8] = CH_NO_BYTE;
 213   2          SystemBuffers.RamTest = 0x55aa;
 214   2        }
 215   1        else {
 216   2        }
 217   1      }
 218          
 219          void SystemSetup(void) using 0//系统设置
 220          {
 221   1        TimeInit();
 222   1        IP = 0x05;//中断优先级EX0>EX1>ET0>ET1
 223   1        SystemBuffers.TestTime = 0;
 224   1        SystemBuffers.WaitTime = 0;
 225   1      }
 226          
 227          void TimeInit() using 0
 228          {
 229   1      //  TCON = 0x55;//启动定时器
 230   1      /*----------------------------------
 231   1            定时器0定时参数设置
 232   1      ----------------------------------*/
 233   1        TL0 = 0;
 234   1        TH0 = 0;
 235   1        TR0 = 1;//启动定时器0
 236   1      /*----------------------------------
 237   1            定时器1定时参数设置
 238   1      ----------------------------------*/
 239   1        TMOD = 0x20;    //timer1 working mode 1
 240   1        TL1 = 0xfd;     //f7=9600 for 16mhz Fosc,and ... 
C51 COMPILER V8.08   FASONG                                                                03/28/2008 09:46:20 PAGE 5   

 241   1        TH1 = 0xfd;     //...fd=19200 for 11.0592mhz Fosc
 242   1        SCON = 0xd8;    //uart mode 3,ren==1
 243   1        PCON = 0x80;
 244   1        SioBuffers.SioTXCount = 0;//无发送数据
 245   1        SioBuffers.SioRXCount = 32;//允许接收串口数据
 246   1        TR1 = 1;//启动定时器1
 247   1      /*----------------------------------
 248   1            定时器2定时参数设置
 249   1      ----------------------------------*/
 250   1        TIMEER2 = T2_5mS;
 251   1        RCAP    = T2_5mS;
 252   1        TR2     = 1;//启动定时器2
 253   1      }
 254          
 255          void nRFInit(void) using 0//无线模块初始化
 256          {
 257   1        do{
 258   2          WritenRFConfig(SystemBuffers.nRFRxBuff);//配置nRF905
 259   2        }
 260   1        while(VerifynRFConfig());
 261   1        SetRxMode();//设置接收模式
 262   1        SystemBuffers.nRFTxCount = 0;//清空无线发送数据缓冲区
 263   1        SystemBuffers.nRFRxCount = 0;//清空无线接收数据缓冲区
 264   1      }
 265          
 266          void ReadnRFConfig(unsigned char rxaddr[]) using 0//读配置nRF905
 267          {
 268   1      unsigned char i;
 269   1        TRX_CE = 0;//设置nRF905为待机方式
 270   1        _nop_();
 271   1        CSN = 0;// Spi enable for write a spi command
 272   1        SpiReadWrite(RC);    // Read config command
 273   1        for (i = 10; i < 20; i ++) rxaddr[i] = SpiReadWrite(0xff);
 274   1        CSN = 1;// Disable Spi
 275   1        TRX_CE = !TX_EN;//
 276   1      }
 277          
 278          void WritenRFConfig(unsigned char rxaddr[]) using 0//配置nRF905
 279          {
 280   1        TRX_CE = 0;//设置nRF905为待机方式
 281   1        _nop_();
 282   1        CSN = 0;// Spi enable for write a spi command
 283   1        SpiReadWrite(WC);    // Write config command
 284   1        SpiReadWrite(rxaddr[8]);     //中心频率低8位
 285   1        SpiReadWrite(PA_PWR_10dBm HFREQ_PLL_433MHz); //发射+10dBm,发射频率433MHz,中心频率第9位=0
 286   1        SpiReadWrite(TX_AFW_4BYTE RX_AFW_4BYTE);     //接收地址宽度4字节,发送地址宽度4字节
 287   1        SpiReadWrite(RX_PW_32BYTE);  //接收数据宽度32字节
 288   1        SpiReadWrite(TX_PW_32BYTE);  //发送数据宽度32字节
 289   1        SpiReadWrite(rxaddr[0]);     //接收有效地址第1字节
 290   1        SpiReadWrite(rxaddr[1]);     //接收有效地址第2字节
 291   1        SpiReadWrite(rxaddr[2]);     //接收有效地址第3字节
 292   1        SpiReadWrite(rxaddr[3]);     //接收有效地址第4字节
 293   1        SpiReadWrite(CRC16_EN XOF_16MHz);      //CRC16模式使能,晶体振荡器频率16MHz
 294   1        CSN = 1;// Disable Spi
 295   1        TRX_CE = !TX_EN;//
 296   1      }
 297          
 298          unsigned char VerifynRFConfig(void) using 0//校验配置nRF905
 299          {
 300   1      unsigned char error = 0;
 301   1        TRX_CE = 0;//设置nRF905为待机方式
 302   1        _nop_();
C51 COMPILER V8.08   FASONG                                                                03/28/2008 09:46:20 PAGE 6   

 303   1        CSN = 0;// Spi enable for write a spi command
 304   1        SpiReadWrite(RC);    // Read config command
 305   1        SpiReadWrite(0xff);     //中心频率低8位
 306   1        if (SpiReadWrite(0xff) != (PA_PWR_10dBm HFREQ_PLL_433MHz)) error ++; //发射+10dBm,发射频率433MHz,中心频

⌨️ 快捷键说明

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