久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

    MSP430 nrf2401代碼,第一次好好的分析

     筱肆 2013-01-28

    MSP430+nrf2401代碼,第一次好好的分析

    分類: C 417人閱讀 評論(6) 收藏 舉報

    畫外音:Windows Live Writer客戶端連不到csdn的服務端,只好網頁寫了。但是……搜狗輸入法在chrome瀏覽器里面居然不能用搜狗輸入法在bolg編輯框里面輸入中文,看來只好下載Google輸入法用了??磥黼xGoogle人更近一步了。

     

     

    正事開始了。

     

     

    看陌生代碼還是source insight方便,而且剛開始用沒多久,還處于蜜月期,總覺得這工具相當不錯的啦。當然,Linux平臺還是vim+ctags用起來爽。調用關系顯示的很清楚,只是屏幕小了點,看著確實少了點,上網本,就將就點吧。

     

    兩個單片機,兩個文件代碼。第一件事就是找main函數。呃,main函數放在最后,跟個人習慣很不一樣。

     

    1. void main(void)  
    2. {  
    3.     WDTCTL=WDTPW+WDTHOLD;  
    4.     _DINT();  
    5.     Init_Port1();  
    6.     IO_Init();  
    7.     LCD_Init();  
    8.     CLEAR();  
    9.     ……  
    10. }  
     

    第一件事是殺狗,嗯嗯,以后一直要記得。

    先禁止中斷,然后把該初始化的初始化好,單片機才能好好工作么~

    然后是端口和芯片的初始化,由于功能比較單一,只要三個初始化函數就好了。

     

    然后是顯示開機界面的顯示,液晶屏顯示還是很不錯的

    [c-sharp] view plaincopy?
    1.     key11='M';  
    2. // LCDL='安';   
    3.     //漢字顯示示例   
    4.     writechinese(0x80,"XX大學");  
    5.     writechinese(0x90,"XX學院");  
    6.     writechinese(0x88,"無線監測模擬裝置");  
    7.     Delayus(100000);  
    8.     CLEAR();  
    9.     writechinese(0x80,"調試接收模式");  
    10. //writechinese(0x90,"1-單獨探測節點");   
    11. //writechinese(0x88,"2-輪巡模式");   
    12.     keyflg=0;  
    13.     bostart=0x00;  
    14.     boflg=0x00;  
    15.     key_Init();  
     

     

    順便設置了一下初始參數和鍵盤接口,下面就是設置無線接收模塊的設置(根據函數名猜功能,畢竟第一步是把main函數看完)

    [c-sharp] view plaincopy?
    1. Init_nRF24L01_IO();  
    2. nRF24L01_RX_MODE();  
    3. nRF24L01_Set_Rx_Address(nRF24L01_W_REGISTER+nRF24L01_RX_ADDR_P0,Rx_Address,5);  
    4. nRF24L01_Flush_RX_FIFO();  
    5. nRF24L01_CE_1;  
    6. _EINT();  
     

    IO接口設置好,無線模塊模式設置好,再把接收的內存區設置好,然后開啟中斷。

    啦啦啦,之后就開始等著另一片發數據過來處理。

     

    1. do  
    2.     {  
    3.         key11='w' ;  
    4.         key_read();  
    5.     }  
    6.     while(1);  
     

     

    類似消息循環模式,不過是死循環,看來要關機就只能直接斷電了,反正小東西玩不壞,嘿嘿~

     

    第二個發射模塊的單片機程序就相對簡單點,就是少了幾行代碼。具體的沒跟蹤進去看,看來兩個功能的差距就在key_read()函數里面了。

    1. key_Init();  
    2. Init_nRF24L01_IO();  
    3. _EINT();  
    4. do  
    5. {  
    6.     key11='w' ;  
    7.     key_read();  
    8. }  
    9. while(1);  
     

     

     

     

    main函數結束了,然后就是各個函數進去看了

     

    先看看接收和發送這兩個中斷函數

     

    1. #pragma vector=PORT1_VECTOR   
    2. __interrupt void P1_ISR(void)  
    3. {  
    4.     _DINT();  
    5.     P1IFG=0;  
    6.     P1IE=0;  
    7.     P1IES=0;  
    8.     Delayus(500);  
    9.     CLEAR();  
    10.     writechinese(0x80,"正在接收");  
    11.     nRF24L01SpiWriteReg(nRF24L01_W_REGISTER+nRF24L01_STATUS,0x4e);//Reset_Rx_DS   
    12.     nRF24L01_Read_Rx_Payload(Rx_Buff,3);  
    13.     nRF24L01_Flush_RX_FIFO();  
    14.     print_data();  
    15.     writechinese(0x88,"接收成功");  
    16.     IO_Init();  
    17.     Init_Port1();  
    18.     _EINT();  
    19. }  
     

     

    1. #pragma vector=PORT1_VECTOR   
    2. __interrupt void P1_ISR(void)  
    3. {  
    4.     _DINT();  
    5.     P1IFG=0;  
    6.     P1IE=0;  
    7.     P1IES=0;  
    8.     Delayus(500);  
    9.     writechinese(0x88,"發送成功");  
    10.     IO_Init();  
    11.     Init_Port1();  
    12.     _EINT();  
    13. }  
     

     

    #pragma這個不熟悉,呃……看來C語言沒學好。

    不寫了,先到這里,明天慢慢看。

     

    (key_read()函數怎么看怎么想重寫,風格問題吧)

     

     

     

    ====================================================================

    第二天了。。。

    花了大力氣把key_read()函數重寫了一遍,個人感覺舒服多了,把大量的if-else改為switch,應該好理解多了。

    順便把變量key11改為keyCol,這個看起來就明白多了。

     

     

    1. void key_read()  
    2. {  
    3.          
    4.     //第一排掃描   
    5.     P6OUT=0x18 ;  
    6.     Delayus(100);  
    7.     key0=P5IN&0x70 ;  
    8.       
    9.     switch ( key0 )  
    10.         {  
    11.         case 0x30:  
    12.             keyCount = '1';  
    13.             switch ( keyflg )  
    14.                 {  
    15.                 case 0:  
    16.                     CLEAR();  
    17.                     writechinese(0x80,"單獨探測節點");  
    18.                     writechinese(0x90,"1-選擇1#節點");  
    19.                     writechinese(0x88,"2-選擇2#節點");  
    20.                     writechinese(0x98,"g-返回主菜單");  
    21.                     keyflg=1 ;  
    22.                     break;  
    23.                 case 1:  
    24.                     CLEAR();  
    25.                     writechinese(0x80,"尋檢1#節點");  
    26.                     // Tx_Address[5]={100,101,102,103,111};   
    27.                     writechinese(0x90,"d-確認,g-返回");  
    28.                     keyflg=2 ;  
    29.                     break;  
    30.                 }  
    31.             break;  
    32.         case 0x40:  
    33.             keyCount = '2';  
    34.             switch ( keyflg )  
    35.                 {  
    36.                 case 0:                   
    37.                     CLEAR();  
    38.                     writechinese(0x80,"輪尋模式");  
    39.                     writechinese(0x90,"d-確認,g-返回");  
    40.                     keyflg=4 ;  
    41.                     break;  
    42.                 case 1:                   
    43.                     CLEAR();  
    44.                     writechinese(0x80,"尋檢2#節點");  
    45.                     writechinese(0x90,"d-確認,g-返回");  
    46.                     keyflg=3 ;  
    47.                     break;  
    48.                 }  
    49.               
    50.         case 0x50:  
    51.             keyCount = '3' ;  
    52.             break;  
    53.         case 0x60:  
    54.             keyCount = '4' ;  
    55.             break;  
    56.         }  
    57.     if ( keyCount )  
    58.         {  
    59.         Delayus(KEY_DEALY);  
    60.         }  
    61. //第一排掃描結束   
    62.   
    63.     //第二排掃描   
    64.     P6OUT=0x20 ;  
    65.     Delayus(100);  
    66.     key0=P5IN&0x70 ;  
    67.     switch ( key0 )  
    68.         {  
    69.         case 0x30:  
    70.             keyCount='5' ;  
    71.             CLEAR();  
    72.             nRF24L01_TX_MODE();  
    73.             nRF24L01_Set_Rx_Address(nRF24L01_W_REGISTER+nRF24L01_RX_ADDR_P0,Tx_Address,5);  
    74.             writechinese(0x80,"正在發送");  
    75.             nRF24L01_Flush_TX_FIFO();  
    76.             nRF24L01_Set_Tx_Address(nRF24L01_W_REGISTER+nRF24L01_TX_ADDR,Tx_Address,5);  
    77.             // 指定接收方的地址   
    78.             nRF24L01_Write_Tx_Payload(Tx_Payload,3);  
    79.             //把1 字節數據放入FIFO    
    80.             nRF24L01_Transmit_Data();  
    81.             //啟動發送,發送完成后進入Standby-I 模式   
    82.             print_data();  
    83.             break;  
    84.         case 0x40:  
    85.             {  
    86.                 ulong buffer ;  
    87.                 uchar i ;  
    88.                 keyCount='6' ;  
    89.                 CLEAR();  
    90.                 writechinese(0x80,"當前溫度");  
    91.                 buffer=convert();  
    92.                 print_tmp(buffer);  
    93.                 for(i=0;i<8;i++)  
    94.                 {  
    95.                     Tx_Payload[1]=Tx_Payload[1]<<1 ;  
    96.                     if(buffer&BITF?1:0)  
    97.                     Tx_Payload[1]|=1 ;  
    98.                     buffer=buffer<<1 ;  
    99.                 }  
    100.                 for(i=0;i<8;i++)  
    101.                 {  
    102.                     Tx_Payload[0]=Tx_Payload[0]<<1 ;  
    103.                     if(buffer&BITF?1:0)  
    104.                     Tx_Payload[0]|=1 ;  
    105.                     buffer=buffer<<1 ;  
    106.                 }  
    107.                 // print_tmp1();   
    108.             }  
    109.             break;  
    110.         case 0x50:  
    111.             keyCount = '7' ;  
    112.             break;  
    113.         case 0x60:  
    114.             keyCount = '8' ;  
    115.             break;  
    116.         }  
    117.     if ( keyCount)  
    118.         {  
    119.         Delayus(KEY_DEALY);  
    120.         }  
    121.   
    122. //第二排掃描結束   
    123.       
    124.     //第三排掃描   
    125.     P6OUT=0x28 ;  
    126.     Delayus(100);  
    127.     key0=P5IN&0x70 ;  
    128.     switch ( key0 )  
    129.         {  
    130.         case 0x30:  
    131.             keyCount = '9' ;  
    132.             break;  
    133.         case 0x40:  
    134.             keyCount = 'A' ;  
    135.             break;  
    136.         case 0x50:  
    137.             keyCount = 'B' ;  
    138.             break;  
    139.         case 0x60:  
    140.             keyCount = 'C' ;  
    141.             break;  
    142.         }  
    143.       
    144.     if ( keyCount)  
    145.         {  
    146.         Delayus(KEY_DEALY);  
    147.         }  
    148.       
    149.     //第三排掃描結束   
    150.       
    151.     //第四排掃描   
    152.     P6OUT=0x30 ;  
    153.     Delayus(100);  
    154.     key0=P5IN&0x70 ;  
    155.     switch ( key0 )  
    156.         {  
    157.         case 0x30:  
    158.             keyCount = 'D';  
    159.             switch ( keyflg )  
    160.                 {  
    161.                 case 2:  
    162.                       
    163.                     CLEAR();  
    164.                     writechinese(0x80,"發送1#節點請求");  
    165.                     nRF24L01_TX_MODE();  
    166.                     nRF24L01_Set_Rx_Address(nRF24L01_W_REGISTER+nRF24L01_RX_ADDR_P0,Tx_Address1,5);  
    167.                     nRF24L01_Flush_TX_FIFO();  
    168.                     nRF24L01_Set_Tx_Address(nRF24L01_W_REGISTER+nRF24L01_TX_ADDR,Tx_Address1,5);  
    169.                     // 指定接收方的地址   
    170.                     nRF24L01_Write_Tx_Payload(Tx_Payload,3);  
    171.                     //把1 字節數據放入FIFO    
    172.                     nRF24L01_Transmit_Data();  
    173.                     //啟動發送,發送完成后進入Standby-I 模式   
    174.                       
    175.                     Init_nRF24L01_IO();  
    176.                     nRF24L01_RX_MODE();  
    177.                     //等待接收   
    178.                     nRF24L01_Set_Rx_Address(nRF24L01_W_REGISTER+nRF24L01_RX_ADDR_P0,Rx_Address,5);  
    179.                     nRF24L01_Flush_RX_FIFO();  
    180.                     nRF24L01_CE_1 ;  
    181.                     key_isr=1 ;  
    182.                     _EINT();  
    183.                     do   
    184.                     {  
    185.                         keyCount='w' ;  
    186.                         key_read();  
    187.                           
    188.                     }  
    189.                     while(1);  
    190.                     //發送1號節點請求   
    191.                     break;  
    192.                 case 3:  
    193.                       
    194.                     CLEAR();  
    195.                     writechinese(0x80,"發送2#節點請求");  
    196.                     nRF24L01_TX_MODE();  
    197.                     nRF24L01_Set_Rx_Address(nRF24L01_W_REGISTER+nRF24L01_RX_ADDR_P0,Tx_Address2,5);  
    198.                     nRF24L01_Flush_TX_FIFO();  
    199.                     nRF24L01_Set_Tx_Address(nRF24L01_W_REGISTER+nRF24L01_TX_ADDR,Tx_Address2,5);  
    200.                     // 指定接收方的地址   
    201.                     nRF24L01_Write_Tx_Payload(Tx_Payload,3);  
    202.                     //把1 字節數據放入FIFO    
    203.                     nRF24L01_Transmit_Data();  
    204.                     //啟動發送,發送完成后進入Standby-I 模式   
    205.                     Init_nRF24L01_IO();  
    206.                     nRF24L01_RX_MODE();  
    207.                     //等待接收   
    208.                     nRF24L01_Set_Rx_Address(nRF24L01_W_REGISTER+nRF24L01_RX_ADDR_P0,Rx_Address,5);  
    209.                     nRF24L01_Flush_RX_FIFO();  
    210.                     nRF24L01_CE_1 ;  
    211.                     key_isr=1 ;  
    212.                     _EINT();  
    213.                     do   
    214.                     {  
    215.                         keyCount='w' ;  
    216.                         key_read();  
    217.                           
    218.                     }  
    219.                     while(1);  
    220.                     //發送2號節點請求   
    221.                     break;  
    222.                 case 4:  
    223.                       
    224.                     CLEAR();  
    225.                     writechinese(0x80,"發送1#節點請求");  
    226.                       
    227.                     keyflg=2 ;  
    228.                       
    229.                     Delayus(20000);  
    230.                     writechinese(0x80,"發送2#節點請求");  
    231.                       
    232.                     keyflg=3 ;  
    233.                     _EINT();  
    234.                     break;  
    235.                 }  
    236.             break;  
    237.         case 0x40:  
    238.             keyCount = 'E' ;  
    239.             break;  
    240.         case 0x50:  
    241.             keyCount = 'F' ;  
    242.             break;  
    243.         case 0x60:  
    244.             keyCount = 'G' ;  
    245.             CLEAR();  
    246.             writechinese(0x80,"江南大學");  
    247.             writechinese(0x90,"通信與控制工程");  
    248.             writechinese(0x88,"無線監測模擬裝置");  
    249.             Delayus(100000);  
    250.             CLEAR();  
    251.             writechinese(0x80,"選擇接受模式");  
    252.             writechinese(0x90,"1-單獨探測節點");  
    253.             writechinese(0x88,"2-輪巡模式");  
    254.             keyflg=0 ;  
    255.             Delayus(30000);  
    256.             Init_nRF24L01_IO();  
    257.             break;  
    258.         }  
    259.   
    260. //第四排掃描結束   
    261.     if ( keyCount)  
    262.         {  
    263.         Delayus(KEY_DEALY);  
    264.         }  
    265.       
    266. }  
     

    dealyus(uint)函數里面用了宏定義,不然鍵盤延遲太嚴重了,以后慢慢調試。

     

    下面就看的是NRF2401的功能了,看看貌似沒問題。嗯嗯略過

     

     

    然后就是傳感器端的溫度和光照模塊的調試,實際測試看來數據還是不對啊,趕緊改啦。

     

     

    先發表了,沒空在這邊碼字堆博客了,要調試的東西多著呢

      本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發現有害或侵權內容,請點擊一鍵舉報。
      轉藏 分享 獻花(0

      0條評論

      發表

      請遵守用戶 評論公約

      類似文章 更多

      主站蜘蛛池模板: 日韩放荡少妇无码视频| 好吊妞国产欧美日韩免费观看| 免费高清特级毛片A片| 16女下面流水不遮视频| 亚洲真人无码永久在线| 久久天天躁狠狠躁夜夜婷 | 肥臀浪妇太爽了快点再快点| 国产精品SM捆绑调教视频| 亚洲一区二区三区无码中文字幕| 国产一区二区三区不卡AV| 成人福利国产午夜AV免费不卡在线| 人人妻人人澡人人爽欧美一区| 午夜高清福利在线观看| 午夜免费国产体验区免费的| 蜜臀av无码一区二区三区| 国产裸体美女视频全黄| 男女xx00上下抽搐动态图| 午夜在线观看免费观看 视频| 亚洲AV综合色区无码另类小说| 亚洲精品无码久久千人斩| 全免费A级毛片免费看无码| 最新中文乱码字字幕在线| 亚洲国产精品尤物YW在线观看| 免费人成网站免费看视频| 亚洲综合激情另类小说区| 亚洲A综合一区二区三区| 2021国产成人精品久久| 国产无套护士在线观看| 亚洲国产午夜福利精品| 人人妻人人添人人爽欧美一区 | 在线国产精品中文字幕| 亚洲夂夂婷婷色拍WW47| 亚洲国产欧美一区二区好看电影| 一二三四在线视频观看社区| 免费AV片在线观看网址| 色婷婷婷亚洲综合丁香五月| 啊轻点灬大JI巴太粗太长了欧美| 日韩精品国产二区三区| 特黄A又粗又大又黄又爽A片 | 天堂mv在线mv免费mv香蕉| 夜色爽爽影院18禁妓女影院|