手机版

单片机实训总结报告

发布时间:2024-11-28   来源:未知    
字号:

单片机的实训之后的总结(不要都搞成一样,老师发现就不好了)

数据采集器的设计

任务1 数据采集器的实现过程

试验要求:

1、 实验前,务必预习实验内容,深入了解相关知识,了解A/D转换器的基本概念,先分析相关程序画出相关电路图,然后模拟电路运转,最终得到实验结果; 2、 实验中,认真思考所做的每一步,弄懂其中的道理,填写好实

验过程; 3、

实验后,总结经验教训,写出实验体会和收获,为今后学习奠

定良好的基础。

实验目的:

1,了解A/D转换器的基本概念,认识ADC0808/0809的内部结构和其引脚

功能。

2,熟悉其与单片机的典型链接,数据采集器的设计过程 3,硬件电路和程序设计思想 4,在proteus完成相关模拟实验。 实验内容:

一、 在Proteus环境下,用ADC0808设计一个数据采集器,通过串行口

与上为相连机,如果 串行口收到了上位机的采集命令(0X41),就将8路模拟量转换为数字量,通过串行口以ASCII码的形式发送给上位机。

二、硬件电路,为调试方便,ADC0808的时钟信号CLKY由Proteus的虚拟

信号源提供,时钟信号设置为600KHZ;8路模拟量中INO接VCC,IN7接地,其他6路通过电位器分压获得。

三、数据采集器程序清单如下; #include <reg51.h>

单片机的实训之后的总结(不要都搞成一样,老师发现就不好了)

#include <absacc.h>

#define uint unsigned int #define uchar unsigned char

uchar idata adbuf[8]; uint addr; uchar n;

//存放A/D转换结果

//指向IN0~IN7通道地址 //通道计数

void init_serial(void)

{ SCON=0x50; //0101,0000 8位数据位,无奇偶校验 TMOD=0x20;

//定时器T1工作于方式2

PCON=PCON&0x7f; //SMOD=0 TH1=-3; TL1=-3; TR1=1; }

void send(uchar dat) { SBUF=dat; while(TI==0); TI=0; }

void int0(void) interrupt 0 {

adbuf[n]=XBYTE[addr]; //读取并保存当前转换结果 addr++; n++; if(n<8)

XBYTE[addr]=0; else

//启动对下一通道的转换

//指向下一通道的地址

//计数器加1

//启动定时器T1

//装入时间常数,波特率为9600

单片机的实训之后的总结(不要都搞成一样,老师发现就不好了)

EX0=0; }

void getadc(void) {n=0;

addr=0x7ff8; XBYTE[addr]=0; EX0=1;

//指向IN0通道的地址 //启动对当前通道的转换

//允许外部中断0中断

while(n<8); //等待8路模拟量转换完成 }

void main() {uchar i; init_serial(); IT0=1; EA=1; while(1)

{ while(RI==0); RI=0;

//等待接收完一个字符 //清除接收标志

//初始化串行口

//外部中断0下降沿触发 //开中断

i=SBUF; //读取收到的字符 if(i==0x41) { getadc();

//依次完成对8个通道模拟量的转换

for(i=0;i<8;i++)

{ send(adbuf[i]/100+0x30); adbuf[i]=adbuf[i]%100; send(adbuf[i]/10+0x30); send(adbuf[i]%10+0x30); send(0x20);

send(0x20);

单片机的实训之后的总结(不要都搞成一样,老师发现就不好了)

} send(0x0d); send(0x0a); } } }

四、模拟电路图:

五、调试方法与步骤,在KEIL下建立项目,输入源程序,编译后调试方式

全速运行,在虚拟终端的窗口输入大写字“A”,此时8路模拟量转换结果会在一行中显示出来,以此为IN0,IN1, .INO和IN7为显示值为255和000,其他为由电位器RV1中心抽头位置确定,调节RV1,然后在虚拟终端的窗口中输入大写字母“A”,IN0~IN7随之变化,

实验过程中存在的问题及解决方法:

本次试验中,对于模拟量转换为数字量的方式不明确,在模拟试验中程

序的调整,数据采集等难以做到准确,通过查阅相关资料和老师的指导,最终使问题得以解决。

单片机的实训之后的总结(不要都搞成一样,老师发现就不好了)

实验体会和收获:

通过本次试验,让我们了解了模拟量与数字量之间的转换关系,从总

学习了两种转换芯片和相关的C语言驱动程序,为今后的学习工作打下良好的基础。

任务2 数字电压表设计

试验要求:

1、 实验前,务必预习实验内容,深入了解相关知识,认识SPI总线,认识8位串行A/D转换器TLC549,先分析相关程序画出相关电路图,然后模拟电路运转,最终得到实验结果; 2、 实验中,认真思考所做的每一步,弄懂其中的道理,填写好实

验过程; 3、

实验后,总结经验教训,写出实验体会和收获,为今后学习奠

定良好的基础。

实验目的:

一、 二、 三、 四、 五、

实验内容:

1.利用TCL549 转换器设计一个简易数字电压表,用4位LED显示器将

被测电压显示出来,测量范围为0.000~5.000V*(电路连接:将试验仪器的JP2短接,ACS,ACLK,ADO分别与P10~P12相连);

2.硬件电路,将TLC549的CS,CLK,DO接到单片机的三条I/O口线,

了解SPI总线及总线结构系统的典型结构; 了解串行A/D转换器内部结构和引脚; 掌握TLC549的时序;

完成在proteus完成相关模拟实验。 数字电压表的设计;

单片机的实训之后的总结(不要都搞成一样,老师发现就不好了)

REF+,REF一真接到Vcc,GND,模拟输入AIN接电位器的中心抽头,调节 电位器即可改变被测输电压入值。

3. 程序设计; #include <reg51.h> #define uchar unsigned char #define ulong unsigned long uchar code segtab[]=

{ 0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90, 0x88,0x83,0xc6,0xa1,0x86,0x8e,0x89,0x8c,0xff}; uchar dbuf[4]={0,0,0,0}; sbit AD_CS=P1^0; sbit AD_CLK=P1^1; sbit AD_DAT=P1^2; bdata uchar adin; sbit adin0=adin^0; void delay(void) { uchar i;

for(i=0;i<20;i++); }

uchar getad(void) // A/D转换程序 { uchar i;

AD_CS=0; //令CS为低选中TLC549 delay(); //延时

for(i=0;i<8;i++) //循环读取8位A/D转换结果 { AD_CLK=1; //令CLK引脚为低 adin=adin<<1;//先读取高位,后读低位 adin0=AD_DAT;//读取数据线的一位数据 AD_CLK=0; //令CLK恢复为高

单片机的实训之后的总结(不要都搞成一样,老师发现就不好了)

}

