3792|0

35

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

关于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;  
}

  

请各位大侠帮忙看看到底是那块程序出问题了,谢谢啊
 
点赞 关注(1)

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表