完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
这里做的是MSP430F5438A的上下位机通信,通过下载程序到单片机然后自己定义的字符串就会显示在串口助手上面, 程序用到时钟,因为我单片机的晶振是24MHZ,所以我选择了TX2,源代码如下: #define uchar unsigned char #define uint unsigned int void Openxt2(void) { unsigned char k; P5SEL |=BIT2+BIT3; //P5^2和P5^3是XT2脚,24M晶振 UCSCTL6 &=~(XT2OFF); //开启XT2晶振 UCSCTL3 |=SELREF_2; //FLLREF=REF0 UCSCTL4 |=SELA_2; //ACLK=REF0,SMCLK=DCO,MCLK=DCO do { UCSCTL7 &=~(XT2OFFG+XT1LFOFFG+XT1HFOFFG+DCOFFG);//清除XT1,XT2振荡标志 SFRIFG1&=~OFIFG; //清除振荡器失效标志,清除中断标志 for(k=0xff;k>0;k--) //延时 {;} } while((SFRIFG1&OFIFG)!=0); //判断XT2是否工作,等待时钟系统正常工作 UCSCTL6=XT2DRIVE1+XT2DRIVE0; //驱动晶振的能力是24M到32M UCSCTL4|=SELS_5+SELM_5+SELA_0; //ACLK=XT1=32768HZ,SMCLK=MCLK=XT2=24M,CPU时钟(MCLK) UCSCTL5|=DIVS__8+DIVM__1+DIVA__1; //f(SMCLK)=24M/8========>高速外围时钟(SMCLK) //f(MCLK)=24M/8=========>CPU时钟(MCLK) //f(ACLK)=32768HZ/1=32768HZ===>低速外设(ACLK) } 接下来就是主函数部分,这个函数的缺点就是没有控制字符发送到串口,只要一下载程序,它就会不受控制一直向串口发送字符串, 下面是主函数源代码: /**************************************** 程序功能:向PC机发送数据,在屏幕上显示0—127对应的ASCII字符 通信格式:N ,8, 1 9600 N:无校验位 8:数据位 1:停止位 9600:波特率 **************************************/ #include #include "TX2.H" #define uchar unsigned char #define uint unsigned int unsigned char buffer[]={"I'm a cat"}; char i,j; void Delays(); void Putstring(uchar *ptr); void main(void) { WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗 // P5DIR=BIT2+BIT3; P5SEL = BIT6+BIT7; // P5.6和P5.7 = USCI_A1 TXD/RXD //XT2时钟初始化 Openxt2(); UCA1CTL1 |= UCSWRST; //复位寄存器配置 UCA1CTL1 |= UCSSEL_2; //串口时钟源为SMCLK=3M UCA1BR0 = 19; // UCA1BR1 = 0; UCA1MCTL = UCBRS_0 + UCBRF_9+UCOS16; //UCBRFx;调制器设置 UCA1CTL1 &= ~UCSWRST; // 完成USCT初始化配置** UCA1IE |= UCRXIE; //进入低功耗模式0 LPM0; _EINT(); // 能使接收 while(1) { while(!(UCA1IFG&UCTXIFG)); //等待BUF区准备好,当IFG=1时就表示准备好了 for(i=0;i<9;i++) { UCA1TXBUF=buffer; //向串口发送数据 sizeof(buffer) Delays(); //延时 } } } void putstring (uchar *ptr) //发送一个字符串__bis_SR_register(LPM4_bits+GIE); { while(*ptr !=' |