这几天研讨单片机通讯,发现一些十分风趣的工作。在与单片机通讯时,虽然程序没有任何问题,可是通讯一直呈现很多错误码,发送与接纳的数据对应不上。后来不断试验,查找相关材料,发现一些重要的技术细节要引起注重,通过相应的调整,单片机通讯总算顺利完成。先后测验了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-ISPV488版别能够快速刷机;STC12C5A602S只能用STC-ISP 480版别刷机。原因或许只能向宏晶科技官方咨询了。