[MSP430 LaunchPad - GCC] UART

NgoHungCuong

http://ngohungcuong.com
#1
Cấu hình UART 9600 - 8N1
Mỗi khi nhận được 1 ký tự thì gửi ngược lại.
Kiểm tra nếu ký tự 'a' thì bật led nếu không phải thì tắt led
Chú ý để sử dụng UART với COM ảo của kit LaunchPad thì cần thiết lập chân RxD, TxD của J3 như hình (rev1.5)
lp15_2553o.jpg

PHP:
#include <msp430g2553.h>
#include <legacymsp430.h>

int main(void) {
    WDTCTL = WDTPW + WDTHOLD; // Stop WDT
    BCSCTL1 = CALBC1_1MHZ; // Set DCO
    DCOCTL = CALDCO_1MHZ;
    //cau hinh chan 0 va 6 lam chan IO (led)
    P1SEL &= ~(BIT0 + BIT6);
    P1SEL2 &= ~(BIT0 + BIT6);
    P1DIR |= BIT0 + BIT6;

    //cau hinh chan UART 1 2
    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
    //__enable_interrupt();
    __bis_SR_register(LPM0_bits + GIE); // Enter LPM0, interrupts enabled
    while(1);
    return 0;
}

// Echo back RXed character, confirm TX buffer is ready first
//#pragma vector=USCIAB0RX_VECTOR
interrupt (USCIAB0RX_VECTOR) USCI0RX_ISR(void) {
    unsigned char c;
    while (!(IFG2&UCA0TXIFG)); // USCI_A0 TX buffer ready?

    c = UCA0RXBUF; // TX -> RXed character
    UCA0TXBUF = c;

    if(c=='a') {
        P1OUT |= (BIT0 + BIT6);
    } else {
        P1OUT &= ~(BIT0 + BIT6);
    }
}
 

Đính kèm

Sửa lần cuối:

Quảng cáo Google