2682|6

3

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

430F149 [复制链接]

为什么MSP430F149中用PC机向430发字符IE1的UTXIE0不使能,中断不开也可以实现功能 谢谢 QQ732068350

最新回复

这个好用  我调过了 /****************************************************** 程序功能:接收来自PC机的字符,然后重新发送给PC机 ------------------------------------------------------- 通信格式:N.8.1,  9600          无校验,8个数据位,1个停止位,波特率9600 ------------------------------------------------------ 测试说明:打开串口调试助手,正确设置通信格式,向学习板           发送一个字符,观察是否收到回发的字符,以及是否           正确 *******************************************************/ #include   /********************主函数********************/ void main(void) {     /*下面六行程序关闭所有的IO口*/     P1DIR = 0XFF;P1OUT = 0XFF;     P2DIR = 0XFF;P2OUT = 0XFF;     P3DIR = 0XFF;P3OUT = 0XFF;     P4DIR = 0XFF;P4OUT = 0XFF;     P5DIR = 0XFF;P5OUT = 0XFF;     P6DIR = 0XFF;P6OUT = 0XFF;         WDTCTL = WDTPW + WDTHOLD;                 // 关闭看门狗     P6DIR |= BIT2;P6OUT |= BIT2;              //关闭电平转换         P3SEL |= 0x30;                            // 选择P3.4和P3.5做UART通信端口     ME1 |= UTXE0 + URXE0;                     // 使能USART0的发送和接受     UCTL0 |= CHAR;                            // 选择8位字符     UTCTL0 |= SSEL0;                          // UCLK = ACLK     UBR00 = 0x03;                             // 波特率9600     UBR10 = 0x00;                             //     UMCTL0 = 0x4A;                            // Modulation     UCTL0 &= ~SWRST;                          // 初始化UART状态机     IE1 |= URXIE0;                            // 使能USART0的接收中断     while(1)     {         _EINT();                               //打开全局中断         LPM1;                                  //进入LPM1模式         while (!(IFG1 & UTXIFG0));             //等待以前的字符发送完毕         TXBUF0 = RXBUF0;                       //将收到的字符发送出去     } } /******************************************* 函数名称:UART0_RXISR 功    能:UART0的接收中断服务函数,在这里唤醒           CPU,使它退出低功耗模式 参    数:无 返回值  :无 ********************************************/ #pragma vector = UART0RX_VECTOR __interrupt void UART0_RXISR(void) {   LPM1_EXIT;                 //退出低功耗模式 }  详情 回复 发表于 2013-8-2 22:42

点评

那你是用的轮询方式接收串口数据吗?  详情 回复 发表于 2013-3-5 08:29
 
点赞 关注

回复
举报

436

帖子

5

TA的资源

五彩晶圆(初级)

沙发
 
原帖由 tanying41 于 2013-3-4 22:56 发表
为什么MSP430F149中用PC机向430发字符IE1的UTXIE0不使能,中断不开也可以实现功能 谢谢 QQ732068350

那你是用的轮询方式接收串口数据吗?

点评

