本帖最后由 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;
} |