该芯片的内部A/D采用控制寄存器完成,内部控制如图4所示。
3 系统软件设计
用C语言编译器开发单片机具有使用方便、编程效率高及仿真调试容易等突出特点。C51的版本很多,本系统软件选用德国Keil SOFtware公司的Keil C51编译器开发。该编译器基于Windows平台集成开发环境,可编辑、编译和调试汇编语言程序及C51程序,还可模拟仿真I/O口、定时器/计数器、串行口及中断等单片机特有的功能部件,功能强大(须注意的是在Keil C51库中没有STC12C5A62S2,需要在宏晶STC官方网站www.STCMCU.com下载)。该系统的软件设计由主程序、A/D转换程序、中断程序、串行接收子程序、串行发送子程序、控制设备程序等若干功能子程序组成。其中实时时钟进行精确操作,用汇编语言编写,其他均用C语言编写。
3.1 主程序设计
在主程序中,先将STC12C5A62S2初始化,然后等待新命令。当NewData=1时,表示已接收到一个有效的命令帧,否则继续等待。接着判断是否是本机地址,若是则判断控制命令,否则继续等待。上位机发送指定的字符串,分别表示开设备、关设备、查询、设置等命令。通过字符串比较,判断出命令指令,跳到相应的入口子程序中,操作成功后,通过串口发送子程序返回相应的提示符,其具体流程略。
3.2 串口中断程序设计
为了增强抗干扰性,有效地区分噪声和数据便于操作,串口中断程序加强了通信协议的制定,具体实现方法是加开始标志和结束标志。噪声是以随机字节出现的,通过测试和实验,发现在本系统中0x00后跟0xFF时噪声不容易发生。因此,设置开始标志为0x000xFF,结束标志为回车换行符0x0D0x0A。如果接收命令帧成功,则置NewData=1,表示新命令有效[5]。考虑到纠检错,数据采用短包方式。中间采用延时,以保证起始位可靠。串口中断程序流程略。
部分程序清单如下:
//串行接收子函数
INT8U ReUART(INT8U*ch)
{INTl6U delay=6000;
while(--delay) //延时
{if(RI),//串行接收中断标志
{RI=0;//接收中断标志软件复位
、 *ch=SBU F=//读数据缓冲器
return 1;}//成功返回l
}
return(0);//接收失败返回0
)
//串行中断处理程序
void UART_Inter(void)interrupt 4
{INT8U ii;
INT8U temp,templ;
ReUART(&temp、);//先连续接收2个字节
ReUART(&templ); //开始标志
if((temp==0x00)&&(templ==0xFF))
//连续接收一个命令帧
{for(ii=0;ii<12;ii++)
{if(ReUART(&buff[ii])==0)
goto Inter._end;}//跳出中断
if((buf[10]==0x0D)&&(buf[ll]==0x0A)),//结束标志
NewData=l; //新命令标志有效
}
Inter_end:;//中断出口
}
基于STC12C5A16S2-35C的远程温室多参数采集及控制系统可实现一台PC上位机最多采集及控制256个设备控箱,传输距离最远可达1.5 km,每台设备控箱可对16路设备进行控制。实现了集中管理、分散控制的功能。该系统通过软硬件提高抗干扰性,并具有较好的扩展性,结构简单、投资少,故障率低。实际应用表明具有较强的实用性,经过一年的正常运行实践证明国产器件完全可以应用于现代农业装备。
参考文献
[1] 薄新维.STC系列单片机在温室大棚中的应用[J].仪表技术与传感器,2009(1):27-30.
[2] 彭敏.基于DS18B20的温度显示和报警装置的研制[J].可编程控制器与工厂自动化(PLC FA),2007(11):116-118.
[3] 张鹏翼,罗卫兵,等.基于STC12C5412AD单片机的无线电话遥控电路设计[J].浙江理工大学学报,2009(2):23-25.
[4] 梅凤霞,王耀青.STC单片机在多路温度巡回检测仪中的应用[J].武汉工程职业技术学院学报,2010(2):47-50.
[5] 邵琰,钱东平.STC89C52RC单片机在幼苗移栽机控制系统中的应用[J].农机化研究,2010(5),36-38.