谁能给我解释一下这个程序。

2019-03-24 13:51发布

//******************************************************************************
//   MSP430G2xx3 Demo - USCI_A0, 9600 UART Echo ISR, DCO SMCLK
//
//   Description: Echo a received character, RX ISR used. Normal mode is LPM0.
//   USCI_A0 RX interrupt triggers TX Echo.
//   Baud rate divider with 1MHz = 1MHz/9600 = ~104.2
//   ACLK = n/a, MCLK = SMCLK = CALxxx_1MHZ = 1MHz
//
//                MSP430G2xx3
//             -----------------
//         /||              XIN|-
//          | |                 |
//          --|RST          XOUT|-
//            |                 |
//            |     P1.2/UCA0TXD|------------>
//            |                 | 9600 - 8N1
//            |     P1.1/UCA0RXD|<------------
//
//   D. Dang
//   Texas Instruments Inc.
//   February 2011
//   Built with CCS Version 4.2.0 and IAR Embedded Workbench Version: 5.10
//******************************************************************************
#include  "msp430g2553.h" void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  BCSCTL1 = CALBC1_1MHZ;                    // Set DCO
  DCOCTL = CALDCO_1MHZ;
  P1SEL = BIT1 + BIT2 ;                     // P1.1 = RXD, P1.2=TXD
  P1SEL2 = BIT1 + BIT2 ;                     // P1.1 = RXD, P1.2=TXD
  UCA0CTL1 |= UCSSEL_2;                     // SMCLK
  UCA0BR0 = 104;                            // 1MHz 9600
  UCA0BR1 = 0;                              // 1MHz 9600
  UCA0MCTL = UCBRS0;                        // Modulation UCBRSx = 1
  UCA0CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**
  IE2 |= UCA0RXIE;                          // Enable USCI_A0 RX interrupt   __bis_SR_register(LPM0_bits + GIE);       // Enter LPM0, interrupts enabled
} //  Echo back RXed character, confirm TX buffer is ready first
#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCI0RX_ISR(void)
{
  while (!(IFG2&UCA0TXIFG));                // USCI_A0 TX buffer ready?
  UCA0TXBUF = UCA0RXBUF;                    // TX -> RXed character
}  
       UART,官方的程序,相信很多人看过,主程序基本看懂。我想问中断函数的程序作什么用?USCI_A0 TX没有使能,UCA0TXIFG怎么会置位?还有最户那句,英文注释的方向有没有搞错?       求解答。 此帖出自小平头技术问答
8条回答
Megamind
1楼 · 2019-03-25 04:17.采纳回答
1.这个范例是把发送管脚和接收管脚连起来用的
2.中断函数的程序用来把接收到的数据再发送出去
3.UCA0TXIFG置位与否与USCI_A0 TX使能与否没有关系,只要发送buffer空了,UCA0TXIFG就会置位。此时如果发送中断打开了,就会产生中断
4.英文注释没有搞错
挨紧
2楼-- · 2019-03-24 15:40
关于UCA0TXIFG我在用户手册上找到原文了.

15.3.15.1 USCITransmitInterrupt Operation
TheUCAxTXIFGinterrupt flag is setbythe transmitter to indicate that UCAxTXBUFis readyto accept
anothercharacter.Aninterrupt requestis generatedif UCAxTXIEandGIEarealsoset.UCAxTXIFGis
automaticallyresetif acharacteris writtento UCAxTXBUF.
UCAxTXIFGis setafteraPUCorwhenUCSWRST=1.UCAxTXIEis resetafteraPUCorwhen
UCSWRST=1.
挨紧
3楼-- · 2019-03-24 20:13
< :TI_MSP430_内容页_SA7 --> 是收到什么发送什么的意思?
挨紧
4楼-- · 2019-03-24 21:03
 精彩回答 2  元偷偷看……
挨紧
5楼-- · 2019-03-25 00:16
八位数据位,1位停止位,波特率9600,无校验,COM18,设置都对啊。看不到发送的数据不能返回到串口调试助手,求解释。
挨紧
6楼-- · 2019-03-25 06:49
 精彩回答 2  元偷偷看……
挨紧
7楼-- · 2019-03-25 06:49
程序也没有对UCA0STAT赋值啊?是吧

一周热门 更多>

相关问题

    相关文章