|
急求!!请各位大虾帮我看看MSP430FE425的串口通讯程序有什么问题?
[复制链接]
用MSP430FE425做485串口通讯,程序不知道那有问题,串口接收中断都进不了,各位大虾帮我看看我的程序有什么问题,急啊!!!!!
void main (void)
{
init_usart();
while (1)
{
_BIS_SR (LPM0_bits); //低功耗模式0
if(nRev_UART0==1)
{
UART0_TX_BUF[0]=0xFF; //开始标志
UART0_TX_BUF[1]=ADDRESS0; //电表固定地址
UART0_TX_BUF[2]=ADDRESS1;
UART0_TX_BUF[3]='R';
nTX0_Len=4;
IFG1 |=UTXIFG0; //设置中断标志,进入发送中断程序
}
}
}
/*******************************************************************************
* 初始化USART *
********************************************************************************/
void init_usart(void)
{
P2SEL |=0x30; //P2.4,5=USART0 TX/RX
ME1 |=UTXE0+URXE0; //Ena××e USART0 TXD/RXD
UCTL0 |=CHAR; //8位数据位,1位停止位,无效验
UTCTL0 |=SSEL1; //UCLK=SMCLK
UBR00=0x6D;
UBR10=0x00;
UMCTL0=0x00; //波特率设置为9600
UCTL0 &=~SWRST; //SWRST复位,USART允许
IE1 |=URXIE0; //接受中断允许
IE1 |=UTXIE0; //发送中断允许
P2DIR=0x10; //P2.4输出,P2.5输入
} //end of init_usart
/*******************************************************************************
* USART0 接收中断 *
********************************************************************************/
interrupt[UART0RX_VECTOR] void USART0_RX(void)
{
UART0_RX_BUF[nRX0_Len_temp] = RXBUF0; //接收来自的数据
nRX0_Len_temp += 1;
if(UART0_RX_BUF[nRX0_Len_temp-1]==0x0D)
{
//接收标志置1
nRev_UART0 = 1;
nRX0_Len_temp = 0; //接收数据长度复位
}
}
/*******************************************************************************
* USART0 发送中断 *
********************************************************************************/
interrupt[UART0TX_VECTOR] void USART0_TX(void)
{
if(nTX0_Len !=0)
{
//表示缓冲区里的数据没有发送完
nTX0_Flag=0;
TXBUF0=UART0_TX_BUF[nSend_TX0];
while((UTCTL0&0x01)==0);
nSend_TX0+=1;
//如果数据发送完毕
if(nSend_TX0>=nTX0_Len)
{
nSend_TX0=0;
nTX0_Len=0;
nTX0_Flag=1;
}
}
}
|
|