单片机专周实习报告范本
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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的一位数据