代码如下:
#include <msp430f149.h>
#include "AD_convert.h"
#define DRE_out P3DIR |= BIT3 //连接485芯片的DE,RE端口的IO设置为输出状态
#define DE P3OUT |= BIT3 //设置485芯片处于发送状态
#define RE P3OUT &= ~BIT3 //设置485芯片处于接收状态
void Init_UART1(void);
int main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
DRE_out;
Init_UART1();
_BIS_SR(LPM3_bits + GIE); // Enter LPM3 w/ interrupt
/* while (1)
{
TXBUF1 = 0xAA;
while(!(IFG2 & UTXIFG1)); //等待发送结束
IFG2 &= ~UTXIFG1;
}
*/
}
/*******************************************
函数名称:Init_UART0
功 能:设置MCU的UART0对应的寄存器
参 数:无
返回值 :无
********************************************/
void Init_UART0(void)
{
P3SEL |= 0x30; // P3.4,5 = USART0 TXD/RXD
ME1 |= UTXE0 + URXE0; // Enable USART0 TXD/RXD
UCTL0 |= CHAR; // 8-bit character
UTCTL0 |= SSEL0; // UCLK = ACLK
UBR00 = 0x03; // 32k/9600 - 3.41
UBR10 = 0x00; //
UMCTL0 = 0x4A; // Modulation
UCTL0 &= ~SWRST; // Initialize USART state machine
IE1 |= URXIE0; // Enable USART0 RX interrupt
}
/*******************************************
函数名称:Init_UART1
功 能:设置MCU的UART1对应的寄存器
参 数:无
返回值 :无
********************************************/
void Init_UART1(void)
{
P3SEL |= 0xC0; //将P3.6,P3.7选做UART1的通信端口
ME2 |= UTXE1 + URXE1; //使能USART1的TXD和RXD
UCTL1 |= CHAR; //选择8-bit字符
UTCTL1 |= SSEL0; //驱动时钟选择ACLK
UBR01 = 0x03; // 32k/9600 - 3.41
UBR11 = 0x00; //
UMCTL1 = 0x4A; // Modulation
UCTL1 &= ~SWRST; //初始化UART状态机
IE1 |= URXIE1; // Enable USART0 RX interrupt
}
// UART0 RX ISR will for exit from LPM3 in Mainloop
#pragma vector=USART0RX_VECTOR
__interrupt void usart0_rx (void)
{
_BIC_SR_IRQ(LPM3_bits); // Clear LPM3 bits from 0(SR)
}
#pragma vector=USART1RX_VECTOR
__interrupt void usart1_rx (void)
{
while (!(IFG2 & UTXIFG1)); // USART1 TX buffer ready?
DE; //发送
TXBUF1 = RXBUF1;
while (!(IFG2 & UTXIFG1)); //等待发送结束
RE; //接收
}
测试时MCU向PC发数据,PC能收到,但是PC向MCU发数据,好像没反应。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
调整了方向。现在的情况是MCU向PC发送数据时,最后一个字符会丢失。所以我在程序里多发一个0xff,这样做可以吗?
这算什么解决办法了,你发送的时候在调整方向后加个延时了在发送数据。这样应该没问题了。
就是的,需要注意这个延时的。
一周热门 更多>