问题如题目,
只有把main函数中的 _EINT();屏蔽掉,才停止发送00,但是我需要接受中断,这可如何是好!!!!!急急急!!!!!
代码如下:
#include <msp430x14x.h>
char UART0_RX_BUF[],nRX0_Len_temp,nRX0_Len;
char Data[6]={0x01,0x02,0x03,0x04,0x05,0x06};
char data1 = 0;
//=======================延时===================================================
void delay(unsigned int n)
{
unsigned int i;
for(i=0;i<n;i++);
}
//======================串口初始化==============================================
void init_uart0(void)
{
//====================SWRST置位=================================================
U0CTL |= SWRST;
//====================串口工作模式设置==========================================
U0CTL = 0x00; // U0CTL包含串口0通信协议、通信模式、校验位等设置,允许UART0
U0CTL += CHAR; //(CHAR=0x10)当CHAR=0时为7位数据,当 CHAR=1时为8位数据
//不需要校验,数据位为8位,无反馈,异步UART通信,UART被允许
//====================串口发送操作设置==========================================
//U0TCTL = 0x01; //U0TCTL包含串口0发送功能操作
U0TCTL = SSEL1 + TXEPT; //波特率发生器选择MCLK
//====================串口波特率设置9600========================================
//===================波特率计算公式:波特率=BRCLK/(UBR+(M7+M6+。。。。+M0)/8)
UBR0_0 = 0x41; //UBR0_0为串口0波特率整数部分低地址
UBR1_0 = 0x03; //UBR1_0为串口0波特率整数部分高地址
UMCTL_0 = 0x24; //UBR1_0为串口0波特率小数调整部分
//===================串口收发使能控制===========================================
ME1 |= UTXE0; //串口0发送功能使能
ME1 |= URXE0; //串口0接收功能使能
//===================串口中断使能控制===========================================
IE1 |= UTXIE0; //串口0发送中断使能
IE1 |= URXIE0; //串口0接收中断使能
//====================SWRST复位=================================================
U0CTL &= ~SWRST; //clean SWRST
}
//======================串口接收中断服务函数====================================
#pragma vector = UART0RX_VECTOR
__interrupt void UART0_RX_ISR(void)
{
while ((IFG1 & URXIFG0) == 1); //中断标志
if((U0RCTL & RXERR) == 0) //没有接收出错
{
data1 = RXBUF0; // RXBUF0 to TXBUF0
//delay(500);
//TXBUF0=data1;
//IFG1=IFG1&0xef;
}
}
//======================串口发送中断服务函数====================================
/*
#pragma vector = USART0TX_VECTOR
__interrupt void UART0_TX_ISR(void)
{
}
*/
/*****************************************************************************
系统初始化
******************************************************************************/
void InitSys()
{
unsigned int iq0;
_DINT();
BCSCTL1 &=~XT2OFF;
do
{
IFG1 &= ~OFIFG; // 清除振荡器失效标志
for (iq0 = 0xFF; iq0 > 0; iq0--); // 延时,等待XT2起振
}
while ((IFG1 & OFIFG) != 0); // 判断XT2是否起振
BCSCTL2 = SELM1+SELS; //MCLK,SMCLK时钟为XT2
}
//===============================================================================
void U0putc(unsigned char c)
{
while((U0TCTL & TXEPT) == 0);
TXBUF0 = c;
}
main()
{
unsigned int i;
WDTCTL = WDTPW + WDTHOLD; //关闭看门狗
InitSys();
//===================端口第二功能使能===========================================
P3SEL |= BIT4; //设置P3。4为UART0 的TXD
P3SEL |= BIT5; //设置P3。5为UART0 的RXD
P3DIR |= BIT4; //设置P3。4为输出
P3DIR &= ~BIT5; //设置P3。5为输入
//==============================================================================
P6SEL &= ~(BIT1 + BIT2);
P6DIR |= (BIT1 + BIT2);
init_uart0();
_EINT(); //打开全局中断
while(1)
{
for (i = 0; i < 6; i++)
{
U0putc(Data
);
}
delay(6000);
if(data1 == 31)
{
P6OUT |= BIT1;
delay(60000);
P6OUT &= ~BIT1;
data1 = 0;
}
};
}
此帖出自小平头技术问答
一周热门 更多>