色婷婷AⅤ一区二区三区|亚洲精品第一国产综合亚AV|久久精品官方网视频|日本28视频香蕉

          新聞中心

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

          實(shí)時(shí)記錄MSP430編程問題

          作者: 時(shí)間:2016-11-13 來源:網(wǎng)絡(luò) 收藏
          編程中遇到了一個(gè)及其詭異的問題,發(fā)送緩存與接收緩存的LISTEN控制字為零同時(shí)兩端未用線路連接的情況下,對(duì)發(fā)送緩存設(shè)置值時(shí)接收緩存也同時(shí)改變了,正在各種檢查中,如果解決了會(huì)貼出解決方法。
          問題解決了:單片機(jī)壞了!?。?nèi)部的LISTEN估計(jì)被連上了,這塊單片機(jī)只能用來做為發(fā)送端了。
          另外,今日還遇到了中斷子程序不作用的情況,網(wǎng)上各種尋找后發(fā)現(xiàn)程序中缺少 _EINT();導(dǎo)致無法運(yùn)行中斷程序,奇怪的是TI給的示范程序里面都沒有_EINT(),我猜想是因?yàn)镮AR版本或者所用調(diào)試程序不同的原因吧。
          現(xiàn)在兩塊單片機(jī)已經(jīng)能夠進(jìn)行簡(jiǎ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;
          }
          }



          評(píng)論


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

          關(guān)閉