RS485的奇怪问题

sauteed   2009-4-30 21:27 楼主
我是147调试MODUS程序的,接收是采用中断,发送放在main中,接收中断中一次收8个字节的数据,可是总是第一个数据大部分是不正确,本来发送的3,结果接收后就变成了0x85等一些其他数,更奇怪的是我的主程序里面做了一些改动,就是注释掉一些函数(减少主程序的运算量),收发就正常了,真的搞不明白了,下面把主函数发上来,大家帮忙看一下:
void main(void)
{
WDTCTL = WDTPW + WDTHOLD;
Init_device();
Chk_Set();
IE1 |= 0x40; //打开UART接收中断
_EINT();

while (1)
{

Dis_led(); //显示程序 这段注释掉就可以正常收发
// if(cad_flag) //其中cad_flag是timer中断中置位的,这段注释掉也可以正常收发
// {
// Adc_conver();
// cad_flag=0;
// }
if(Csend)
{
P5OUT |=BIT6;
Send_data(); //这个就是USART发送函数

}
if(actflag)
{
receive_act();
}

if(B2ms) //这段注释掉也可以正常收发
{
if(Bover==1) //采集10次结束,进入数据处理
{
TripCheck();
switch(CALcnt)
{
case 0:
_NOP();
break;

case 1:
StartCheck();
break;

case 2:
PfCheck();
break;

case 3:
OlCheck();
break;

case 4:
Qz_cal();
break;

}
CALcnt++;
if(CALcnt>=5)
{
CALcnt=0;
Bover=0; //开始采集
}
}

}

}

}

回复评论 (4)

其他子函数呢?看主程序貌似是用查询的方法接收的
点赞  2009-5-2 14:28
你好,我的接收是在中断中进行的......其他子程序就是AD采样和计算还有LED显示
点赞  2009-5-2 18:48

你的485是否需要切换发送和接收?

如果你的485芯片是半双工的,就要注意下从发送状态到接收状态的相互切换时要有个充足的转换时间
点赞  2009-5-2 19:01
我注意这个问题了,加了延时的
点赞  2009-5-2 20:58
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复