我是在串口0接收并实现在串口助手上显示,按照下面的代码,我有两个问题:1、我设置了mystring数组的长度,为什么串口助手还是有很多数据;2、串口助手显示的数据为啥是乱码?
#include <msp430x14x.h>
char mystring[50];
char i=0;
char j=0;
char stringNum=0;
//串口0初始化
void uart_init(void)
{
P3SEL |= 0x30; // 选择P3.4和P3.5做UART0,P3.6.P3.7做UART1
//P3SEL |= 0xC0; //将P3.6,P3.7选做UART1的
通信端口
UCTL0 |= CHAR; // 选择8位字符
// UCTL1 |= CHAR; //选择8-bit字符
UTCTL0 |= SSEL0; // 都使用UCLK = ACLK
// UTCTL1 |= SSEL0; //驱动时钟选择ACLK
UBR00 = 0x03; // 波特率9600
UBR10 = 0x00;
UMCTL0 = 0x4A; // 波特率校验,具体见430用户手册
// UBR01 = 0x03; //波特率9600
// UBR11 = 0x00;
// UMCTL1 = 0x4A; //调整
UCTL0 &= ~SWRST; // 初始化UART0状态机
// UCTL1 &= ~SWRST; //初始化UART状态机
ME1 |= UTXE0 + URXE0; // 使能USART0的发送和接受
// ME2 |= UTXE1 + URXE1; //使能USART1的TXD和RXD
IE1 |= URXIE0; // 使能USART0的接收中断
// IE2 |= URXIE1;
P3DIR|=BIT4;
}
//延时函数
void delay1()
{
for(int m=0;m<1000;m++)
{
;
}
}
/*----------------------串口发送-----------------------------------------*/
void PutString(char *ptr)//P3.4
{
//while(*ptr != ' ')
while(j<stringNum+1)
{
while (!(IFG1 & UTXIFG0)); // TX缓存空闲?
TXBUF0 = *ptr++;
j++;// 发送数据
}
}
//串口0的中断,接收GPS定位信息
#pragma vector=UART0RX_VECTOR
__interrupt void usart0_rx (void)
{
P6DIR=0Xff;
P6OUT=0X00; //在串口中断中显示小灯,判断是否进中断
mystring
=RXBUF0;
if(mystring=='*') //GPS信息格式中有*号位,到这位就可以了
{
stringNum=i+2;
}
i++;
if(i==stringNum)
{
PutString(mystring);
}
}
int main(void)
{
WDTCTL=WDTPW+WDTHOLD;
uart_init();
delay1();
_EINT();
while(1);
}
-
一周热门 更多>