/**************************************************** 程序功能:MCU通过串口向PC机发送4X4键盘的键值 ----------------------------------------------------- 通信格式:N.8.1, 9600 -------------------  详情 回复 发表于 2013-8-2 22:39
 
 

回复

3

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
/******************************************************
程序功能:PC通过串口调试精灵向MCU发送数据,MCU将其在1602
          液晶上显示
-------------------------------------------------------
通信格式:N.8.1,  9600
------------------------------------------------------
测试说明:打开串口调试助手,正确设置通信格式,向从PC机上
          向学习板发送数据,观察液晶上显示的字符。
******************************************************/
#include  
#include  "BoardConfig.h"
#include  "cry1602.h"
void InitUART(void);
void PutString(uchar *ptr);
/***************主函数************/
void main( void )
{
    uchar pX=0,pY=0;
    uchar *tishi = "Send data to MCU, and they will be displayed on Cry1602!";
   
    WDTCTL = WDTPW + WDTHOLD;     //关狗
    BoardConfig(0xb8);
   
    InitUART();                   //初始化UART
    LcdReset();                   //初始化LCD
   
    PutString(tishi);
    while(1)
    {
        if(IFG1 & URXIFG0)      //如果收到字符
        {
            Disp1Char(pX++,pY,U0RXBUF);
            if(pX == 16)
            {
                pX  = 0;
                pY ^= 1;
            }
        }
    }
   
}
/*******************************************
函数名称:PutSting
功    能:向PC机发送字符串
参    数:ptr--指向发送字符串的指针
返回值  :无
********************************************/
void PutString(uchar *ptr)
{
      while(*ptr != '\0')
      {
            while (!(IFG1 & UTXIFG0));             // TX缓存空闲?
            TXBUF0 = *ptr++;                       // 发送数据
      }
      while (!(IFG1 & UTXIFG0));
      TXBUF0 = '\n';
}
/*******************************************
函数名称:InitUART
功    能:初始化UART端口
参    数:无
返回值  :无
********************************************/
void InitUART(void)
{
    P3SEL |= 0x30;                            // P3.4,5 = USART0 TXD/RXD
    ME1 |= URXE0 + UTXE0;                             // Enable USART0 T/RXD
    UCTL0 |= CHAR;                            // 8-bit character
    UTCTL0 |= SSEL0;                          // UCLK = ACLK
    UBR00 = 0x03;                             // 32k/9600 - 3.41
    UBR10 = 0x00;                             //
    UMCTL0 = 0x4A;                            // Modulation
    UCTL0 &= ~SWRST;                          // Initialize USART state machine
}

点评

问题已经很清楚了,因为是用的轮询方式,没有使用中断,所以也可以正常实现通信。 IE1中的UTXIE0没开启,只是说CPU内核不响应这个对应的UART中断,但是这个外设产生的中断还是会到达uart外设模块中的。 所以,i  详情 回复 发表于 2013-3-5 13:57
 
 
 

回复

436

帖子

5

TA的资源

五彩晶圆(初级)

4
 
原帖由 tanying41 于 2013-3-5 08:51 发表
/******************************************************
程序功能:PC通过串口调试精灵向MCU发送数据,MCU将其在1602
          液晶上显示
-------------------------------------------------------
通信格 ...

问题已经很清楚了,因为是用的轮询方式,没有使用中断,所以也可以正常实现通信。
IE1中的UTXIE0没开启,只是说CPU内核不响应这个对应的UART中断,但是这个外设产生的中断还是会到达uart外设模块中的。
所以,if(IFG1 & URXIFG0) 就可以判断是否有串口数据接收到了。

代码没有仔细去看,因为我玩这个MSP430也不是很熟悉。但在原理的理解上,和其他的MCU都是一样的。
 
 
 

回复

18

帖子

0

TA的资源

一粒金砂(中级)

5
 

回复 沙发lr2131 的帖子

/****************************************************
程序功能:MCU通过串口向PC机发送4X4键盘的键值
-----------------------------------------------------
通信格式:N.8.1,  9600
------------------------------------------------------
测试说明:打开串口调试助手,正确设置通信格式,按动4X4
          键盘观察屏幕显示的按键键值。
****************************************************/
#include  
#include  "keypad.h"
#include  "keypad.C"

//引用外部变量的声明
extern unsigned char key_Pressed;      
extern unsigned char key_val;         
extern unsigned char key_Flag;

