当我设置发送中断使能时,在接收中断函数中,程序在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;
}
----------------------------------------
看看这段话有没有用,就是说,看看此时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.
一周热门 更多>