单片机MSPG2553,串口通信,程序如下,为何 是输出乱码?
参看附录A实验板原理图,用跳线将G2553单片机的P1.2与BRXD相连、P1.1与BTXD相连,使单片机G2553的SCI异步串行接口与板载仿真器上串口的收发信号对接,...
参看附录A实验板原理图,用跳线将G2553单片机的P1.2与BRXD相连、P1.1与BTXD相连,使单片机G2553的SCI异步串行接口与板载仿真器上串口的收发信号对接,见图94,注意不要接错了,否则无法通信成功。设置波特率9600bps、无校验、8位数据、先低后高、1个停止位,采用查询方式控制单片机串口的接收和发送,用下面方式分别编程,实现接收PC机的串口发送来的字符串,字符串以字符@结尾,单片机将接收到的字符串保存在RAM中,收到字符@后,将接收到的字符串再发给PC机。PC机侧用串口助手程序接收并显示收到的字符串。
1) 串口时钟选用SMCLK=1.0MHz
#include "io430.h"
unsigned char string[];
int main( void )
{ // Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
BCSCTL2&=~SELS;//SMCLK选择DCO时钟源
BCSCTL1 = CALBC1_1MHZ;
DCOCTL = CALDCO_1MHZ;//DCO设置1Mhz
//USCI_A0波特率时钟源为SMCLK,swrst=1
UCA0CTL1 |= UCSSEL_2+UCRXEIE+UCSWRST;
//置P1.1P1.2为USCI_A0的收/发引脚
P1SEL |= BIT1+BIT2;
P1SEL2 |= BIT1+BIT2;
//设置波特率寄存器
UCA0BR1=0; UCA0BR0=104;
//通信模式、数据格式设置
UCA0CTL0 |= UCMSB;
//设置串口控制
UCA0MCTL=UCBRS_1;
UCA0CTL1 &=~UCSWRST ; //swrst=0 }
for(;;)
{
unsigned int j;
for (j=0;string[j]!='@';j++)
{
while((IFG2&UCA0RXIFG)==0);
string[j]=UCA0RXBUF;
}
unsigned i=j;
for (j=0;j!=i+1;j++)
{
while((IFG2&UCA0TXIFG)==0);
UCA0TXBUF=string[j];
}
}
return 0;
} 展开
1) 串口时钟选用SMCLK=1.0MHz
#include "io430.h"
unsigned char string[];
int main( void )
{ // Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
BCSCTL2&=~SELS;//SMCLK选择DCO时钟源
BCSCTL1 = CALBC1_1MHZ;
DCOCTL = CALDCO_1MHZ;//DCO设置1Mhz
//USCI_A0波特率时钟源为SMCLK,swrst=1
UCA0CTL1 |= UCSSEL_2+UCRXEIE+UCSWRST;
//置P1.1P1.2为USCI_A0的收/发引脚
P1SEL |= BIT1+BIT2;
P1SEL2 |= BIT1+BIT2;
//设置波特率寄存器
UCA0BR1=0; UCA0BR0=104;
//通信模式、数据格式设置
UCA0CTL0 |= UCMSB;
//设置串口控制
UCA0MCTL=UCBRS_1;
UCA0CTL1 &=~UCSWRST ; //swrst=0 }
for(;;)
{
unsigned int j;
for (j=0;string[j]!='@';j++)
{
while((IFG2&UCA0RXIFG)==0);
string[j]=UCA0RXBUF;
}
unsigned i=j;
for (j=0;j!=i+1;j++)
{
while((IFG2&UCA0TXIFG)==0);
UCA0TXBUF=string[j];
}
}
return 0;
} 展开
4个回答
展开全部
如果波特率不一致的话,可能会得到乱码
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2014-12-31
展开全部
你先把串口的波特率设置对
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
原理图有吗
需要给你完成吗
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询