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

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

QQ登錄

只需一步,快速開始

搜索
查看: 1502|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

MSP430F5529超聲波外設(shè)模塊

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1089834 發(fā)表于 2023-7-28 16:50 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
#include "tof.h"
#include "type.h"
#include "msp430f5529.h"

//ehco:  p2.3 trig3   p3.7
#define Trig3(a) if(a==1) P3OUT |= BIT7; else P3OUT &= ~BIT7        // 第一路  trig1   p3.7
unsigned int cap_new = 0;           // 首次捕捉的ta0r值
unsigned int cap_old = 0;           // 二次捕捉的ta0r值
char cap_N = 0;                     // 溢出次數(shù)
char state = 0x00;                  // 狀態(tài)
unsigned int cap_data1 = 0;                  // 距離值

unsigned int HC_TRIG_Flag = 0;

void TA2_INIT(void)//TA2中斷初始化
{
    TA2CCTL0 = CCIE;                         // 啟用TA0CCR0 中斷,當(dāng)計(jì)數(shù)器的值
    TA2CCR0  = 16384;
    TA2CTL   = TASSEL_1 + MC_1 + TACLR;         // ACLK, upmode, clear TAR
}

void Hc_sr_Init(void)
{
    P3OUT &= ~BIT7;//3.7接收
    P3DIR |=  BIT7;

    P2OUT &= ~BIT3;//2.3初始化為高電平
    P2DIR |= BIT3;//初始方向輸出
//    P2OUT |= BIT3;
//    P2SEL |=BIT3;
    /*
     *由于選用的是P1.2 根據(jù)端口定義可知,使用的是TA0CCR1,捕獲輸入引腳通過(guò)TA0CCTL1寄存器控制,
     *-捕獲值存儲(chǔ)在TA0CCR1中。
     */
    TA2CTL   = TASSEL__SMCLK + ID__8 + MC_2 + TACLR + TAIE;//SMCLK,4mhz/8分頻,連續(xù)計(jì)數(shù)模式,清除TAR計(jì)數(shù)器,中斷使能
    TA2CCTL0 = CM_2 + SCS +CAP + CCIE + CCIS_0;//在上升沿捕獲,CCR1工作于捕獲模式,上升沿觸發(fā),CCI3A輸入
}

void Hc_sr_Open(void)     //生成一個(gè)持續(xù)10us的高電平
{

//    P3OUT ^= BIT7;
//    __delay_cycles(100);
        Trig1(1);
        __delay_cycles(40);//單位為us?
        Trig1(0);
        __delay_cycles(100);
}

#pragma vector=TIMER2_A0_VECTOR //TA1定時(shí)器中斷向量
__interrupt void TIMER2_A0_ISR(void)//聲明中斷服務(wù)程序
{
    switch(__even_in_range(TA2IV,14))//中斷向量查詢
    {
      case  0:break;                                // 無(wú)中斷
      case  2:break;
      case  4:
      {
                  //  state =  TA0CCTL2 >> 14;
                    TA2CCTL0 &= ~CCIFG;                         //清除中斷標(biāo)志位
                    if( TA2CCTL0 & CM_1)                        //上升沿
                    {
                        cap_new = TA2CCR0;                       //上升沿的計(jì)數(shù)值
                        TA2CCTL0 &= ~CM_1;
                        TA2CCTL0 |=  CM_2;                       //改為下降沿捕獲
                    }else if ( TA2CCTL0 & CM_2)                  //下降沿
                    {
                        cap_old = TA2CCR0;                      //下降沿的計(jì)數(shù)值
                        cap_data1 = ( cap_old - cap_new ) * 0.34;//計(jì)算出距離值

        //                UARTprintf("\n\ncap_data2: %u mm",cap_data);
                        TA2CCTL0 &= ~CM_2;
                        TA2CCTL0 |=  CM_1;          //改為上升沿捕獲
                    }
                    break;                     // TA0CCR2 中斷服務(wù)程序
                }

      case  6:
         break;

      case  8: break;                    // TA0CCR4 中斷服務(wù)程序
      case 10: break;                    // TA0CCR5 中斷服務(wù)程序
      case 12: break;                    // TA0CCR6 中斷服務(wù)程序
      case 14:
          TA2CTL &= ~TAIFG;             //TAIFG中斷
          if(cap_old   < cap_new ){
              cap_N += 1;
          }
          break;                          // overflow
      default: break;
    }
}

//// Timer1 A0 中斷服務(wù)函數(shù)
//#pragma vector=TIMER1_A0_VECTOR
//__interrupt void Timer1_A0(void)
//{
//
//    TA1CCTL0 &= ~CCIFG;
//     HC_TRIG_Flag = 1;
//
////    UARTprintf("\rcap_data1: %u mm  cap_data2: %d mm cap_data3: %d mm      ",cap_data1,cap_data2,cap_data3);
//
//    P1OUT ^= 0x01;                          // P1.0 翻轉(zhuǎn)
//}











