在线情况
25
  • 头像
  • 级别
    • 积分1
    • 经验808
    • 文章16
    • 注册2006-11-08
    呵呵,讨论的好精彩啊!
    微控网感谢您的参与
    在线情况
    26
    • 头像
    • 级别
      • 积分30
      • 经验4170
      • 文章139
      • 注册2006-10-19
      [QUOTE][b]下面引用由[u]tubaozi01[/u]发表的内容:[/b]

        这样就是说UTXIFG总是置位的,只有在USART模块在发送数据的那一段时间才处于复位状态。[/QUOTE]
      我觉得这个是正解!!!
      微控网感谢您的参与
      在线情况
      27
      • 头像
      • 级别
        • 积分19
        • 经验1701
        • 文章62
        • 注册2006-11-30
        我是初学的,但是不明白为啥这本书的233页倒数第3行特地的用粗黑体写到:[B]UTXIFG标志不代表数据移入移出完成[/B]
        [IMGA]http://www.microcontrol.cn/mcbbs/images/upload/2006/12/15/003916.gif[/IMGA]
        微控网感谢您的参与
        在线情况
        28
        • 头像
        • 级别
          • 积分4
          • 经验636
          • 文章12
          • 注册2007-03-08
          请教DC
          我看到这样一个中断程序
           interrupt[UART0TX_VECTOR] void usart0_tx (void)
          {
              while((UTCTL0 & BIT0)==0)
              {
              }
              ucSPITxFlag = 1;  //ucSPITxFlag程序中自己的一个变量
          }
          其中, while((UTCTL0 & BIT0)==0)在程序中是什么含义?
          和while ((IFG1 & UTXIFG0)==0)或者while ((IFG1 & UTXIFG0)==1)那个是等价关系?


          另外,关于SPI传输数据的过程:我的理解是初始化后,一组8位数据给UTXBUF,就开始传输,
          传输完了,CPU就置位UTXIFG0,然后程序通过查询判断UTXIFG0是否置位,来决定是否开始下组数据的传输.请教DC,我的理解对不对?  另外UTXIFG0复位是由软件复位还是CPU复位?

          另外,关于时钟模块问题,如果不对时钟的几个寄存器初始化,默认的是那个?不知道我这个问题提的对不对?




          微控网感谢您的参与
          在线情况
          29
          • 头像
          • 级别
            • 积分4
            • 经验636
            • 文章12
            • 注册2007-03-08
            引用DC  "while ((IFG1 & UTXIFG0) == 0);是等待UTXIFG0为1。正如冰河所说,只有为1时,表示你可以往UTXBUF写数据了。TXBUF0 = RXTXBUFF;"

            说是"等待UTXIFG0为1,"  那这样的话为1之前UTXIFG0当然是0了,IFG1寄存器的第7位(UTXIFG0)也应该是0了,

            但是再引用KKKCXF的
             ""感谢冰河前辈的点拨!
            可是我还有不明白的地方,我无论是在主程序中用查询方式发送数据如下:
                      while ((IFG1 & UTXIFG0) == 0);
                      TXBUF0 = RXTXBUFF;          
            还是在串口接受中断函数usart0_rx中用上面的查询方式发送数据后都不能使UTXIFGx清除,不知为何?还请赐教哦!""

            while ((IFG1 & UTXIFG0) == 0);此句指令为0成立,则执行下一句指令,
                                           但是当UTXIFG0为0时,表示TXBUF有数据,
                                            这个时候执行TXBUF0 = RXTXBUFF等于
                                           还没送完第一组数据就送第二组数据
                                            矛盾了
                                 新手分析,难免出错,敬请原谅
                                            


            微控网感谢您的参与
            在线情况
            30
            • 头像
            • 级别
              • 积分4
              • 经验204
              • 文章4
              • 注册2007-04-27
              我选的芯片是msp430f133,用了ti给的例程,但每次执行到
              while ((IFG1 & UTXIFG0) == 0);
              TXBUF0 = RXTXBUFF;  
              时,都不再往下执行。还请高手们不吝赐教!       
              微控网感谢您的参与
              在线情况
              31
              • 头像
              • 级别
                • 积分4
                • 经验636
                • 文章12
                • 注册2007-03-08
                现在有四个阶段:
                1 在给TXBUF送第一组数据时,IFG1要不要初始化呢? UTXIFG0要不要初始化呢?
                  或者说在什么情况下,TXBUF可以接受第一组数据?
                2 TXBUF接收数据后,还没发送完时,UTXIFG0的状态是1还是0?
                3 TXBUF送完数据后,是由软件还是CPU改变UTXIFG0的状态呢?
                4 while ((IFG1 & UTXIFG0) == 0);这个指令是等待UTXIFG0为1.为1之前其中IFG1的第七位状态是1还是0? UTXIFG0的状态又是什么? 为1之后,IFG1的第七位状态是1还是0? UTXIFG0的状态又是什么?


                微控网感谢您的参与
                在线情况
                32
                • 头像
                • 级别
                • 门派
                • 职务总版主
                • 声望+9
                • 财富5
                • 积分3065
                • 经验390701
                • 文章6744
                • 注册2006-03-07
                  根据IFGx标志寄存器中UTXIFG0位判别是否可以要送发下一个数据。UTXIFG0位为1则可以发送新(下)一个数据。
                  IFG1寄存器在PUC后的状态为:082H。也就是说上电后,UTXIFG0位和OFIFG位为1。
                [COLOR=#0000ff]欢迎发贴分享设计心得、开源DIY...[/COLOR]
                在线情况
                33
                • 头像
                • 级别
                  • 积分1
                  • 经验1932
                  • 文章1
                  • 注册2006-07-26
                  我想把RxBuffer[8]里的数据,透过发送中断送发,
                  当送发完成,停止中断服务程序,可是串口还是会一直接收数据,无法停止
                  要如何设置UTXIFG0 才能停止

                  #pragma vector=UART0TX_VECTOR    
                  __interrupt void Usart0_TX (void)
                  {
                    TXBUF0 = RxBuffer[rx_count];      // Transmit character
                    rx_count++;
                    if (rx_count>7)
                    {
                      IFG1 &= ~UTXIFG0;//                        
                      rx_count=0;            
                    }
                  }

                  微控网感谢您的参与
                  在线情况
                  34
                  • 头像
                  • 级别
                  • 门派
                  • 职务总版主
                  • 声望+9
                  • 财富5
                  • 积分3065
                  • 经验390701
                  • 文章6744
                  • 注册2006-03-07
                  你不必用“发”中断做“发”动作。如果想要发送1个数组,大可以直接在主程序中做发送数据动作。例程在DIY专区中有,自己看看吧。
                  [COLOR=#0000ff]欢迎发贴分享设计心得、开源DIY...[/COLOR]
                  在线情况
                  35
                  • 头像
                  • 级别
                    • 积分2
                    • 经验152
                    • 文章3
                    • 注册2007-03-07
                    冰河兄好强
                    微控网感谢您的参与
                    在线情况
                    36
                    • 头像
                    • 级别
                      • 积分4
                      • 经验636
                      • 文章12
                      • 注册2007-03-08
                      书上对ME1模块没有太多的说明,请教斑竹UTXE0,URXE0和USPIE0的功能,USPIE0的含义我能理解,但是USPIE0和URXE0的含义相同吗?
                      微控网感谢您的参与
                      Powered by LeadBBS 9.2 .
                      Page created in 0.1719 seconds with 6 queries.