测控技术实验报告Word文档下载推荐.docx
《测控技术实验报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《测控技术实验报告Word文档下载推荐.docx(33页珍藏版)》请在冰豆网上搜索。
四.常用的各种波特率设置表
波特率
振荡频率
SMOD
TIMER
C/T
模式
自动装入
4800
12M
1
2
0F3H
2400
1200
0F6H
19200
11.0592M
0FDH
9600
0FAH
0F4H
0E8H
五.实验程序
程序功能说明:
该程序的功能是将PC机中发来的数据接收之后又发送出来,在PC机端则在接收之后在窗口中显示。
源程序清单:
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<
reg51.h>
#include<
intrins.h>
typedefunsignedcharByte;
BytedataAA;
voidOUT(void)
{
SBUF=AA;
/*发送字符子程序*/
if(TI==1)
{
TI=0;
gotoend1;
}/*发送完毕返回*/
gotowait;
/*否则等待TI=1*/
_nop_();
}
voidIN(void)
in1:
if(RI==1)
RI=0;
gotoend2;
}/*接收到字符(RI=1)时启动接收*/
gotoin1;
/*否则查询是否接收到字符*/
end2:
AA=SBUF;
/*启动接收*/
voidmain(void)
TH1=0xF3;
/*设置波特率为2400*/
TL1=0xF3;
TMOD=0x20;
/*选择计时器1方式2产生波特率*/
IE=0;
/*禁止所有的中断,采用查询方式*/
SCON=0x50;
/*设置串口为方式1,接收允许*/
TR1=1;
/*启动定时器1*/
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工作外,还要将时间常数重新送入定时器中,为下一次中断做准备。
主程序则对计数器的数值进行处理,转换成频率值。
四.实验程序
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
//开定时器1
while
(1);
//死循环
voidtime1()interrupt1using2
EA=0;
//关总中断
TR0=0;
//关定时器0
TR1=0;
//关计数器1
f=TL1+TH1*256;
//把数字构成16位的
f0=f*2;
//频率的计算公式
//01010001T1是计数器且工作在方式2下8位计数器,T0是定时器且工作在方式1下16位定时器
//定时器T0高八位初值X16位
//定时器TO低八位初值X16位
//计数器高八位初值
//计数器低八位初值
////打开定时器T0的运行开关
//开总中断
//开定时器0
//开计数器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):
//调用C51的头文件
/*在程序中用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)//定义主函数
{
_nop_();
/*空操作,就是不进行任何操作的延时,作用一般就是用作延时用*/
P1=0xDB;
/*11011011处于无效状态*/;
TIMER=50;
/*计时器初值*/
START_DELAY:
TIMER1=255;
/*开延时*/
START_DELAY1:
TIMER1--;
if(TIMER1>
0)//如果TIMER1>
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*/
/*CALLSEND*/
DATA_OUT=0x81;
/*MOVDATA_OUT,#10000001B*/
DATA_OUT=TEN;
/*MOVDATA_OUT,TEN*/
DATA_OUT=0x80;
/*MOVDATA_OUT,#10000000B*/
DATA_OUT=BB;
/*MOVDATA_OUT,B*/
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--;
/*延时循环自减一*/
0)
gotoDELAY_LOOP;
}/*RET*/
voidSHORT_DELAY(void)/*定义短延时函数*/
TIMER=4;
/*MOVTIMER,#4;
/*计数初值为4*/
DELAY_LOOP1:
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*/
//BIT_COUNT自减1
if(BIT_COUNT>
0)//BIT_COUNT判断是否〉0,若是进入循环ECEIVE_LOOP
gotoRECEIVE_LOOP;
/*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.实验程序
//调用C51的头文件
//typedef定义可以在程序中用BYTE代替unsignedchar
sbitPAA=P1^0;
//定义位变量PAA为P1^0
voidDelayXms()//定义延时函数
inti,j;
for(i=0;
count;
i++)
for(j=0;
j<
100;
j++)
voidmain(void)//定义主函数
P1=0x0;
//使P1口8个脚都输出低电平
while
(1)