return adin; }

void disp(void) { uchar i,n,bsel;

bsel=0xfe; //首先点亮最低位 for(n=0;n<4;n++)

{ P2=bsel; //位选口

P0=segtab[dbuf[n]];//将显示缓存的数据转换为字段码显示 if(n==3) P0=P0&0x7f; //点亮最高位的小数点 bsel=(bsel<<1)+1; //准备显示下一位 for(i=1;i<200;i++);//延时

P0=0xff; //熄灭所有字段 } }

void main() { ulong u; uchar i; while(1)

{ u=(ulong)getad ()*5000/255; //将转换结果换成电压值 for(i=0;i<3;i++) { dbuf[i]=u%10; u=u/10; } dbuf[3]=u; disp(); }

}

//显示电压值

//转换为4位BCD码送显示缓存

单片机的实训之后的总结(不要都搞成一样,老师发现就不好了)

4.试验模拟电路图:

5,调试方法:在KEIL下建立项目,输入源程序,编译后进入调试全速运行,数码管

将以“X.XXX’”显示当前测量到的电压值,调节电位器,数码管上的电压值随即变化。

实验过程中存在的问题及解决方法:

在本次试验中protues模拟试验数字显示很难实现电压值的正常显

示,显示的内容为全部8.8.8.8非正常显示,但经过程序的调使得收集的数据信息得以显示。

实验体会和收获:

通过本次试验,了解有关芯片的功能更多的信息的数据采集和转换。 通过检测调试程序,使得原来快速显示的内容能够调整期显示时间,

最终显示的完成。

单片机的实训之后的总结(不要都搞成一样,老师发现就不好了)

任务3 信号发生器的设计

试验要求:

1、 实验前,务必预习实验内容,深入了解相关知识,了解D/A转换器的基本概念,认识串行D/A转换器TLC5615,先分析相关程序画出相关电路图,然后模拟电路运转,最终得到实验结果; 2、 实验中,认真思考所做的每一步,弄懂其中的道理,填写好实

验过程; 3、

实验后,总结经验教训,写出实验体会和收获,为今后学习奠

定良好的基础。

实验目的:

1,了解D/A转换器的基本概念,认识串行D/Az转换器TLC5615及的内部

结构和其引脚功能。

2,熟悉其与单片机的典型链接,数据采集器的设计过程和时序 3,硬件电路和程序设计思想 4,在proteus完成相关模拟实验。 实验内容:

在Proteus环境下,用TLC5615设计一个锯齿波发生器,频率随意。 将TLC5615的SCLK,CS,DOUT分别与单片机p10,p11,p12,相连,基准电压接+5v。

、 为了显示锯齿波,可定义一个用于计数的字符变量N,其值由0开始加1后就将其输出,由TLC5615转换为相应的电压值,当N 为255时,再加1又变回0,这样就实现了一个周期的转换, 程序清单如下:

#include<reg51.h>

单片机的实训之后的总结(不要都搞成一样,老师发现就不好了)

#include<intrins.h> #define uchar unsigned char #define uint unsigned int sbit SCLK=P1^0; //时钟输入 sbit CS=P1^1;

//片选信号

sbit DIN=P1^2; //串行数据输入

void datout(uint dat) //向TLC5615输出16位数据 { uchar i; CS=1;

//初始化片选信号为高

SCLK=0; //初始化时钟为低 CS=0;

//选中TLC5615

for(i=0;i<16;i++)

{ dat=dat<<1; //将最高位移入进位位CY DIN=CY; //将数据送到DIN引脚 SCLK=1; //SCLK产生上升沿 SCLK=0; //SCLK恢复为低 }

CS=1; //片选信号恢复为高。 }

void main(void) { uchar i=0; while(1) { i=i++; datout(i<<2); } }

#include<reg51.h>

#include<intrins.h>

单片机的实训之后的总结(不要都搞成一样,老师发现就不好了)

#define uchar unsigned char #define uint unsigned int sbit SCLK=P1^0; sbit CS=P1^1; sbit DIN=P1^2;

uchar code wavetab[60]={ //正弦波波表 0x80,0x8D,0x9A,0xA7,0xB4,0xBF,0xCB,0xD5, 0xDF,0xE7,0xEE,0xF4,0xF9,0xFD,0xFF,0xFF, 0xFF,0xFD,0xF9,0xF4,0xEE,0xE7,0xDF,0xD5, 0xCB,0xC0,0xB4,0xA7,0x9A,0x8D,0x80,0x72, 0x65,0x58,0x4C,0x40,0x34,0x2A,0x21,0x18, 0x11,0x0B,0x06,0x02,0x00,0x00,0x00,0x02, 0x06,0x0A,0x10,0x18,0x20,0x2A,0x34,0x3F, 0x4B,0x58,0x65,0x72};

void datout(uint dat) //向TLC5615输出16位数据 { uchar i; CS=1;

//初始化片选信号为高

SCLK=0; //初始化时钟为低 CS=0;

//选中TLC5615

for(i=0;i<16;i++)

{ dat=dat<<1; //将最高位移入进位位CY DIN=CY; //将数据送到DIN引脚 SCLK=1; //SCLK产生上升沿 SCLK=0; //SCLK恢复为低 }

CS=1; //片选信号恢复为高。 }

void main(void)

单片机的实训之后的总结(不要都搞成一样,老师发现就不好了)

{ uint i=0; while(1)

for(i=0;i<60;i++) //从波表读取数字量输出 datout(wavetab[i]<<2); }

四.模拟电路图

五,设计思想;可以将一个周期分为n个点,求出与每个点输出的电压值D,并以表

格的形式储存在数组wavetab中,这样程序只要从波表中依次读取数据量d,输出到TLC5615,

实验过程中存在的问题及解决方法:

试验中遇到正玄波波表不知其如何产生,如何显示,经过查询

相关内容介绍得知其使用VB编程产生。

实验体会和收获:

许多时候发生的一些事情让我们明白一个道理,我们需要自

己尽可能的使自己的知识全面,学到的东西总一天他会用到,所以我 常常说自己是杂食主义者。

单片机的实训之后的总结(不要都搞成一样,老师发现就不好了)

任务4 频率与周期的检测

试验要求:

1、

实验前,务必预习实验内容,深入了解相关知识,先分析相关程序画出相关电路图,然后模拟电路运转,最终得到实验结果;

2、 实验中,认真思考所做的每一步,弄懂其中的道理,填写好实验过程; 3、

实验后,总结经验教训,写出实验体会和收获,为今后学习奠定良好的基础。

实验目的:

一、 利用51,液晶显示器和74LS74完成周期测量; 二、 首先进行频率的测量; 三、 完成周期的测量;

四、 完成在proteus完成相关模拟实验。 五、 数字电压表的设计

实验内容:

一、

进行频率测量,将频率脉冲直接送到单片机的计数输入端,由

定时器计数器T0负责计时,定时器计数器T1负责对被测信号计数,一旦T0定时时间到,立刻终止T1的计数,此时T1的计数值便是单位时间内的脉冲个数。 二、

在Proteus环境下,设计的频率计电路,将定时器T0设置在定

时方式2,定时时间为250us,满4000次中断正好一秒,定时器T1的工作方式1,其初值为0.在启动定时器T0开始计时后,随即送到T1引脚的被测脉冲进行计数,当T0定时满1S时,立即停止T1的计数,关闭定时器T0,T1的计数值即为被测信号的频率。 三、

频率测量的程序和电路图:

#include <reg52.h>

单片机的实训之后的总结(不要都搞成一样,老师发现就不好了)

#include <intrins.h> #define uchar unsigned char #define uint unsigned int extern void init_lcd(void);

extern void disp_str(uchar x,uchar y,uchar *p);

sbit FS=P3^5; //被测信号FS输入端 bit RDY=0;

//测量完成标志

uint msn; //定时中断计数

uint count(void) //测量fS的频率 { RDY=0;

TMOD=0X5a; //T0:定时方式2,T1:计数方式1; TH0=TL0=-250; //T0定时时间为250uS msn=4000; //4000次中断正好1S TH1=TL1=0X00;

//T1工作于计数方式,初值为0

ET0=1; //允许T0中断 EA=1; //开中断 while(FS==1); //等待被测信号变低 while(FS==0); //等待被测信号变高 TR0=1; //T0开始定时 TR1=1;

//T1开始计数

while(RDY==0); //等待1秒钟 TR1=0; TR0=0;

return(TH1*256+TL1); //返回计数值 }

//关闭T1、T0

单片机的实训之后的总结(不要都搞成一样,老师发现就不好了)

void timer0(void) interrupt 1 using 1 { msn--;

if(msn==0)

//如果1S已到

RDY=1; //设置测量完成标志位 }

void main() { uint f;

uchar str[9]="f= Hz";

uchar i; init_lcd();

while(1) { f=count();

_nop_(); for(i=6;i>2;i--)

{ str[i]=f%10+0x30; f=f/10; } str[2]=f+0x30; for(i=2;i<6;i++)

{ if(str[i]!='0') break; str[i]=' '; }

disp_str(0,3,str);

} }

//液晶屏初始化

//测量频率

//测量结果转换为5位ASC

//用空格码替换高位的0

//显示测量结果

单片机的实训之后的总结(不要都搞成一样,老师发现就不好了)

四、

周期的测量和电路图

#include <reg51.h>

#define uchar unsigned char #define uint unsigned int extern void init_lcd(void);

extern void disp_str(uchar x,uchar y,uchar *p); sbit CLR=P1^0; uint Ts;

//触发器清0控制位

//存放测量结果

//测量就绪标志

bit RDY=0;

void control(void) { TMOD=0x09; T0定时启停

IT0=1; //下降沿触发INT0 EX0=1; TH0=0;

//允行外部中断0中断 //定时器器初值为0

//定时器T0工作于方式1,由TR0及INTO 控制

单片机实训总结报告.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
    ×
    二维码
    × 游客快捷下载通道(下载后可以自由复制和排版)
    VIP包月下载
    特价:29 元/月 原价:99元
    低至 0.3 元/份 每月下载150
    全站内容免费自由复制
    VIP包月下载
    特价:29 元/月 原价:99元
    低至 0.3 元/份 每月下载150
    全站内容免费自由复制
    注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
    × 常见问题(客服时间:周一到周五 9:30-18:00)