问题如题目,
只有把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; } }; }
|