W78E516B能支持115200吗?

[复制链接]
2862|11
 楼主| chenczy 发表于 2011-12-7 20:20 | 显示全部楼层 |阅读模式
晶振用22.1184MHZ,电容22P,不知道这个单片机能不能支持这么高的速率。
NE5532 发表于 2011-12-7 20:23 | 显示全部楼层
看数据手册比较把稳,这个问题答案很明确。
 楼主| chenczy 发表于 2011-12-7 20:46 | 显示全部楼层
这芯片的资料不好找
NE5532 发表于 2011-12-7 21:02 | 显示全部楼层
Datasheet就可以了,其他的资料作用也不大。不会没有DS就在开发吧。
 楼主| chenczy 发表于 2011-12-8 08:43 | 显示全部楼层
我原来用的不是这个芯片,现在要改用这个芯片
ayb_ice 发表于 2011-12-8 09:05 | 显示全部楼层
本帖最后由 ayb_ice 于 2011-12-8 09:08 编辑

应该支持,但处理不过来的

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
受不了了 发表于 2011-12-8 09:11 | 显示全部楼层
不到100us就需要接收一字节,单片机有些累
xwj 发表于 2011-12-8 09:26 | 显示全部楼层
晶振用22.1184MHZ时 是肯定忙的过来的,处理不过来只是你程序写的不好。
 楼主| chenczy 发表于 2011-12-8 09:57 | 显示全部楼层
void UartISR(void) interrupt 4   //接收数据
{

if(RI)    //收到数据
  {          
     DATA1[Num]=SBUF;
     if(DATA1[0]==0x55) Num++;  
         else Num=0;         

        if(Num>2)
         {
          if(Num==4)
           {
             if(DATA1[3]==0x77)
                  {                         
                   Num=0;
               if((DATA1[1]==1)&(DATA1[1]==DATA1[2]))
                    {
                     handshake=1;
                    }
                   else if((DATA1[1]==2)&(DATA1[1]==DATA1[2]))
                    {
                     handshake=0;
                         }
                        DATA1[0]=DATA1[1]=DATA1[2]=DATA1[3]=0;
                   }
                 else if((DATA1[1]==1)|(DATA1[1]==2))
                 {
                   Num=0;
                   DATA1[0]=DATA1[1]=DATA1[2]=DATA1[3]=0;
                 }
            }
          else if(Num==5)
           {
            if(DATA1[4]==0x77)
                 {
                   Num=0;
                   temp=(DATA1[1]+DATA1[2]);
                   if((DATA1[1]==4)&(DATA1[3]==temp))
                    {
                         motor=DATA1[2];
                        }
                   else if((DATA1[1]==5)&(DATA1[3]==temp))
                    {
                     comnet=DATA1[2];
                    }
                        DATA1[0]=DATA1[1]=DATA1[2]=DATA1[3]=DATA1[4]=0;
                  }
                else if((DATA1[1]==4)|(DATA1[1]==5))
                 {
                   Num=0;
                   DATA1[0]=DATA1[1]=DATA1[2]=DATA1[3]=DATA1[4]=0;
                 }
           }
      else if(Num==7)
           {  
                 Num=0;
            if(DATA1[6]==0x77)
                 {               
              temp=(DATA1[1]+DATA1[2]+DATA1[3]+DATA1[4]);
              if((temp==DATA1[5])&(DATA1[6]==0x77))
          {
            DATA2[0]=DATA1[2];
                        DATA2[1]=DATA1[3];
                        DATA2[2]=DATA1[4];
                        DATA1[0]=DATA1[1]=DATA1[2]=DATA1[3]=DATA1[4]=DATA1[5]=DATA1[6]=0;       
          }
                  }
           }
          
        }
       
   RI=0;   //清中断请求

  }
}

这样应该能处理得过来的吧,好像也没什么多少时间
 楼主| chenczy 发表于 2011-12-8 10:15 | 显示全部楼层
看来最快的方法是统一数据长度,然后在外面处理数据了
void UartISR(void) interrupt 4   //接收数据
{

if(RI)    //收到数据
  {           
     DATA1[Num]=SBUF;
     if(DATA1[0]==0x55) Num++;  
         else Num=0;         
         
         if(Num==7)
       {
            num=0;
            temp=1;
          }
         RI=0;   //清中断请求
  }
}
这样应该是最快的了。
受不了了 发表于 2011-12-8 10:20 | 显示全部楼层
上面的处理需要不了多少时间,但我还是喜欢把收到的数据做简单判断后存起来,等收完一帧到外面大循环里具体处理
 楼主| chenczy 发表于 2011-12-8 10:36 | 显示全部楼层
我现在的问题是,有时会收不到数,我把通信处理放外面试试
您需要登录后才可以回帖 登录 | 注册

本版积分规则

141

主题

791

帖子

0

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