/******************************************************************************本程序是单片机MSP430G2553P1.2----------------------------UCA0TXD串口发送端P1.1----------------------------UCA0RXD串口接受端P1.0----------------------------红灯指示P1.6----------------------------绿灯指示利用主辅时钟为1MHZ,串口波特率9600,波特率:1000000/9600=104UCA0BR0=104;//1MHz9600UCA0BR1=0;//1MHz9600现象:功能(1)看到P1.0---红灯指示;P1.6---绿灯指示循环闪烁。同时电脑串口调试助手(设置波特率:9600,无校验,8位数据位,1位停止位)不断显示,0x00,0x01,0x40,0x41。功能(2)打开电脑串口调试助手,发送区有数据待发送时,在接受区将看到相应的数据。******************************************************************************/#includemsp430g2553.h#defineuintunsignedint#defineucharunsignedcharvoidDelay_us(uintus)//延时us前提是f=1MHZ(不建议用该延时,不是很精确){uinti;for(i=0;ius;i++)__delay_cycles(1);}voidDelay_ms(uintms)//延时ms前提是f=1MHZ{uintj;for(j=0;jms;j++)__delay_cycles(1000);}voidmain(void){uchara=0;ucharTX[4]={0x00,0x01,0x40,0x41};WDTCTL=WDTPW+WDTHOLD;//关闭看门狗BCSCTL1=CALBC1_1MHZ;//设置时钟DCOCTL=CALDCO_1MHZ;P1DIR=0xFF;//AllP1.xoutputsP1OUT=0;//AllP1.xresetP1SEL|=BIT1+BIT2+BIT4;//P1.1=RXD,P1.2=TXDP1SEL2|=BIT1+BIT2;//P1.4=SMCLK,othersGPIOP2DIR=0xFF;//AllP2.xoutputsP2OUT=0;//AllP2.xresetUCA0CTL1|=UCSSEL_2;//SMCLKUCA0BR0=104;//1MHz9600UCA0BR1=0;//1MHz9600UCA0MCTL=UCBRS2+UCBRS0;//ModulationUCBRSx=5UCA0CTL1&=~UCSWRST;//**InitializeUSCIstatemachine**IE2|=UCA0RXIE;//串口使能开启__bis_SR_register(GIE);//总中断使能P1DIR|=(BIT0+BIT6);P1OUT|=(BIT0+BIT6);while(1){//a=0x41时,红绿灯全亮;a=00时,红绿灯全灭;//a=0x01时,红灯亮;绿灯灭;a=0x10时,绿灯亮;红灯灭;UCA0TXBUF=TX[a];Delay_ms(500);P1OUT=UCA0TXBUF;a++;if(a3)a=0;}}//EchobackRXedcharacter,confirmTXbufferisreadyfirst#pragmavector=USCIAB0RX_VECTOR__interruptvoidUSCI0RX_ISR(void)//接受中断{//ucharb;while(!(IFG2&UCA0TXIFG));//USCI_A0TXbufferready?//判断串口的发送是否正在工作,//因为要使用发送功能,所以得判断发送是否忙碌,//只有在不忙碌的时候才可以启用发送。//这一句就是判断发送是否在工作,如果是在工作,那么一直等待到不工作为止。UCA0TXBUF=UCA0RXBUF;//TX-RXedcharacter}硬件连接图: