打印

51串口的怪问题。。正常几天后不能发送了。

[复制链接]
3015|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
johnlin519|  楼主 | 2011-9-15 19:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 johnlin519 于 2011-9-15 20:09 编辑

我用STC11F04EX搭的一个比较简单的系统,单片机通过MAX232发送和接受。两个单片机互通,定时发送数据给对方(非应答方式)
调试一切正常,但是实际使用中,过几天,串口就不发送任何东西了(偶尔几台如此,有的则一直没问题),而单片机其他工作一切正常,包括可以接收数据,但是就是不发送。。但是定时终端正常。。而我也可以通过串口进行程序烧写,应该不是硬件问题。。
uchar xdata recbuf[30];
uchar xdata sendbuf[30];

void INIT_SERIAL()
{
SCON = 0x50;
PCON &= 0x7F;
TH1 = 0xFD;
TL1 = 0xFD;
TMOD &= 0x0F;
TMOD |= 0x20;
TR1 = 1;
IP &= 0xEF;
IE |= 0x10;
}
void InitInterrupt()
{
INIT_TIME0();
INIT_SERIAL();
AUXR=0;
EA=1;

void SERIAL_ROUTING() interrupt 4 using 3
{
uchar xdata strbuf[22];
uchar data i;
if(TI)
{
  TI=0;

  
// sendcount++;
  if(++sendcount>=sendmax)
   {
    sendmax=0;
    sendcount=0;
   }
   else
    {
     SBUF=sendbuf[sendcount];
     
   
    }
  
}
if(RI)
  {
  
   RI=0;
  
  // 。。。处理

。。。



定时0 ,每3秒发送20个字节的数据,发送也采用中断方式。

我没方向了。。


}

相关帖子

沙发
mohanwei| | 2011-9-15 21:30 | 只看该作者
判断问题很简单,先搞个Echo测试程序,也就是收到什么就回传什么……然后你就会发现硬件没问题,再然后就开始找代码问题吧

使用特权

评论回复
板凳
johnlin519|  楼主 | 2011-9-15 22:31 | 只看该作者
我拿串口助手试着,接收发送没问题。但是使用久了就发生这个事情,而且不是每台机子都这样。单片机的工作就是定时3秒左右一次发送20BYTE数据,运行几天一直正常。。。然后突然停摆。停摆的时候,发送串口的定时器0还是工作的,串口接收数据正常,可以通过串口烧片子。。真的郁闷了

使用特权

评论回复
地板
chunyang| | 2011-9-16 00:58 | 只看该作者
用串口调试助手看故障时是否有数据发出,有说明是波特率误差问题,没有则说明你的硬件或软件处于临界态,进而看其它功能是否正常,正常则是软件问题,否则则是硬件问题。

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
johnlin519 + 1
5
johnlin519|  楼主 | 2011-9-16 14:13 | 只看该作者
本帖最后由 johnlin519 于 2011-9-16 14:24 编辑

谢谢chunyang 老师,在停止发送数据的时候,串口调试助手也收不到数据。示波器看单片机TX口没有信号出来。数据接收包括其他时钟中断等等功能都是正常的(发数据本身就是时钟0发起的,哭啊,为什么)。原来我发送使用中断方式,现改为查询发送,临时挂着试
我在删减程序功能块,实在不行只做数据发送接收的功能。
把一块板子,用泡沫塑料捂住(没高温箱),让他发热,看什么时候有不正常状态出现。。。

还有。。关键的是,复位或者断电大部分情况下不能解决问题。。

使用特权

评论回复
6
ayb_ice| | 2011-9-16 15:25 | 只看该作者
需要整个项目文件才好分析BUG

使用特权

评论回复
7
xuebichongkafei| | 2011-9-23 02:28 | 只看该作者
首先不明白为什么要把总中断分开来写呢“为什么不一起与串口中断初始化?个人觉得除特殊情况,尽量不要用位寻址,写程序时候容易出问题!
    后面中断发送程序当中,发送数据是有发送时间的,建议在 SBUF=sendbuf[sendcount];语句后面使用while(!TI);TI=0两条语句试试,换掉if语句!将while语句放到else里面去!希望有用!:P

使用特权

评论回复
8
linqing171| | 2011-9-23 06:49 | 只看该作者
莫非 sendmax    sendcount 缺少临界区处理?

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
johnlin519 + 1
9
johnlin519|  楼主 | 2011-11-11 13:44 | 只看该作者
忘了结贴,不好意思啊,问题找到。。其实是个人不仔细。。由于这部分板子手工焊接,有几块板子的232芯片的电容焊反,所以导致232输出电平不够导致不稳定啊。。惭愧啊。。

使用特权

评论回复
10
hotpower| | 2011-11-11 16:55 | 只看该作者

使用特权

评论回复
11
老鱼探戈| | 2011-11-12 10:03 | 只看该作者
俺用GPIO模拟串口,真麻烦!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

38

帖子

1

粉丝