欢迎来到天天文库
浏览记录
ID:41673944
大小:56.18 KB
页数:5页
时间:2019-08-29
《数据采集通道与PLC通讯程序》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、AS1117o+5VVDDAllAl2Al3Al4Al32图3单片机数据采集与通讯原理图3.1软件设计下面为32通道的AI采集并通过RS-485与PLC通讯,进行参数传递的部分C程序,包括系统主程序、串行口通讯处理程序、ADC初始化等部分。主要功能是堆32个AI通道进行采集,并进行数值处理(8次平均)后,通过RS・485总线送给PLC。////主程序//voidmain(void)unsignedchari;unsignedcharj;unsignedchark;EA=0;WDTCN=Oxde;//禁止看门狗定吋器WDTCN=Oxad;SYSCLKJnit();//初始化震荡器POR
2、TJnit();//初始化数据交叉开关和通用IOUARTOJnit();//初始化UART0ADCOJnit();//初始化ADC//Timer3」nit(SYSCLK/SAMPLE_RATE);//初始化Timer3作为ADCO的采样率//Timer2」nit(SYSCLK/12/1000);//初始化Timer2,ImS产生屮断Timer2_Init(922);ADCEN=1;//允许ADC//WDTCN=0xa5;〃启动看门狗定时器//WDTCN=Oxff;〃锁定看门狗定时器EA=1;//允许所有中断//////主循环程序//while(1)fi//WDTCN=0xa5;〃重置
3、看门狗定时器/*if(ad_count>7)〃如果AD转换8次tad_count=0;//AD转换次数计数器清零for(i=0;i<24;i++)r//求平均result_pj[i]=((result[ij)»3);//AD转换结果除以“8”result[i]=0;}//AD结果的累加和清零}*/////串行口处理程序if(inbufful)f〃收到一帧信息,而且本机站地址?I〃收到一帧信息处理inbufful=0;〃收到一帧信息标志复位puchmsg=inlast;crc(puchmsg,3);if(*(inlast+3)==crclo&&*(inlast+4)==crchi)/
4、/CRC正确?//CRC正确后的处理if(inbuf!0]==STATION_NUMER)〃收到一帧信息,而且本机站地址?outbuf[0]=01;outbuf[1]=inbuf[1];outbuf[2]=inbuf[2];j=((inbuf[2J&0x03)-l)«3;for(i=0;i<8;i++)〃本机地址送发送缓冲区第一字节//收到的命令送发送缓冲区第一字节//收到的组号送发送缓冲区第一字节〃取得本“组”号k=2*i+3;outbuf[k++]=result_pj[j]»8;outbuf[k]=result_pj0++];//outlast=outbuf;〃发送缓冲区起始地址
5、一>发送指针puchmsg=outlast;crc(puchmsgJ9);*(outlast+19)=crclo;*(outlast+20)=crchi;sendtx(21);}//CRC正确处理结束}〃收到一帧信息处理结束}〃循环扫描程序结束}〃主程序结束////UART发送数据启动子程序//voidsendtx(unsignedcharchd){if(t_empty){txen=l;txchsh=chd;fschsh=0;t_empty=0;rs485timersendl=l;//TI=1;//占总线〃本次发送的长度//发送指针清零〃置发送缓冲器“不空”标志〃启动延迟定时器//系
6、统时钟初始化voidSYSCLK」nit(void){inti,j;OSCXCN=0x67;for(j=0;j<50;j++){for(i=0;i<256;i++);}while(!(OSCXCN&0x80));//延时计数器//启动外部震荡器(11.0592mHz)//等待振荡器启动(>1ms)//等待振荡器稳左OSCICN=0x88;//选择外部振荡器作为系统时钟源并允许丢失for(j=O;j<100;j++){for(i=0;i<256;i++);}}//延时lOmS以上〃时钟监测器TRI=1;CKCON
7、=0x10;PCON
8、=0x80;IE
9、=0x10;inlast=inb
10、uf;inbufful=O;txen=0;TI=1;rs485_timer_send1=0;rs485timersend2=0;rs485_timer_receive1=10;rs485timerreceive2=0;////UARTO初始化//////配置UART,使用定时器1为波特率发牛器和8-N-1.//voidUARTO_Init(void){//SCON=0x50;//SCON:模式1,8位UART,使能RX//TMOD=0x20;//TMOD:
此文档下载收益归作者所有