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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

msp430f5529單片機hc-sr04超聲波模塊程序 串口輸出

[復制鏈接]
跳轉到指定樓層
樓主
ID:1039180 發(fā)表于 2022-7-11 19:55 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
測距并通過串口打印的例程

單片機源程序如下:

  1. #include "User_Uart.h"
  2. #include "driverlib.h"

  3. void UCS_Init(void)
  4. {
  5. //    P1DIR |= BIT0;                          // ACLK set out to pins
  6. //    P1SEL |= BIT0;
  7.     P2DIR |= BIT2;                            // SMCLK set out to pins
  8.     P2SEL |= BIT2;
  9. //    P7DIR |= BIT7;                          // MCLK set out to pins
  10. //    P7SEL |= BIT7;

  11.     P5SEL |= BIT2+BIT3;                       // Port select XT2

  12.     UCSCTL6 &= ~XT2OFF;                       // Enable XT2
  13.     UCSCTL3 |= SELREF_2;                      // FLLref = REFO
  14.                                               // Since LFXT1 is not used,
  15.                                               // sourcing FLL with LFXT1 can cause
  16.                                               // XT1OFFG flag to set
  17.     UCSCTL4 |= SELA_2;                        // ACLK=REFO,SMCLK=DCO,MCLK=DCO

  18.     // Loop until XT1,XT2 & DCO stabilizes - in this case loop until XT2 settles
  19.     do
  20.     {
  21.       UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG);
  22.                                               // Clear XT2,XT1,DCO fault flags
  23.       SFRIFG1 &= ~OFIFG;                      // Clear fault flags
  24.     }while (SFRIFG1&OFIFG);                   // Test oscillator fault flag

  25.     UCSCTL6 &= ~XT2DRIVE0;                    // Decrease XT2 Drive according to
  26.                                               // expected frequency
  27.     UCSCTL4 |= SELS_5 + SELM_5;               // SMCLK=MCLK=XT2
  28. }

  29. void Uart_Init(void)                           // 115200 8N1
  30. {
  31.     P4SEL |= BIT4+BIT5;                        // P4.4,5 = USA1 TXD/RXD
  32.     UCA1CTL1 |= UCSWRST;                       // **Put state machine in reset**
  33.     UCA1CTL1 |= UCSSEL__SMCLK ;                // SMCLK
  34.     UCA1BR0 = 34;                              // 4MHz 115200 (see User's Guide)
  35.                                                // UCA1BR0 = 輸入的時鐘源/串口通信速率 (取整)
  36.     UCA1BR1 = 0;                               // 4MHz 115200
  37.     UCA1MCTL = UCBRS_6;                        // 輸入的時鐘源/串口通信速率的余數(shù)*8
  38.     UCA1CTL1 &= ~UCSWRST;                      // **Initialize USCI state machine**
  39. //    __bis_SR_register(GIE);       // Enter LPM0, interrupts enabled
  40. }


  41. #define Trig1(a)  if(a==1) P1OUT |= BIT3; else P1OUT &= ~BIT3

  42. unsigned int cap_new = 0;           // 首次捕捉的ta0r值
  43. unsigned int cap_old = 0;           // 二次捕捉的ta0r值
  44. //char test_num = 10;                 // 測量次數(shù)
  45. char cap_N = 0;                     // 溢出次數(shù)
  46. char state = 0x00;                  // zhuangtai
  47. long cap_data = 0;                  // 距離值
  48. //unsigned int dat[test_num];         //通過數(shù)組存10次測量值

  49. void Hc_sr_Init(void)           // 超聲波模塊初始化
  50. {
  51.    /*
  52.     *  P1.2 為echo引腳             捕獲模式
  53.     *  P1.2 具有端口中斷的通用數(shù)字I / O ,TA0 CCR1捕獲:CCI1A輸入,比較:Out1輸出  BSL接收輸入
  54.     *  P1.3 為Trig          數(shù)字i/o模式
  55.     *  P1.3 具有端口中斷的通用數(shù)字I / O , TA0 CCR2捕獲:CCI2A輸入,比較:Out2輸出
  56.     */
  57.     P1OUT &= ~( BIT2 + BIT3 );
  58.     P1DIR |=  BIT3;
  59.     P1SEL |=  BIT2;
  60.     /*
  61.      * note:由于選用的是P1.2 根據(jù)端口定義可知,使用的是TA0CCR1,捕獲輸入引腳通過TA0CCTL1寄存器控制,
  62.      *-捕獲值存儲在TA0CCR1中。
  63.      * TASSEL:SNCLK; 分頻:4MHz/8 = 500k;計數(shù)模式:0  ==> 0xFFFF;
  64.      * TA0CCTL1:上升沿捕獲 ;同步捕捉;捕獲模式;CCI1A輸入;
  65.      */
  66.     TA0CTL   = TASSEL__SMCLK + ID__8 + MC_2 + TACLR + TAIE;
  67.     TA0CCTL1 = CM_1 + SCS +CAP + CCIE + CCIS_0;
  68. }

  69. void Hc_sr_Open(void)           //生成一個持續(xù)10us的高電平
  70. {
  71.     Trig1(1);
  72.     __delay_cycles(40);
  73.     Trig1(0);
  74. }

  75. #pragma vector=TIMER0_A1_VECTOR
  76. __interrupt void TIMER0_A1_ISR(void)
  77. {
  78.     switch(__even_in_range(TA0IV,14))
  79.     {
  80.       case  0:break;                                 // No interrupt
  81.       case  2:
  82.           state =  TA0CCTL1 >> 14;
  83.           TA0CCTL1 &= ~CCIFG;
  84.           if( TA0CCTL1 & CM_1){
  85.               cap_new = TA0CCR1;
  86.               TA0CCTL1 &= ~CM_1;
  87.               TA0CCTL1 |=  CM_2;
  88.           }else if ( TA0CCTL1 & CM_2){
  89.               cap_old = TA0CCR1;
  90.               cap_data = ( cap_old - cap_new ) * 0.34;
  91.               UARTprintf("\n\ncap_data: %u mm",cap_data);
  92.               TA0CCTL1 &= ~CM_2;
  93.               TA0CCTL1 |=  CM_1;
  94.           }else UARTprintf("\nstate: %x",state);     // 判斷CM位捕捉模式
  95. //          UARTprintf("\n yes! ccr1 \nTA0 CCR1: %u  TA0R: %u",TA0CCR1,TA0R);
  96.           break;                          // CCR1 not used
  97.       case  4: break;                          // CCR2 not used
  98.       case  6: break;                          // reserved
  99.       case  8: break;                          // reserved
  100.       case 10: break;                          // reserved
  101.       case 12: break;                          // reserved
  102.       case 14:
  103.           TA0CTL &= ~TAIFG;
  104.           if(cap_old   < cap_new ){
  105.               cap_N += 1;
  106.           }
  107.           break;                          // overflow
  108.       default: break;
  109.     }
  110. }

  111. void main (void)
  112. {
  113.     WDT_A_hold(WDT_A_BASE);
  114.     Uart_Init();
  115.     UCS_Init();
  116.     Hc_sr_Init();
  117.     __bis_SR_register(GIE);
  118.     UARTprintf("\nInitialization is complete!");
  119.     while(1)
  120.     {
  121.         Hc_sr_Open();
  122.         __delay_cycles(1000000);
  123.     }
  124. }
