我用的是官方的例程,通过串口向单片机发送数据,然后单片机再将接收到的数据发回来。
代码如下:
#include <msp430.h>
int main(void)
{
unsigned char i;
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
P3SEL = BIT3+BIT4; // P3.4,5 = USCI_A0 TXD/RXD
//.......................
//  5SEL |= BIT4+BIT5; // Select XT1
//
// UCSCTL6 &= ~(XT1OFF); // XT1 On
// UCSCTL6 |= XCAP_3; // Internal load cap
// UCSCTL3 = 0; // FLL Reference Clock = XT1
//
// // Loop until XT1,XT2 & DCO stabilizes - In this case loop until XT1 and DCo settle
// do
// {
// UCSCTL7 &= ~(XT2OFFG + XT1LFOFFG + DCOFFG);
// // Clear XT2,XT1,DCO fault flags
// SFRIFG1 &= ~OFIFG; // Clear fault flags
// }while (SFRIFG1&OFIFG); // Test oscillator fault flag
//
// UCSCTL6 &= ~(XT1DRIVE_3); // Xtal is now stable, reduce drive strength
//
// UCSCTL4 |= SELA_0 + SELS_4 + SELM_4; // ACLK = LFTX1
// // SMCLK = default DCO
// // MCLK = default DCO
//
//................
UCA0CTL1 |= UCSWRST; // **Put state machine in reset**
UCA0CTL1 |= UCSSEL_1; // CLK = ACLK
UCA0BR0 = 0x03; // 32kHz/9600=3.41 (see User's Guide)
UCA0BR1 = 0x00; //
UCA0MCTL = UCBRS_3+UCBRF_0; // Modulation UCBRSx=3, UCBRFx=0
UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
UCA0IE |= UCRXIE; // Enable USCI_A0 RX interrupt
__bis_SR_register(LPM3_bits + GIE); // Enter LPM3, interrupts enabled
__no_operation(); // For debugger
}
// Echo back RXed character, confirm TX buffer is ready first
#pragma vector=USCI_A0_VECTOR
__interrupt void USCI_A0_ISR(void)
{
switch(__even_in_range(UCA0IV,4))
{
case 0:break; // Vector 0 - no interrupt
case 2: // Vector 2 - RXIFG
while (!(UCA0IFG&UCTXIFG)); // USCI_A0 TX buffer ready?
UCA0TXBUF = UCA0RXBUF; // TX -> RXed character
break;
case 4:break; // Vector 4 - TXIFG
default: break;
}
}
我单独写一个单片机向串口发送数据的程序,串口可以接收。但就是我向单片机发送数据并没有进入中断,也没有数据发回来。求大神解答。给我一个现成的程序,单片机串口接收数据的也行。
也不知道有没有可能是接受数据的引脚坏了。
|