Transcript UART1

UART

uart1 echo.rar

下載

Baudrate

計算

• 1000000/19200=52.08  0x34 • UBR0  0x34 • UBR1  0 • U1BR0 = 0x34; // 1MHz 19200 • U1BR1 = 0x00; // 1MHz 19200 • U1MCTL = 0x6B; // 1MHz 19200 modulation

PC

RS-232

接線

MSP430 實驗板 7 Seg LED uart0 uart1

開啟超級終端機

設定終端機

若有存檔 , 第二次可直接開啟 19200

• • • • for (;;) • • • { while (!(U1TCTL & TXEPT)); // Confirm no TXing before --> LPM3 _DINT(); // Disable interrupts for flag test _NOP(); U1TXBUF = 't'; // char to TXBUF0

睡眠狀態 • • • • if (!(U1TCTL & SSEL0)) _BIS_SR(LPM0_bits + GIE); // RX'ing char, LPM, int's active else _BIS_SR(LPM3_bits + GIE); // Enter LPM3, int's active

中斷程式

--

接收

• • • • • • • • • • • • • • • • • } #pragma vector=USART1RX_VECTOR __interrupt void usart1_rx (void) { if ((IFG2 & URXIFG1)) // Test URXIFG0 { while (!(IFG2 & UTXIFG1)); // USART1 TX buffer ready?

U1TXBUF = U1RXBUF; // RXBUF0 to TXBUF0 _BIC_SR_IRQ(LPM3_bits); // Exit LPM3 after reti U1TCTL |= SSEL0; // SSEL0 = 1, no RX activity } { } else // Start edge U1TCTL &= ~URXSE; // Clear URXS signal U1TCTL |= URXSE; // Re-enable edge detect _BIC_SR_IRQ(SCG1 + SCG0); // DCO reamins on after reti U1TCTL &= ~SSEL0; // SSEL0= 0, RX activity

Baudrate

計算

• 1000000/38400=26.04  0x1A • UBR0  0x1A • UBR1  0 • U1BR0 = 0x1A ; // 1MHz 38400 • U1BR1 = 0x00; // 1MHz 19200 • U1MCTL = 0x6B; // 1MHz 19200 modulation

發送一串文字

• • • • • • • • • • U1TXBUF = 't'; // char to TXBUF0 while (!(IFG2 & UTXIFG1)); // USART1 TX buffer ready?

U1TXBUF = 'e'; // char to TXBUF0 while (!(IFG2 & UTXIFG1)); // USART1 TX buffer ready?

U1TXBUF = 's'; // char to TXBUF0 while (!(IFG2 & UTXIFG1)); // USART1 TX buffer ready?

U1TXBUF = 't'; // char to TXBUF0 while (!(IFG2 & UTXIFG1)); // USART1 TX buffer ready?

U1TXBUF = ' '; // char to TXBUF0 while (!(IFG2 & UTXIFG1)); // USART1 TX buffer ready?

Baudrate

計算

• 1000000/115200=8.58  8 • UBR0  0x8 • UBR1  0 • U1BR0 = 8 ; // 1MHz 115200 • U1BR1 = 0x00; // 1MHz 19200 • U1MCTL = 0x6B; // 1MHz 19200 modulation

接收副程式

• char recv_uart1( void ) • • { if ((IFG2 & URXIFG1)) // Test URXIFG0 • • • • • } { } return U1RXBUF; return 0;

利用接收副程式接收資料

• • • • • • • temp=0; { while(temp==0) } temp=recv_uart1(); U1TXBUF = temp; // char to TXBUF0 while (!(IFG2 & UTXIFG1)); // USART1 TX buffer ready?

檢查是否輸入

1

• • • • while(temp==0) { } temp=recv_uart1(); • • U1TXBUF = temp; // char to TXBUF0 while (!(IFG2 & UTXIFG1)); // USART1 TX buffer ready?

• if (temp==0x31){ • }