5088|4

6

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

msp430 串口 不停的发00, [复制链接]

问题如题目,

只有把main函数中的  _EINT();屏蔽掉,才停止发送00,但是我需要接受中断,这可如何是好!!!!!急急急!!!!!

代码如下:

 

#include <msp430x14x.h>
  char UART0_RX_BUF[],nRX0_Len_temp,nRX0_Len;
  char Data[6]={0x01,0x02,0x03,0x04,0x05,0x06};
  char data1 = 0;
//=======================延时===================================================
void delay(unsigned int n)
  {
    unsigned int i;
    for(i=0;i<n;i++);
  }
//======================串口初始化==============================================
void init_uart0(void)
  {
//====================SWRST置位=================================================   
    U0CTL |= SWRST;
//====================串口工作模式设置==========================================
    U0CTL = 0x00;      // U0CTL包含串口0通信协议、通信模式、校验位等设置,允许UART0
    U0CTL += CHAR;     //(CHAR=0x10)当CHAR=0时为7位数据,当 CHAR=1时为8位数据
                       //不需要校验,数据位为8位,无反馈,异步UART通信,UART被允许
//====================串口发送操作设置==========================================
    //U0TCTL = 0x01;     //U0TCTL包含串口0发送功能操作
    U0TCTL = SSEL1 + TXEPT;   //波特率发生器选择MCLK
//====================串口波特率设置9600========================================
//===================波特率计算公式:波特率=BRCLK/(UBR+(M7+M6+。。。。+M0)/8)
    UBR0_0 = 0x41;     //UBR0_0为串口0波特率整数部分低地址
    UBR1_0 = 0x03;     //UBR1_0为串口0波特率整数部分高地址
    UMCTL_0 = 0x24;    //UBR1_0为串口0波特率小数调整部分
//===================串口收发使能控制===========================================
    ME1 |= UTXE0;      //串口0发送功能使能
    ME1 |= URXE0;      //串口0接收功能使能   
//===================串口中断使能控制===========================================
    IE1 |= UTXIE0;     //串口0发送中断使能
    IE1 |= URXIE0;     //串口0接收中断使能 
//====================SWRST复位=================================================
    U0CTL &= ~SWRST;   //clean SWRST     
  }

//======================串口接收中断服务函数====================================
#pragma vector = UART0RX_VECTOR
__interrupt void UART0_RX_ISR(void)
{
  while ((IFG1 & URXIFG0) == 1);    //中断标志       
  if((U0RCTL & RXERR) == 0)         //没有接收出错
  {
    data1 = RXBUF0;                 // RXBUF0 to TXBUF0
    //delay(500);
    //TXBUF0=data1;
    //IFG1=IFG1&0xef;
  }
}

//======================串口发送中断服务函数====================================
/*
#pragma vector = USART0TX_VECTOR
__interrupt void UART0_TX_ISR(void)
{

}
*/

/*****************************************************************************
系统初始化
******************************************************************************/
void InitSys()
{
   unsigned int iq0;
   _DINT();
   BCSCTL1 &=~XT2OFF;
   do
   {
      IFG1 &= ~OFIFG;   // 清除振荡器失效标志
      for (iq0 = 0xFF; iq0 > 0; iq0--); // 延时,等待XT2起振
   }
   while ((IFG1 & OFIFG) != 0);  // 判断XT2是否起振  
   BCSCTL2 = SELM1+SELS;                //MCLK,SMCLK时钟为XT2
}
//===============================================================================

void U0putc(unsigned char c)
{
  while((U0TCTL & TXEPT) == 0);
  TXBUF0 = c;
}

main()
{
  unsigned int i;
  WDTCTL = WDTPW + WDTHOLD;     //关闭看门狗
  InitSys();
 
//===================端口第二功能使能===========================================
  P3SEL |= BIT4;     //设置P3。4为UART0 的TXD
  P3SEL |= BIT5;     //设置P3。5为UART0 的RXD
  P3DIR |= BIT4;     //设置P3。4为输出
  P3DIR &= ~BIT5;    //设置P3。5为输入
//==============================================================================
  P6SEL &= ~(BIT1 + BIT2);
  P6DIR |= (BIT1 + BIT2);
 
  init_uart0();
 
  _EINT();           //打开全局中断
 
  while(1)
  {
    for (i = 0; i < 6; i++)
    {
      U0putc(Data);
    }
    delay(6000);
   
    if(data1 == 31)
    {
      P6OUT |= BIT1;
      delay(60000);
      P6OUT &= ~BIT1;
      data1 = 0;
    }
  };
}

最新回复

你把发送中断关闭,或者把发送中断函数删掉。因为你的发送中断函数里没有内容,所以出错,实践中是这样的。我也遇过类似麻烦,不过我的是系统一直在初始化。。。。  详情 回复 发表于 2012-3-22 17:12
 
点赞 关注

回复
举报

6

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
用的是开发板:NewMsg-JASK3000
 
 

回复

2144

帖子

3

TA的资源

五彩晶圆(中级)

板凳
 

ME1 |= UTXE0;      //串口0发送功能使能
    ME1 |= URXE0;      //串口0接收功能使能   
//===================串口中断使能控制===========================================
    IE1 |= UTXIE0;     //串口0发送中断使能
    IE1 |= URXIE0;     //串口0接收中断使能

 

 

把发送的全部关了

 

其次就是发送中断服务函数,你是屏蔽的吧,当发送buf为空时就会产生发送中断,你这个没有中断入口,我猜测会跑飞   不知道你为何发送00

 

 

 
 
 

回复

42

帖子

0

TA的资源

一粒金砂(中级)

4
 

串口

   我也遇到此问题   欢迎各位大侠帮助
 
 
 

回复

104

帖子

0

TA的资源

一粒金砂(中级)

5
 

回复 楼主 ndd987 的帖子

你把发送中断关闭,或者把发送中断函数删掉。因为你的发送中断函数里没有内容,所以出错,实践中是这样的。我也遇过类似麻烦,不过我的是系统一直在初始化。。。。
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表