打印

W78E516B能支持115200吗?

[复制链接]
1652|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
chenczy|  楼主 | 2011-12-7 20:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
NE5532| | 2011-12-7 20:23 | 只看该作者
看数据手册比较把稳,这个问题答案很明确。

使用特权

评论回复
板凳
chenczy|  楼主 | 2011-12-7 20:46 | 只看该作者
这芯片的资料不好找

使用特权

评论回复
地板
NE5532| | 2011-12-7 21:02 | 只看该作者
Datasheet就可以了,其他的资料作用也不大。不会没有DS就在开发吧。

使用特权

评论回复
5
chenczy|  楼主 | 2011-12-8 08:43 | 只看该作者
我原来用的不是这个芯片,现在要改用这个芯片

使用特权

评论回复
6
ayb_ice| | 2011-12-8 09:05 | 只看该作者
本帖最后由 ayb_ice 于 2011-12-8 09:08 编辑

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

未命名.JPG (75.19 KB )

未命名.JPG

使用特权

评论回复
7
受不了了| | 2011-12-8 09:11 | 只看该作者
不到100us就需要接收一字节,单片机有些累

使用特权

评论回复
8
xwj| | 2011-12-8 09:26 | 只看该作者
晶振用22.1184MHZ时 是肯定忙的过来的,处理不过来只是你程序写的不好。

使用特权

评论回复
9
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;   //清中断请求

  }
}

这样应该能处理得过来的吧,好像也没什么多少时间

使用特权

评论回复
10
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;   //清中断请求
  }
}
这样应该是最快的了。

使用特权

评论回复
11
受不了了| | 2011-12-8 10:20 | 只看该作者
上面的处理需要不了多少时间,但我还是喜欢把收到的数据做简单判断后存起来,等收完一帧到外面大循环里具体处理

使用特权

评论回复
12
chenczy|  楼主 | 2011-12-8 10:36 | 只看该作者
我现在的问题是,有时会收不到数,我把通信处理放外面试试

使用特权

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

本版积分规则

141

主题

791

帖子

0

粉丝