新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 實時記錄MSP430編程問題

        實時記錄MSP430編程問題

        作者: 時間:2016-11-13 來源:網(wǎng)絡(luò) 收藏
        編程中遇到了一個及其詭異的問題,發(fā)送緩存與接收緩存的LISTEN控制字為零同時兩端未用線路連接的情況下,對發(fā)送緩存設(shè)置值時接收緩存也同時改變了,正在各種檢查中,如果解決了會貼出解決方法。
        問題解決了:單片機壞了!!!內(nèi)部的LISTEN估計被連上了,這塊單片機只能用來做為發(fā)送端了。
        另外,今日還遇到了中斷子程序不作用的情況,網(wǎng)上各種尋找后發(fā)現(xiàn)程序中缺少 _EINT();導(dǎo)致無法運行中斷程序,奇怪的是TI給的示范程序里面都沒有_EINT(),我猜想是因為IAR版本或者所用調(diào)試程序不同的原因吧。
        現(xiàn)在兩塊單片機已經(jīng)能夠進(jìn)行簡單的單工通信了,明天再來完善程序。
        即:UCA1RXBUF = UCA1TXBUF
        附上問題程序:
        void main(void)
        {
        WDTCTL = WDTPW + WDTHOLD; // Stop WDT
        Init_Keypad();
        Init_LCD();
        write_command(0x3f); //打開顯示
        clear_LCD();
        P5SEL = 0xC0; // P5.6,7 = USCI_A1 TXD/RXD
        UCA1CTL1 |= UCSWRST; // **Put state machine in reset**
        UCA1CTL1 |= UCSSEL__ACLK; // ACLK
        UCA1BR0 = 0x0D; // 2400
        UCA1BR1 = 0; //
        UCA1MCTL |= UCBRS_6 + UCBRF_0; // Modulation UCBRSx=1, UCBRFx=0
        UCA1CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
        UCA1IE |= UCRXIE + UCTXIE; // Enable USCI_A0 RX,TX interrupt
        while(1)
        {
        Key_Event(); //讀取鍵值
        if(key_Flag == 1)
        {
        key_Flag = 0;
        UCA1TXBUF=key_val;
        display_16_8((uchar *)&LCD_16_8[UCA1RXBUF][0],2,lie+72);//for debugger
        display_16_8((uchar *)&LCD_16_8[UCA1RXBUF][0],4,lie+72);//for debugger
        }
        }
        __bis_SR_register(LPM0_bits + GIE); // Enter LPM0, interrupts enabled
        __no_operation(); // For debugger
        }
        // Echo back RXed character, confirm TX buffer is ready first
        #pragma vector=USCI_A1_VECTOR
        __interrupt void USCI_A1_ISR(void)
        {
        switch(__even_in_range(UCA1IV,4))
        {
        case 0:break; // Vector 0 - no interrupt
        case 2: // Vector 2 - RXIFG
        display_16_8((uchar *)&LCD_16_8[UCA1RXBUF][0],4,lie+72); // TX -> RXed character
        break;
        case 4:break; // Vector 4 - TXIFG
        default: break;
        }
        }
        成功的程序:
        void main(void)
        {
        WDTCTL = WDTPW + WDTHOLD; // Stop WDT

        Init_Keypad();
        Init_LCD();
        write_command(0x3f); //打開顯示
        clear_LCD();
        P5SEL = 0xC0; // P5.6,7 = USCI_A1 TXD/RXD
        UCA1CTL1 |= UCSWRST; // **Put state machine in reset**
        UCA1CTL1 |= UCSSEL__ACLK; // ACLK
        UCA1BR0 = 0x0D; // 2400
        UCA1BR1 = 0; //
        UCA1MCTL |= UCBRS_6 + UCBRF_0; // Modulation UCBRSx=1, UCBRFx=0
        UCA1CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
        UCA1IE |= UCRXIE + UCTXIE; // Enable USCI_A0 RX,TX interrupt
        _EINT();

        while(1)
        {
        Key_Event(); //讀取鍵值

        if(key_Flag == 1)
        {
        key_Flag = 0;
        UCA1TXBUF=key_val;
        }
        }
        __bis_SR_register(LPM0_bits + GIE); // Enter LPM0, interrupts enabled
        __no_operation(); // For debugger
        }
        // Echo back RXed character, confirm TX buffer is ready first
        #pragma vector=USCI_A1_VECTOR
        __interrupt void USCI_A1_ISR(void)
        {
        switch(UCA1IV)
        {
        case 0:break; // Vector 0 - no interrupt
        case 2: // Vector 2 - RXIFG
        if((UCA1RXBUF>=0)&&(UCA1RXBUF<10))
        display_16_8((uchar *)&LCD_16_8[UCA1RXBUF][0],4,lie+72); // TX -> RXed character
        break;
        case 4:
        if((UCA1TXBUF>=0)&&(UCA1TXBUF<10))
        display_16_8((uchar *)&LCD_16_8[UCA1TXBUF][0],6,lie+72);
        break; // Vector 4 - TXIFG
        default: break;
        }
        }



        關(guān)鍵詞: 實時記錄MSP430編程問

        評論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 谢通门县| 福泉市| 湘西| 盱眙县| 科技| 德昌县| 宜春市| 渭南市| 喀喇| 二连浩特市| 龙陵县| 习水县| 洛扎县| 阿克陶县| 深水埗区| 宁津县| 虹口区| 东乌珠穆沁旗| 都昌县| 邢台县| 德令哈市| 米易县| 庐江县| 乌兰察布市| 日土县| 亳州市| 攀枝花市| 望奎县| 台南市| 肥东县| 宾阳县| 裕民县| 云霄县| 屯昌县| 甘德县| 泽普县| 高邑县| 都昌县| 诸城市| 广德县| 本溪市|