////我們選用的是P1.2, 根據(jù)端口定義,使用的是TA0CCR1,捕獲輸入引腳通過(guò)TA0CCTL1寄存器控制,捕獲值存儲(chǔ)在TA0CCR1中。
////  TASSEL(時(shí)鐘源選擇):SMCLK; ID分頻(下面介紹):(這里分頻系數(shù)會(huì)影響后面計(jì)算)4MHz/8 = 500k;計(jì)數(shù)模式:0  ==> 0xFFFF;  定時(shí)器清零位 ;中斷使能。
////  TA0CCTL1:上升沿捕獲 ;同步捕捉;捕獲模式;中斷使能;CCI1A輸入。
//
////這里其實(shí)就是復(fù)用P1.2口為捕獲,通過(guò)P1.3發(fā)出一個(gè)10us的高電平給超聲波TRIG口觸發(fā)進(jìn)行測(cè)距,模塊內(nèi)部就返回一個(gè)信號(hào),P1.2就捕獲一個(gè)返回的高電平持續(xù)時(shí)間,再計(jì)算得出距離
////公式:s=高電平持續(xù)時(shí)間*聲速340/2(因?yàn)樯厦娣诸l采用了8分頻,因此我下面計(jì)算就不用除以2)
//
//#define Trig1(a)  if(a==1) P1OUT |= BIT3; else P1OUT &= ~BIT3
//
//unsigned int cap_new = 0;           // 首次捕捉的ta0r值
//unsigned int cap_old = 0;           // 第二次捕捉的ta0r值
//
//char cap_N = 0;                     // 溢出次數(shù)
//char state = 0x00;                  // 狀態(tài)
//unsigned short cap_data=0 ;                  // 距離值,u16
//
//uint8_t HC_TRIG_Flag = 0;
//void TA1_INIT(void)
//{
//    TA1CCTL0 = CCIE;                         // 啟用TA0CCR0 中斷,當(dāng)計(jì)數(shù)器的值
//    TA1CCR0  = 16384;
//    TA1CTL   = TASSEL_1 + MC_1 + TACLR;         // ACLK, upmode, clear TAR
//}
//
//void Hc_sr_Init(void)
//{
//
//    P1OUT &= ~( BIT2 + BIT3 );//1.2,1.3均設(shè)置為拉高
//    P1DIR |=  BIT3;
//    P1SEL |=  BIT2;//選中其為特殊功能
//
//    TA0CTL   = TASSEL__SMCLK + ID__8 + MC_2 + TACLR + TAIE;////SMCLK,4mhz/8分頻,連續(xù)計(jì)數(shù)模式,清除TAR計(jì)數(shù)器,中斷使能
//    TA0CCTL1 = CM_1 + SCS +CAP + CCIE + CCIS_0;//捕獲輸入引腳通過(guò)TA0CCTL1寄存器控制,捕獲值存儲(chǔ)在TA0CCR1中。
//}
//
//void Hc_sr_Open(void)           //生成一個(gè)持續(xù)10us的高電平
//{
////    Trig1(1);//這里就是把P1.2置1,即P1OUT |= BIT2
////    __delay_cycles(160);//這里我把系統(tǒng)時(shí)鐘升為25MHZ,因此250/25000000=10us
////    Trig1(0);//置0
//    Trig1(1);
//    delay_us(40);
//    Trig1(0);
//    delay_ms(100);
//}
//
//
//#pragma vector=TIMER0_A1_VECTOR
//__interrupt void TIMER0_A1_ISR(void)
//{
//
//    switch(__even_in_range(TA0IV,14))//采用這個(gè)range函數(shù)就是為了使switch函數(shù)效率高
//    {
//      case  0:break;                                 // No interrupt
//      case  2:
//          state =  TA0CCTL1 >> 14;
//          TA0CCTL1 &= ~CCIFG;//標(biāo)志位清零
//          if( TA0CCTL1 & CM_1){//開始捕獲高電平時(shí)間
//              cap_new = TA0CCR1;
//              TA0CCTL1 &= ~CM_1;
//              TA0CCTL1 |=  CM_2;
//          }else if ( TA0CCTL1 & CM_2){
//              cap_old = TA0CCR1;
//              cap_data = ( cap_old - cap_new ) * 0.34/10/6.25;//計(jì)算距離公式
////              Gui_DrawFont_Num32(10,50,BLUE,GRAY0,cap_data/100);//顯示數(shù)字
////              Gui_DrawFont_Num32(37,50,BLUE,GRAY0,cap_data/10%10);
////              Gui_DrawFont_Num32(64,50,BLUE,GRAY0,cap_data%10);
//
//              TA0CCTL1 &= ~CM_2;
//              TA0CCTL1 |=  CM_1;
//          }else
//          break;                           // CCR1 not used
//      case  4: break;                          // CCR2 not used
//      case  6: break;                          // reserved
//      case  8: break;                          // reserved
//      case 10: break;                          // reserved
//      case 12: break;                          // reserved
//      case 14:
//          TA0CTL &= ~TAIFG;
//          if(cap_old   < cap_new ){
//              cap_N += 1;
//          }
//          break;                          // overflow
//      default: break;
//    }
//}




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

使用道具 舉報(bào)

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日日综合| 久久这里只有精品首页 | 国产91丝袜在线播放 | 欧美在线一区二区三区 | 黄色日本视频 | 欧美日韩在线免费观看 | 国产一区二区三区四区五区加勒比 | www.99热这里只有精品 | 一区福利视频 | 青青久久av北条麻妃海外网 | 日韩欧美一级片 | 日本精品一区二区三区视频 | 亚洲精品成人在线 | 欧美国产精品一区二区三区 | 在线中文字幕亚洲 | 免费成人高清在线视频 | 中日韩av | 久久久久久国产 | 久在线| 欧美一级二级三级视频 | 九九精品在线 | 国产成人亚洲精品 | 精品国产乱码久久久久久丨区2区 | 成人精品国产免费网站 | 日韩中文字幕网 | 成人av高清| 国产原创在线观看 | 久久精选 | 久久亚洲天堂 | 日日日色 | 九一视频在线观看 | av网站免费在线观看 | 黑人精品欧美一区二区蜜桃 | 欧美精品久久久 | av大全在线观看 | 久久99国产精一区二区三区 | 狠狠干美女 | 久久一区视频 | 久草视频在线看 | 欧美性受xxxx白人性爽 | 国产精品中文字幕在线 |