宁波欣创电子科技官网
收藏本站
搜索

扫一扫,访问微社区

QQ登录

只需一步,快速开始

注册 找回密码
官方旗舰店新品上线AVR入门提高步步通视频SD卡高清视频教程免费下载AVR单片机十日通全集视频MSP430单片机视频教程
查看: 227|回复: 0

[问题交流] 485通信问题

[复制链接]

2

主题

5

帖子

52

积分

注册会员

Rank: 2

积分
52
发表于 2018-10-31 21:11:22 | 显示全部楼层 |阅读模式
下面是代码,用的DM430-A开发板。想要实现的是定时发送test数组的数据,同时通过接收中断返回接收到的数据,比如我发送16进制 01 02 03,返回的只有01 03;如果发送的是01 02 03 04,返回的是01 04;如果数据再长一些,就不是首尾两个字节了,真心求教,谢谢各位大佬
#include <msp430x14x.h>
#include "Config.h"                     //开发板配置头文件,主要配置IO端口信息

uchar test[8]={0x01,0x03,0x00,0x25,0x00,0x02,0xD5,0xC0};

//***********************************************************************
//               MSP430IO口初始化
//***********************************************************************
void Port_Init()
{
  LED8SEL  = 0x00;                      //设置IO口为普通I/O模式,此句可省
  LED8DIR  = 0xFF;                      //设置IO口方向为输出
  LED8PORT = 0xFF;                      //P2口初始设置为FF
  
  DATASEL  = 0x00;                      //设置IO口为普通I/O模式,此句可省
  DATADIR  = 0xFF;                      //设置IO口方向为输出
  DATAPORT = 0xFF;                      //P4口初始设置为FF
  
  CTRSEL  =  0x00;                      //设置IO口为普通I/O模式,此句可省
  CTRDIR |=  BIT3 + BIT4;               //设置IO口方向为输出,控制口在P63,P64
  CTRPORT =  0xFF;                      //P6口初始设置为FF  
}

//*************************************************************************
//               MSP430串口初始化
//*************************************************************************
void UART_Init()
{
  U1CTL|=SWRST + CHAR;                //复位SWRST,8位数据模式
  U1TCTL|=SSEL1;                      //SMCLK为串口时钟
  U1BR1=baud_h;                       //BRCLK=8MHZ,Baud=BRCLK/N
  U1BR0=baud_l;                       //N=UBR+(UxMCTL)/8
  U1MCTL=0x00;                        //微调寄存器为0,波特率9600bps
  ME2|=UTXE1;                         //UART1发送使能
  ME2|=URXE1;                         //UART1接收使能
  U1CTL&=~SWRST;
  IE2|=URXIE1;                        //接收中断使能位
  
  P3SEL|= BIT6 + BIT7;                //设置IO口为第二功能模式,启用UART功能
  P3DIR|= BIT6;                       //设置TXD0口方向为输出
  P3DIR&=~BIT7;
}

//*************************************************************************
//              串口1发送数组数据函数
//*************************************************************************
void Send_data(uchar *buffer,uint length)
{
  int k ;
  while(!(IFG2&UTXIFG1));   
  for(k=0;k<length;k++)
  {
    U1TXBUF=buffer[k];
    while(!(IFG2&UTXIFG1));
  }
}

//*************************************************************************
//              串口1发送数据函数
//*************************************************************************

void Send_Byte(uchar data)
{
  while(!(IFG2&UTXIFG1));          //发送寄存器空的时候发送数据
    U1TXBUF=data;
}

//*************************************************************************
//           串口1中断处理函数
//*************************************************************************
#pragma vector=UART1RX_VECTOR
__interrupt void UART1_RX_ISR(void)
{

  uchar data=0;
  data=U1RXBUF;                       //接收到的数据存起来
  delay_ms(5);
  DE;
  Send_Byte(data);                    //将接收到的数据再发送出去
  delay_ms(5);
  RE;
}


//*************************************************************************
//           主函数
//*************************************************************************
void main(void)
{
  WDT_Init();                         //看门狗设置
  Clock_Init();                       //系统时钟设置
  DRE_out;
  delay_ms(5);
  RE;
  Port_Init();
  UART_Init();                        //串口设置初始化
  Close_LED();                        //关闭数码管显示
  _EINT();                            //开中断
  while(1)                            //无限循环
  {
    delay_ms(5);
    DE;
    Send_data(test,8);
    delay_ms(5);
    RE;
    delay_ms(10000);  
  }
}

精品嵌入式产品尽在宁波欣创电子科技官方旗舰店http://avrgcc.taobao.com
您需要登录后才可以回帖 登录 | 立即加入

在线客服

Archiver|手机版| ( 浙ICP备09058229号浙公网安备33020502000039号 )     

返回顶部