测控技术实验报告.docx
- 文档编号:9376275
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:33
- 大小:368.55KB
测控技术实验报告.docx
《测控技术实验报告.docx》由会员分享,可在线阅读,更多相关《测控技术实验报告.docx(33页珍藏版)》请在冰豆网上搜索。
测控技术实验报告
实验报告
课程名称计算机测控技术
题目实验
指导教师
系别仪器科学与光电工程学院
专业测控技术与仪器
姓名
班级/学号
成绩
实验一单片机程序设计基础
1.实验设备
硬件使用的是单片机SS-8051高级单片机实验仪,软件使用的是Keiluv2软件开发环境。
2.实验目的
熟悉单片机的调试环境与指令系统
3.实验内容
自编一个汇编小程序,使用Keiluv2软件开发环境,进行编译、调试、运行程序。
Keiluv2操作流程的简单说明:
1.NEWPROJECT↙,建一个新的项目,取项目名并存于F:
盘下(最好在F盘下建一个自己的文件夹)。
在出现的对话框中选Atmel/AT89c51芯片型号;或者可以从File/devicesdatabase的对话框中选择芯片型号。
2.FILE/NEW↙,建立一个新文件,在打开的窗口下输入程序,取文件名并存盘。
3.选中SourceGroup1点击鼠标右键,在出现的菜单中选中AddFilestoGroup`SourceGroup1`,将文件加入到项目中。
4.选中Target1点击鼠标右键,在出现的菜单中选中OptionsforTarget`Target1`:
●在出现的对话框中打开output项的对话框,选中`GreatHEXFile`,以保证编译时能生成.HEX文件,为后续下载程序做准备。
●在出现的对话框中打开debug项的对话框,选中`Use`,选Keilmonitor51driver。
选人、Runtomain()。
5.Project/Buildtarget或Rebuildalltargetfiles,编译所输入的程序,检查语法错误,更改错误直至无错为止。
6.Debug/‘Start/StopDebugSession’↙,开始调试程序,检查逻辑错误。
4.实验过程
程序:
ORG00H
MOVA,3AH
ADDA,01H
END
运算结果:
3BH
1.新建工程,选取8051芯片如下图
2.新建文件,存盘并加入项目中。
如下
3.选中Target1点击鼠标右键,在出现的菜单中选中OptionsforTarget`Target1`:
4.调试程序直至无错为止。
实验二51单片机的串行通信实验
一.实验内容
连线并编制程序,完成单片机与PC机通信的功能。
二.实验目的
1.了解单片机串口通信的基本功能;
2.了解单片机与PC机串口通信的硬件接口电路;
3.学会单片机和PC机串口程序的编制和调试。
三.实验电路
四.常用的各种波特率设置表
波特率
振荡频率
SMOD
TIMER
C/T
模式
自动装入
4800
12M
1
0
2
0F3H
2400
12M
0
0
2
0F3H
1200
12M
1
0
2
0F6H
19200
11.0592M
1
0
2
0FDH
9600
11.0592M
0
0
2
0FDH
4800
11.0592M
0
0
2
0FAH
2400
11.0592M
0
0
2
0F4H
1200
11.0592M
0
0
2
0E8H
五.实验程序
程序功能说明:
该程序的功能是将PC机中发来的数据接收之后又发送出来,在PC机端则在接收之后在窗口中显示。
源程序清单:
ORG00H
AJMPSTART;设置主程序地址
ORG30H
START:
MOVSP,#60H;设置SP的值
MOVTH1,#0FeH;设置波特率为9600
MOVTL1,#0FeH
MOVTMOD,#00100000B;选择计时器1方式2产生波特率
MOVIE,#00H;禁止所有的中断,采用查询方式
MOVSCON,#01010000B;设置串口为方式1,接收允许
SETBTR1;启动定时器1
AGAIN:
ACALLIN;接收字符子程序
ACALLOUT;回送字符子程序
AJMPAGAIN;循环
out:
movsbuf,a;发送字符子程序
wait:
jbcti,end1;发送完毕返回
sjmpwait;否则等待TI=1
end1:
ret
in:
jbcri,end2;接收到字符(RI=1)时启动接收
sjmpin;否则查询是否接收到字符
end2:
mova,sbuf;启动接收
ret
END;程序结束
程序清单(C51):
#include
#include
typedefunsignedcharByte;
BytedataAA;
voidOUT(void)
{
SBUF=AA;/*发送字符子程序*/
wait:
if(TI==1)
{
TI=0;
gotoend1;
}/*发送完毕返回*/
gotowait;/*否则等待TI=1*/
end1:
_nop_();
}
voidIN(void)
{
in1:
if(RI==1)
{
RI=0;
gotoend2;
}/*接收到字符(RI=1)时启动接收*/
gotoin1;/*否则查询是否接收到字符*/
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();/*回送字符子程序*/
gotoAGAIN;/*循环*/
}
实验三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,则(2^16—X)*1=50000uS
求出X=15536
化为十六进制:
X=3CB0H,故初始值为:
TH1=3CH,TL1=B0H。
2.初始化程序
包括定时器初始化和中断系统初始化,主要对IP,IE,TCON,TMOD的相应位进行正确的设置,并将时间常数送入定时器中。
由于只有定时器中断,IP不必设置。
注意一点:
定时器1初始化时建议用如下的指令:
ANLTMOD,#0FH
ORLTMOD,#10H
3.设计中断服务程序和主程序
中断服务程序除了要完成计数减1工作外,还要将时间常数重新送入定时器中,为下一次中断做准备。
主程序则对计数器的数值进行处理,转换成频率值。
四.实验程序
#include
#include
intf,f0;
voidmain()
{
TMOD=0X51;//T1是计数器且工作在方式2下8位计数器,T0是定时器且工作在方式1下16位定时器
TH0=0X9E;//定时器T0高八位初值X16位
TL0=0X58;//定时器TO低八位初值X16位
TH1=0X00;//计数器高八位初值
TL1=0X00;//计数器低八位初值
ET0=1;//打开定时器T0的运行开关
EA=1;//开总中断
TR0=1;//开定时器0
TR1=1;//开定时器1
while
(1);//死循环
}
voidtime1()interrupt1using2
{
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高八位初值X16位
TL0=0X58;//定时器TO低八位初值X16位
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
#include
typedefunsignedcharByte;/*在程序中用BYTE代替unsignedchar了,这只是为了编写代码的方便而已!
BYTE在这里还是一个类型,并不是一个变量,里面没有存储东西。
*/
bdataByteBIT_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)*/
sbitdata_in0=DATA_IN^0;//定义IN口第0位为data_in0
sbitdata_out7=DATA_OUT^7;//定义out口第7位为data_out7
sbitDAT=P1^2;/*HD7279A的DATA连接于P1.2*/
sbitKEY=P1^3;/*HD7279A的KEY连接于P1.3*/
sbitCS=P1^4;/*HD7279A的CS连接于P1.4*/
sbitCLK=P1^5;/*HD7279A的CLK连接于P1.5*/
voidSEND(void);//调用SEND(void)函数
voidLONG_DELAY(void);//调用LONG_DELAY(void)函数
voidSHORT_DELAY(void);//调用SHORT_DELAY(void)函数
voidRECEIVE(void);//调用RECEIVE(void)函数
voidmain(void)//定义主函数
{
START:
_nop_();/*空操作,就是不进行任何操作的延时,作用一般就是用作延时用*/
P1=0xDB;/*11011011处于无效状态*/;
TIMER=50;/*计时器初值*/
START_DELAY:
TIMER1=255;/*开延时*/
START_DELAY1:
TIMER1--;/*开延时*/
if(TIMER1>0)//如果TIMER1>0
gotoSTART_DELAY1;//跳至START_DELAY1
TIMER--;//计时器自减1
if(TIMER>0)//判断计时器的值是否大于0,使进START_DELAY
gotoSTART_DELAY;
DATA_OUT=0xA4;
SEND();/*发送*/
CS=1;/*片选无效*/
MAIN1:
if(KEY==1)
gotoMAIN1;/*键没有按下,循环*/
DATA_OUT=0x15;/*将00010101赋值给DATA_OUT*/
SEND();/*发送*/
RECEIVE();/*接收*/
CS=1;/*片选无效*/
AA=DATA_IN;/*把输入数据复制给AA*/
if(AA==6)BB=1;/*数码管显示00000110*/
if(AA==5)BB=2;/*00000101*/
if(AA==4)BB=3;/*00000100*/
if(AA==14)BB=4;/*00010100*/
if(AA==13)BB=5;/*00010011*/
if(AA==12)BB=6;/*00010010*/
if(AA==22)BB=7;/*00100010*/
if(AA==21)BB=8;/*00100001*/
if(AA==20)BB=9;/*00100000*/
if(AA==30)BB=11;/*00110000*/
if(AA==29)BB=0;/*00101001*/
if(AA==28)BB=12;/*00101000*/
TEN=0;/*MOVTEN,A*/
DATA_OUT=0xA1;/*MOVDATA_OUT,#10100001B*/
SEND();/*CALLSEND*/
DATA_OUT=0xA1;/*MOVDATA_OUT,#10100001B*/
SEND();/*CALLSEND*/
DATA_OUT=0x81;/*MOVDATA_OUT,#10000001B*/
SEND();/*CALLSEND*/
DATA_OUT=TEN;/*MOVDATA_OUT,TEN*/
SEND();/*CALLSEND*/
DATA_OUT=0x80;/*MOVDATA_OUT,#10000000B*/
SEND();/*CALLSEND*/
DATA_OUT=BB;/*MOVDATA_OUT,B*/
SEND();/*CALLSEND*/
CS=1;/*片选无效*/
WAIT:
if(KEY==0)/*有键按下*/
gotoWAIT;/*跳到WAIT函数*/
gotoMAIN1;/*跳到WAIT1函数*/
}
voidSEND(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_COUNT>0)/*判断位数是不是>0*/
gotoSEND_LOOP;/*DJNZ/*跳至SEND_LOOP*/BIT_COUNT,SEND_LOOP;/**/
DAT=0;/**/
}
voidLONG_DELAY(void)/*定义长延时函数*/
{
TIMER=25;/*计数初值25*/
DELAY_LOOP:
TIMER--;/*延时循环自减一*/
if(TIMER>0)
gotoDELAY_LOOP;
}/*RET*/
voidSHORT_DELAY(void)/*定义短延时函数*/
{
TIMER=4;/*MOVTIMER,#4;/*计数初值为4*/
DELAY_LOOP1:
TIMER--;/*延时循环自减一*/
if(TIMER>0)/**/
gotoDELAY_LOOP1;/*跳至DELAY_LOOP1*/
}
voidRECEIVE(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自减1
if(BIT_COUNT>0)//BIT_COUNT判断是否〉0,若是进入循环ECEIVE_LOOP
gotoRECEIVE_LOOP;
DAT=0;/*CLRDAT*/
}
标题:
数码管的显示
效果:
静态显示一位数码管,显示0-9
#include"reg51.h"//头文件:
unsignedchartable[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//变量定义:
表:
共阳数码管0有效依次显示0-9共十个数
sbitSMG1=P1^0;///引脚定义:
定义数码管阳级控制脚,第一个为P1口的0
sbitSMG2=P1^1;//定义数码管阳级控制脚,第二个为P1口的1
voiddelay(unsignedintd_time);//函数声明:
//延时子函时,
voidmain(void)//主函数,C语言的入口函数:
{
unsignedchari;//定义循环变量
while
(1)
{SMG1=0;//@@@选择第一位数码管,这是静态显示,P0口输出显示,不需要刷新,也可选择第二位SMG2=0;也可两位同时输出显示
for(i=0;i<10;i++)//循环显示0-9
{
P0=table[i];//查表输出数码管段值给P0口,显示相应的0-9
delay(500);//延时
}
}
}
voiddelay(unsignedinttmp)//延时子函数,参数范围0-65536
{unsignedcharj;
while(tmp--)
{
j=255;
while(j--);
}
}
实验六电机调速控制实验
一.实验内容
连线并编制程序,产生脉冲信号,控制直流电动机的运行。
二.实验目的
掌握采用单片机控制直流电动机的硬件接口技术。
掌握直流电动机驱动程序的设计与调试方法。
熟悉直流电动机的工作特性。
三.实验电路
4.实验程序
#include
typedefunsignedcharByte;//typedef定义可以在程序中用BYTE代替unsignedchar
sbitPAA=P1^0;//定义位变量PAA为P1^0
voidDelayXms()//定义延时函数
{
inti,j;
for(i=0;i for(j=0;j<100;j++) } voidmain(void)//定义主函数 { P1=0x0;//使P1口8个脚都输出低电平 while (1)
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 测控 技术 实验 报告
