1. 问题的提出
某体系中运用了三路串行接口的传感器(GPS、压力和风向)及三路模仿电流(4~20mA)接口的传感器(湿度、温度和水位)。现需要将这些数据汇总后经过串口上传给PC机,而且要求每路信号数据都能够实时独立的接纳。
2.体系规划
经过剖析,咱们别离运用一块2051单片机接纳各路串口传感器的数据,一起运用一块多路高精度ADC对转化成电压的温度等信号采样,体系结构图如图1所示。主从机之间的详细管脚衔接参见图2。
图1 体系结构框图
体系中51单片机作为主机操控着整个体系的动作并建议每次通讯,每块2051作为实时从传感器获取数据并在主机操控下完结通讯。主机和各从机之间经过并口衔接通讯。主从机作业流程如下:
· 主机上电初始化后,经过P0口发送从机地址选中一路从机并等候应对。
· 各从机上电初始化后接纳传感器串行数据,然后经过P1口接纳主机地址,当地址与自己相符后,调整245方向并由245向主机发送传感器数据,此进程由握手线担任操控。
· 从机发送完一切数据后再次将245方向改为接纳,重新开始接纳传感器数据和主机发送的地址。
· 主机依照相同办法接纳一切各路2051数据。
· 串口数据接纳结束后,主机操控AD转化并获取三路信号数据。
· 主机将一切数据调集陈规定格局后经过232发送给PC机。
主从机的作业流程图如图3所示:
图2 主从机间的管脚衔接
图3 主从机作业流程图
首要程序代码别离如下,主机为:
……
sbit adc_busy=P3^2;
sbit adc_hben=P3^3;
sbit hand1=P2^0;//GPS
sbit hand2=P2^1;//PRESSURE
sbit hand3=P2^2;//WIND
sbit hand4=P2^3;//BAK1
uchar idata gps[96];
uchar idata pressure[9];
uchar idata wind[26];
uchar idata tem[6];
uchar idata hum[6];
uchar idata water_tem[7];
……
P1=0x01;
for(i=0;i《96;i++){
while(hand1!=0);
gps[i]=P1;
while(hand1==0);
}
sendbyte2pc(’#’);
sendbyte2pc(’#’);
sendbyte2pc(’1’);
sendbyte2pc(’ ’);
sendbyte2pc(’ ’);
send2pc(gps,96);
……
从机为:
……
sbit dir=P3^2;
sbit en=P3^3;
sbit hand=P3^4;
……
loop:
RI=0;i=0;
while(!RI);//wait for receiving ready
if (SBUF!=0x40)//data head
goto loop;
data_str[i]=0x40;i++;
RI=0;
while(!RI);//wait for receiving ready
if (SBUF!=0x40)//data head
goto loop;
data_str[i]=0x40;i++;
do{
RI=0;
while(!RI);
data_str[i]=SBUF;
i++;
}
while(i!=96);
dir=0;en=0;//enable data receiving P1=0xff;
for(i=0;i《100;i++){
if(P1==0x01)
goto send;
}
en=1;
goto loop;
send:
for(i=0;i《96;i++){
dir=1;
P1=data_str[i];
hand=0;
for(j=0;j《5;j++){;}
hand=1;
}
en=1;dir=0;
goto loop;
……
3.结语
本文中提出的并行通讯办法具有电路结构简略明晰、程序简单完成等特色,已经在实践中证明可行。在调试进程中能够借用串口帮手等软件接纳数据来验证通讯的可靠性。