430单片机大神,进来看看吧,关于异步串行通信中断的问...

2019-07-15 20:40发布

当我设置发送中断使能时,在接收中断函数中,程序在while (!(IFG1 & UTXIFG0);这句话停止,而我不设置发送中断使能时候,程序就可以通过这句话,请问这是为什么


程序如下:。。。。。。。。。。。。。。。。。

#include <msp430x14x.h>
void delayms(unsigned int z)
{
   unsigned int x,y;
   for(x=8000;x>0;x--)    //延迟语句
   for(y=Z;y>0;y--);
}
void main()
{     
     WDTCTL = WDTPW + WDTHOLD;    //关狗
     UCTL0 |=CHAR;//字符长度为8;
     UTCTL0 |=SSEL0;//选择时钟为ACLK
     UBR00 =0x03;
     UBR10 =0x00;    //波特率的设置,波特率为9600
     UMCTL0 =0x4A;
     ME1 |=UTXE0+URXE0;//两个发送数据段使能
     P3SEL |=0x30;    //P3.4-3.5用作TXD/RXD
     P3DIR |=0x10;   //P3.4用作输出端口   
     UCTL0 &=~SWRST; // 初始化UART状态机清,除串口复位信号(打开串口)      
     IE1 |=URXIE0+UTXIE0;//打开中断使能  
     TXBUF0 = 0X01;  
     _EINT();  
      while(1)
     {                 
        P2OUT =0Xff;
     }
}
#pragma vector=UART0TX_VECTOR    //接受数据产生的中断
__interrupt void uarto1()
{  
     while ((IFG1 & UTXIFG0));//等待单片机数据传输完毕,不知道这句话可以不可以省略
     P2DIR=0xff;
     P2OUT =0x00;
     delayms(8000);
     P2OUT =0Xff;
     delayms(8000);
}
#pragma vector=UART0RX_VECTOR
__interrupt void uartotx()
{  
     while (!(IFG1 & UTXIFG0));//等待单片机数据接受完毕,并且等待发送寄存器是否可以存入数据,
     P2DIR=0xff;               //我不明白的是当发送中断也开启的时候,程序就停在上一句那里了,即UTXFIGO=0;
                                    //不开启的时候就可以通过了
     P2OUT =RXBUF0;               //只有当UTXFIGO 等于1的时候才可以存入数据
     delayms(8000);
     TXBUF0=RXBUF0;
}



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
1条回答
z00
2019-07-15 22:06
     //我不明白的是当发送中断也开启的时候,程序就停在上一句那里了,即UTXFIGO=0;
----------------------------------------
看看这段话有没有用,就是说,看看此时UTXIE0是“0”还是“1”:
A transfer is triggered when the UTXIFG0 flag is set. UTXIFG0 is automatically reset when the transfer starts. If UTXIE0 is set, the UTXIFG0 flag will not trigger a transfer.

一周热门 更多>