打印

ADM2483串口通讯出错

[复制链接]
3122|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
bbgan|  楼主 | 2012-7-24 09:13 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 bbgan 于 2012-7-24 10:40 编辑

各位大神好,小弟学生一枚,最近在调试一ADM2483的串口通讯时,出现了如下错误:
1.单步执行程序时,串口调试助手接收到得情况如细线所示,复位后多了一个00字符;
2.连续执行程序时,串口调试助手接收到得情况如粗线所示,复位了情况如粗圆圈出现00;
3.我添加了CRC校验,一复位也是出现00;连续执行时最后一位也总出错。
我想知道怎么修改

#include "msp430x14x.h"
#include "global.h"
void init_sys();
void init_port();
uchar temp[10]={0x12,0x34,0x56,0x78,0x9A,0xBC,0xDE,0xF0};
//uchar crctemp;
uchar i;

void main()
{
  WDTCTL = WDTPW + WDTHOLD;
  init_sys();
  init_port();
  init_uart1();
  rs485_send();
//  crctemp=crc16(temp,8);
//  temp[8]=crctemp/256;
//  temp[9]=crctemp%256;
  for(i=0;i<8;i++)
    sent_byte_uart1(temp);
  rs485_receive();
  _EINT();
  while(1);
}


void init_sys()
{
  int i;
  BCSCTL1 &= ~XT2OFF;
  for (i=0;i<1024;i++) _NOP();
  do
  {
    IFG1 &= ~OFIFG;                       
    for (i = 0xFF; i > 0; i--);           
  }
  while ((IFG1 & OFIFG) != 0);         
  BCSCTL2 |= SELM1+SELS;
}


void init_port()
{
  P3SEL|=0xc0;
  P3DIR|=BIT6+BIT2;
}



****************************uart.c************************
void init_uart1()
{
  UCTL1 |= SWRST;
  ME2|=UTXE1+URXE1;   //使能TXD/RXD
  UCTL1|=CHAR;//+PENA;//+PEV;        //字符长度为8位
  UTCTL1|=SSEL1;      //使用MCLK为时钟源
  URCTL1=0x00;
  UBR01=LOW(B9600);
  UBR11=HI(B9600);
  UMCTL1=0;
  UCTL1&=~SWRST;      //使UART1设置生效
  IE2 |= URXIE1 + UTXIE1;       //使能UART1接收中断
  IFG2 &=0xdf;
}
void rs485_send()
{
  P3OUT|=0x04;
}
void rs485_receive()
{
  P3OUT&=~0x04;
}

串口调试助手.jpg (35.97 KB )

串口调试助手.jpg

485电路.jpg (69.07 KB )

485电路.jpg

相关帖子

沙发
bbgan|  楼主 | 2012-7-24 09:29 | 只看该作者
本帖最后由 bbgan 于 2012-7-24 09:35 编辑

编辑了好多次,还差什么,你们说了我发上来

使用特权

评论回复
板凳
bbgan|  楼主 | 2012-7-30 09:19 | 只看该作者
问题找到了,原来在收发转换时需要增加延时

使用特权

评论回复
地板
枫之韵2012006| | 2016-2-24 17:05 | 只看该作者
你好,如果ADM两端用示波器测的波形不一样,说明什么?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

11

帖子

0

粉丝