调了一天,终于通了。
这个板子有点坑人,看引脚功能图UART_RX\TX是P3.4\P3.5,结果调了半天都不通,上网查了很久才知道USB的串口是P4.4\P4.5。
对于我这种初学者来说,要走的路还很长呀!
#include <io430.h>
void delay(int ms) //延时函数
{
for(int i=0;i<ms;i++)
for(int j=0;j<240;j++);
}
void send_buf(unsigned char *ptr) //发送字符串
{
while(*ptr != '\0')
{
while(!(UCA1IFG & UCTXIFG));
UCA1TXBUF = *ptr;
ptr++;
delay(50);
}
}
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; //关闭看门狗
P4DIR |= BIT7; //初始化LED
//串口初始化
P4SEL |= BIT4+BIT5 ; // P5.6,7 = USCI_A1 TXD/RXD
UCA1CTL1 |= UCSWRST; // **Put state machine in reset**
UCA1CTL1 |= UCSSEL_1; // ACLK
UCA1BR0 = 0x03; // 32768Hz 9600 波特率为9600
UCA1BR1 = 0x00; // 32768Hz 9600
UCA1MCTL |= UCBRS_3 + UCBRF_0; // Modulation UCBRSx=1, UCBRFx=0
UCA1CTL1 &= ~UCSWRST; // **Initialize USCI state machine**
UCA1IE |= UCRXIE; // Enable USCI_A1 RX interrupt 使能中断
//S2
P2IE |= BIT;
P2IES |= BIT1;
P2IFG &= ~ BIT1;
P2REN |= BIT1;
P2OUT |= BIT1;
_EINT(); //中断使能
send_buf("串口通信\r\n");
while(1)
{
;
}
}
#pragma vector = USCI_A1_VECTOR
__interrupt void USCI_ISR()
{
switch(_even_in_range(UCA1IV,4))
{
case 0:break; // Vector 0 - No interrupt
case 2: // Vector 2 - RXIFG
UCA1TXBUF = UCA1RXBUF; // 发送接收到的数据
// 如需对发送信息进行处理修改此处
break;
case 4:break; // Vector 4 - TXIFG
default: break;
}
}
#pragma vector = PORT2_VECTOR
__interrupt void P2_ISR()
{
if(P2IFG & BIT1)
{
while((P2IN & BIT1)==0);
P4OUT ^= BIT7;
send_buf("Pressed\r\n");
}
P2IFG &=~ BIT1;
}