测控技术与仪器测控技术实验报告.doc_第1页
测控技术与仪器测控技术实验报告.doc_第2页
测控技术与仪器测控技术实验报告.doc_第3页
测控技术与仪器测控技术实验报告.doc_第4页
测控技术与仪器测控技术实验报告.doc_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实 验 报 告课程名称 计算机测控技术 题 目 实验 指导教师 系 别 仪器科学与光电工程学院 专 业 测控技术与仪器 姓 名 班级/学号 成 绩 实验一 单片机程序设计基础1 实验设备硬件使用的是单片机ss-8051高级单片机实验仪,软件使用的是keil uv2软件开发环境。2 实验目的 熟悉单片机的调试环境与指令系统3 实验内容自编一个汇编小程序,使用keil uv2软件开发环境,进行编译、调试、运行程序。keil uv2 操作流程的简单说明:1. new project ,建一个新的项目,取项目名并存于f:盘下(最好在f盘下建一个自己的文件夹)。在出现的对 话框中选atmel/at89c51 芯片型号;或者可以从file/ devices database 的对话框中选择芯片型号。2. file/ new ,建立一个新文件,在打开的窗口下输入程序,取文件名并存盘。3. 选中source group1点击鼠标右键,在出现的菜单中选中 add files to group source group1,将文件加入到项目中。4. 选中target1点击鼠标右键,在出现的菜单中选中options for target target1:l 在出现的对话框中打开output项的对话框,选中great hex file,以保证编译时能生成.hex文件,为后续下载程序做准备。l 在出现的对话框中打开debug项的对话框,选中use ,选keil monitor 51 driver。选人、run to main()。5. project/build target或rebuild all target files, 编译所输入的程序,检查语法错误,更改错误直至无错为止。6. debug/ start/stop debug session ,开始调试程序,检查逻辑错误。4 实验过程程序:org 00h mov a,3ah add a,01h end运算结果:3bh1.新建工程,选取8051芯片如下图 2.新建文件,存盘并加入项目中。如下 3.选中target1点击鼠标右键,在出现的菜单中选中options for target target1: 4. 调试程序直至无错为止。实验二 51单片机的串行通信实验一实验内容连线并编制程序,完成单片机与pc机通信的功能。 二实验目的 1. 了解单片机串口通信的基本功能;2. 了解单片机与pc机串口通信的硬件接口电路;3. 学会单片机和pc机串口程序的编制和调试。三实验电路四常用的各种波特率设置表波特率振荡频率smodtimerc/t模式自动装入480012m1020f3h240012m0020f3h120012m1020f6h19200110592m1020fdh9600110592m0020fdh4800110592m0020fah2400110592m0020f4h1200110592m0020e8h五实验程序程序功能说明:该程序的功能是将pc机中发来的数据接收之后又发送出来,在pc机端则在接收之后在窗口中显示。源程序清单:org00hajmpstart;设置主程序地址org30hstart:movsp,#60h;设置sp的值movth1,#0feh;设置波特率为9600movtl1,#0fehmovtmod,#00100000b;选择计时器1方式2产生波特率movie,#00h;禁止所有的中断,采用查询方式movscon,#01010000b;设置串口为方式1,接收允许setbtr1;启动定时器1again:acall in;接收字符子程序acallout;回送字符子程序ajmpagain;循环out:movsbuf,a;发送字符子程序wait:jbc ti,end1;发送完毕返回sjmpwait;否则等待ti=1end1:retin:jbcri,end2;接收到字符(ri=1)时启动接收sjmpin;否则查询是否接收到字符end2:mova,sbuf;启动接收retend ;程序结束 程序清单(c51):#include#include typedef unsigned char byte;bytedataaa;voidout(void)sbuf=aa;/*发送字符子程序*/wait:if(ti=1)ti=0;goto end1;/*发送完毕返回*/gotowait;/*否则等待ti=1*/end1:_nop_();void in(void)in1:if(ri=1)ri=0;goto end2;/*接收到字符(ri=1)时启动接收*/goto in1;/*否则查询是否接收到字符*/end2:aa=sbuf;/*启动接收*/voidmain(void)th1=0xf3;/*设置波特率为2400*/tl1=0xf3;/*设置波特率为2400*/tmod=0x20;/*选择计时器1方式2产生波特率*/ie=0;/*禁止所有的中断,采用查询方式*/scon=0x50;/*设置串口为方式1,接收允许*/tr1=1;/*启动定时器1*/again:in();/*接收字符子程序*/out();/*回送字符子程序*/goto again;/*循环*/实验三 v/f转换电路实验1、 实验内容v/f转换电路的调试。 2、 实验要求1、 在了解lm331工作原理(转换原理)的基础上,考虑以下几个问题:输入电压范围;输出频率范围;输入和输出间的对应关系。 2、 调试电路,直至v/f转换器可以正确输出波形。如果v/f转换器没有输出或输出波形不理想,请分析查找原因,并将波形调至等占空比。 3、 用示波器、频率计等工具观察v/f转换器的输出波形,观察定标调整环节w1,w2和w3对波形的影响。 4、 通过实测数据分析v/f转换器的线性,画出实际的v、f对应关系。3、 实验电路图实验四 v/f转换的数据采集 一 实验内容连线并编制程序:使用定时器和计数器完成 lm331脉冲输出信号的采集功能, 对采集的数据进行处理,最终得到频率值。二 实验目的定时器中断的使用;学习定时器中断间隔时间的计算;掌握计数器的使用方法;学习中断处理程序的编程方法。三 原理简述1定时器/计数器的输入脉冲周期与机器周期一样,为振荡器频率的1/12。本实验中时钟频率为12m,现要采用中断方法来实现1秒延时,要在定时器1中设置一个时间常数,使其每隔0.05秒产生一次中断,cpu响应中断后r0中计数值减一,令(r0)=14h,即可实现1秒的延时,时间常数可按下法确定:机器周期=12/晶振频率=12/12=1us定时器需设初值为x,则(216x)*1=50000us求出x=15536化为十六进制:x=3cb0h,故初始值为:th1=3ch,tl1=b0h。2. 初始化程序包括定时器初始化和中断系统初始化,主要对ip,ie,tcon,tmod的相应位进行正确的设置,并将时间常数送入定时器中。由于只有定时器中断,ip不必设置。注意一点:定时器1初始化时建议用如下的指令:anltmod,#0fhorltmod,#10h3. 设计中断服务程序和主程序中断服务程序除了要完成计数减1工作外,还要将时间常数重新送入定时器中,为下一次中断做准备。主程序则对计数器的数值进行处理,转换成频率值。 四 实验程序#include#includeint f,f0;void main() tmod=0x51;/t1是计数器且工作在方式2 下8位计数器,t0是定时器且工作在方式1 下16位定时器 th0=0x9e;/定时器 t0高八位 初值x 16位 tl0=0x58;/定时器 to低八位 初值x 16位 th1=0x00;/计数器高八位 初值 tl1=0x00;/计数器低八位初值 et0=1;/打开定时器t0的运行开关 ea=1;/开 总中断 tr0=1;/ 开 定时器0 tr1=1;/ 开 定时器1 while(1);/死循环 void time1() interrupt 1 using 2 ea=0;/ 关总中断 tr0=0;/ 关定时器0 tr1=0;/ 关计数器1 f=tl1+th1*256;/把数字构成16位的 f0=f*2;/频率的计算公式 tmod=0x51; /01010001t1是计数器且工作在方式2 下8位计数器,t0是定时器且工作在方式1 下16位定时器 th0=0x9e;/定时器 t0高八位 初值x 16位 tl0=0x58;/定时器 to低八位 初值x 16位 th1=0x00;/计数器高八位 初值 tl1=0x00;/计数器低八位初值 et0=1; /打开定时器t0的运行开关 ea=1; / 开 总中断 tr0=1;/ 开 定时器0 tr1=1;/ 开 计数器1 实验五 7279键盘显示控制实验一 实验题目连线并编制程序,将hd7279a的全部编码送hd7279a显示,以一秒钟为间隔显示下一位,以前的显示内容左移。二 实验目的1 了解hd7279a键盘显示芯片的基本应用;2 掌握hd7279a键盘显示芯片的接口电路及编程方法。三 原理简述1 hd7279a是一片具有串行接口的,可同时驱动8位共阴式数码管(或64只独立led)的智能显示驱动芯片,该芯片同时还可连接多达64键的键盘矩阵,单片即可完成led显示、键盘接口的全部功能。2 hd7279a内部含有译码器,可直接接受bcd码或16进制码,并同时具有2种译码方式,此外还有多种控制命令,如消隐、闪烁、左移、右移、段寻址等。命令的具体形式可查阅hd7279a相关的技术资料。四 实验电路注意:另外,在实验之前,应将8单元的u7(7406)和u6(74ls245)芯片取下,因7279已经有直接驱动数码管的能力,如果另外放置驱动芯片,反而会影响数码管的显示效果。五 实验程序/程序清单(c51):#include/调用c51的头文件#include typedef unsigned char byte;/*在程序中用byte 代替unsigned char了,这只是为了编写代码的方便而已!byte在这里还是一个类型,并不是一个变量,里面没有存储东西。*/bdata byte bit_count,timer,timer1,ten,data_in,data_out,aa,bb;/*位变量bit_count,timer,timer1,ten,data_in,data_out,aa,bb被定义为bdata存储类型,编译时编译器将把该变量定位在51单片机片内数据存储区(ram)中的位寻址区(地址:20h-2fh)*/sbit data_in0=data_in0;/定义in口第0位为data_in0sbit data_out7=data_out7;/定义out口第7位为data_out7sbit dat=p12;/*hd7279a的data连接于p1.2*/sbit key=p13;/*hd7279a的key连接于p1.3*/sbit cs=p14;/*hd7279a的cs连接于p1.4*/sbit clk=p15;/*hd7279a的clk连接于p1.5*/void send(void);/调用send(void)函数void long_delay(void);/调用long_delay(void)函数void short_delay(void);/调用short_delay(void)函数void receive(void);/调用receive(void)函数void main(void)/定义主函数start:_nop_();/*空操作,就是不进行任何操作的延时,作用一般就是用作延时用*/p1=0xdb;/*1101 1011 处于无效状态*/; timer=50;/*计时器初值*/start_delay:timer1=255;/*开延时*/start_delay1:timer1-;/*开延时*/if(timer10)/如果timer10goto start_delay1;/跳至start_delay1timer-;/计时器自减1if(timer0)/判断计时器的值是否大于0,使进start_delaygoto start_delay;data_out=0xa4; send(); /*发送*/cs=1; /*片选无效*/main1:if(key=1)goto main1; /*键没有按下,循环*/data_out=0x15; /*将0001 0101赋值给data_out*/send(); /*发送*/receive();/*接收*/ cs=1; /*片选无效*/aa=data_in; /*把输入数据复制给aa*/if(aa=6)bb=1;/*数码管显示0000 0110*/if(aa=5)bb=2;/*0000 0101*/if(aa=4)bb=3;/*0000 0100*/if(aa=14)bb=4;/*0001 0100*/if(aa=13)bb=5;/*0001 0011*/if(aa=12)bb=6;/*0001 0010*/if(aa=22)bb=7;/*0010 0010*/if(aa=21)bb=8;/*0010 0001*/if(aa=20)bb=9;/*0010 0000*/if(aa=30)bb=11;/*0011 0000*/if(aa=29)bb=0;/*0010 1001*/if(aa=28)bb=12;/*0010 1000*/ten=0;/*movten,a*/data_out=0xa1;/*movdata_out,#1010 0001b*/send();/*callsend*/data_out=0xa1;/*movdata_out,#1010 0001b*/send();/*callsend*/data_out=0x81;/*movdata_out,#1000 0001b*/send();/*callsend*/data_out=ten;/*movdata_out,ten*/send();/*callsend*/data_out=0x80;/*movdata_out,#1000 0000b*/send();/*callsend*/data_out=bb;/*movdata_out,b*/send();/*callsend*/cs=1; /*片选无效*/wait:if(key=0)/*有键按下*/goto wait;/*跳到wait函数*/goto main1; /*跳到wait1函数*/void send(void) /*定义send(void)函数*/bit_count=8; /*位数为8*/cs=0;/*片选有效*/ long_delay();/*长延时*/ send_loop:cy=data_out7; /*将data_out7赋值给cy,为进位的位,cy复位即cy=0*/dat=cy;/*将进位赋值给dat*/ clk=1; /*时钟高电平,它变成高电平以后,hd7279延时t6才输出数据*/aa=data_out; /*将输出数据复制给aa*/aa=_crol_(aa,1);/*循环左移*/ data_out=aa;/*将左移后的数据输出*/ short_delay(); /*短延时*/ clk=0;/*clk变低电平*/ short_delay;/*延时t7*/ bit_count-;/*位数自减一*/if(bit_count0)/*判断位数是不是0*/goto send_loop;/*djnz/*跳至send_loop*/bit_count,send_loop; /*/dat=0;/*/ void long_delay(void)/*定义长延时函数*/timer=25; /*计数初值25*/delay_loop:timer-;/*延时循环 自减一*/if(timer0)goto delay_loop;/*ret*/void short_delay(void)/*定义短延时函数*/timer=4;/*movtimer,#4; /*计数初值为4*/delay_loop1:timer-;/*延时循环 自减一*/if(timer0)/*/goto delay_loop1;/*跳至delay_loop1*/void receive(void)/*定义receive(void)函数*/bit_count=8;/*movbit_count,#8*/dat=1;/*setbdat*/long_delay();/*calllong_delay*/receive_loop:clk=1;/*setbclk*/short_delay();/*callshort_delay*/aa=data_in;/*mova,data_in*/aa=_crol_(aa,1);/*rlaa*/data_in=aa;/*movdata_in,a*/cy=dat;/*movc,dat*/data_in0=cy;/*movdata_in.0,c*/clk=0;/*clrclk*/short_delay();/*callshort_delay*/bit_count-;/bit_count自减1if(bit_count0)/bit_count判断是否0,若是进入循环eceive_loopgoto receive_loop;dat=0;/*clr dat*/标题:数码管的显示效果:静态显示一位数码管,显示0-9#include reg51.h/头文件:unsigned char table=0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90;/变量定义:表:共阳数码管0有效依次显示0-9共十个数sbit smg1 = p10;/引脚定义:定义数码管阳级控制脚,第一个为p1口的0sbit smg2 = p11;/定义数码管阳级控制脚,第二个为p1口的1void delay(unsigned int d_time); /函数声明:/延时子函时,void main(void) /主函数,c语言的入口函数:unsigned char i;/定义循环变量while(1)smg1=0;/选择第一位数码管,这是静态显示,p0口输出显示,不需要刷新,也可选择第二位smg2=0;也可两位同时输出显示for(i=0;i10;i+)/循环显示0-9p0=tablei;/查表输出数码管段值给p0口,显示相应的0-9delay(500);/延时void delay(unsigned int tmp)/延时子函数,参数范围 0-65536unsigned char j;while(tmp-)j=255;while(j-); 实验六 电机调速控制实验一 实验内容 连线并编制程序,产生脉冲信号,控制直流电动机的运行。 二. 实验目的 掌握采用单片机控制直流电动机的硬件接口技术。掌握直流电动机驱动程序的设计与调试方法。熟悉直流电动机的工作特性。 三. 实验电路4 实验程序#include/调用c51的头文件typedef unsigned char byte;/typedef定义可以在程序中用byte 代替unsigned charsbit paa=p10;/定义位变量paa为p10void delayxms()/定义延时函数int i,j;for(i=0;icount;i+)for(j=0;j100;j+)void main(void)/定义主函数p1=0x0;/使p1口8个脚都输出低电平while(1)/循环paa=0;/产生矩形方波delayxms(10);paa=1;delayxms(10); 实验七 模/数转换实验一实验内容:利用实验台上的adc0809做a/d转换器,实验台上的电源和地提供模拟量输入,编制程序,将模拟量转换成数字量,用发光二极管显示。二实验目的:1.掌握a/d转换与单片机的接口方法。2.了解a/d芯片adc0809转换性能及编程方法。3.通过实验了解单片机如何进行数据采集。三实验原理简述:a/d转换器大致有三类:一是双积分a/d转换器,优点是精度高,抗干扰性好,价格便宜,但速度慢;二是逐次逼近a/d转换器,精度、速度、价格适中;三是并行a/d转换器,速度快,价格也昂贵。实验用的adc0809属于第二类,是八位a/d转换器。每采集一次需100us。adc0809start端为a/d转换启动信号,ale端为通道选择地址的锁存信号。实验电路中将其相连,以便同时锁存通道地址并开始a/d采样转换。故启动a/d转换只需如下两条指令:movdptr,#00hmovxdptr,aa中为何内容是不重要的,这是一次虚拟写。中断方式下,a/d转换结束后会自动产生eoc信号,将其与8031into相接。中断处理程序中,使用如下指令即可读取a/d转换结果:movdptr,#00hmovxa,dptr4 实验原理图:l enable: 输出允许信号位5 程序框图:这里给出软件延时方法的程序框图和程序:6 实验程序#include #include /调用c51的头文件#define add xbyte0x800/宏定义将 add 定义为xbyte0x800void delay(int c) /延时子程序 int i,j; for(i=0;ic;i+) for(j=0;j100;j+);void main() char k;/定义字符型变量k while(1)/死循环 add=0x0; /通道至0 delay(50); /延时 k=add;/将add赋值给k p1=k; /取反并赋给p1口实验八 微型打印机接口控制实验一实验内容:将实验仪接上微型打印机,控制打印机打印出各种效果的汉字和字符。二实验目的:了解微型打印机接口及其打印字符的方法;了解微型打印机打印汉字的方法;了解单片机与微型打印机的连线方法。三有关说明: 并行接口连接接口与引脚定义:本系列打印机并口与centronics 兼容,支持busy/ack 握手协议,接口插座如下图:并行接口各引脚信号的定义如下图表所示:注: 1.“入”表示输入到打印机。 2.“出”表示从打印机输出。 3.信号的逻辑电平为ttl 电平。并行接口引脚信号时序并口时序如下图所示:四实验电路: 五实验程序/ 北京炜煌科技打印机示例程序/ nocky tian/ 2007-07-17#include / hardware configuration#define printer_data p0 / 定义打印机数据线端口sbit busy = p32; / 定义打印机忙信号引脚sbit nstb = p37; / 定义打印机nstb 信号引脚sbit pe = p33; / 定义打印机纸状态检测信号引脚sbit nack = p32; / 定义打印机应答信号引脚sbit nerr = p31; / 定义打印机错误检测信号引脚sbit nsel = p30; / 定义打印机在线检测信号引脚#define cr 0x0d#define lf 0x0avoid printbyte(unsigned char byte_data);void printstring(char* str);void printbyten(unsigned char* data_src,unsigned char n);void main(void)char str = printer demo;printstring(北京炜煌wh);printbyte(cr);while(1);/* printbyte()* send a byte to printer* nocky tian 2006-7-17*/#include void printbyte(unsigned char byte_data)while( busy = 1 )printer_data = byte_data;nstb = 0;_nop_(); / 调整nstb 信号脉宽nstb = 1;/* printstring()* print a string which is ending with a 0 character* to excuted the print command a addition cr character is needed* nocky tian 2006-7-17*/void printstring(char* str)while( *str )printbyte( *(str+);/* printbyten()* print n bytes through printer* no more than 255 bytes could be printed by the function* if more than 255 bytes need printing, the type of n need changing* to unsigned int, even unsigned long if necessary.* nocky tian 2006-07-17*/void printbyten( unsigned char* data_src, / pointer to data sourceunsigned char n) / number of data(byte)while( n-)printbyte(*(data_src+);/ 北京炜煌科技打印机示例程序/ nocky tian/ 2007-07-17#include / hardware configuration#define printer_data p0 / 定义打印机数据线端口sbit busy = p32; / 定义打印机忙信号引脚sbit nstb = p37; / 定义打印机ns

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论