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

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2976|回復(fù): 4
收起左側(cè)

SI4432完整版單片機(jī)源碼與開(kāi)發(fā)文檔分享

[復(fù)制鏈接]
ID:243076 發(fā)表于 2018-8-29 08:52 | 顯示全部樓層 |閱讀模式
分享一個(gè)收集到的完整版的SI4432的源碼與開(kāi)發(fā)文檔等資料。這個(gè)是我自己做過(guò)實(shí)驗(yàn)的完善的可行的版本。

程序功能可以發(fā)也可以收,平時(shí)處于檢測(cè)接收,有信號(hào)就會(huì)接收。而當(dāng)檢測(cè)到按鍵后發(fā)送數(shù)據(jù)LED燈閃爍,對(duì)應(yīng)另一方收到數(shù)據(jù)后判斷是否正確,數(shù)據(jù)正確LED閃爍。并發(fā)送返回?cái)?shù)據(jù)。依次循環(huán)

SI4432-彈簧-1.JPG SI4432-SMA天線.JPG 1117使用說(shuō)明.JPG

單片機(jī)源程序如下:
  1. /*
  2. Demo 程序適用范圍: Si4431F13, Si4432F20, Si4431F27
  3. RF 模塊的參數(shù)設(shè)置為: FSK,  433.5MHz, 1.2KBPS, +/-10PPM, 頻偏:30KHz, 調(diào)制帶寬:61.2KHz
  4. 使能AFC,使能CRC, PH + FIFO 模式, 頭碼:"swwx", 同步字: 0x2d 0xd4
  5. 每秒鐘發(fā)射的固定測(cè)試數(shù)據(jù)為:
  6. 0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x6d,
  7. 0x6d是發(fā)生數(shù)據(jù)的 CheckSum, 0x6d = (0x41 +0x42 +0x43 +0x44 +0x45 +0x46 +0x47 + 0x48 +0x49)
  8. 控制MCU : 8 bit MCU :STC89C52, 11.0592MHZ
  9. */

  10. #include <reg52.h>  //52寄存器
  11. #include<math.h>
  12. #include <intrins.h>

  13. #define  SI4432_PWRSTATE_READY                          01                // 模塊 Ready 狀態(tài)定義
  14. #define  SI4432_PWRSTATE_TX                                      0x09                // 模塊 發(fā)射狀態(tài)定義
  15. #define  SI4432_PWRSTATE_RX                                      05                // 模塊 接收狀態(tài)定義
  16. #define  SI4432_PACKET_SENT_INTERRUPT              04                // 模塊 發(fā)射完成中斷
  17. #define  SI4432_Rx_packet_received_interrupt  0x02      // 模塊 收到數(shù)據(jù)包中斷

  18. #define  TX1_RX0        spi_rw(0x0e|0x80, 0x01)                // 發(fā)射狀態(tài)的天線開(kāi)關(guān)定義
  19. #define  TX0_RX1        spi_rw(0x0e|0x80, 0x02)                // 接收狀態(tài)的天線開(kāi)關(guān)定義
  20. #define  TX0_RX0        spi_rw(0x0e|0x80, 0x00)         // 非發(fā)射,接收狀態(tài)的天線開(kāi)關(guān)定義

  21. //========================================SI4432與MCU連接========================================
  22. sbit SDN   = P3^3;
  23. sbit nIRQ  = P1^4;
  24. sbit nSEL  = P1^3;
  25. sbit SCK   = P1^2;
  26. sbit SDI   = P1^1;
  27. sbit SDO   = P1^0;
  28. //========================================按鍵端口===============================================
  29. sbit KEY   = P3^6;
  30. //========================================LED顯示端口============================================
  31. sbit LED   = P3^4;

  32. unsigned char ItStatus1, ItStatus2;
  33. unsigned char rf_timeout;
  34. unsigned char rx_buf[15];

  35. // 檢測(cè)到按鍵后發(fā)射的固定內(nèi)容的測(cè)試信號(hào),第10個(gè)數(shù)據(jù)是前9個(gè)數(shù)據(jù)的校驗(yàn)和
  36. const unsigned char tx_test_data[10] = {0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x6d};  
  37. //===============================================================================================
  38. typedef struct
  39. {
  40.        
  41.         unsigned char reach_1s                                : 1;
  42.         unsigned char rf_reach_timeout                : 1;
  43.         unsigned char is_tx                                        : 1;
  44.        
  45.        
  46. }        FlagType;

  47. FlagType   Flag;

  48. //==============================================函數(shù)申明===========================================
  49. void delay_1ms(unsigned char time);
  50. unsigned char spi_byte(unsigned char TRdata);
  51. unsigned char spi_rw(unsigned char addr, unsigned char TRdata);
  52. void rx_data(void);
  53. void tx_data(void);
  54. void SI4432_init(void);
  55. //================================================延時(shí)函數(shù)=========================================
  56. void delay_1ms(unsigned char time)
  57. {
  58.         unsigned char i,k;
  59.         for(k = 0; k< time; k++)
  60.         {
  61.                 for(i = 0; i<130; i++)
  62.                 {
  63.                          _nop_();
  64.                 }
  65.         }               
  66. }       
  67. //===============================================SPI讀寫函數(shù)=======================================

  68. unsigned char spi_byte(unsigned char TRdata)
  69. {
  70.         unsigned char i;
  71.        
  72.         for (i = 0; i < 8; i++)                                // 控制SCK 和 SDI,發(fā)射一個(gè)字節(jié)的命令,同事讀取1個(gè)字節(jié)的數(shù)據(jù)
  73.         {                                                                        // 沒(méi)有包括nSEL的控制
  74.                 if (TRdata & 0x80)
  75.                         SDI = 1;
  76.                 else
  77.                         SDI = 0;
  78.                        
  79.                 TRdata <<= 1;
  80.                 SCK = 1;
  81.                
  82.                 if (SDO)
  83.                         TRdata |= 0x01;
  84.                 else
  85.                         TRdata &= 0xfe;
  86.                        
  87.                 SCK = 0;
  88.         }
  89.        
  90.         return (TRdata);
  91. }
  92. //-------------------------------------------對(duì)寄存器讀寫操作===========================================
  93. unsigned char spi_rw(unsigned char addr, unsigned char TRdata)
  94. {
  95.         unsigned char i;
  96.        
  97.         SCK = 0;
  98.         nSEL = 0;
  99.        
  100.         for (i = 0; i < 8; i++)
  101.         {
  102.                 if (addr & 0x80)
  103.                         SDI = 1;
  104.                 else
  105.                         SDI = 0;
  106.                 addr <<= 1;
  107.                 SCK = 1;
  108.                 _nop_();
  109.                 SCK = 0;
  110.         }
  111. //======================================================================================================       
  112.         for (i = 0; i < 8; i++)
  113.         {
  114.                 if (TRdata & 0x80)
  115.                         SDI = 1;
  116.                 else
  117.                         SDI = 0;
  118.                 TRdata <<= 1;
  119.                 SCK = 1;
  120.                 if (SDO)
  121.                         TRdata |= 0x01;
  122.                 else
  123.                         TRdata &= 0xfe;
  124.                 SCK = 0;
  125.         }
  126.         nSEL = 1;
  127.         SCK = 1;
  128.         return (TRdata);
  129. }
  130. //=========================================接收數(shù)據(jù)================================================
  131.   
  132. void rx_data(void)
  133. {       

  134.         Flag.is_tx = 0;
  135.         spi_rw(0x07|0x80, SI4432_PWRSTATE_READY);        //進(jìn)入 Ready 模式
  136.         delay_1ms(5);               
  137.         TX0_RX1;                                                                        // 設(shè)置天線開(kāi)關(guān)
  138.         spi_rw(0x08|0x80, 0x03);                                          //清發(fā)射,接收緩沖區(qū)
  139.         spi_rw(0x08|0x80, 0x00);                                          //清發(fā)射,接收緩沖區(qū)
  140.                
  141.         spi_rw(0x07|0x80,SI4432_PWRSTATE_RX );          // RF 模塊進(jìn)入接收模式
  142.        
  143.         spi_rw(0x05|0x80, SI4432_Rx_packet_received_interrupt);  // RF模塊收到整包數(shù)據(jù)后,產(chǎn)生中斷
  144.                
  145.         ItStatus1 = spi_rw(0x03,0x00);                                //清掉現(xiàn)有的中斷標(biāo)志
  146.         ItStatus2 = spi_rw(0x04,0x00);                                //清掉現(xiàn)有的中斷標(biāo)志
  147.                
  148. }       
  149. //=========================================發(fā)送數(shù)據(jù)================================================
  150. void tx_data(void)
  151. {
  152.         unsigned char i;
  153.        
  154.         Flag.is_tx = 1;
  155.         spi_rw(0x07|0x80, SI4432_PWRSTATE_READY);        // rf 模塊進(jìn)入Ready 模式

  156.         TX1_RX0;                //設(shè)置天線開(kāi)關(guān)的方向
  157.        
  158.         delay_1ms(5);                // 延時(shí) 5ms, 讓系統(tǒng)穩(wěn)定
  159.        
  160.         spi_rw(0x08|0x80, 0x03);  //
  161.         spi_rw(0x08|0x80, 0x00);  // 清發(fā)射,接收緩沖區(qū)
  162.                        
  163.         spi_rw(0x34|0x80, 40);    // 發(fā)射40個(gè)Nibble 的前導(dǎo)碼
  164.         spi_rw(0x3e|0x80, 10);    // 總共發(fā)射10個(gè)字節(jié)的數(shù)據(jù)
  165.           for (i = 0; i<10; i++)
  166.         {
  167.                 spi_rw(0x7f|0x80, tx_test_data[i]);         // 將要發(fā)射的數(shù)據(jù)載入緩沖區(qū)
  168.         }
  169.         spi_rw(0x05|0x80, SI4432_PACKET_SENT_INTERRUPT);        // 整包數(shù)據(jù)發(fā)射完后,產(chǎn)生中斷
  170.         ItStatus1 = spi_rw(0x03,0x00);                // 清RF模塊中斷       
  171.         ItStatus2 = spi_rw(0x04,0x00);
  172.         spi_rw(0x07|0x80, SI4432_PWRSTATE_TX);  // 進(jìn)入發(fā)射模式
  173. //        delay_1ms(5);       

  174.         rf_timeout = 0;
  175.         Flag.rf_reach_timeout = 0;

  176.         nIRQ=1;

  177.         while(nIRQ)                // 等待中斷
  178.         {
  179.                
  180.                 if(Flag.rf_reach_timeout)
  181.                 {
  182.                        
  183.                         SDN  = 1;                //如果0.5秒還沒(méi)有中斷,則RF模塊工作不正常,重新復(fù)位并初始化模塊
  184.                         delay_1ms(10);
  185.                         SDN = 0;
  186.                         delay_1ms(200);
  187.                        
  188.                         SI4432_init();
  189.                         break;                // 則強(qiáng)制跳出
  190.                 }
  191.                        
  192.         }
  193.        

  194.    // rx_data();                //rf 發(fā)射完成,進(jìn)入接收模式
  195. }       
  196. //==========================================================================================================
  197. void SI4432_init(void)
  198. {
  199.        
  200.         ItStatus1 = spi_rw(0x03,0x00);                                // 清RF模塊中斷       
  201.         ItStatus2 = spi_rw(0x04,0x00);
  202.        
  203.         spi_rw(0x06|0x80, 0x00);                                          //  關(guān)閉不需要的中斷
  204.        
  205.         spi_rw(0x07|0x80, SI4432_PWRSTATE_READY);   // 進(jìn)入 Ready 模式
  206.          
  207.         spi_rw(0x09|0x80, 0x7f);                                          //  負(fù)載電容= 12P

  208.         spi_rw(0x0a|0x80, 0x05);                                        // 關(guān)閉低頻輸出
  209.         spi_rw(0x0b|0x80, 0xea);                                         // GPIO 0 當(dāng)做普通輸出口
  210.         spi_rw(0x0c|0x80, 0xea);                                         // GPIO 1 當(dāng)做普通輸出口       
  211.         spi_rw(0x0d|0x80, 0xf4);                                          // GPIO 2 輸出收到的數(shù)據(jù)
  212.        
  213.         spi_rw(0x70|0x80, 0x2c);                                          // 下面的設(shè)置根據(jù)Silabs 的Excel
  214.         spi_rw(0x1d|0x80, 0x40);                                          // 使能 afc
  215.                
  216. //======================================1.2K bps setting start===============================================
  217.         spi_rw(0x1c|0x80, 0x16);       
  218.                
  219.         spi_rw(0x20|0x80, 0x83);            
  220.         spi_rw(0x21|0x80, 0xc0);
  221.         spi_rw(0x22|0x80, 0x13);
  222.         spi_rw(0x23|0x80, 0xa9);
  223.         spi_rw(0x24|0x80, 0x00);
  224.         spi_rw(0x25|0x80, 0x04);
  225.        
  226.         spi_rw(0x2a|0x80, 0x14);
  227.         spi_rw(0x6e|0x80, 0x09);
  228.         spi_rw(0x6f|0x80, 0xd5);       
  229. //=====================================1.2K bps setting end        ===============================================               
  230.         spi_rw(0x30|0x80, 0x8c);   // 使能PH+ FIFO模式,高位在前面,使能CRC校驗(yàn)
  231.                                         
  232.         spi_rw(0x32|0x80, 0xff);  // byte0, 1,2,3 作為頭碼
  233.          
  234.         spi_rw(0x33|0x80, 0x42);//  byte 0,1,2,3 是頭碼,同步字3,2 是同步字
  235.                
  236.         spi_rw(0x34|0x80, 16);  // 發(fā)射16個(gè)Nibble的Preamble
  237.         spi_rw(0x35|0x80, 0x20);  // 需要檢測(cè)4個(gè)nibble的Preamble
  238.         spi_rw(0x36|0x80, 0x2d);  // 同步字為 0x2dd4
  239.         spi_rw(0x37|0x80, 0xd4);
  240.         spi_rw(0x38|0x80, 0x00);
  241.         spi_rw(0x39|0x80, 0x00);
  242.         spi_rw(0x3a|0x80, 's');   // 發(fā)射的頭碼為: “swwx"
  243.         spi_rw(0x3b|0x80, 'w');
  244.         spi_rw(0x3c|0x80, 'w');
  245.         spi_rw(0x3d|0x80, 'x');
  246.         spi_rw(0x3e|0x80, 10);    // 總共發(fā)射10個(gè)字節(jié)的數(shù)據(jù)
  247.         spi_rw(0x3f|0x80, 's');   // 需要校驗(yàn)的頭碼為:”swwx"
  248.         spi_rw(0x40|0x80, 'w');
  249.         spi_rw(0x41|0x80, 'w');
  250.         spi_rw(0x42|0x80, 'x');
  251.         spi_rw(0x43|0x80, 0xff);  // 頭碼1,2,3,4 的所有位都需要校驗(yàn)
  252.         spi_rw(0x44|0x80, 0xff);  //
  253.         spi_rw(0x45|0x80, 0xff);  //
  254.         spi_rw(0x46|0x80, 0xff);  //
  255.         spi_rw(0x6d|0x80, 0x07);  // 設(shè)置為最大功率發(fā)射

  256.         spi_rw(0x79|0x80, 0x0);  // 不需要跳頻
  257.         spi_rw(0x7a|0x80, 0x0);  // 不需要跳頻
  258.        
  259.         spi_rw(0x71|0x80, 0x22); // 發(fā)射不需要 CLK,F(xiàn)iFo , FSK模式
  260.                        
  261.         spi_rw(0x72|0x80, 0x30);  // 頻偏為 30KHz       

  262.         spi_rw(0x73|0x80, 0x0);  // 沒(méi)有頻率偏差
  263.         spi_rw(0x74|0x80, 0x0);  // 沒(méi)有頻率偏差
  264.                
  265.         spi_rw(0x75|0x80, 0x53);  // 頻率設(shè)置 434
  266.         spi_rw(0x76|0x80, 0x57);  //
  267.         spi_rw(0x77|0x80, 0x80);       
  268. }
  269. //=================================================主函數(shù)==========================================
  270. void main()
  271. {
  272.        

  273.         unsigned char  i, chksum;
  274.         SDN = 1;
  275.         delay_1ms(10);        // RF 模塊上電復(fù)位
  276.         SDN = 0;
  277.         delay_1ms(200);        // 延時(shí)200ms RF 模塊進(jìn)入工作狀態(tài)
  278.         SI4432_init();  // RF 模塊初始化        
  279.         TX0_RX0;        // 天線開(kāi)關(guān)不在發(fā)射,接收狀態(tài)
  280.         rx_data();       
  281.         Flag.reach_1s = 0;       
  282.         while(1)
  283.         {               
  284.                 if(KEY==0)
  285.                 {
  286.                 //        Flag.reach_1s = 0;
  287.                         tx_data();                // 每間隔一段時(shí)間,發(fā)射一包數(shù)據(jù),并接收 Acknowledge 信號(hào)
  288.                         LED=0;  delay_1ms(200);  LED=1        ; delay_1ms(200);
  289.                         rx_data();                //rf 發(fā)射完成,進(jìn)入接收模式
  290.                 }


  291.                 if(!Flag.is_tx)
  292.        
  293.                 {
  294.                         nIRQ=1;
  295.                         if(!nIRQ)
  296.                         {        
  297.                                 ItStatus1 = spi_rw(0x03,0x00);        // 清中斷                                                                                        //read the Interrupt Status1 register
  298.                                 ItStatus2 = spi_rw(0x04,0x00);        // 清中斷
  299.                                
  300.                                 SCK = 0;
  301.                                 nSEL = 0;
  302.                                 spi_byte(0x7f);                // 從緩沖區(qū)讀數(shù)據(jù)
  303.                                 for(i = 0;i<10;i++)       
  304.                                 {
  305.                                         rx_buf[i] = spi_byte(0x00);
  306.                                 }
  307.                                 nSEL = 1;
  308.                                
  309. ……………………

  310. …………限于本文篇幅 余下代碼請(qǐng)從51黑下載附件…………
復(fù)制代碼
0.png

所有資料51hei提供下載:
SI4432無(wú)線評(píng)估開(kāi)發(fā)包.rar (1.5 MB, 下載次數(shù): 68)


評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

ID:243076 發(fā)表于 2018-8-29 08:52 | 顯示全部樓層
有需要的下載吧
回復(fù)

使用道具 舉報(bào)

ID:261483 發(fā)表于 2020-4-26 17:19 | 顯示全部樓層
謝謝 已下載 ~
回復(fù)

使用道具 舉報(bào)

ID:787412 發(fā)表于 2020-6-23 11:14 | 顯示全部樓層
正需要這個(gè)東東,標(biāo)記一下.
回復(fù)

使用道具 舉報(bào)

ID:774633 發(fā)表于 2020-6-23 13:50 | 顯示全部樓層
謝謝,已下載
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 亚洲一区免费 | 国产资源在线视频 | 久久国产精品一区二区三区 | 亚洲一区二区三区免费视频 | 爱高潮www亚洲精品 中文字幕免费视频 | 五月婷婷在线视频 | 精品国产乱码一区二区三区 | 激情国产在线 | 欧美一区二区小视频 | 五月槐花香 | 久久久久国产精品 | 大香在线伊779 | 欧美日韩在线一区二区 | 日本免费网 | 岛国视频 | 青青草社区 | 免费黄色大片 | 久久99国产精一区二区三区 | 电影午夜精品一区二区三区 | 九九综合 | 免费观看黄 | av手机免费在线观看 | 黄网站免费入口 | 国产精品久久久久久久久久 | 国产高清在线观看 | 国产日产精品一区二区三区四区 | 亚洲一区二区三区免费在线观看 | 欧洲一区在线观看 | 国产精品美女久久久久久免费 | 18成人在线观看 | 久久久久国产精品一区三寸 | 中文字幕日韩一区二区 | 久久这里只有精品首页 | 麻豆一区二区三区精品视频 | 九九综合 | 成人精品一区二区三区中文字幕 | 欧美精品一区在线发布 | 一级在线 | 99久久日韩精品免费热麻豆美女 | 亚洲 欧美 日韩 精品 | 欧洲精品在线观看 |