|
关于MSP430f149的RS485通信,高手请进
[复制链接]
下面是我编写的MSP430f149的485通信小程序,请各位大侠看看问题出在哪里?
程序目的:想用串口精灵发送一个字节数据给单片机,然后单片机再将接受的数据回发给串口精灵。
下面是错误的现象描述:
1.C:\Users\panruifeng\Desktop\1.jpg串口精灵中,发送0x56,接收到的是0x00
2.C:\Users\panruifeng\Desktop\2.jpg仿真器显示收到的数据是0x56,是正确的
3.下面是程序
#include
unsigned int flag_1,rec_count,rec_ok;
unsigned char rec_data;
/********************UART初始化参数设定********************/
void UART_parameter_initialization(void)
{
P3DIR |= BIT3;
P3OUT &= ~BIT3; //处于接收状态
P3SEL |= 0xC0; // 选择P3.6和P3.7做UART通信端口
ME2 |= URXE1; // 使能USART1的发送和接受
UCTL1 |= CHAR+SPB; // 选择8位字符,无校验位,两个停止位
UTCTL1 |= SSEL0; // UCLK = ACLK
UBR01 = 0x03; // 波特率9600
UBR11 = 0x00; //
UMCTL1 = 0x4A; // Modulation,波特率小数补偿
UCTL1 &= ~SWRST; // 初始化UART状态机
IE2 |= URXIE1; // 使能USART1的接收中断
IFG2 &= ~UTXIFG1;
}
void senddata(void) //数据发送
{
IFG2 &= ~UTXIFG1;
TXBUF1 =rec_data;
while (!(IFG2 & UTXIFG1)); //等待以前的字符发送完毕
}
/********************主函数********************/
void main(void)
{
int i;
/*下面六行程序关闭所有的IO口*/
P1DIR = 0XFF;P1OUT = 0XFF;
P2DIR = 0XFF;P2OUT = 0XFF;
P3DIR = 0XFF;P3OUT = 0XFF;
P4DIR = 0XFF;P4OUT = 0XFF;
P5DIR = 0XFF;P5OUT = 0XFF;
P6DIR = 0XFF;P6OUT = 0XFF;
WDTCTL = WDTPW + WDTHOLD; // 关闭看门狗
flag_1=0; //变量初始化
rec_count=0;
rec_ok=0;
UART_parameter_initialization();
_EINT(); //打开全局中断
while(1)
{
if(rec_ok==1)
{
rec_ok=0;
P3OUT |= BIT3; //开启发送状态
ME2 |= UTXE1;
for(i=100;i>0;i--);
senddata(); //数据发送
ME2 &=~UTXE1;
P3OUT &= ~BIT3; //处于接收状态
}
}
}
/********************中断函数********************/
#pragma vector =UART1RX_VECTOR
__interrupt void UART1_RXISR(void)
{
rec_data=RXBUF1; //中断中读数据
rec_ok=1;
}
请各位大侠帮忙看看到底是那块程序出问题了,谢谢啊
|
|