茄子在线看片免费人成视频,午夜福利精品a在线观看,国产高清自产拍在线观看,久久综合久久狠狠综合

    <s id="ddbnn"></s>
  • <sub id="ddbnn"><ol id="ddbnn"></ol></sub>

  • <legend id="ddbnn"></legend><s id="ddbnn"></s>

    使用UART與PC通信實(shí)現(xiàn)msp430g2553單片機(jī)超聲波測(cè)距示例
    來源:易賢網(wǎng) 閱讀:1670 次 日期:2014-08-20 15:42:29
    溫馨提示:易賢網(wǎng)小編為您整理了“使用UART與PC通信實(shí)現(xiàn)msp430g2553單片機(jī)超聲波測(cè)距示例”,方便廣大網(wǎng)友查閱!

    這篇文章主要介紹了使用UART與PC通信實(shí)現(xiàn)msp430g2553單片機(jī)超聲波測(cè)距示例,需要的朋友可以參考下.

    適用于msp430g2553單片機(jī) 使用到了hc-sr04超聲測(cè)距模塊,使用UART與PC通信。

    代碼如下:

    #include

    long current_time;//最近一次測(cè)得時(shí)間

    /*MyPro*/

    #define LED_1 BIT0

    #define SW_2 BIT3

    #define TA1_1 BIT2 //TA0.1 HC-SR04 Echo

    #define TRIG BIT4 //HC-SR04 Trig

    #define ACCU_GRD 7 //Accuracy Grade "xxx.x"+''

    #define MIN_UNIT_TO1M 1000 //1 m to 1 mm

    /*TIMER0*/

    #define SOUR_CLK 1045000

    #define DIV_CLK_1 1

    #define SYS_CLK_SIG_1 SOUR_CLK/DIV_CLK_1

    #define DISTANCE 45//dm

    #define TIMER_RIG_MAX 0xffff

    #define MAX_TIME_1 DISTANCE*2/34*SYS_CLK_SIG_1

    #ifdef MAX_TIME_1

    #define SYS_CLK SYS_CLK_SIG_1

    #endif

    #define UART_TXD BIT2

    void init_timer1()

    {

    P2SEL |= TA1_1; //TA1.1 CCI1B be used

    P2DIR &= ~TA1_1;

    TA1CTL = MC_0 + TASSEL_2; //TimerA_0 stop mode,clock=1Mhz

    TA1CCTL1 = CCIE + SCCI + CCIS_1 + SCS + CAP + CM_2; //TA0CC1 capture mode + down edge

    }

    /*UART*/

    void init_uart() //USCI 初始化函數(shù)

    {

    UCA0CTL1 |= UCSWRST; //初始化串口寄存器

    UCA0CTL1 |= UCSSEL_2; //選擇子系統(tǒng)時(shí)鐘 1.045MHz

    UCA0BR0 = 0x6d; //波特率為9600

    UCA0BR1 = 0x00;

    P1SEL |= UART_TXD;

    P1SEL2 |= UART_TXD;

    P1DIR |= UART_TXD; //將P1.2設(shè)為第二功能

    UCA0CTL1 &= ~UCSWRST; //初始化結(jié)束

    }

    long cal_distance() //通過測(cè)得時(shí)間計(jì)算距離

    {

    return (long)((340*(0.5000*current_time/SYS_CLK)*MIN_UNIT_TO1M));

    }

    void delay() //粗略延遲

    {

    unsigned char i,j;

    for(i=124;i>0;i--)

    for(j=8;j>0;j--);

    }

    static char * translater(long distance) //將測(cè)得的距離以字符串形式存儲(chǔ)

    {

    static char trans[ACCU_GRD];

    int i;

    long f;

    trans[0]=' ';

    if(distance)

    for(i=1,f=MIN_UNIT_TO1M;i

    {

    if(i==4)

    {

    trans[i] = '.';

    continue;

    }

    trans[i] = '0'+ distance/f;

    distance %= f;

    f /= 10;

    }

    trans[ACCU_GRD-1] = '';

    return trans;

    }

    void once_pro() //發(fā)一次超聲波

    {

    if(TA1CCTL1 & COV)

    TA1CCTL1 &= ~COV;

    if(!(P1IN & BIT3))

    {

    TA1R = 0;

    P1OUT |= TRIG; //Trig 10 us 高電平

    _EINT();

    TA1CTL |= MC_2; //continue mode

    P1OUT &= ~TRIG;

    P1OUT |= LED_1;

    while(TA1CCTL1 & CCIFG); //等待 捕捉中斷結(jié)束

    }

    else

    {

    P1OUT &= ~LED_1;

    _DINT();

    }

    }

    void uart_txstring(char *string) //UART_TX 發(fā)送一個(gè)串

    {

    int i=0;

    while(string[i++])

    {

    switch (i) //過濾無效 '0'

    {

    case 1:if(string[i]=='0') continue;

    case 2:if(string[i]=='0'&&string[i-1]=='0') continue;

    }

    UCA0TXBUF = string[i];

    delay();

    }

    }

    /*UART_ISR*/

    #pragma vector = USCIAB0TX_VECTOR

    __interrupt void usci_txdistance() //向 PC 發(fā)送 測(cè)得的距離

    {

    uart_txstring("nr");

    uart_txstring(" Current ");

    uart_txstring(" distance: ");

    uart_txstring(translater(cal_distance()));

    uart_txstring(" cm");

    IE2 &= ~UCA0TXIE;

    }

    /*TIMER0_INT_ISR*/

    #pragma vector = TIMER1_A1_VECTOR

    __interrupt void capture()

    {

    current_time = TA1CCR1;

    TA1CTL &= ~MC_2;

    TA1CCTL1 &= ~CCIFG; //清CC1中斷標(biāo)志位

    IE2 |= UCA0TXIE;

    }

    /*Main*/

    void main()

    {

    WDTCTL = WDTPW + WDTHOLD; //關(guān)狗

    DCOCTL = 0;

    BCSCTL1 = CALBC1_1MHZ;

    DCOCTL = CALDCO_1MHZ;

    P1OUT = 0;

    P2OUT = 0;

    P1REN |= SW_2;

    P2REN |= TA1_1;

    P1OUT |= SW_2;

    P1DIR &= ~SW_2;

    P1DIR = TRIG + LED_1;

    init_timer1();

    init_uart();

    while(1)

    {

    int c = 8;

    while(c--)

    delay();

    if(TA1CCTL1 & CCIFG)

    TA1CCTL1 &= ~CCIFG;

    once_pro();

    }

    }

    更多信息請(qǐng)查看IT技術(shù)專欄

    更多信息請(qǐng)查看網(wǎng)絡(luò)編程
    由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請(qǐng)考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

    2026國(guó)考·省考課程試聽報(bào)名

    • 報(bào)班類型
    • 姓名
    • 手機(jī)號(hào)
    • 驗(yàn)證碼
    關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡(jiǎn)要咨詢 | 簡(jiǎn)要咨詢須知 | 新媒體/短視頻平臺(tái) | 手機(jī)站點(diǎn) | 投訴建議
    工業(yè)和信息化部備案號(hào):滇ICP備2023014141號(hào)-1 云南省教育廳備案號(hào):云教ICP備0901021 滇公網(wǎng)安備53010202001879號(hào) 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號(hào)
    云南網(wǎng)警備案專用圖標(biāo)
    聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號(hào):hfpxwx
    咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
    云南網(wǎng)警報(bào)警專用圖標(biāo)