




已阅读5页,还剩73页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机控制技术实验,邵长友,实验一、串口通信实验,一、实验目的:1.认识串口在控制中的应用2.学会用C语言给串口编程二、实验器材:PC机、串口线三、实验内容:用C语言编程实现两个PC机之间的串行通信,实验一、串口通信实验,一、认识串口,在PC机上,有各种各样的接头,其中有两个9针的接头区,见这就是串行通信端口。PC机上的串行接口有多个名称:232口、串口、通信口、COM口、异步口等。,实验一、串口通信实验,相关知识一、认识串口,实验一、串口通信实验,一、认识串口,1查看设备信息进入Windows“我的电脑”系统属性,在“设备管理器”列表中有端口COM和LPT设备信息,如图所示。,实验一、串口通信实验,一、认识串口,RS-232-C标准:信号电平标准:逻辑“1”:-15V-5V逻辑“0”:+5V+15V,实验一、串口通信实验,RS-232-C控制信号的定义,实验一、串口通信实验,一、认识串口二、实验(1)用串口调试助手实现两个PC之间的通信(2)用C语言编程实现两个PC之间的通信三、编写程序实现PC和单片机之间的串行通信(单片机程序),实验一、串口通信实验,编程知识,编程知识,COM1与COM2的I/O端口地址,线路状态寄存器(读/写),D0:接收数据就绪。D1:超越错。D2:奇偶校验错。D3:帧格式错。D4:间断错。D5:发送保持寄存器空。D6:发送移位寄存器空。D7:恒为0。,接收数据寄存器收到了一个完整的字符,CPU可以读这个数据。,接口可以接收下一个要发送的字符,CPU可以写数据。,编程知识,地址:3FDH,线路状态寄存器(读/写),D0:接收数据就绪。D1:超越错。D2:奇偶校验错。D3:帧格式错。D4:间断错。D5:发送保持寄存器空。D6:发送移位寄存器空。D7:恒为0。,接收数据寄存器收到了一个完整的字符,CPU可以读这个数据。,可以接收下一个要发送的字符,CPU可以写数据。,编程知识,地址:3FDH,TurboC的串口通信函数,intbioscom(intcmd,charbyte,intport);,cmd=0:设置通讯参数byte的值1:把字符按字节送到通讯线上2:从通讯线上接收一个字符3:返回通讯端口的状态,port=0:COM1;port=1:COM2,初始化串口,byte值是下列各位的组合,0 x027个数据位0 x038个数据位,0 x00110波特率0 x20150波特率0 x40300波特率0 x60600波特率0 x801200波特率0 xa02400波特率0 xc04800波特率0 xe09600波特率,0 x001个停止位0 x042个停止位,0 x00无校验0 x08奇校验0 x18偶校验,若要求:8位数据位,1个停止位,奇校验,9600波特。byte=0 x03|0 x00|0 x08|0 xe0D7D6D5D4D3D2D1D0,#include#includemain()inti;bioscom(0,0 x83,0);doi=inportb(0X3fd);if(i,初始化串口11200波特,无校验,1位停止位,8个数据位,读线路状态寄存器,判断是否有错(D1:超越错D2:奇偶校验错D3:帧格式错D4:间断错),判断接收数据是否就绪,读接收数据寄存器,显示字符。,判断发送保持寄存器是否空,如果有键按下,写发送保持寄存器输出字符。,实验二、8254定时器实验,一、实验目的:1)掌握8254定时器/计数器的工作原理与编程2)熟悉8259中断控制器的工作原理和使用方法3)掌握硬件中断程序设计的原理与编程方法4)为数据采集程序打下控制采样的基础二、实验内容(1)用TPC-UP微机原理实验箱上的定时器芯片编程完成脉冲计数(2)编写程序使PC机主板上的芯片完成定时器(已经集成到一个大的芯片组中)中断实验,微机原理实验箱上的片选地址280h,280h,方式控制字,方式0:计数初值一个八位数()二进制,控制字10h,实验箱上的电路,参考程序,/*/*可编程定时器计数器(一)*/*/*8253CS-280H-287HGATE0-+5VCLK0-单脉冲OUT0-逻辑笔*/#include#include#include.ApiEx.h#pragmacomment(lib,.ApiEx.lib),voidmain()BYTEdata;if(!Startup()/*打开设备*/printf(ERROR:OpenDeviceError!n);return;PortWriteByte(0 x283,0 x10);/*设8253计数器0工作方式0,只写低字节*/PortWriteByte(0 x280,0 x0f);/*写入计数初值16*/while(!kbhit()/*有键按下则退出*/PortReadByte(0 x280,/*关闭设备*/,#include#includevoidinterruptmyint8(void);voidmain(void)disable();outportb(0 x43,0 x36);/0 x43是定时器控制寄存器地址outportb(0 x40,0 x9d);/0 x40是定时器0通道地址outportb(0 x40,0 x2e);/0 x9d,0 x2e分别是计数值低八位和高八位setvect(0 x08,myint8);/设置中断向量enable();while(1);,利用PC机上的定时器通道0工作在方式3,计数时间到产生中断,voidinterruptmyint8(void)putchar(8);outportb(0 x20,0 x20);/第一个0 x20主8259的OCW2的地址,/第二个0 x20是中断结束命令,#includevoidinterruptmyint8(void);intcount=1;voidmain(void)disable();outportb(0 x43,0 x30);outportb(0 x40,0 x0);outportb(0 x40,0 x0);setvect(0 x08,myint8);enable();while(1);,voidinterruptmyint8(void)chars=中国海洋大学青岛学院机电工程系;FILE*fp;fp=fopen(E:test.txt,w);fwrite(s,2,15,fp);fclose(fp);outportb(0 x20,0 x20);,通道0,方式0,定时时间到调用中断服务程序,实验三、中断方式实现串口通信,通过“设备管理器查看键盘和COM1的中断源,8259主片中断源:,键盘,COM1,#include#includemain()inti;disable();bioscom(0,0 x83,0);doi=inportb(0X3fd);if(i,初始化串口1:1200波特,无校验,1位停止位,8个数据位,实验四、pid程序演示实验,一、实验目的:理解数字PID控制器的设计方法二、实验内容(1)运行C语言PID演示程序,分析设定值、被控量、偏差,控制量的变化(2)编写PIDMATLAB仿真程序,分析运行结果,C语言PID演示程序#include#includetypedefstructPIDdoubleCommand;/输入指令doubleProportion;/比例系数doubleIntegral;/积分系数doubleDerivative;/微分系数doublepreErr;/前一拍误差doublesumErr;/误差累积PID;,voidmotorInit(motor*m)memset(m,0,sizeof(motor);,doublePIDCale(PID*p,doublefeedback)doubledErr,Err;Err=p-Command-feedback;/当前误差p-sumErr+=Err;/误差累加dErr=Err-p-preErr;/误差微分p-preErr=Err;return(p-Proportion*Err/比例项+p-Derivative*dErr/微分项+p-Integral*p-sumErr);/积分项,typedefstructmotordoublelastY;doublepreY;doublelastU;doublepreU;motor;voidmotorInit(motor*m)memset(m,0,sizeof(motor);,doublemotorCal(motor*m,doubleu)doubley=1.9753*m-lastY-0.9753*m-preY+0.00003284*u+0.00006568*m-lastU+0.00003284*m-preU;/二阶系统m-preY=m-lastY;m-lastY=y;m-preU=m-lastU;m-lastU=u;returny;,y(k)=y(k-1)-0.9753*y(k-2)+0.00003284*u(k)+0.00006568*u(k-1)+0.00003248*u(k-2),voidmain()FILE*fp=fopen(data.txt,w+);PIDsPID;motorm_motor;intk=0;doubleu;doubley=0;PIDInit(,while(k=5u(k)=5;endifu(k)=-5u(k)=-5;end%Linearmodelyout(k)=-den(2)*y_1-den(3)*y_2+num(2)*u_1+num(3)*u_2;error(k)=rin(k)-yout(k);%Returnofparametersu_2=u_1;u_1=u(k);y_2=y_1;y_1=yout(k);,x(1)=error(k)-error_1;%CalculatingPx(2)=error(k)-2*error_1+error_2;%CalculatingDx(3)=error(k);%CalculatingIerror_2=error_1;error_1=error(k);endfigure(1);plot(time,rin,b,time,yout,r);xlabel(time(s),ylabel(rin,yout);figure(2);plot(time,error,r)xlabel(time(s);ylabel(error);,实验五、RS485总线实验,实验目的:1、理解RS485的通信原理2、学会RS485的C语言编程实验内容:1、利用RS232-RS485无源转换器给PC机组网2、利用C语言编写RS485的通信程序,1.RS-485的电气特性:逻辑“1”以两线间的电压差为+(2-6)V表示;逻辑“0”以两线间的电压差为-(2-6)V表示。接口信号电平比RS-232-C降低了,就不易损坏接口电路的芯片,且该电平与TTL电平兼容,可方便与TTL电路连接。2.RS-485的数据最高传输速率为10Mbps。3.RS-485接口是采用平衡驱动器和差分接收器的组合,抗共模干能力增强,即抗噪声干扰性好。4.RS-485接口的最大传输距离标准值为4000英尺,实际上可达3000米,另外RS-232-C接口在总线上只允许连接1个收发器,即单站能力。而RS-485接口在总线上是允许连接多达128个收发器。即具有多站能力,这样用户可以利用单一的,RS485网络,RS485网络,连线时“手拉手”,实验程序,/*-通信协议-发送的命令:#xxRn$#-命令前导符xx-两位ASCII从机地址R-表示要求从机发送数据n-一位ASCII码0-9,表示发送数据的类型$-命令结束符接收的数据格式:=xxddddddddd$=-命令前导符xx-两位ASCII从机地址ddddddddd-九位ASCII码数据$-命令结束符-*/,/*-通信协议-发送的命令:#xxRn$#-命令前导符xx-两位ASCII从机地址R-表示要求从机发送数据n-一位ASCII码0-9,表示发送数据的类型$-命令结束符接收的数据格式:=xxddddddddd$=-命令前导符xx-两位ASCII从机地址ddddddddd-九位ASCII码数据$-命令结束符-*/#include#includemain()inti,j,k,n;charc,cmd=#xxRn$;charaddress=xx;chardata=xxAAAAAAAAA$;bioscom(0,0 x83,0);doprintf(pleaseinputtheslavecomputeraddressyouwanttocommunicatewith(00-99):);scanf(%d,主机程序,/*-通信协议-接收到的信号:#xxRn$#-命令前导符xx-两位ASCII从机地址R-表示要求从机发送数据n-一位ASCII码0-9$-命令结束符发回的数据格式:=xxddddddddd$=-命令前导符xx-两位ASCII从机地址ddddddddd-九位ASCII码数据$-命令结束符-*/#include#includemain()inti,j,n;charc,cmd5;charaddress=00;chardata0=AAAAAAAAA$;chardata1=BBBBBBBBB$;chardata2=CCCCCCCCC$;chardata3=DDDDDDDCC$;printf(pleasesetupthiscomputeraddress(00-99):);scanf(%d,从机程序,实验四、标度变换和非线性补偿,实验目的:1、理解标度变换和非线性补偿原理2、学会标度变换和非线性补偿C语言编程实验内容:1、标度变换的C语言编程2、非线性补偿的C语言编程3、牛顿迭代法的C语言编程,一、标度变换,某热处理炉温度测量仪表的量程为0800C,在某一时刻计算机采样并经数字滤波后的数字量为CDH,求此时的温度是多少?(设该仪表的量程是线性的)。8位A/D,0800C经热电偶和信号调理电路后0-5V,再经过模数转换后:0-255(0-FFH),includestdio.h#defineAM800#defineA00#defineNM255#defineN00intScale_transform(intx)inty;y=A0+(AM-A0)*(x-N0)/(NM-N0);return(y);,voidmain(void)intx,y;printf(请输入整数0-255:);scanf(%d,二、非线性补偿(线性插值算法),退火炉的温度(0-800)检测采用K型热电偶,经过150倍两级放大,变成0-5V的标准电压信号,再经过A/D转换变为0-FFH的数字信号。其热电势V与温度t之间的分度值下表所示。可以看出,热电偶温度与mV变化曲线比较平缓,故可采用线性插值法进行补偿。,非线性补偿程序,/*Note:YourchoiceisCIDE*/#includestdio.hintvolttotmp(unsignedcharvlt)unsignedcharvolt=0,0 x0f,0 x1f,0 x2f,0 x3e,0 x4e,0 x5d,0 x6d,0 x7d,0 x8e,0 x9e,0 xae,0 xbf,0 xcf,0 xdf,0 xef,0 xff;inttemp=0,50,100,150,200,250,300,350,400,450,500,550,600,650,700,750,800;inti,tmp;for(i=0;i17;i+)if(vlt=0.001);printf(%f的平方根:%fn,x,y);,实验六、键盘和LED显示实验,实验目的:1、理解非编码矩阵键盘的扫描原理2、理解LED动态扫描工作原理3、理解串行通信的工作原理实验内容:1、4X4矩阵扫描的C语言编程2、74HC595串行移位的C语言编程3、LED动态显示的C语言编程,4X4矩阵键盘,4X4矩阵键盘,rcode=0 xEF;/逐行扫描初值for(i=0;i4;i+)P2=rcode;/输出行扫描码if(P2/行扫描码左移一位,P20-P23:列P24-P27:行,74HC595,74HC595,74HC595,st_cp595=0;for(i=0;ioffset)sample_value=old_value;elsesample_value=new_value;return(sample_value);main()inti;floatvalue;floata12=2,2.3,8.1,2.5,3.3,2.9,5.4,3.3,7.3,3.6,7.2,3.9;for(i=0;i12;i+)printf(%.1f,ai);printf(n);for(i=0;imiddle_valuej)data=middle_valuej-1;middle_valuej-1=middle_valuej;middle_valuej=data;sample_value=middle_value(count-1)/2;return(sample_value);main()floatx;floata5=2,9,5.2,7,0;x=middle_filter(a,5);printf(%f,x);printf(hekkk);getch();,加权平均值滤波,/*Note:YourchoiceisCIDE*/#includestdio.h#includefloattimes_filter(floatdata_buf)floatsample_value;floatfilter_k5=0.05,0.15,0.25,0.25,0.3;sample_value=filter_k0*data_buf0+filter_k1*data_buf1+filter_k2*data_buf2+filter_k3*data_buf3+filter_k4*data_buf4;return(sample_value);main()floatx;floata5=2,2,4,5,9;x=times_filter(a);printf(%f,x);getch();,一阶惯性滤波,/*Note:YourchoiceisCIDE*/#includestdio.h#includefloatlow_filter(floatsensing_value,floatprevious_value,floatfactor)floatsample_value;sample_value=(1-factor)*sensing_value+factor*previous_value;return(sample_value);main()inti;floatx;floata10=1.9,2,2.1,5,2.3,2.4,2.8,5,3.0,3.2;floatb10;for(i=0;i10;i+)printf(%.1f,ai);printf(n);b0=a0;for(i=1;i10;i+)bi=low_filter(ai,bi-1,0.8);for(i=0;i10;i+)printf(%.1f,bi);getch();,实验八,1,2,3,1,1,2,3,4,3,4,2,1,3,4,2,1,0011011011001001,顺时针,逆时针,0011100111000110,tab1=0 x03,0 x06,0 x0c,0 x09,tab2=0 x03,0 x09,0 x0c,0 x06;,if(data,001
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年碳保险方向产品经理笔试指南及预测题解析
- 2025年国有企业项目经理招聘考试模拟题详解
- 桑树坪煤矿安全知识培训课件
- 2025年注册验船师资格考试(B级船舶检验专业基础安全)模拟题及答案一
- 2025年篮球考试试题及答案
- 2025年注册验船师资格考试(C级船舶检验专业能力)全真冲刺试题及答案一
- 2025年检测工程师桥隧工程考试真题(附答案)
- 2025年公务员考试国考全科目预测试题集
- 2025年地理信息系统应用实战与预测题集
- 2025年建筑装饰设计师高级实务操作指南及模拟题集
- 医疗机构人力资源管理制度
- QC/T 1209-2024汽车噪声与振动(NVH)术语和定义
- 品管圈PDCA改善项目-提高住院患者出入量记录的准确率
- 餐厅开荒保洁操作技术方案
- 2024年春季小学三年级英语课件教学方法探索
- 部编人教版小学四年级上册语文词语表注音
- DB52T 1781-2024 介入诊疗医务人员辐射防护规范
- 回收黄金合同协议书(2篇)
- 珠宝鉴定信息咨询服务合同
- 输变电工程施工质量验收统一表式(变电工程土建专业)
- 零星维修工程施工方案
评论
0/150
提交评论