单片机专周实习报告范本

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

重庆科技学院

学生实习(实训)总结报告

学院:电气与信息工程学院专业班级:***************

学生姓名:___ ***_______ 学号:_ *********** _

实习(实训)地点:______ _ I506__ ___ ____ __

报告题目:_____ 关于方波波形发生器的实习报告___ __ __ 报告日期:2014 年10 月29 日

指导教师评语: ____________ ___________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________

__________________________ _____

成绩(五级记分制):______ _______

指导教师(签字):_____________________

重庆科技学院

实习指导书

实习题目:方波波形发生器

系主任:指导教师:张小云

2014年9月 10 日摘要:

在电子工程、通信工程、自动控制、测量仪器、仪表和计算机等技术领域,经常需要用到各种各样的信号波形发生器。本次实习主要采用PCF8591输出频率和幅值可调的方波信号。

在硬件系统设计中,采用MCS51单片机为控制核心,D/A转换电路等实现设计要求。软件设计中,在Keil软件平台下采用C51编程,设计了调频功能和调幅功能,使得所编写的程序具有可读性强、易于修改、测试和升级方便的特点。

关键词:单片机数模转换频率幅值可调数字方波发生器

一、目的和功能

1.1 目的:

设计一种频率和幅值范围限定且可调的数字方波发生器,产生简易的方波波形。

1.2功能:

利用PCF8591输出方波波形,用MCS51单片机上的四个按键对方波的幅值和频率进行一定范围的调节,从而输出我们想要频率的方波。

1.3具体任务:

二、硬件设计

2.1 硬件设计思想

用PCF8591将按键的变化转化成相应的数值变化,用不同的变量代表不同的按键变化,当不同变量的值发生变化,就改变方波的频率或幅值。基本设备是MCS51单片机上STC89C51、PCF8591以及按键部分,测试时还需要用到示波器来观察输出点的波形情况。

2.2 硬件电路图

三、软件设计

3.1 软件设计思想

不停得扫描是否有按键输入,根据按键对应值得变化输出相应的波形。幅值由输出高低电平值得变化控制,频率由输出高电平和低电平的时间控制。这里用按键的次数控制某个变量的自增或自减改变幅值或频率,从而得到对应的方波。

3.2 程序框图

3.3调试

Keil软件中,在“文件\新建文件”中,新建C 语言源程序文件,编写

相应的程序。在“文件\新建项目”的菜单中,新建项目并将C 语言源程序文件包括在项目文件中。在“项目\编译”菜单中将C 源文件编译,检查语法错误及逻辑错误。在编译成功后,产生以“*.hex”后缀的目标文件。最后通过专业的下载工具将“*.hex”后缀的目标文件下载到单片机,用示波器观察输出点的波形,检查实验相关功能是否完成,若不能完成则查看对应程序部分是否有缺陷,一直到所有要求都完成。

心得体会:

通过这次实习,让我对单片机的相关知识更加的熟悉,以前不懂的I2C 也有了一定的了解。特别是在这两周的实习中,在与大家的交流学习到了很多,刚开始时大家都会有一些不懂的地方,但在不停的学习中,我们共同的在进步,虽然在最后的成果上不尽如人意,但是在这个过程中我们学到的团队合作、共同进步这些道理会一直伴随我们一生。

附录:

#include

#include

#define uchar unsigned char

sbit SCL=P3^6;

sbit SDA=P3^7;

sbit P20=P2^0;

sbit P21=P2^1;

uchar count=0;

uchar m,b,a=0;

uchar N[]={0x00,0x05,0x0a,0x0f};

void usdelay() //微秒延时

{

_nop_();

_nop_();

_nop_();

_nop_();

}

void delay()

{

for(b=0;b<=a*10;b++)

{

_nop_();

}

}

//启动IIc

void iic_start(void) //时钟保持高,数据线从高到低一次跳变,I2C通信开始{

SDA = 1;

usdelay();

SCL = 1;

usdelay(); // 延时5us

SDA = 0;

usdelay();

SCL = 0;

}

//停止IIc

void iic_stop(void)

{

SDA = 0; //时钟保持高,数据线从低到高一次跳变,I2C通信停止

usdelay();

SCL = 1;

usdelay();

SDA = 1;

usdelay();

SCL = 0;

}

//应答信号ack

void ack()

{

uchar i;

SCL=1;

usdelay();

while((SDA==1)&&(i<200))

i++;

SCL=0;

usdelay();

}

// 函数名称:iicInit_()

// 函数功能:初始化I2C总线子程序

//------------------------------------------------------------------

void iicInit()

{

SCL = 1;

usdelay();

SDA=1;

usdelay();

}

//写字节

void IICSendByte(uchar dat)

{

uchar i;

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

{

SCL=0;

usdelay();

SDA=(bit)(dat&0x80); //数据传送是由高到底bit把数据变为非0即1的一位数据

相关文档
最新文档