2170|5

5

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

請問各位大大 MSP430G2553 UART 的中斷 [复制链接]

請問一下各位大大 這是我從UART範例上去改的 我是從電腦端下個指令去控制燈亮滅
我的問題是 if(UCA0RXBUF==0X41)這行到else完 我要是把他寫在UART的中斷裡面是可以順利執行
但要是我把 if(UCA0RXBUF==0X41)這行到else完 寫在主程式就不能順利執行如下面的程式碼 請問我是哪邊寫錯??

#include "msp430g2553.h"
void uartset(void);
void uartopen(void);
int main(void)
{
WDTCTL = WDTPW + WDTHOLD;                //stop WDT
P1SEL |=0x00;
P1DIR |=0x01;
uartset();
while(1)
{
  uartset();
  uartopen();
  if(UCA0RXBUF==0X41)
      {
           if((P1IN&BIT5)==BIT5)
        {
            P1OUT = 0X00;
        __delay_cycles(3000000);
        UCA0TXBUF = 0X42;
        }
       else
        {
             P1OUT = 0X01;
             UCA0TXBUF = 0X43;
        }
      }
}
}

void uartset(void)
{
  BCSCTL1 = CALBC1_1MHZ;                    // Set DCO
  DCOCTL = CALDCO_1MHZ;
  P1SEL |= BIT1 + BIT2 ;                     // P1.1 = RXD, P1.2=TXD
  P1SEL2 |= BIT1 + BIT2 ;                    // P1.1 = RXD, P1.2=TXD
  UCA0CTL1 |= UCSSEL_2;                     // SMCLK
  UCA0BR0 = 104;                            // 1MHz 9600
  UCA0BR1 = 0;                              // 1MHz 9600
  UCA0MCTL = UCBRS0;                        // Modulation UCBRSx = 1
  UCA0CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**
}

void uartopen(void)
{
  IE2 = UCA0RXIE;                          // Enable USCI_A0 RX interrupt
  __bis_SR_register(LPM0_bits+GIE);       // Enter LPM0, interrupts enabled
}
#pragma vector=USCIAB0RX_VECTOR
__interrupt void USCI0RX_ISR(void)
{
  while(!(IFG2&UCA0RXIFG));
}


最新回复

重新看了一次你的代码,问题关键不在上面回复的,而是在低功耗模式上。 你在uartopen中进入了LPM0,但是一直没退出,那么之后就只能运行中断服务里面的语句。 只有在中断服务里退出LPM0之后,才可能执行主函数里的语句。  详情 回复 发表于 2015-10-7 10:37
 
点赞 关注

回复
举报

1193

帖子

0

TA的资源

纯净的硅(高级)

沙发
 
你没有判断接收到了一个字符,就拿寄存器和0x41比较。
RXBUF是功能寄存器,读取之后会自动清空的
还有,你中断服务是空语句,有没有可能中断标志没清,一直卡中断里?
 
 

回复

5

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
qiushenghua 发表于 2015-10-5 16:38
你没有判断接收到了一个字符,就拿寄存器和0x41比较。
RXBUF是功能寄存器,读取之后会自动清空的
还有, ...

感謝大大的回覆 我在試試看
 
 
 

回复

1193

帖子

0

TA的资源

纯净的硅(高级)

4
 
重新看了一次你的代码,问题关键不在上面回复的,而是在低功耗模式上。
你在uartopen中进入了LPM0,但是一直没退出,那么之后就只能运行中断服务里面的语句。
只有在中断服务里退出LPM0之后,才可能执行主函数里的语句。
 
 
 

回复

5

帖子

0

TA的资源

一粒金砂(初级)

5
 
qiushenghua 发表于 2015-10-7 10:37
重新看了一次你的代码,问题关键不在上面回复的,而是在低功耗模式上。
你在uartopen中进入了LPM0,但是一 ...

恩 我在試試  感謝大大 如還有問題能在請問你嗎?
 
 
 

回复

5

帖子

0

TA的资源

一粒金砂(初级)

6
 
qiushenghua 发表于 2015-10-7 10:37
重新看了一次你的代码,问题关键不在上面回复的,而是在低功耗模式上。
你在uartopen中进入了LPM0,但是一 ...

好像是喔~~!! 感謝大大 如果還有問題能在問你?
 
 
 

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

查找数据手册?

EEWorld Datasheet 技术支持

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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

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

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

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