找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4618|回復: 0
收起左側(cè)

無線通訊器件24L01的讀寫寄存器程序

[復制鏈接]
ID:26188 發(fā)表于 2015-6-23 16:21 | 顯示全部樓層 |閱讀模式
讀寫寄存器程序只能工作在待機模式和掉電模式
還有一點非常重要:在上電后要有一個1.5~2毫秒的等待;否則麻煩大了!切記切記。!1,16,與天津開發(fā)區(qū)第四項目部
  1. /*無線模塊定義*/
  2. sbit CE=P1^3;//nrf24l01d的模式控制線在 CSN 為低的情況下,CE 協(xié)同NRF24L01 的CONFIG 寄存器共同決定NRF24L01 的狀態(tài)(參照NRF24L01 的狀態(tài)機)
  3. sbit CSN=P1^4;//nrf24l01d的片選線,低電平有效
  4. sbit IRQ=P1^5;//nrf24l01d的中斷信號

  5. /*SPI定義
  6. */
  7. sbit  SI=P1^0;//MOSI主出-從入
  8. sbit  SO=P1^1;//MISO主入-從出
  9. sbit  SCK=P1^2;// 時鐘信號
  10. /*可謂操作字節(jié)dat定義,用來構(gòu)成最底層的SPT讀寫函數(shù)使用
  11. */
  12. unsigned char bdata dat;
  13. sbit dat_0=dat^0;
  14. sbit dat_1=dat^1;
  15. sbit dat_2=dat^2;
  16. sbit dat_3=dat^3;
  17. sbit dat_4=dat^4;
  18. sbit dat_5=dat^5;
  19. sbit dat_6=dat^6;  
  20. sbit dat_7=dat^7;

  21. /*SPI最底層寫一個字節(jié)函數(shù)
  22. 無返回值
  23. 有參
  24. 帶形參H
  25. */
  26. void delay2ms()//開機延時2MS
  27. {
  28.   unsigned char a,b,c;
  29.     for(c=5;c>0;c--)
  30.         for(b=68;b>0;b--)
  31.             for(a=31;a>0;a--);
  32. }
  33. /*SPI寫一個字節(jié)的最底層函數(shù)
  34. 有參
  35. 無返回值*/
  36. void write_spi_2401(uchar h)//SPI寫一字節(jié)函數(shù)
  37. {
  38.             dat=h;

  39.             SI=dat_7;
  40.    
  41.       SCK=0;   
  42.       SCK=1;
  43.       
  44.      
  45.       SI=dat_6;
  46.      
  47.       SCK=0;
  48.       SCK=1;
  49.       
  50.    
  51.       SI=dat_5;
  52.    
  53.       SCK=0;
  54.       SCK=1;
  55.               

  56.    
  57.       SI=dat_4;
  58.    
  59.       SCK=0;
  60.       SCK=1;
  61.         
  62.      
  63.        SI=dat_3;
  64.    
  65.       SCK=0;
  66.       SCK=1;
  67.         
  68.      
  69.        SI=dat_2;
  70.       
  71.       SCK=0;
  72.       SCK=1;
  73.         

  74.     SI=dat_1;
  75.    
  76.       SCK=0;
  77.       SCK=1;
  78.         
  79.      
  80.     SI=dat_0;
  81.          
  82.       SCK=0;
  83.       SCK=1;
  84.          
  85.    

  86. }
  87. /*
  88. SPI最底層讀取一個字節(jié)
  89. 返回值是讀出的這一個字節(jié)
  90. 無參
  91. */
  92. uchar read_spi_2401()//SPI讀一字節(jié)函數(shù)
  93. {
  94.          SO=1;//初始化SO線

  95.          SCK=1;
  96.    SCK=0;
  97.   
  98.     dat_7=SO;
  99.       
  100.   SCK=1;
  101.   SCK=0;

  102.     dat_6=SO;
  103.       
  104.   SCK=1;
  105.   SCK=0;
  106.    
  107.     dat_5=SO;
  108.      
  109.   SCK=1;
  110.   SCK=0;

  111.    
  112.     dat_4=SO;
  113.    
  114.      SCK=1;   
  115.      SCK=0;
  116.    
  117.    
  118.     dat_3=SO;
  119.    
  120.      SCK=1;
  121.   SCK=0;
  122.   
  123.    
  124.     dat_2=SO;
  125.      
  126.      SCK=1;
  127.   SCK=0;
  128.   
  129.    
  130.     dat_1=SO;
  131.      
  132.      SCK=1;
  133.   SCK=0;
  134.    
  135.     dat_0=SO;
  136.    
  137.    return (dat);//返回讀取數(shù)值

  138. }
  139. /*寫入寄存器命令函數(shù)
  140. 有參
  141. 無返回值
  142. m:表示要操作的寄存器地址
  143. date:表示要向內(nèi)不寫入的數(shù)據(jù)
  144. */
  145. void write_rge_nrf24l01(uchar m,uchar date)
  146. {  
  147.   SCK=0;//時鐘預選拉低
  148.   CSN=1;
  149.   CSN=0; //SPI開
  150.     write_spi_2401((0x20+m));//寫入寫寄存器命令
  151.     write_spi_2401(date);//寫入date指向的寄存器數(shù)據(jù)
  152. CSN=1;//SPI關(guān)

  153. }
  154. /*度寄存器子函數(shù)
  155. 將寄存器的數(shù)值讀出
  156. 有參  M表示要讀的寄存器
  157. 有返回值 返回讀出的數(shù)據(jù)
  158. */
  159. uchar read_reg_nrf24l01(uchar m)
  160. {  uchar date;

  161.    SCK=0;
  162.   CSN=1;
  163.   CSN=0;
  164.     write_spi_2401(m);//讀寄存器
  165. date=read_spi_2401();
  166. CSN=1;

  167. return (date);
  168. }  
  169. void main () //主函數(shù)
  170. {
  171. uchar i;
  172.   delay2ms(); //特別重要!!!不加的話,NRF24L01反應不過來!教訓!。。。20110116終于突破了
  173.   write_rge_nrf24l01(0x00,0x0a);//表示0號寄存器寫入0AH數(shù)據(jù)
  174. i=read_reg_nrf24l01(0x00);//表示讀取0號寄存器數(shù)據(jù)
  175. P0=i;
  176.     while(1);
  177.   
  178. }
復制代碼




回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表