技术中心
 
 

单片机通信技术要点

   日期:2015-07-13    
核心提示:这几天研究单片机通信,发现一些非常有趣的事情。在与单片机通信时,尽管程序没有任何问题,但是通信始终出现大量错误码,发送与接收的数据对应不上。后来不断实验,查找相关资料,发现一些重要的技术细节要引起重视,经过相应的调整,单片机通信终于顺利完成。

这几天研究单片机通信,发现一些非常有趣的事情。在与单片机通信时,尽管程序没有任何问题,但是通信始终出现大量错误码,发送与接收的数据对应不上。后来不断实验,查找相关资料,发现一些重要的技术细节要引起重视,经过相应的调整,单片机通信终于顺利完成。先后测试了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版本刷机。原因也许只能向宏晶科技官方咨询了。

 
标签: 单片机
  
  
  
  
 
更多>同类技术
 
全年征稿 / 资讯合作
 
推荐图文
推荐技术
可能喜欢