UART0和UART1只会触发接收中断,其发送是在main中进行的,这里我贴出其初始化代码和发送代码。//初始化串口通信UART0, UART0为控制板与PC机的通信
void InitUART0(void)
{
P3SEL |= 0x30; // P3.4,5 = USART0 TXD/RXD
ME1 |= UTXE0 + URXE0; // Enable USART0 TXD/RXD
UCTL0 |= CHAR; // 8-bit character, USART0
UTCTL0 |= SSEL1; // UCLK = SMCLK, USART0
if( ((P4IN&0x04)>>2) == 1){//根据工作模式确定波特率,如果MODE_INPUT0为0,即P4.2为1,则采用57600波特率
UBR00 = 0x8A;//0x45; // USART0,波特率:57600
UBR10 = 0x00;//0x00; //
UMCTL0 = 0xDE;//0xAA; // Modulation
}
else{//否则采用115200波特率
UBR00 = 0x45;//0x45; // USART0,波特率:115200
UBR10 = 0x00;//0x00; //
UMCTL0 = 0x4A;//0xAA; // Modulation
}
UCTL0 &= ~SWRST; // USART0,SWRST复位
IE1 |= URXIE0; // USART0,接收中断允许
}
//初始化串口通信UART1
void InitUART1(void)
{
P3SEL |= 0xC0; // P3.6,7 = USART1 TXD/RXD
ME2 |= UTXE1 + URXE1; // Enable USART1 TXD/RXD
UCTL1 |= CHAR; // 8-bit character, USART1
UTCTL1 |= SSEL1; // UCLK = SMCLK, USART0
if( ((P4IN&0x04)>>2) == 1){//根据工作模式确定波特率,如果MODE_INPUT0为0,即P4.2为1,则采用57600波特率
UBR01 = 0x8A;//0x45; // USART0,波特率:57600
UBR11 = 0x00;//0x00; //
UMCTL1 = 0xDE;//0xAA; // Modulation
}
else{//否则采用115200波特率
UBR01 = 0x45;//0x45; // USART0,波特率:115200
UBR11 = 0x00;//0x00; //
UMCTL1 = 0x4A;//0xAA; // Modulation
}
UCTL1 &= ~SWRST; // USART1,SWRST复位
IE2 |= URXIE1; // USART1,接收中断允许
}
void UART0_LONG_CMD_Send(void)//附加协议长指令发送函数,一条指令24个字节
{
unsigned i;
COM2_DE_HIGH();//P4.0输出高电平,使能COM2的MAX485的DI口用于输出数据
for(i=0; i<MAX_BYTES_LONG_CMD; i++)
{
TXBUF0=UART0_Long_CMD_buffer[i];
while((UTCTL0&0x01)==0);
if(UART0_Long_CMD_buffer[i]==CMDEND_EXTRA)
{
COM2_DE_LOW();//P4.0输出低电平,禁止COM2的MAX485的DI口,等待数据传入
return;
}
}
}
void UART1_Send(unsigned * UARTRX_buf)
{
unsigned i;
COM1_DE_HIGH();//P4.1输出高电平,使能COM1的MAX485的DI口用于输出数据
for(i=0; i<Max_bytes_UART1; i++)
{
TXBUF1=UARTRX_buf[i];
while((UTCTL1&0x01)==0);
}
COM1_DE_LOW();//P4.1输出低电平,禁止COM1的MAX485的DI口,等待数据传入
}
|