专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

单片机通信技术要点

作者:佚名   来源:本站原创   点击数:  更新时间:2012年11月18日   【字体:

      这几天研究单片机通信,发现一些非常有趣的事情。在与单片机通信时,尽管程序没有任何问题,但是通信始终出现大量错误码,发送与接收的数据对应不上。后来不断实验,查找相关资料,发现一些重要的技术细节要引起重视,经过相应的调整,单片机通信终于顺利完成。先后测试了STC12C4052AD单片机与 STC12C5A602S单片机,都成功通信,基本没有发现错误码,接收与发送一切正常。现将要点记下备忘:
      1.单片机的晶振。无论是内部晶振还是外部晶振,都能正常通信,关键在于晶振的频率。大神们都说用外部晶振比较稳定,这个因为测试中没发现区别太大,所以不作评论。 
      2. 单片机波特率的计算。这个是关键中的重点。建议使用大神们写的51串口通信计算器这个软件进行计算,比较精确。波特率的大小设置,直接影响了错误码的多少。这个问题没得到足够重视,往往是通信失败的直接原因。
      3.串口初始化的设置还比较靠谱,网上资料都可以用。诸如:
    
   TMOD =0x20;//T1工作为方式2
    SCON =0x50;//方式1:10位异步同通讯,串口允许接收
    PCON =0x80;//波特率倍增,SMOD='1'
    TH1=TL1=0xe6;  // 波特率2400
    TR1=1;// 启动定时器1
    ES=1;
    EA=1;//总中断允许
 
    以上设置可以通用,直接复制,粘贴即可使用。TH,TL值用51串口计算器计算取得,尽可能用最小误差的数值。 
 
     4.发送数据标准程序
void send_char(unsigned char txd)
// 传送一个字符
{
                   SBUF = txd;
                   while(!TI);
                   TI=0;
}
      5.接收数据的标准程序
void re_char(unsigned char txd)
//接收一个字符 

  while(1)
 {
  if(RI)      // 是否有数据到来
  {
   tmp = SBUF;                   // 暂存接收到的数据     
   P0=tmp;                        //点亮P0一组灯。
     RI = 0;                       //RI清零
  }
 
 }



     6.补充要点;刷机软件版本选择。STC12C4052AD单片机用STC-ISP V488版本可以快速刷机;STC12C5A602S只能用STC-ISP 480版本刷机。原因也许只能向宏晶科技官方咨询了。

关闭窗口

相关文章