bbgan 发表于 2012-7-24 09:13

ADM2483串口通讯出错

本帖最后由 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={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=crctemp/256;
//temp=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;
}

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两端用示波器测的波形不一样,说明什么?
页: [1]
查看完整版本: ADM2483串口通讯出错