单片机通讯时怎么会死机

[复制链接]
5034|23
 楼主| chenho 发表于 2011-3-23 17:45 | 显示全部楼层 |阅读模式
用232进行通信;当外接串口的电压稳定时,通讯正常;当串口电压波动(如电脑串口断电)时,单片机就容易死机,请问这种情况该怎么去解决?
gongche 发表于 2011-3-23 17:50 | 显示全部楼层
用的啥芯片通信?
 楼主| chenho 发表于 2011-3-23 17:56 | 显示全部楼层
MAX202E,电容是0.1UF的
huwr 发表于 2011-3-23 18:04 | 显示全部楼层
程序问题 多考虑一下通信出错的情况 针对性处理
happy_10 发表于 2011-3-23 18:29 | 显示全部楼层
响应哪些指令
并做什么处理,可能误判指令了,然后等待什么数据.
冰清玉洁 发表于 2011-3-23 18:31 | 显示全部楼层
如果只发生在电压波动时,
也可能是硬件发生死锁了
wenfen 发表于 2011-3-23 18:42 | 显示全部楼层
加上看门狗吧,只有这样。其它的基本上没法,除非电路重新布,减小干扰,再加上隔离应该好些。
tian111 发表于 2011-3-23 20:44 | 显示全部楼层
给串口加级隔离吧
 楼主| chenho 发表于 2011-3-23 20:53 | 显示全部楼层
本人认为程序问题的可能性很小,因为只要不触动电脑电源,接发数据都很正常。一旦电源有变化,如关掉显示器电源,就会马上死机,而且这时串口上有很大的静电;把串口线改为屏蔽线,效果要好很多,但偶尔还是会有死机,应该属于干扰。
宋倩2010 发表于 2011-3-23 22:40 | 显示全部楼层
在 串口两根线和 地线之间 并两个 6.8V左右的TVS 二极管
mxh0506 发表于 2011-3-23 23:27 | 显示全部楼层
"串口上有很大的静电" ???
xhn_615 发表于 2011-3-24 11:35 | 显示全部楼层
这么脆弱,EMC没解决好吧
leilalove 发表于 2011-3-24 12:39 | 显示全部楼层
确定是单片机死了还是232芯片死了
zhuhuis 发表于 2011-3-24 14:30 | 显示全部楼层
串口隔离办法
单片面的TTL里加光藕,再接上232电平转换器上,如果还不知道,来信号
gongche 发表于 2011-3-24 14:48 | 显示全部楼层
PIC没这么脆弱,绝大多数情况下是软件的BUG所致
huwr 发表于 2011-3-24 15:01 | 显示全部楼层
PIC的串口在收到非法数据时内部的对应出错标志会被置1,此时暂停接收新数据,需要用软件进行查询和清零,DATASHEET里有详细说明。
huwr 发表于 2011-3-24 15:11 | 显示全部楼层
正确的串口接收中断处理函数
rx_handler(void)
{
    int b;
    if (OERR || FERR){
        SPEN=0;
        CREN = 0;
        b = RCREG;
        CREN = 1;
        SPEN=1;
    }
    else if (RCIF){
        get_data();
    }
}
huanghuac 发表于 2011-3-24 15:32 | 显示全部楼层
把你的串口程序注释掉,再试验,如果还死机就代表硬件有问题,如果不死机就代表你的串口程序有问题。
wenfen 发表于 2011-3-24 15:40 | 显示全部楼层
98%的可能是软件有问题
完善的做法是:当出现错误通讯数据的时候,程序要能退出该通讯处理,并照常处理其他数据,当新的通讯数据再次到来的时候要能正确响应。

LZ目前情况应该是程序不能处理掉错误的通讯数据导致等待而不能动弹.
zhuhuis 发表于 2011-3-24 15:48 | 显示全部楼层
就算是硬件问题软件应该也可以解
通讯的协议里面
1,是否有严谨的TIME OUT 机制?
2,是否有严谨的校验机制?
3,发送数据异常时怎么处理?
4,接收数据异常怎么处理?
处理好这些应该就没有问题了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

748

主题

9853

帖子

5

粉丝
快速回复 在线客服 返回列表 返回顶部