久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1646|回復: 4
打印 上一主題 下一主題
收起左側

關于CC1101遙控距離程序調試問題 附單片機程序

[復制鏈接]
跳轉到指定樓層
樓主
ID:421668 發表于 2022-3-23 09:17 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
如題,我用了兩個CC1101模塊做收發遙控,然后發射功率我設置到了最大,可是空曠距離很不理想。我看手冊上說怎么也得200米,可是我的只有二三十米的樣子,論壇的友友們,幫忙指點一下我的程序看看是不是哪里還是設置的不對啊。CC1101我買的現成模塊,硬件電路應該沒有問題。我也懷疑問題出在我的程序里面。
單片機程序如下:
  1. #include <reg52.h>
  2. #include <intrins.h>
  3. #define                INT8U                unsigned char
  4. #define                uchar                unsigned char

  5. #define                INT16U                unsigned int
  6. #define                uint                unsigned int

  7. sfr P3M1=0xb1;
  8. sfr P3M0=0xb2;


  9. sfr P2M1=0x95;
  10. sfr P2M0=0x96;

  11. sfr P1M1=0x91;
  12. sfr P1M0=0x92;

  13. #define ID_ADDR_ROM 0x1ff9
  14. #define ID_ADDR_RAM 0xf1

  15. #define BAUD 0XFD00   //9600bps @11.0592Mhz

  16. sfr IAP_DATA=0xc2;
  17. sfr IAP_ADDRH=0xc3;
  18. sfr IAP_ADDRL=0xc4;
  19. sfr IAP_CMD=0xc5;
  20. sfr IAP_TRIG=0xc6;
  21. sfr IAP_CONTR=0xc7;

  22. #define ENABLE_IAP                         0x82
  23. #define IAP_ADDRESS                         0x0000//前512字節
  24. #define IAP_ADDRESS2                         0x0200//后512字節

  25. #define CMD_IDLE                                 0
  26. #define CMD_READ                                1
  27. #define CMD_PROGRAM                 2
  28. #define CMD_ERASE                         3

  29. INT8U id[7]={0},flag_study=0;

  30. #define HEAD_LEN                         6


  31. #define         WRITE_BURST             0x40                                                //連續寫入
  32. #define         READ_SINGLE             0x80                                                //讀
  33. #define         READ_BURST              0xC0                                                //連續讀
  34. #define         BYTES_IN_RXFIFO     0x7F                                                  //接收緩沖區的有效字節數
  35. #define         CRC_OK              0x80                                                 //CRC校驗通過位標志

  36. //*****************************************************************************************

  37. //sbit         GDO0        =P3^3;
  38. //sbit         GDO2        =P3^2;
  39. //sbit        MISO        =P1^4;
  40. //sbit        MOSI        =P1^3;
  41. //sbit        SCK                =P1^5;
  42. //sbit        CSN                =P2^6;
  43. sbit         GDO0        =P2^7;
  44. sbit         GDO2        =P3^2;
  45. sbit        MISO        =P1^4;
  46. sbit        MOSI        =P1^3;
  47. sbit        SCK                =P1^5;
  48. sbit        CSN                =P1^0;
  49. sbit        CSN2                =P1^0;

  50. //*****************************************************************************************
  51. //sbit    KEY_start    =P2^2;         //對應KEY2 啟動按鍵
  52. //sbit    KEY_stop    =P2^0;//對應KEY0 停止按鍵
  53. //sbit    KEY_up    =P2^1;  //對應KEY1 上升按鍵
  54. //sbit    KEY_down    =P2^3;//對應KEY3 下降按鍵

  55. //sbit    KEY_left    =P3^6;//對應KEY6 按鍵  外部中斷2
  56. //sbit    KEY_right    =P3^7;//對應KEY5 按鍵  外部中斷3
  57. //sbit    key4      =        P2^4;
  58. //sbit    key5      =        P3^7;
  59. //sbit    key6      =        P3^6;
  60. //sbit    key7      =        P3^5;


  61. sbit    KEY0    =P2^0;//停止
  62. sbit    KEY1    =P2^1;//上升
  63. sbit    KEY2    =P2^2;//啟動
  64. sbit    KEY3    =P2^3;//下降



  65. //*****************************************************************************************
  66. sbit        led1=P2^5;           //指示燈LED1,低電平時亮,高電平時暗  紅燈
  67. sbit        led2=P2^4;           //指示燈LED1,低電平時亮,高電平時暗 綠燈
  68. unsigned char key_up=1,key_down;
  69. unsigned char num;
  70. //***************更多功率參數設置可詳細參考DATACC1100英文文檔中第48-49頁的參數表************
  71. //INT8U PaTabel[8] = {0x04 ,0x04 ,0x04 ,0x04 ,0x04 ,0x04 ,0x04 ,0x04};  //-30dBm   功率最小
  72. //INT8U PaTabel[8] = {0x60 ,0x60 ,0x60 ,0x60 ,0x60 ,0x60 ,0x60 ,0x60};  //0dBm
  73. INT8U PaTabel[8] = {0xC0 ,0xC0 ,0xC0 ,0xC0 ,0xC0 ,0xC0 ,0xC0 ,0xC0};   //10dBm     功率最大
  74. //INT8U PaTabel[8] = {0xC0 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00 ,0x00};   //10dBm     功率最大
  75. //*****************************************************************************************
  76. void SpiInit(void);
  77. void CpuInit(void);
  78. void RESET_CC1100(void);
  79. void POWER_UP_RESET_CC1100(void);
  80. void halSpiWriteReg(INT8U addr, INT8U value);
  81. void halSpiWriteBurstReg(INT8U addr, INT8U *buffer, INT8U count);
  82. void halSpiStrobe(INT8U strobe);
  83. INT8U halSpiReadReg(INT8U addr);
  84. void halSpiReadBurstReg(INT8U addr, INT8U *buffer, INT8U count);
  85. INT8U halSpiReadStatus(INT8U addr);
  86. void halRfWriteRfSettings(void);
  87. void halRfSendPacket(INT8U *txBuffer, INT8U size);
  88. INT8U halRfReceivePacket(INT8U *rxBuffer, INT8U *length);  
  89. //*****************************************************************************************
  90. // CC1100 STROBE, CONTROL AND STATUS REGSITER
  91. #define CCxxx0_IOCFG2       0x00        // GDO2 output pin configuration
  92. #define CCxxx0_IOCFG1       0x01        // GDO1 output pin configuration
  93. #define CCxxx0_IOCFG0       0x02        // GDO0 output pin configuration
  94. #define CCxxx0_FIFOTHR      0x03        // RX FIFO and TX FIFO thresholds
  95. #define CCxxx0_SYNC1        0x04        // Sync word, high INT8U
  96. #define CCxxx0_SYNC0        0x05        // Sync word, low INT8U
  97. #define CCxxx0_PKTLEN       0x06        // Packet length
  98. #define CCxxx0_PKTCTRL1     0x07        // Packet automation control
  99. #define CCxxx0_PKTCTRL0     0x08        // Packet automation control
  100. #define CCxxx0_ADDR         0x09        // Device address
  101. #define CCxxx0_CHANNR       0x0A        // Channel number
  102. #define CCxxx0_FSCTRL1      0x0B        // Frequency synthesizer control
  103. #define CCxxx0_FSCTRL0      0x0C        // Frequency synthesizer control
  104. #define CCxxx0_FREQ2        0x0D        // Frequency control word, high INT8U
  105. #define CCxxx0_FREQ1        0x0E        // Frequency control word, middle INT8U
  106. #define CCxxx0_FREQ0        0x0F        // Frequency control word, low INT8U
  107. #define CCxxx0_MDMCFG4      0x10        // Modem configuration
  108. #define CCxxx0_MDMCFG3      0x11        // Modem configuration
  109. #define CCxxx0_MDMCFG2      0x12        // Modem configuration
  110. #define CCxxx0_MDMCFG1      0x13        // Modem configuration
  111. #define CCxxx0_MDMCFG0      0x14        // Modem configuration
  112. #define CCxxx0_DEVIATN      0x15        // Modem deviation setting
  113. #define CCxxx0_MCSM2        0x16        // Main Radio Control State Machine configuration
  114. #define CCxxx0_MCSM1        0x17        // Main Radio Control State Machine configuration
  115. #define CCxxx0_MCSM0        0x18        // Main Radio Control State Machine configuration
  116. #define CCxxx0_FOCCFG       0x19        // Frequency Offset Compensation configuration
  117. #define CCxxx0_BSCFG        0x1A        // Bit Synchronization configuration
  118. #define CCxxx0_AGCCTRL2     0x1B        // AGC control
  119. #define CCxxx0_AGCCTRL1     0x1C        // AGC control
  120. #define CCxxx0_AGCCTRL0     0x1D        // AGC control
  121. #define CCxxx0_WOREVT1      0x1E        // High INT8U Event 0 timeout
  122. #define CCxxx0_WOREVT0      0x1F        // Low INT8U Event 0 timeout
  123. #define CCxxx0_WORCTRL      0x20        // Wake On Radio control
  124. #define CCxxx0_FREND1       0x21        // Front end RX configuration
  125. #define CCxxx0_FREND0       0x22        // Front end TX configuration
  126. #define CCxxx0_FSCAL3       0x23        // Frequency synthesizer calibration
  127. #define CCxxx0_FSCAL2       0x24        // Frequency synthesizer calibration
  128. #define CCxxx0_FSCAL1       0x25        // Frequency synthesizer calibration
  129. #define CCxxx0_FSCAL0       0x26        // Frequency synthesizer calibration
  130. #define CCxxx0_RCCTRL1      0x27        // RC oscillator configuration
  131. #define CCxxx0_RCCTRL0      0x28        // RC oscillator configuration
  132. #define CCxxx0_FSTEST       0x29        // Frequency synthesizer calibration control
  133. #define CCxxx0_PTEST        0x2A        // Production test
  134. #define CCxxx0_AGCTEST      0x2B        // AGC test
  135. #define CCxxx0_TEST2        0x2C        // Various test settings
  136. #define CCxxx0_TEST1        0x2D        // Various test settings
  137. #define CCxxx0_TEST0        0x2E        // Various test settings

  138. // Strobe commands
  139. #define CCxxx0_SRES         0x30        // Reset chip.
  140. #define CCxxx0_SFSTXON      0x31        // Enable and calibrate frequency synthesizer (if MCSM0.FS_AUTOCAL=1).
  141.                                         // If in RX/TX: Go to a wait state where only the synthesizer is
  142.                                         // running (for quick RX / TX turnaround).
  143. #define CCxxx0_SXOFF        0x32        // Turn off crystal oscillator.
  144. #define CCxxx0_SCAL         0x33        // Calibrate frequency synthesizer and turn it off
  145.                                         // (enables quick start).
  146. #define CCxxx0_SRX          0x34        // Enable RX. Perform calibration first if coming from IDLE and
  147.                                         // MCSM0.FS_AUTOCAL=1.
  148. #define CCxxx0_STX          0x35        // In IDLE state: Enable TX. Perform calibration first if
  149.                                         // MCSM0.FS_AUTOCAL=1. If in RX state and CCA is enabled:
  150.                                         // Only go to TX if channel is clear.
  151. #define CCxxx0_SIDLE        0x36        // Exit RX / TX, turn off frequency synthesizer and exit
  152.                                         // Wake-On-Radio mode if applicable.
  153. #define CCxxx0_SAFC         0x37        // Perform AFC adjustment of the frequency synthesizer
  154. #define CCxxx0_SWOR         0x38        // Start automatic RX polling sequence (Wake-on-Radio)
  155. #define CCxxx0_SPWD         0x39        // Enter power down mode when CSn goes high.
  156. #define CCxxx0_SFRX         0x3A        // Flush the RX FIFO buffer.
  157. #define CCxxx0_SFTX         0x3B        // Flush the TX FIFO buffer.
  158. #define CCxxx0_SWORRST      0x3C        // Reset real time clock.
  159. #define CCxxx0_SNOP         0x3D        // No operation. May be used to pad strobe commands to two
  160.                                         // INT8Us for simpler software.

  161. #define CCxxx0_PARTNUM      0x30
  162. #define CCxxx0_VERSION      0x31
  163. #define CCxxx0_FREQEST      0x32
  164. #define CCxxx0_LQI          0x33
  165. #define CCxxx0_RSSI         0x34
  166. #define CCxxx0_MARCSTATE    0x35
  167. #define CCxxx0_WORTIME1     0x36
  168. #define CCxxx0_WORTIME0     0x37
  169. #define CCxxx0_PKTSTATUS    0x38
  170. #define CCxxx0_VCO_VC_DAC   0x39
  171. #define CCxxx0_TXBYTES      0x3A
  172. #define CCxxx0_RXBYTES      0x3B

  173. #define CCxxx0_PATABLE      0x3E
  174. #define CCxxx0_TXFIFO       0x3F
  175. #define CCxxx0_RXFIFO       0x3F

  176. // RF_SETTINGS is a data structure which contains all relevant CCxxx0 registers
  177. typedef struct S_RF_SETTINGS
  178. {
  179.         INT8U FSCTRL2;                //自已加的
  180.     INT8U FSCTRL1;   // Frequency synthesizer control.
  181.     INT8U FSCTRL0;   // Frequency synthesizer control.
  182.     INT8U FREQ2;     // Frequency control word, high INT8U.
  183.     INT8U FREQ1;     // Frequency control word, middle INT8U.
  184.     INT8U FREQ0;     // Frequency control word, low INT8U.
  185.     INT8U MDMCFG4;   // Modem configuration.
  186.     INT8U MDMCFG3;   // Modem configuration.
  187.     INT8U MDMCFG2;   // Modem configuration.
  188.     INT8U MDMCFG1;   // Modem configuration.
  189.     INT8U MDMCFG0;   // Modem configuration.
  190.     INT8U CHANNR;    // Channel number.
  191.     INT8U DEVIATN;   // Modem deviation setting (when FSK modulation is enabled).
  192.     INT8U FREND1;    // Front end RX configuration.
  193.     INT8U FREND0;    // Front end RX configuration.
  194.     INT8U MCSM0;     // Main Radio Control State Machine configuration.
  195.     INT8U FOCCFG;    // Frequency Offset Compensation Configuration.
  196.     INT8U BSCFG;     // Bit synchronization Configuration.
  197.     INT8U AGCCTRL2;  // AGC control.
  198.         INT8U AGCCTRL1;  // AGC control.
  199.     INT8U AGCCTRL0;  // AGC control.
  200.     INT8U FSCAL3;    // Frequency synthesizer calibration.
  201.     INT8U FSCAL2;    // Frequency synthesizer calibration.
  202.         INT8U FSCAL1;    // Frequency synthesizer calibration.
  203.     INT8U FSCAL0;    // Frequency synthesizer calibration.
  204.     INT8U FSTEST;    // Frequency synthesizer calibration control
  205.     INT8U TEST2;     // Various test settings.
  206.     INT8U TEST1;     // Various test settings.
  207.     INT8U TEST0;     // Various test settings.
  208.     INT8U IOCFG2;    // GDO2 output pin configuration
  209.     INT8U IOCFG0;    // GDO0 output pin configuration
  210.     INT8U PKTCTRL1;  // Packet automation control.
  211.     INT8U PKTCTRL0;  // Packet automation control.
  212.     INT8U ADDR;      // Device address.
  213.     INT8U PKTLEN;    // Packet length.
  214. } RF_SETTINGS;

  215. /////////////////////////////////////////////////////////////////
  216. const RF_SETTINGS rfSettings =
  217. {
  218.         0x00,
  219.     0x08,   // FSCTRL1   Frequency synthesizer control.
  220.     0x00,   // FSCTRL0   Frequency synthesizer control.
  221.     0x10,   // FREQ2     Frequency control word, high byte.
  222.     0xA7,   // FREQ1     Frequency control word, middle byte.
  223.     0x62,   // FREQ0     Frequency control word, low byte.
  224. //    0x5B,   // MDMCFG4   Modem configuration.
  225. //    0xF8,   // MDMCFG3   Modem configuration.
  226.           0x5B,   // MDMCFG4   
  227.     0xE4,   // MDMCFG3   
  228.     0x03,   // MDMCFG2   Modem configuration.
  229.     0x22,   // MDMCFG1   Modem configuration.
  230.     0xF8,   // MDMCFG0   Modem configuration.

  231.     0x00,   // CHANNR    Channel number.
  232.     0x47,   // DEVIATN   Modem deviation setting (when FSK modulation is enabled).
  233.     0xB6,   // FREND1    Front end RX configuration.
  234.     0x10,   // FREND0    Front end RX configuration.
  235.     0x18,   // MCSM0     Main Radio Control State Machine configuration.
  236.     0x1D,   // FOCCFG    Frequency Offset Compensation Configuration.
  237.     0x1C,   // BSCFG     Bit synchronization Configuration.
  238.     0xC7,   // AGCCTRL2  AGC control.
  239.     0x00,   // AGCCTRL1  AGC control.
  240.     0xB2,   // AGCCTRL0  AGC control.

  241.     0xEA,   // FSCAL3    Frequency synthesizer calibration.
  242.     0x2A,   // FSCAL2    Frequency synthesizer calibration.
  243.     0x00,   // FSCAL1    Frequency synthesizer calibration.
  244.     0x11,   // FSCAL0    Frequency synthesizer calibration.
  245.     0x59,   // FSTEST    Frequency synthesizer calibration.
  246.     0x81,   // TEST2     Various test settings.
  247.     0x35,   // TEST1     Various test settings.
  248.     0x09,   // TEST0     Various test settings.
  249.     0x0B,   // IOCFG2    GDO2 output pin configuration.
  250.     0x06,   // IOCFG0D   GDO0 output pin configuration. Refer to SmartRF?Studio User Manual for detailed pseudo register explanation.

  251.     0x04,   // PKTCTRL1  Packet automation control.
  252.     0x05,   // PKTCTRL0  Packet automation control.
  253.     0x00,   // ADDR      Device address.
  254.     0x0c    // PKTLEN    Packet length.
  255. };
  256. //*****************************************************************************************
  257. //函數名:delay(unsigned int s)
  258. //輸入:時間
  259. //輸出:無
  260. //功能描述:普通廷時,內部用
  261. //*****************************************************************************************               
  262. static void delay(unsigned int s)
  263. {
  264.         unsigned int i;
  265.         for(i=0; i<s; i++);
  266.         for(i=0; i<s; i++);
  267. }


  268. void delay1ms(int t)//誤差0.434028 us
  269. {
  270.   unsigned char i=0,j=0,m=0;
  271.   for(m=t;m>0;m--)
  272.   for(i=55;i>0;i--)
  273.     for(j=53;j>0;j--);
  274. }
  275. void delay1s(uchar t)//誤差1.000000 us
  276. {//6倍速
  277.   unsigned char i=0,j=0,k=0,m=0;
  278.   for(m=t;m>0;m--)
  279.   for(i=66;i>0;i--)
  280.     for(j=218;j>0;j--)
  281.     for(k=207;k>0;k--);
  282. }
  283. void delay12us()//誤差0.234375 us
  284. {
  285.   unsigned char i=0;
  286.   for(i=33;i>0;i--);
  287. }


  288. void IapIdle()
  289. {
  290.         IAP_CONTR=0;//關閉IAP功能
  291.         IAP_CMD=0;//清除命令寄存器
  292.         IAP_TRIG=0;//清除觸發寄存器
  293.         IAP_ADDRH=0x80;//將地址設置到非IAP區域
  294.         IAP_ADDRL=0;
  295. }

  296. uchar IapReadByte(uint addr)
  297. {
  298.         uchar dat;
  299.         IAP_CONTR=ENABLE_IAP;//使能IAP
  300.         IAP_CMD=CMD_READ;//設置IAP命令
  301.         IAP_ADDRL=addr;//設置IAP低地址
  302.         IAP_ADDRH=addr>>8;//設置IAP高地址
  303.         IAP_TRIG=0x5a;//寫觸發命令
  304.         IAP_TRIG=0xa5;
  305.         _nop_();//等待操作完成
  306.         dat=IAP_DATA;//讀數據
  307.         IapIdle();
  308.         return dat;
  309. }

  310. void IapProgramByte(uint addr,uchar dat)
  311. {
  312.         IAP_CONTR=ENABLE_IAP;//使能IAP
  313.         IAP_CMD=CMD_PROGRAM;//設置IAP命令
  314.         IAP_ADDRL=addr;//設置IAP低地址
  315.         IAP_ADDRH=addr>>8;//設置IAP高地址
  316.         IAP_DATA=dat;//寫IAP數據
  317.         IAP_TRIG=0x5a;//寫觸發命令
  318.         IAP_TRIG=0xa5;
  319.         _nop_();//等待操作完成
  320.         IapIdle();
  321. }

  322. void IapEraseSector(uint addr)
  323. {
  324.         IAP_CONTR=ENABLE_IAP;//使能IAP
  325.         IAP_CMD=CMD_ERASE;//設置IAP命令
  326.         IAP_ADDRL=addr;//設置低地址
  327.         IAP_ADDRH=addr>>8;//設置高地址
  328.         IAP_TRIG=0x5a;//寫觸發命令
  329.         IAP_TRIG=0xa5;

  330.         _nop_();//等待操作完成
  331.         IapIdle();
  332. }


  333. void SaveData(uchar *dat,uchar len)
  334. {
  335.         uchar i=0;
  336.         IapEraseSector(IAP_ADDRESS);
  337.         for(i=0;i<len;i++)
  338.         {
  339.                 IapProgramByte(IAP_ADDRESS+i,dat[i]);
  340.                 delay1ms(1);
  341.         }
  342. }


  343. void halWait(INT16U timeout) {
  344.     do {
  345.         _nop_();
  346.                 _nop_();
  347.                 _nop_();
  348.                 _nop_();
  349.                 _nop_();
  350.                 _nop_();
  351.                 _nop_();
  352.                 _nop_();
  353.                 _nop_();
  354.                 _nop_();
  355.                 _nop_();
  356.                 _nop_();
  357.                 _nop_();
  358.                 _nop_();
  359.                 _nop_();
  360.     } while (--timeout);
  361. }


  362. void SpiInit(void)
  363. {
  364.         CSN=0;
  365.         SCK=0;
  366.         CSN=1;
  367. }

  368. /*****************************************************************************************
  369. //函數名:CpuInit()
  370. //輸入:無
  371. //輸出:無
  372. //功能描述:SPI初始化程序
  373. /*****************************************************************************************/
  374. void CpuInit(void)
  375. {
  376.         SpiInit();
  377.         delay(5000);
  378. }
  379.         

  380. //*****************************************************************************************
  381. //函數名:SpisendByte(INT8U dat)
  382. //輸入:發送的數據
  383. //輸出:無
  384. //功能描述:SPI發送一個字節
  385. //*****************************************************************************************
  386. INT8U SpiTxRxByte(INT8U dat)
  387. {
  388.         INT8U i,temp;
  389.         temp = 0;
  390.         
  391.         SCK = 0;
  392.         for(i=0; i<8; i++)
  393.         {
  394.                 if(dat & 0x80)
  395.                 {
  396.                         MOSI = 1;
  397.                 }
  398.                 else MOSI = 0;
  399.                 dat <<= 1;

  400.                 SCK = 1;
  401.                 _nop_();
  402.                 _nop_();

  403.                 temp <<= 1;
  404.                 if(MISO)temp++;
  405.                 SCK = 0;
  406.                 _nop_();
  407.                 _nop_();        
  408.         }
  409.         return temp;
  410. }

  411. //*****************************************************************************************
  412. //函數名:void RESET_CC1100(void)
  413. //輸入:無
  414. //輸出:無
  415. //功能描述:復位CC1100
  416. //*****************************************************************************************
  417. void RESET_CC1100(void)
  418. {
  419.         CSN = 0;
  420.         while (MISO);
  421.     SpiTxRxByte(CCxxx0_SRES);                 //寫入復位命令
  422.         while (MISO);
  423.     CSN = 1;
  424. }

  425. //*****************************************************************************************
  426. //函數名:void POWER_UP_RESET_CC1100(void)
  427. //輸入:無
  428. //輸出:無
  429. //功能描述:上電復位CC1100
  430. //*****************************************************************************************
  431. void POWER_UP_RESET_CC1100(void)
  432. {
  433.         CSN = 1;
  434.         halWait(1);
  435.         CSN = 0;
  436.         halWait(1);
  437.         CSN = 1;
  438.         halWait(41);
  439.         RESET_CC1100();                   //復位CC1100
  440. }

  441. //*****************************************************************************************
  442. //函數名:void halSpiWriteReg(INT8U addr, INT8U value)
  443. //輸入:地址和配置字
  444. //輸出:無
  445. //功能描述:SPI寫寄存器
  446. //*****************************************************************************************
  447. void halSpiWriteReg(INT8U addr, INT8U value)
  448. {
  449.     CSN = 0;
  450.     while (MISO);
  451.     SpiTxRxByte(addr);                //寫地址
  452.     SpiTxRxByte(value);                //寫入配置
  453.     CSN = 1;
  454. }

  455. //*****************************************************************************************
  456. //函數名:void halSpiWriteBurstReg(INT8U addr, INT8U *buffer, INT8U count)
  457. //輸入:地址,寫入緩沖區,寫入個數
  458. //輸出:無
  459. //功能描述:SPI連續寫配置寄存器
  460. //*****************************************************************************************
  461. void halSpiWriteBurstReg(INT8U addr, INT8U *buffer, INT8U count)
  462. {
  463.     INT8U i, temp;
  464.         temp = addr | WRITE_BURST;
  465.     CSN = 0;
  466.     while (MISO);
  467.     SpiTxRxByte(temp);
  468.     for (i = 0; i < count; i++)
  469.          {
  470.         SpiTxRxByte(buffer[i]);
  471.     }
  472.     CSN = 1;
  473. }

  474. //*****************************************************************************************
  475. //函數名:void halSpiStrobe(INT8U strobe)
  476. //輸入:命令
  477. //輸出:無
  478. //功能描述:SPI寫命令
  479. //*****************************************************************************************
  480. void halSpiStrobe(INT8U strobe)
  481. {
  482.     CSN = 0;
  483.     while (MISO);
  484.     SpiTxRxByte(strobe);                //寫入命令
  485.     CSN = 1;
  486. }





  487. //*****************************************************************************************
  488. //函數名:INT8U halSpiReadReg(INT8U addr)
  489. //輸入:地址
  490. //輸出:該寄存器的配置字
  491. //功能描述:SPI讀寄存器
  492. //*****************************************************************************************
  493. INT8U halSpiReadReg(INT8U addr)
  494. {
  495.         INT8U temp, value;
  496.     temp = addr|READ_SINGLE;//讀寄存器命令
  497.         CSN = 0;
  498.         while (MISO);
  499.         SpiTxRxByte(temp);
  500.         value = SpiTxRxByte(0);
  501.         CSN = 1;
  502.         return value;
  503. }


  504. //*****************************************************************************************
  505. //函數名:void halSpiReadBurstReg(INT8U addr, INT8U *buffer, INT8U count)
  506. //輸入:地址,讀出數據后暫存的緩沖區,讀出配置個數
  507. //輸出:無
  508. //功能描述:SPI連續寫配置寄存器
  509. //*****************************************************************************************
  510. void halSpiReadBurstReg(INT8U addr, INT8U *buffer, INT8U count)
  511. {
  512.     INT8U i,temp;
  513.         temp = addr | READ_BURST;                //寫入要讀的配置寄存器地址和讀命令
  514.     CSN = 0;
  515.     while (MISO);
  516.         SpiTxRxByte(temp);   
  517.     for (i = 0; i < count; i++)
  518.         {
  519.         buffer[i] = SpiTxRxByte(0);
  520.     }
  521.     CSN = 1;
  522. }


  523. //*****************************************************************************************
  524. //函數名:INT8U halSpiReadReg(INT8U addr)
  525. //輸入:地址
  526. //輸出:該狀態寄存器當前值
  527. //功能描述:SPI讀狀態寄存器
  528. //*****************************************************************************************
  529. INT8U halSpiReadStatus(INT8U addr)
  530. {
  531.     INT8U value,temp;
  532.         temp = addr | READ_BURST;                //寫入要讀的狀態寄存器的地址同時寫入讀命令
  533.     CSN = 0;
  534.     while (MISO);
  535.     SpiTxRxByte(temp);
  536.         value = SpiTxRxByte(0);
  537.         CSN = 1;
  538.         return value;
  539. }
  540. //*****************************************************************************************
  541. //函數名:void halRfWriteRfSettings(RF_SETTINGS *pRfSettings)
  542. //輸入:無
  543. //輸出:無
  544. //功能描述:配置CC1100的寄存器
  545. //*****************************************************************************************
  546. void halRfWriteRfSettings(void)
  547. {

  548.         halSpiWriteReg(CCxxx0_FSCTRL0,  rfSettings.FSCTRL2);//自已加的
  549.     // Write register settings
  550.     halSpiWriteReg(CCxxx0_FSCTRL1,  rfSettings.FSCTRL1);
  551.     halSpiWriteReg(CCxxx0_FSCTRL0,  rfSettings.FSCTRL0);
  552.     halSpiWriteReg(CCxxx0_FREQ2,    rfSettings.FREQ2);
  553.     halSpiWriteReg(CCxxx0_FREQ1,    rfSettings.FREQ1);
  554.     halSpiWriteReg(CCxxx0_FREQ0,    rfSettings.FREQ0);
  555.     halSpiWriteReg(CCxxx0_MDMCFG4,  rfSettings.MDMCFG4);
  556.     halSpiWriteReg(CCxxx0_MDMCFG3,  rfSettings.MDMCFG3);
  557.     halSpiWriteReg(CCxxx0_MDMCFG2,  rfSettings.MDMCFG2);
  558.     halSpiWriteReg(CCxxx0_MDMCFG1,  rfSettings.MDMCFG1);
  559.     halSpiWriteReg(CCxxx0_MDMCFG0,  rfSettings.MDMCFG0);
  560.     halSpiWriteReg(CCxxx0_CHANNR,   rfSettings.CHANNR);
  561.     halSpiWriteReg(CCxxx0_DEVIATN,  rfSettings.DEVIATN);
  562.     halSpiWriteReg(CCxxx0_FREND1,   rfSettings.FREND1);
  563.     halSpiWriteReg(CCxxx0_FREND0,   rfSettings.FREND0);
  564.     halSpiWriteReg(CCxxx0_MCSM0 ,   rfSettings.MCSM0 );
  565.     halSpiWriteReg(CCxxx0_FOCCFG,   rfSettings.FOCCFG);
  566.     halSpiWriteReg(CCxxx0_BSCFG,    rfSettings.BSCFG);
  567.     halSpiWriteReg(CCxxx0_AGCCTRL2, rfSettings.AGCCTRL2);
  568.         halSpiWriteReg(CCxxx0_AGCCTRL1, rfSettings.AGCCTRL1);
  569.     halSpiWriteReg(CCxxx0_AGCCTRL0, rfSettings.AGCCTRL0);
  570.     halSpiWriteReg(CCxxx0_FSCAL3,   rfSettings.FSCAL3);
  571.         halSpiWriteReg(CCxxx0_FSCAL2,   rfSettings.FSCAL2);
  572.         halSpiWriteReg(CCxxx0_FSCAL1,   rfSettings.FSCAL1);
  573.     halSpiWriteReg(CCxxx0_FSCAL0,   rfSettings.FSCAL0);
  574.     halSpiWriteReg(CCxxx0_FSTEST,   rfSettings.FSTEST);
  575.     halSpiWriteReg(CCxxx0_TEST2,    rfSettings.TEST2);
  576.     halSpiWriteReg(CCxxx0_TEST1,    rfSettings.TEST1);
  577.     halSpiWriteReg(CCxxx0_TEST0,    rfSettings.TEST0);
  578.     halSpiWriteReg(CCxxx0_IOCFG2,   rfSettings.IOCFG2);
  579.     halSpiWriteReg(CCxxx0_IOCFG0,   rfSettings.IOCFG0);   
  580.     halSpiWriteReg(CCxxx0_PKTCTRL1, rfSettings.PKTCTRL1);
  581.     halSpiWriteReg(CCxxx0_PKTCTRL0, rfSettings.PKTCTRL0);
  582.     halSpiWriteReg(CCxxx0_ADDR,     rfSettings.ADDR);
  583.     halSpiWriteReg(CCxxx0_PKTLEN,   rfSettings.PKTLEN);
  584. }

  585. //*****************************************************************************************
  586. //函數名:void halRfSendPacket(INT8U *txBuffer, INT8U size)
  587. //輸入:發送的緩沖區,發送數據個數
  588. //輸出:無
  589. //功能描述:CC1100發送一組數據
  590. //*****************************************************************************************

  591. void halRfSendPacket(INT8U *txBuffer, INT8U size)
  592. {
  593.         halSpiWriteReg(CCxxx0_TXFIFO, size);
  594.         
  595.     halSpiWriteBurstReg(CCxxx0_TXFIFO, txBuffer, size);        //寫入要發送的數據
  596.         
  597.     halSpiStrobe(CCxxx0_STX);                //進入發送模式發送數據

  598.     // Wait for GDO0 to be set -> sync transmitted
  599.     while (!GDO0);
  600.     // Wait for GDO0 to be cleared -> end of packet

  601.     while (GDO0);
  602. //                 led1=1;
  603.         halSpiStrobe(CCxxx0_SFTX);
  604.         
  605. }


  606. void setRxMode(void)
  607. {
  608.     halSpiStrobe(CCxxx0_SRX);                //進入接收狀態
  609. }

  610. /*
  611. // Bit masks corresponding to STATE[2:0] in the status byte returned on MISO
  612. #define CCxx00_STATE_BM                 0x70
  613. #define CCxx00_FIFO_BYTES_AVAILABLE_BM  0x0F
  614. #define CCxx00_STATE_TX_BM              0x20
  615. #define CCxx00_STATE_TX_UNDERFLOW_BM    0x70
  616. #define CCxx00_STATE_RX_BM              0x10
  617. #define CCxx00_STATE_RX_OVERFLOW_BM     0x60
  618. #define CCxx00_STATE_IDLE_BM            0x00

  619. static INT8U RfGetRxStatus(void)
  620. {
  621.         INT8U temp, spiRxStatus1,spiRxStatus2;
  622.         INT8U i=4;// 循環測試次數
  623.     temp = CCxxx0_SNOP|READ_SINGLE;//讀寄存器命令
  624.         CSN = 0;
  625.         while (MISO);
  626.         SpiTxRxByte(temp);
  627.         spiRxStatus1 = SpiTxRxByte(0);
  628.         do
  629.         {
  630.                 SpiTxRxByte(temp);
  631.                 spiRxStatus2 = SpiTxRxByte(0);
  632.                 if(spiRxStatus1 == spiRxStatus2)
  633.                 {
  634.                         if( (spiRxStatus1 & CCxx00_STATE_BM) == CCxx00_STATE_RX_OVERFLOW_BM)
  635.                         {
  636.                halSpiStrobe(CCxxx0_SFRX);
  637.                            return 0;
  638.                         }
  639.                     return 1;
  640.                 }
  641.                  spiRxStatus1=spiRxStatus2;
  642.         }
  643.         while(i--);
  644.         CSN = 1;
  645.     return 0;        
  646. }
  647. */
  648. INT8U halRfReceivePacket(INT8U *rxBuffer, INT8U *length)
  649. {
  650.     INT8U status[2];
  651.     INT8U packetLength;
  652.         INT8U i=(*length)*4;  // 具體多少要根據datarate和length來決定

  653.     halSpiStrobe(CCxxx0_SRX);                //進入接收狀態
  654.         //delay(5);
  655.     //while (!GDO1);
  656.     //while (GDO1);
  657.         delay(2);
  658.         while (GDO0)
  659.         {
  660.                 delay(2);
  661.                 --i;
  662.                 if(i<1)
  663.                    return 0;            
  664.         }         
  665.     if ((halSpiReadStatus(CCxxx0_RXBYTES) & BYTES_IN_RXFIFO)) //如果接的字節數不為0
  666.         {
  667.         packetLength = halSpiReadReg(CCxxx0_RXFIFO);//讀出第一個字節,此字節為該幀數據長度
  668.         if (packetLength <= *length)                 //如果所要的有效數據長度小于等于接收到的數據包的長度
  669.                 {
  670.             halSpiReadBurstReg(CCxxx0_RXFIFO, rxBuffer, packetLength); //讀出所有接收到的數據
  671.             *length = packetLength;                                //把接收數據長度的修改為當前數據的長度

  672.             // Read the 2 appended status bytes (status[0] = RSSI, status[1] = LQI)
  673.             halSpiReadBurstReg(CCxxx0_RXFIFO, status, 2);         //讀出CRC校驗位
  674.                         halSpiStrobe(CCxxx0_SFRX);                //清洗接收緩沖區
  675.             return (status[1] & CRC_OK);                        //如果校驗成功返回接收成功
  676.         }
  677.                  else
  678.                 {
  679.             *length = packetLength;
  680.             halSpiStrobe(CCxxx0_SFRX);                //清洗接收緩沖區
  681.             return 0;
  682.         }
  683.     }
  684.         else
  685.          return 0;
  686. }
  687. /*
  688. void Delay(unsigned int s)
  689. {
  690.         unsigned int i;
  691.         for(i=0; i<s; i++);
  692.         for(i=0; i<s; i++);
  693. }

  694. */
  695. //uchar key_scan()
  696. //{
  697. //        //上升、下降
  698. // if((KEY1==0))   //第一次 key_up=1 此時如果有操作按鍵按下則執行下面的程序||key3==0key_up&&
  699. // {
  700. //  delay1ms(10);         //延時小豆
  701. //  if((KEY1==0))   //||key3==0key_up&&
  702. //  {
  703. ////   key_up=0;  //松手標志位0 那么下次檢測, if 結果就為0 則就不會執行這里的語句
  704. ////
  705. ////   key_down=1;  //按鍵被按下標志  最后如果按鍵松手,那么還應該發送一個數據出去執行關閉
  706. //
  707. ////   if(KEY1==0)  //
  708. //    return 1;
  709. ////   if(key3==0)
  710. ////    return 3;
  711. //  }  
  712. // }
  713. // else
  714. //// if(KEY1!=0)   //上升下降  按鍵都沒有被按下&&key3==1
  715. // {
  716. ////  key_up=1;  //必須所有按鍵都沒有被按下    松手標志初始化
  717. ////     if(key_down==1)   //這里判斷按鍵是否按下過,按下過就發送一個數據過去關閉之前的輸出
  718. ////  {
  719. ////   key_down=0;   //初始化
  720. //   return 99;    //返回值
  721. ////  }
  722. // }
  723. //
  724. //}
  725. void main(void)
  726. {
  727. //  P2M1=0x0f;
  728. //  P2M0=0x00;
  729.         INT8U leng =8,i=0,mode=0,cont=0,offset=0,flag1=0,key_num,tf1=0,key_down1=0,key_down=0;
  730.         INT8U tf =0;
  731. //        INT8U DS_UP=0;DS_STOP=0;DS_DOWN=0;
  732.         INT8U TxBuf[8]={0};         // 8字節, 如果需要更長的數據包,請正確設置
  733.         INT8U RxBuf[8]={0};        
  734.         INT8U code *cptr;
  735.         INT8U idata *iptr;
  736.         cptr=ID_ADDR_ROM;
  737.         iptr=ID_ADDR_RAM;
  738.         for(i=0;i<7;i++)
  739.                 id[i]=cptr[i];
  740.         //id[6]=3;

  741.         P1M1=0x00;
  742.         P1M0=0x01;
  743.         //P2M1=0x40;
  744.         //P2M0=0x40;

  745.         CpuInit();
  746.         POWER_UP_RESET_CC1100();
  747.         halRfWriteRfSettings();
  748.         halSpiWriteBurstReg(CCxxx0_PATABLE, PaTabel, 8);
  749.         TxBuf[1]=1;TxBuf[2]=0;led1=1;//;led5=0
  750.         //halRfSendPacket(TxBuf,8);        // Transmit Tx buffer data
  751.     INT1=1;
  752.         IT1=1;
  753.         EX1=1;  //開啟外部中斷1
  754.     EA=1;  
  755.     TL1 = BAUD;
  756.     TH1 = BAUD >> 8;
  757.         
  758.         
  759.         
  760.         
  761.     TR1 = 1;
  762.     ET1 = 1;
  763.     PT1 = 1;
  764. //        EX0=1;        //開啟外部中斷0
  765.         
  766.     TMOD=0x01;        //T0方式為1   16位
  767.         TH0=(65536-50000)/256;
  768.         TL0=(65536-50000)%256;           //50000*12*(1/12M)=50ms

  769.         TR0=1;           //啟動定時器T0
  770.         ET0=1; //使能定時器T0中斷
  771. //  key_up=0;
  772.         delay1s(3);
  773. //  P2M1=0x0f;
  774. //  P2M0=0x00;
  775.         
  776.         if(KEY0==0)
  777.         {
  778.                 delay1ms(10);
  779.                 if(KEY0==0)
  780.                         mode=1;//學習模式
  781.      led1=0;//亮        
  782.                 delay1ms(10);
  783.                  led1=1;//亮        
  784.         }

  785.         offset=0;
  786.         TxBuf[offset++]=0xaa;//普通數據
  787.         TxBuf[offset++]=0xbb;
  788.         TxBuf[offset++]=id[3];
  789.         TxBuf[offset++]=id[4];
  790.         TxBuf[offset++]=id[5];
  791.         TxBuf[offset++]=id[6];


  792.         //輸入模式
  793. //        P2M0 = 0x00;
  794. //        P2M1 = 0x0F;   
  795.         while(1)
  796.         {
  797.                 //接收端
  798.                    /*if(halRfReceivePacket(RxBuf,&leng))
  799.                 {
  800.                
  801.                    }*/

  802.                 //發送端
  803.                
  804.                 if(mode==1)
  805.                 {//
  806.                         if((KEY0==0)&&(KEY3==0))
  807.                         {
  808.                                 delay1ms(10);
  809.                                 if((KEY0==0)&&(KEY3==0))
  810.                                 {
  811.                                         if(cont<4)
  812.                                         {
  813.                                                 cont++;
  814.                                         }
  815.                                 }
  816. //                                while((KEY0==0)&&(KEY3==0));
  817.                         }
  818.                         if(cont==4)
  819.                         {
  820.                                 led1=0;//亮        
  821.                                 offset=0;
  822.                                 TxBuf[offset++]=0xff;//識別碼標志
  823.                                 TxBuf[offset++]=0xff;
  824.                                 TxBuf[offset++]=id[3];
  825.                                 TxBuf[offset++]=id[4];
  826.                                 TxBuf[offset++]=id[5];
  827.                                 TxBuf[offset++]=id[6];
  828.                                 halRfSendPacket(TxBuf,8);
  829.                                 delay1ms(200);
  830.                                 led1=1;//熄滅
  831.                                 delay1ms(200);
  832. //                                mode=0;
  833.                         }
  834.                 }
  835.                 else
  836.                 {//正常模式 發送按鍵數據
  837. //                        if(key_up&&KEY1==0)//第一次key_up==1;那么如果其他按鍵有按下,則為真,執行下面程序
  838.                         if(((KEY1==1)&&(KEY3==1))&&(KEY2!=0))//點動上升
  839.                         {
  840.                                 delay1ms(50);
  841.                                         if(((KEY1==1)&&(KEY3==1))&&(KEY2!=0))
  842.                                         {               
  843.           TxBuf[1]=0xa1;
  844.                                                 tf1=1;        
  845.             key_down=0;               
  846.             key_down1=0;
  847.                                                 ET0=1;
  848.                                                 
  849.                                  }
  850.       }        
  851.                         else if((KEY1==0)&&(key_down1==0))
  852.                                 {
  853.                                         delay1ms(50);
  854.                                         if(KEY1==0)
  855.                                         {                                
  856.                   TxBuf[1]=0xb1;
  857.                                                 tf1=1;
  858.                                                 key_down=1;
  859.                                                 ET0=0;
  860.                                                  led2=0;//亮        
  861.                                                 delay1ms(30);
  862.                                                  led2=1;//亮        
  863.           }                                
  864.          }
  865.                                 
  866. //                                if(KEY3==1)//點動下降
  867. //                        {
  868. //                                delay1ms(50);
  869. //                                        if(KEY3==1)
  870. //                                        {               
  871. //            TxBuf[1]=0xa2;
  872. //                                                tf1=1;        
  873. //            key_down1=0;                                                
  874. //                                 }
  875. //      }        
  876.                         else if((KEY3==0)&&(key_down==0))
  877.                                 {
  878.                                         delay1ms(50);
  879.                                         if(KEY3==0)
  880.                                         {                                
  881.                   TxBuf[1]=0xb2;
  882.                                                 tf1=1;
  883.                                                 key_down1=1;
  884.                                                 ET0=0;
  885.                                                  led2=0;//亮        
  886.                                                 delay1ms(30);
  887.                                                  led2=1;//亮        
  888.           }                                
  889.          }
  890.                         if(KEY0==0)//停止
  891.                         {
  892.                         delay1ms(50);
  893.                         if(KEY0==0)
  894.                         {
  895.                    TxBuf[1]=0xcc;
  896.                          tf1=1;               
  897.                                 ET0=1;
  898.                                 led2=0;//亮        
  899.                         delay1ms(30);
  900.                          led2=1;//亮        
  901.                         }
  902.                         }
  903.                         if(KEY2==0)//啟動
  904.                         {
  905.                         delay1ms(50);
  906.                         if(KEY2==0)
  907.                         {
  908.                    TxBuf[1]=0xc5;
  909.                          tf1=1;               
  910.        ET0=1;
  911.                                                                                  led2=0;//亮        
  912.                                                 delay1ms(30);
  913.                                                  led2=1;//亮        
  914.                         }
  915.                         }
  916.                                  
  917.                                  if (tf1==1)
  918.                                  {
  919.                                   TxBuf[HEAD_LEN]=2;
  920.                                         halRfSendPacket(TxBuf,8);        
  921.                                          tf1=0;
  922.                         
  923.          }
  924.                                  
  925.         }
  926.            if(num>=80)
  927.            {
  928.                 halSpiStrobe(CCxxx0_SIDLE);        //進入空閑模式
  929.                 halSpiStrobe(CCxxx0_SXOFF);        
  930.                 halSpiStrobe(CCxxx0_SPWD);    //關閉無線模塊
  931.                         _nop_();
  932.                         _nop_();
  933.                         _nop_();
  934.            num=0;
  935. //           led2=0;
  936.             ET0=0;
  937.                 delay(500);
  938. //                led1=0;

  939.                 PCON=0X02; //PD=1,進入掉電模式        //PCON=0X01;//IDL=1,進入空閑模式
  940.                 _nop_();
  941.                 _nop_();
  942.                 _nop_();           
  943.            }
  944.                  
  945. }
  946. }

  947. void exint1()  interrupt 2
  948. {
  949.          PCON=0;        
  950. //        led1=1;
  951. }

  952. void timer0()  interrupt 1
  953. {
  954.         TH0=(65536-50000)/256;
  955.         TL0=(65536-50000)%256;           //50000*12*(1/12M)=50ms

  956.     num++;//每50ms加1


  957. }
