单片机通讯时死机

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

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

本版积分规则

880

主题

12030

帖子

4

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