找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4289|回复: 1
打印 上一主题 下一主题
收起左侧

STC12 串口1通讯中有 卡死现象 求解

[复制链接]
跳转到指定楼层
楼主
ID:142303 发表于 2016-10-11 11:46 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
串口1 有2个命令一个是ZZAE(发送后 回传数据)和 ZZBE (停止回传数据)

目前的情况是  反复ZZAE ZZBE 发送后 会将单片机卡死。。。 求帮助啊

下面是 我的串口设置   串口中断程序


void InitUART(void)
{
        PCON &= 0x7F;                //波特率不倍速
        SCON = 0x50;                //8位数据,可变波特率
        AUXR |= 0x40;                //定时器1时钟为Fosc,即1T
        AUXR &= 0xFE;                //串口1选择定时器1为波特率发生器
        TMOD &= 0x0F;                //清除定时器1模式位
        TMOD |= 0x20;                //设定定时器1为8位自动重装方式
        TL1 = 0xDC;                //设定定时初值                                                115200--FA     57600--F4     19200--DC
        TH1 = 0xDC;                //设定定时器重装值
        ET1 = 0;                //禁止定时器1中断
        TR1 = 1;                //启动定时器1

        ES=1;
    AUXR &= 0xF7;                //波特率不倍速
        S2CON = 0x50;                //8位数据,可变波特率
        AUXR |= 0x04;                //独立波特率发生器时钟为Fosc,即1T
        BRT = 0xFA;                //设定独立波特率发生器重装值
        AUXR |= 0x10;                //启动独立波特率发生器
        EA =1;                    //开总中断
    IE2 =0x01;                //开串口2中断  ES2=1
}




/****************串行口1发送****************/
void sendbyte(uchar c)
{

    SBUF=c;
    while(!TI);        //等待发送完成
    TI=0;  
}

/****************串行口1字符串地址发送****************/
void SendString1(uchar *string)//此处*string相当于数组
{
    while(*string!='\0')//判断是否到字符串末尾
    {
        sendbyte(*string);
        string++;
    }
}



串口1中断
void Uart_Isr() interrupt 4 using 2{
  if(RI == 1)
  {  
          RI=0;  
          rbuf[Digit]=SBUF;
          if(rbuf[Digit]==0x45)
          {      
                  if(rbuf[Digit-3]==0x5a&&rbuf[Digit-2]==0x5a&&rbuf[Digit-1]==0x41&&rbuf[Digit]==0x45)                           //ZZAE
                  {  
                     ret_flag=1;  
                         Digit=0;
                         lockzzabe=1;   
                  }
                  else if(rbuf[Digit-3]==0x5a&&rbuf[Digit-2]==0x5a&&rbuf[Digit-1]==0x42&&rbuf[Digit]==0x45&&lockzzabe==1)                         //ZZBE
                  {
                            ret_flag=2;  
                     ES = 0;
                         Digit=0;
                  }
                //     ES = 0;
                         Digit=0;
                       
                  }
                               
                   else                                                                                                                                                 //其他输出为错
                  {
                           ret_flag=99;
                         Digit=0;
                  }
          }
          Digit++;              
  }
    if (TI)
    {
        TI = 0;            
        busy = 0;           
    }
}








分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:320098 发表于 2018-5-1 21:38 | 只看该作者
我也经常卡死,据说是因为电脑问题,也不知道具体是什么问题
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表