復制代碼

代碼下載:
HCSR04.zip (655.34 KB, 下載次數(shù): 48)


評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 共享資料的黑幣獎勵!

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:935312 發(fā)表于 2022-7-29 01:48 | 只看該作者
頭文件用不了
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 九色网址| 国产亚洲欧美另类一区二区三区 | 精品视频久久久久久 | 国产第一区二区 | 蜜桃毛片| 男人天堂网址 | 在线成人 | 视频二区在线观看 | 国产精品久久久久久久免费观看 | 免费观看一级毛片视频 | 亚洲精品68久久久一区 | 亚洲精品99久久久久久 | 日本中文在线视频 | 五月香婷婷 | 日韩一区中文字幕 | 欧美一级特黄aaa大片在线观看 | 久久aⅴ乱码一区二区三区 亚洲国产成人精品久久久国产成人一区 | 亚洲欧美日韩精品久久亚洲区 | 亚洲区一区二区 | 久久99精品久久久久蜜桃tv | 久久精品| 午夜看片网站 | 亚洲精品二区 | 久久免费小视频 | www.亚洲一区 | 色性av| 久久久精品网站 | 精品国产乱码久久久久久蜜臀 | 欧美日韩网站 | 成年人在线观看视频 | 日本免费黄色一级片 | 伊人精品久久久久77777 | 中文在线a在线 | 亚洲成人av在线播放 | 欧美综合一区二区三区 | 国产亚洲网站 | 免费特黄视频 | 91香蕉| 日本精a在线观看 | av资源在线看 | 欧美激情一区二区三级高清视频 |