void PutString(uchar *ptr);
void PutChar(uchar zifu);
/*******************主函数*******************/
void main(void)
{
    /*下面六行程序关闭所有的IO口*/
    P1DIR = 0XFF;P1OUT = 0XFF;
    P2DIR = 0XFF;P2OUT = 0XFF;
    P3DIR = 0XFF;P3OUT = 0XFF;
    P4DIR = 0XFF;P4OUT = 0XFF;
    P5DIR = 0XFF;P5OUT = 0XFF;
    P6DIR = 0XFF;P6OUT = 0XFF;
   
    uchar *tishi = "This Key's ID is:";
    P6DIR |= BIT2;P6OUT |= BIT2;              //关闭电平转换
    WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
    P3SEL |= 0x30;                            // P3.4,5 = USART0 TXD/RXD
    ME1 |= UTXE0;                             // Enable USART0 TXD/RXD
    UCTL0 |= CHAR;                            // 8-bit character
    UTCTL0 |= SSEL0;                          // UCLK = ACLK
    UBR00 = 0x03;                             // 32k/9600 - 3.41
    UBR10 = 0x00;                             //
    UMCTL0 = 0x4A;                            // Modulation
    UCTL0 &= ~SWRST;                          // Initialize USART state machine
   
    Init_Keypad();                            //初始化键盘端口
    while(1)
    {
        Key_Event();
   
        if(key_Flag == 1)
        {
            key_Flag = 0;
            PutString(tishi);
            PutChar(key_val);
        }
    }
}
/*******************************************
函数名称:PutSting
功    能:向PC机发送字符串
参    数:ptr--指向发送字符串的指针
返回值  :无
********************************************/
void PutString(uchar *ptr)
{
      while(*ptr != '\0')
      {
            while (!(IFG1 & UTXIFG0));                // TX缓存空闲?
            TXBUF0 = *ptr++;                       // 发送数据
      }
      while (!(IFG1 & UTXIFG0));
      TXBUF0 = '\n';
}
/*******************************************
函数名称:PutChar
功    能:向PC机发送一个字符对应的ASCII码
参    数:zifu--发送的字符
返回值  :无
********************************************/
void PutChar(uchar zifu)
{
      while (!(IFG1 & UTXIFG0));
      if(zifu > 9)            //发送键值1~16对应的ASCII码
      {
          TXBUF0 = 0x30 + zifu/10;
          while (!(IFG1 & UTXIFG0));
          TXBUF0 = 0x30 + zifu%10;
      }
      else
      {
          TXBUF0 = 0x30 + zifu;
      }
      while (!(IFG1 & UTXIFG0));
      TXBUF0 = '\n';          //发送回车字符
}

您试试这个 不过我的UART 1做SPI时候不好用 不知道为什么
 
 
 

回复

18

帖子

0

TA的资源

一粒金砂(中级)

6
 
我再给你发个别的 这个库太多
 
 
 

回复

18

帖子

0

TA的资源

一粒金砂(中级)

7
 
这个好用  我调过了 /******************************************************
程序功能:接收来自PC机的字符,然后重新发送给PC机
-------------------------------------------------------
通信格式:N.8.1,  9600
         无校验,8个数据位,1个停止位,波特率9600
------------------------------------------------------
测试说明:打开串口调试助手,正确设置通信格式,向学习板
          发送一个字符,观察是否收到回发的字符,以及是否
          正确
*******************************************************/
#include  

/********************主函数********************/
void main(void)
{
    /*下面六行程序关闭所有的IO口*/
    P1DIR = 0XFF;P1OUT = 0XFF;
    P2DIR = 0XFF;P2OUT = 0XFF;
    P3DIR = 0XFF;P3OUT = 0XFF;
    P4DIR = 0XFF;P4OUT = 0XFF;
    P5DIR = 0XFF;P5OUT = 0XFF;
    P6DIR = 0XFF;P6OUT = 0XFF;
   
    WDTCTL = WDTPW + WDTHOLD;                 // 关闭看门狗
    P6DIR |= BIT2;P6OUT |= BIT2;              //关闭电平转换
   
    P3SEL |= 0x30;                            // 选择P3.4和P3.5做UART通信端口
    ME1 |= UTXE0 + URXE0;                     // 使能USART0的发送和接受
    UCTL0 |= CHAR;                            // 选择8位字符
    UTCTL0 |= SSEL0;                          // UCLK = ACLK
    UBR00 = 0x03;                             // 波特率9600
    UBR10 = 0x00;                             //
    UMCTL0 = 0x4A;                            // Modulation
    UCTL0 &= ~SWRST;                          // 初始化UART状态机
    IE1 |= URXIE0;                            // 使能USART0的接收中断

    while(1)
    {
        _EINT();                               //打开全局中断
        LPM1;                                  //进入LPM1模式
        while (!(IFG1 & UTXIFG0));             //等待以前的字符发送完毕
        TXBUF0 = RXBUF0;                       //将收到的字符发送出去
    }
}
/*******************************************
函数名称:UART0_RXISR
功    能:UART0的接收中断服务函数,在这里唤醒
          CPU,使它退出低功耗模式
参    数:无
返回值  :无
********************************************/
#pragma vector = UART0RX_VECTOR
__interrupt void UART0_RXISR(void)
{
  LPM1_EXIT;                 //退出低功耗模式
}
 
 
 

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

查找数据手册?

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
快速回复 返回顶部 返回列表