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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

STC5A60S2+nrf24l01芯片代碼

[復制鏈接]
跳轉到指定樓層
樓主
ID:485556 發表于 2019-3-14 20:46 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
前幾日從某寶平臺購得一nrf24l01據悉為臺產芯片
使用單片機為STC5A60S2
代碼如下,僅供參考

  1. #include "STC5A60S2.H"

  2. #include <intrins.h>

  3. #include <string.h>

  4. #include "NRF_24L01.h"

  5. #include "UART.H"

  6. #define uchar unsigned char


  7. uchar const TX_ADDRESS[TX_ADR_WIDTH]  = {0x34,0x43,0x10,0x10,0x01}; // Define a static TX address

  8. uchar rx_buf[TX_PLOAD_WIDTH];

  9. uchar tx_buf[TX_PLOAD_WIDTH];

  10. uchar flag;



  11. /**************************************************/



  12. //sbit LED1= P3^7;
  13. /**************************************************/
  14. unsigned char        bdata sta;

  15. sbit        RX_DR        =sta^6;

  16. sbit        TX_DS        =sta^5;

  17. sbit        MAX_RT        =sta^4;
  18. /**************************************************/

  19. /**************************************************
  20. Function: init_io();
  21. Description:
  22.   flash led one time,chip enable(ready to TX or RX Mode),
  23.   Spi disable,Spi clock line init high
  24. /**************************************************/
  25. #define KEY 0xaa
  26. void init_nrf24l01_io(void)
  27. {
  28.         CE=0;                        // chip enable
  29.         CSN=1;                        // Spi disable        
  30.         SCK=0;                        // Spi clock line init high
  31. }
  32. /**************************************************/

  33. /**************************************************
  34. Function: Inituart();

  35. Description:
  36.   set uart working mode
  37. /**************************************************/


  38. void delay_ms(unsigned int _ms)
  39. {
  40.   for(_ms;_ms;_ms--)
  41.   {
  42.     _delay_us(1000);
  43.   }
  44. }
  45. /**************************************************/

  46. /**************************************************
  47. Function: SPI_RW();

  48. Description:
  49.   Writes one byte to nRF24L01, and return the byte read
  50.   from nRF24L01 during write, according to SPI protocol
  51. /**************************************************/
  52. bdata unsigned char st=0;
  53. sbit st_1=st^0;
  54. sbit st_2=st^1;
  55. sbit st_3=st^2;
  56. sbit st_4=st^3;
  57. sbit st_5=st^4;
  58. sbit st_6=st^5;
  59. sbit st_7=st^6;
  60. sbit st_8=st^7;
  61. bdata unsigned char st1=0;
  62. sbit st_11=st1^0;
  63. sbit st_12=st1^1;
  64. sbit st_13=st1^2;
  65. sbit st_14=st1^3;
  66. sbit st_15=st1^4;
  67. sbit st_16=st1^5;
  68. sbit st_17=st1^6;
  69. sbit st_18=st1^7;
  70. /*
  71. uchar SPI_RW(uchar byte)
  72. {
  73.         uchar bit_ctr;
  74.            for(bit_ctr=0;bit_ctr<8;bit_ctr++)   // output 8-bit
  75.            {
  76.                    MOSI = (byte & 0x80);         // output 'byte', MSB to MOSI
  77.                    byte = (byte << 1);           // shift next bit into MSB..
  78.                    SCK = 1;                      // Set SCK high..
  79.                 MISO=1;
  80.                    byte |= MISO;                         // capture current MISO bit
  81.                    SCK = 0;                              // ..then set SCK low again
  82.            }
  83.     return(byte);                             // return read byte
  84. }
  85. */

  86. uchar SPI_RW(uchar byte)
  87. {
  88.         //uchar bit_ctr;

  89.     st=byte;

  90.     MOSI=st_8;
  91.     SCK = 1;
  92.     st_18=MISO;
  93.     SCK = 0;

  94.     MOSI=st_7;
  95.     SCK = 1;
  96.     st_17=MISO;
  97.     SCK = 0;

  98.     MOSI=st_6;
  99.     SCK = 1;
  100.     st_16=MISO;
  101.     SCK = 0;

  102.     MOSI=st_5;
  103.     SCK = 1;
  104.     st_15=MISO;
  105.     SCK = 0;

  106.     MOSI=st_4;
  107.     SCK = 1;
  108.     st_14=MISO;
  109.     SCK = 0;

  110.     MOSI=st_3;
  111.     SCK = 1;
  112.     st_13=MISO;
  113.     SCK = 0;

  114.     MOSI=st_2;
  115.     SCK = 1;
  116.     st_12=MISO;
  117.     SCK = 0;

  118.     MOSI=st_1;
  119.     SCK = 1;
  120.     st_11=MISO;
  121.     SCK = 0;


  122.     return(st1);                             // return read byte
  123. }
  124. /**************************************************/

  125. /**************************************************
  126. Function: SPI_RW_Reg();

  127. Description:
  128.   Writes value 'value' to register 'reg'
  129. /**************************************************/
  130. uchar SPI_RW_Reg(BYTE reg, BYTE value)
  131. {
  132.         uchar status;
  133.           CSN = 0;                   // CSN low, init SPI transaction
  134.           status = SPI_RW(reg);      // select register
  135.           SPI_RW(value);             // ..and write value to it..
  136.           CSN = 1;                   // CSN high again
  137.           return(status);            // return nRF24L01 status byte
  138. }
  139. /**************************************************/

  140. /**************************************************
  141. Function: SPI_Read();

  142. Description:
  143.   Read one byte from nRF24L01 register, 'reg'
  144. /**************************************************/
  145. BYTE SPI_Read(BYTE reg)
  146. {
  147.         BYTE reg_val;

  148.           CSN = 0;                // CSN low, initialize SPI communication...
  149.           SPI_RW(reg);            // Select register to read from..
  150.           reg_val = SPI_RW(0);    // ..then read registervalue
  151.           CSN = 1;                // CSN high, terminate SPI communication

  152.           return(reg_val);        // return register value
  153. }
  154. /**************************************************/

  155. /**************************************************
  156. Function: SPI_Read_Buf();

  157. Description:
  158.   Reads 'bytes' #of bytes from register 'reg'
  159.   Typically used to read RX payload, Rx/Tx address
  160. /**************************************************/
  161. uchar SPI_Read_Buf(BYTE reg, BYTE *pBuf, BYTE bytes)
  162. {
  163.         uchar status,byte_ctr;

  164.           CSN = 0;                                    // Set CSN low, init SPI tranaction
  165.           status = SPI_RW(reg);                       // Select register to write to and read status byte

  166.           for(byte_ctr=0;byte_ctr<bytes;byte_ctr++)
  167.             pBuf[byte_ctr] = SPI_RW(0);    // Perform SPI_RW to read byte from nRF24L01

  168.           CSN = 1;                           // Set CSN high again

  169.           return(status);                    // return nRF24L01 status byte
  170. }
  171. /**************************************************/

  172. /**************************************************
  173. Function: SPI_Write_Buf();

  174. Description:
  175.   Writes contents of buffer '*pBuf' to nRF24L01
  176.   Typically used to write TX payload, Rx/Tx address
  177. /**************************************************/
  178. uchar SPI_Write_Buf(BYTE reg, BYTE *pBuf, BYTE bytes)
  179. {
  180.         uchar status,byte_ctr;

  181.           CSN = 0;                   // Set CSN low, init SPI tranaction
  182.           status = SPI_RW(reg);    // Select register to write to and read status byte
  183.           for(byte_ctr=0; byte_ctr<bytes; byte_ctr++) // then write all byte in buffer(*pBuf)
  184.             SPI_RW(*pBuf++);
  185.           CSN = 1;                 // Set CSN high again
  186.           return(status);          // return nRF24L01 status byte
  187. }
  188. /**************************************************/

  189. /**************************************************
  190. Function: RX_Mode();

  191. Description:
  192.   This function initializes one nRF24L01 device to
  193.   RX Mode, set RX address, writes RX payload width,
  194.   select RF channel, datarate & LNA HCURR.
  195.   After init, CE is toggled high, which means that
  196.   this device is now ready to receive a datapacket.
  197. /**************************************************/
  198. void power_off()
  199. {
  200.                                   CE=0;
  201.                                 SPI_RW_Reg(WRITE_REG + CONFIG, 0x0D);
  202.                                 CE=1;
  203.                                 _delay_us(20);
  204. }
  205. void ifnnrf_rx_mode(void)
  206. {
  207.     power_off();
  208.         CE=0;
  209.           SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // Use the same address on the RX device as the TX device

  210.           SPI_RW_Reg(WRITE_REG + EN_AA, 0x01);      // Enable Auto.Ack:Pipe0
  211.           SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01);  // Enable Pipe0
  212.           SPI_RW_Reg(WRITE_REG + RF_CH, 40);        // Select RF channel 40
  213.           SPI_RW_Reg(WRITE_REG + RX_PW_P0, TX_PLOAD_WIDTH); // Select same RX payload width as TX Payload width
  214.           SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07);   // TX_PWR:0dBm, Datarate:2Mbps, LNA:HCURR
  215.           SPI_RW_Reg(WRITE_REG + CONFIG, 0x0f);     // Set PWR_UP bit, enable CRC(2 bytes) & Prim:RX. RX_DR enabled..

  216.           CE = 1; // Set CE pin high to enable RX device

  217.   //  This device is now ready to receive one packet of 16 bytes payload from a TX device sending to address
  218.   //  '3443101001', with auto acknowledgment, retransmit count of 10, RF channel 40 and datarate = 2Mbps.

  219. }
  220. /**************************************************/

  221. /**************************************************
  222. Function: TX_Mode();

  223. Description:
  224.   This function initializes one nRF24L01 device to
  225.   TX mode, set TX address, set RX address for auto.ack,
  226.   fill TX payload, select RF channel, datarate & TX pwr.
  227.   PWR_UP is set, CRC(2 bytes) is enabled, & PRIM:TX.

  228.   ToDo: One high pulse(>10us) on CE will now send this
  229.   packet and expext an acknowledgment from the RX device.
  230. /**************************************************/
  231. void ifnnrf_tx_mode(void)
  232. {
  233.     power_off();
  234.         CE=0;
  235.         
  236.           SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);    // Writes TX_Address to nRF24L01
  237.           SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH); // RX_Addr0 same as TX_Adr for Auto.Ack
  238.           SPI_Write_Buf(WR_TX_PLOAD, tx_buf, TX_PLOAD_WIDTH); // Writes data to TX payload

  239.           SPI_RW_Reg(WRITE_REG + EN_AA, 0x01);      // Enable Auto.Ack:Pipe0
  240.           SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01);  // Enable Pipe0
  241.           SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0x1a); // 500us + 86us, 10 retrans...
  242.           SPI_RW_Reg(WRITE_REG + RF_CH, 40);        // Select RF channel 40
  243.           SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x07);   // TX_PWR:0dBm, Datarate:2Mbps, LNA:HCURR
  244.           SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e);     // Set PWR_UP bit, enable CRC(2 bytes) & Prim:TX. MAX_RT & TX_DS enabled..
  245.         CE=1;

  246. }

  247. void SPI_CLR_Reg(BYTE R_T)
  248. {
  249.           CSN = 0;
  250.         if(R_T==1)                  // CSN low, init SPI transaction
  251.           SPI_RW(FLUSH_TX);             // ..and write value to it..
  252.         else
  253.         SPI_RW(FLUSH_RX);             // ..and write value to it..
  254.           CSN = 1;                   // CSN high again
  255. }

  256. void ifnnrf_CLERN_ALL()
  257. {
  258.   SPI_CLR_Reg(0);
  259.   SPI_CLR_Reg(1);
  260.   SPI_RW_Reg(WRITE_REG+STATUS,0xff);
  261.   IRQ=1;
  262. }

