查看: 3050|回复: 4

[教程] 代码疑问

[复制链接]
  • TA的每日心情
    奋斗
    2014-11-15 18:35
  • 签到天数: 5 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    发表于 2014-11-13 11:05:44 | 显示全部楼层 |阅读模式
    分享到:
    #pragma vector=USCIAB0RX_VECTOR
    __interrupt void usart0_rx(void)    //接收中断
    {
      while((IFG2&UCA0RXIFG )==0)
      i=UCA0RXBUF;

    } 我想问下这个整形变量 i 在这个中断里什么作用 这个语句什么意思?
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2021-12-10 15:56
  • 签到天数: 2675 天

    连续签到: 1 天

    [LV.Master]伴坛终老

    发表于 2014-11-13 13:05:37 | 显示全部楼层
    将串口读进来的数据放进 i , 后面程式应该会有用到吧!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2014-11-15 18:35
  • 签到天数: 5 天

    连续签到: 1 天

    [LV.2]偶尔看看I

     楼主| 发表于 2014-11-13 15:09:11 | 显示全部楼层
    本帖最后由 特立独行的猪+1 于 2014-11-13 15:11 编辑
    slotg 发表于 2014-11-13 13:05
    将串口读进来的数据放进 i , 后面程式应该会有用到吧!

    可是整个程序没用到啊 我很困惑 下面是整个程序
    #include "msp430G2553.h"
    #include "stdio.h"
    void delay(int z){
      int x,y;
      for(x=0;x<z;x++){
        for(y=0;y<100;y++);
      }
    }
    int a[8],i;
    void Init_uart0()
    {

      UCA0CTL1|=UCSWRST;
      //UCA0CTL0&=~UC7BIT;//字符长度为8
      UCA0CTL1|=UCSSEL_2;//选择系统时钟
      UCA0BR0=0x6D;  //波特率为9600
      UCA0BR1=0;
      UCA0MCTL=0;//UCA0MCTL=UCBRS0;
      IE2=UCA0RXIE+UCA0TXIE;//开接收使能
      UCA0CTL1&=~UCSWRST;
      P1SEL|=BIT1+BIT2; //将P1.1 P1.2设为第二功能
      P1SEL2|=BIT1+BIT2;
    }
    void Uart0Sends(char *s)
    {
      while(*s!='\0')
      {
        UCA0TXBUF=*s;
        while((IFG2&UCA0TXIFG)==0); //查询发送是否结束
        IFG2&=~UCA0TXIFG; //清除发送一标志位
        s++;
      }
    }

      
    void main( )
    {
      // Stop watchdog timer to prevent time out reset
      WDTCTL = WDTPW + WDTHOLD;
      BCSCTL1 = CALBC1_1MHZ;     
      DCOCTL  = CALDCO_1MHZ;
      Init_uart0();
      _EINT();
      P1DIR&=~BIT1;
      P1DIR&=~BIT2;
      P1DIR&=~BIT3;
      P1DIR|=BIT6;
      P1OUT=0;
      
      while(1){
       if(!(P1IN&BIT1)){           //静音按钮按下
      Uart0Sends("Silence\n");      
      __delay_cycles(1000000);    //1048576=1024^2
        }
        if(!(P1IN&BIT2)){
      Uart0Sends("Alarm");         //报警按钮按下
      P1OUT=BIT6;
      __delay_cycles(1000000);
        }
        if(!(P1IN&BIT3)){         //锁定按钮按下
          Uart0Sends("Lock");
          P1OUT=BIT6;
          delay(5000);
          P1OUT=0;
          __delay_cycles(1000000);   
        }
      }
    }

      

    #pragma vector=USCIAB0RX_VECTOR
    __interrupt void usart0_rx(void)    //接收中断
    {
      while((IFG2&UCA0RXIFG )==0);

      i=UCA0RXBUF;
      
    }
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2021-12-10 15:56
  • 签到天数: 2675 天

    连续签到: 1 天

    [LV.Master]伴坛终老

    发表于 2014-11-13 17:28:07 | 显示全部楼层
    中断里面没有定义 i , 所以 i 应该是属于全局变量, main回路好像又没有看到到 i ,所以 i 可能是没有作用吧!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2014-11-15 18:35
  • 签到天数: 5 天

    连续签到: 1 天

    [LV.2]偶尔看看I

    发表于 2014-11-15 18:28:10 | 显示全部楼层
    slotg 发表于 2014-11-13 17:28
    中断里面没有定义 i , 所以 i 应该是属于全局变量, main回路好像又没有看到到 i ,所以 i 可能是没有作用吧 ...

    谢谢 差不多整明白了 我还有个问题:在LaunchPad串口通信程序里,怎么开启收发使能?是哪个寄存器控制收发使能的?
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    手机版|小黑屋|与非网

    GMT+8, 2024-4-23 14:37 , Processed in 0.166546 second(s), 23 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.