搜索
bottom↓
回复: 2

149 的串口调试。 用串口调试助手发送8位数据,然后再接收回来只能成功接收一次 求指

[复制链接]

出0入0汤圆

发表于 2011-4-26 11:50:26 | 显示全部楼层 |阅读模式
用串口调试助手 发送 8位数据,然后149接收到后,再送回电脑,调试助手却只能显示1次成功的通讯,为什么呢?
程序如下:
#include <MSP430x14x.h>
unsigned char aRxBuff[8];
unsigned char flag = 0;
/**********************************************************************
                             uart初始化
***********************************************************************/
void UartInit()
{  
P3SEL |= 0x30;                            // P3.4,5 = USART0 TXD/RXD
UCTL0=CHAR+SWRST;       //8 位数据,1位停止位
UTCTL0=SSEL0;                //选择UCLK=ACLK
UBR00=0x3;                   //设置波特率为9600bit/s
UBR10=0;
UMCTL0=0x4A;
UCTL0 &= ~SWRST;
ME1 |= UTXE0+URXE0;          //打开模块USART0
IE1 |= URXIE0 ;              //打开USART0接收中断
}
/**********************************************************************
                             系统初始化
***********************************************************************/
void InitSys()
{
   unsigned int iq0;
   BCSCTL1 &= ~XT2OFF;                            //打开XT2振荡器
   do
   {
        IFG1 &= ~OFIFG;                           //清除振荡器失效标志
        for (iq0=0xFF; iq0>0; iq0--);               //延时,等待XT2起振
   }
   while ((IFG1 & OFIFG) != 0);                     //判断XT2是否起振
   BCSCTL2=SELM_2;                                  //选择MCLK 为XT2
   UartInit();                                      //初始化USART0
   _EINT();
}

/**********************************************************************
                               数据发送
***********************************************************************/
void SendUart(unsigned char *pBuffer,unsigned char n_byte)
{
unsigned char q0;
for(q0=0;q0<n_byte;q0++)
{
     while((IFG1&UTXIFG0)==0);  //判断是否发送完毕
     TXBUF0=*pBuffer;
     pBuffer++;
}
flag = 0;
}

/**********************************************************************
                        向接收缓冲区中增加一个数据
***********************************************************************/
void AddUsData(unsigned char sq0)
{  
    static unsigned char NRxBuff=0;
    while ((IFG1 & UTXIFG0) == 0);
    aRxBuff[NRxBuff]=sq0;
    NRxBuff++;
    if(NRxBuff == 8)
      flag = 1;  
}
/**********************************************************************
                           USART0接收中断函数
***********************************************************************/
#pragma vector=UART0RX_VECTOR
__interrupt void Usart0Rx()
{
  AddUsData(RXBUF0);
  //flag = 1;
}

void main( void )
{
   WDTCTL=WDTPW+WDTHOLD;                //关闭看门狗
   InitSys();                           //初始化
   while(1)
   {   
     if(flag)  
        SendUart(aRxBuff,8);       //发送数据        
   }
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2011-4-26 14:12:31 | 显示全部楼层
原因找到了,这样改就ok了
/**********************************************************************  
                        向接收缓冲区中增加一个数据  
***********************************************************************/  
void AddUsData(unsigned char sq0)  
{   
    static unsigned char NRxBuff=0;
    while ((IFG1 & UTXIFG0) == 0);
    aRxBuff[NRxBuff]=sq0;  
    NRxBuff++;  
    if(NRxBuff == 8)
      {
        flag = 1;
        NRxBuff=0;
       }   
}
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-18 23:32

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表