下面的程序大家帮忙看看,现在通过串口调试助手想从单片机上接收发送来的字符串,但是总是出现乱码,是不是波特率出错,还是程序本身有问题,谢谢。。晶振是8MHZ,波特率9600
#include <msp430x13x.h>
char Data[6]="123456";
char rece[7];
int count=0,f=0;
void HELLO(void)
{
unsigned char i;
for(i=0;i<6;i++)
{
while((IFG1&UTXIFG0)==0);
TXBUF0=Data[i];
}
}
void main(void)
{
WDTCTL = WDTPW + WDTHOLD;
UTCTL0|=SSEL1;
UBR00=0x69;
UBR10=0x03;
UMCTL0=0xDB;
ME1|=UTXE0+URXE0;
UCTL0|=CHAR;
UCTL0 &= ~SWRST;
IE1|=URXIE0;
P3DIR|=0x10;
P3SEL|=0x30;
_EINT();
for(;;)
{
if(f==0)
{
HELLO();
f=1;
}
}
}
#pragma vector=UART0RX_VECTOR
__interrupt void USART0_RX(void)
{
rece[count]=RXBUF0;
count++;
if(count==6)
count=0;
}
你想“UTCTL0|=SSEL1;”,必须先开XT2.
加上:
BCSCTL1&=~XT2OFF; //打开XT2振荡器
do
{
IFG1 &= ~OFIFG; //清除振荡器失效标志
for (i=255;i>0;i--); //延时,等待XT2起振
}
while ((IFG1 & OFIFG) != 0); // 判断XT2是否起振
BCSCTL2 =SELM_2+SELS; //选择MCLK=SMCLK为XT2
后再试。
谢谢。
有反应了,但是还是有点小问题,123456中间还是出现乱码。
是不是串口调试助手选择了16进制显示,如果显示了“31 32 33 34 35 36”的话,那是“123456”字符串的ASCII码。
不是16进制的,显示的是这样
S5M126MS23&1L34S&S2L45S3356MS&S61SS4512L6MS23S&LS&L45S2356&MS3461&SS4512SL5623S&6134S&1245&S2356&MS34?&SSS451SL56?S23?&?61?S34?LS12L45?S23&56?S34&S61?S45M126M23&1L34
这就不清楚了,我的显示正常。换一个调试助试试,或者检查硬件电路
非常感谢。。
那我试试换个接口。。谢谢,如果还有问题希望您能解答。