復制代碼




24L01_20KB_PS.rar

112.64 KB, 下載次數: 8, 下載積分: 黑幣 -5

全部程序

評分

參與人數 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲精品一区在线 | 欧美一级毛片在线播放 | 91麻豆精品国产91久久久更新资源速度超快 | 久久国产精品99久久久大便 | 国产精品污污视频 | 国产午夜精品一区二区三区嫩草 | 91久久精品| 国产成人高清成人av片在线看 | 久久久成人免费一区二区 | 午夜小电影 | 成人小视频在线免费观看 | 欧美精品日韩精品 | 国产中文在线观看 | 成人一区在线观看 | caoporn国产精品免费公开 | 国产精品视频播放 | 欧美日韩一区在线 | 久久久久久久一区 | 狠狠入ady亚洲精品经典电影 | 日韩成人在线网站 | 成人欧美一区二区三区在线观看 | 91精品国产91久久久久久吃药 | 亚洲精品2 | 99热热精品| 欧美日韩成人 | 在线看国产 | 美女一级黄 | 伊人久久国产 | 国产无人区一区二区三区 | 91久久精| 日韩三 | 免费 视频 1级 | 国产麻豆一区二区三区 | 亚洲视频在线观看免费 | 精品一区二区三区在线观看国产 | 亚洲女人天堂成人av在线 | 亚洲激情一区二区三区 | 又黑又粗又长的欧美一区 | 亚洲视频在线观看免费 | 中文字幕亚洲区一区二 | 国产日韩精品久久 |