復制代碼
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復

使用道具 舉報

沙發
ID:385830 發表于 2022-3-23 11:51 | 只看該作者
你應該把手冊也發上來,你這樣還得讓人自己下載浪費時間啊。
回復

使用道具 舉報

板凳
ID:584814 發表于 2022-3-23 12:00 | 只看該作者
接發不正常,多是軟件問題;
接發功率不夠,多是硬件問題。
回復

使用道具 舉報

地板
ID:45879 發表于 2022-3-23 14:42 | 只看該作者
C1101模塊賣家應該有調試好的程序,試試他的程序;
要是測距離,程序把功率開到最大,做個一直發的主機,從機一直接收,收到對應的數據后燈閃爍。(發送的數據包不要太大)
你天線如何處理的?上個圖
回復

使用道具 舉報

5#
ID:421668 發表于 2022-3-23 16:30 | 只看該作者
yueguang3048 發表于 2022-3-23 14:42
C1101模塊賣家應該有調試好的程序,試試他的程序;
要是測距離,程序把功率開到最大,做個一直發的主機, ...

用了他們給的程序測試了也是距離不夠。我也懷疑過是不是電線設置不對。我的電線就是買的模塊帶的彈簧電線。
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 精品国产一区二区三区久久久久久 | 99国产精品久久久久老师 | 一区二区三区在线播放 | 国产美女视频 | 国产精品久久久久久久久久久免费看 | 日韩成人在线播放 | av一区二区在线观看 | 午夜91 | 久草免费在线视频 | 日日淫| 国产欧美精品一区二区色综合朱莉 | 麻豆视频在线免费观看 | 国产精品视频偷伦精品视频 | 欧美在线一区二区视频 | 免费三级网站 | 国产精品国产精品国产专区不片 | 亚洲一区二区三区免费在线观看 | 欧美精品在线观看 | 成人国产精品久久 | 涩涩视频大全 | 亚洲一区二区三区四区五区午夜 | 国产成人精品久久二区二区91 | 欧美一区二区三区视频 | heyzo在线 | 日韩精品在线一区二区 | 91电影| 中文字幕中文字幕 | 毛片免费观看 | 国产成人亚洲精品 | 99热这里 | 日日操夜夜操天天操 | 欧美综合国产精品久久丁香 | 免费人成激情视频在线观看冫 | 日韩欧美视频在线 | 欧美久久久久 | 日韩中文字幕av | 国产乱码精品一区二区三区五月婷 | 国产亚洲精品美女久久久久久久久久 | 日韩欧美国产精品一区二区三区 | 91视频88av | 高清一区二区三区 |