北京信息科技大学单片机原理与应用实验1实验报告

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

实验报告课程名称单片机原理与应用实验项目KeilC51开发环境的使用指导教师学院信息与通信工程_专业电子信息工程班级/学号__学生姓名___________实验日期__成绩______________________一、实验目的1、掌握用uVision2和仿真器进行单片机C51编程开发的方法,掌握DP-51PROC实验仪基本特性和应用方法;2、掌握dScope调试方法,如单步、断点、运行到光标处等;3、掌握dScope主要命令,如对各个存储空间内存显示、修改的Enter,Display命令等;4、掌握观察变量及修改变量内容的方法,掌握观察和修改特殊功能寄存器(SFR)的方法。二、实验内容1、在code区内定义两个数组,分别存放1至10的平方表和立方表,定义一个bit变量plus,一个char型变量x,用查表法计算:若plus=1,计算y=5x³+6x²;若plus=0,计算y=7x³-6x²;通过变量观察窗口观察计算结果。2、随后将y转换成4位BCD数,存在整型变量z中,y、z定义为大小为10的数组。观察变量的值及其在内存中的地址。3、编程控制8个LED,先逐个点亮,再逐个熄灭,再逐个点亮,如此循环,变化间隔为1秒左右,用软件循环实现。三、实验步骤及要求1、实验前编程预习,在uVison2软件环境下,选择模拟调试,调通程序。2、学习实验仪简介和实验指导书,按步骤实现一个点亮LED的演示程序,掌握实际仿真调试方法与结果。(示例工程文件可以从单片机/示例程序/上下载Led_Light目录)3、建立1个或3个工程文件,完成实验内容要求的工作,并在仿真器上调试、观察结果,与预期结果比较分析现象。4、运用dScope调试方法,如单步、断点、运行到光标处等,在观察窗口中可显示出程序中定义的各个变量名及其内容,观察各变量的变化情况和各数据区的分布变化情况,改变plus的值,再观察运行结果。5、使用dScope主要命令,如对各个存储空间内存进行显示和修改,观察和修改特殊功能寄存器,主要命令是(E)nter和(D)isplay等,注意d:地址,i:地址,c:地址,x:地址分别代表的存储空间;6、测试内部RAM50H开始的单元,观察LED和单元变化的情况,测试并调整执行的时间,以满足设计要求。四、实现方法及实验结果1、实验内容1及实验内容2①在code区内定义两个数组,分别存放1至10的平方表和立方表,定义一个bit变量plus,一个char型变量x,用查表法计算:②若plus=1,计算y=5x³+6x²;若plus=0,计算y=7x³-6x²;③通过变量观察窗口观察计算结果。④随后将y转换成4位BCD数,存在整型变量z中,y、z定义为大小为10的数组。观察变量的值及其在内存中的地址。程序源代码如下:#includereg52.h/*预处理伪指令*/#includestdio.h#defineuintunsignedint/*定义伪指令*/#defineucharunsignedcharunsignedintcodeS[11]={1,4,9,16,25,36,49,64,81,100};//平方查找表unsignedintcodeC[11]={1,8,27,64,125,216,343,512,729,1000};//立方查找表voidmain(void){uchardatax,i;//x用作计算的输入,i用作循环uintdatay[10],z[10],a,b,c,d;//y用作存储计算结果,z用作存放4位BCD数bitbdataplus;//bit类型的数据plus用来选择计算公式plus=0;//给plus赋值while(1)//死循环{if(plus)//若plus==1,计算y=5x^3+6x^2{for(x=1;x11;x++)y[x-1]=5*C[x-1]+6*S[x-1];}if(!plus)//若plus==0,计算y=7x^3-6x^2{for(x=1;x11;x++)y[x-1]=7*C[x-1]-6*S[x-1];}for(i=1;i11;i++)//将y[i]转换成4位BCD数,存在整型变量z[i]中{a=y[i-1]%10;//4位BCD数的最高位b=(y[i-1]/10)%10;c=(y[i-1]/100)%10;d=y[i-1]/1000;//4位BCD数的最低位z[i-1]=(d12)+(c8)+(b4)+a;//z[i]存放计算好的4位BCD数}}}运行程序并运用dScope调试方法,见图1.1图1.1调试查看Watch&CallStackWindow得到变量的值见图1.2及图1.3。图1.2plus=0时变量的值图1.3plus=1时变量的值通过查看变量的值,可以验证程序运行正确,实现要求。查看SymbolWindow可以观察变量在内存中的地址,结果见图1.4。图1.4变量在内存中的地址2、实验内容3编程控制8个LED,先逐个点亮,再逐个熄灭,再逐个点亮,如此循环,变化间隔为1秒左右,用软件循环实现。源程序代码如下:#includereg52.h//预处理伪指令#defineLEDP1//定义LED接至P1口voiddelay(int);//声明延迟函数voidmain(void)//主程序{unsignedchari;//声明无号数字元变数i(占1Bytes)LED=0xff;//初值=11111111,全灭while(1)//死循环{for(i=0;i8;i++)//左移8次{delay(100);//延迟约sLED=(LED1);//左移1位}//左移结束,全亮for(i=0;i8;i++)//左移8次{delay(100);//延迟约1sLED=(LED|0x01)1;//左移1位,并置最低位为1}//结束左移,全灭}}voiddelay(intx)//延迟函数开始{inti,j;//声明整数变数i,jfor(i=0;ix;i++)for(j=0;j800;j++);//计数800次,延迟5ms}//延迟函数结束设置仿真环境为硬件仿真,连接仿真器,编译、链接、调试并运行可以看到程序成功实现控制8个LED,先逐个点亮,再逐个熄灭,再逐个点亮,如此循环,变化间隔为1秒左右。实验中遇到的问题:在做前两个内容时,一开始不知道如何查看变量的值及变量在内存中的地址,请教老师得以解决。实验内容3首先遇到的问题是不知道对于LED灯是高电平点亮还是低电平点亮,经过简单的尝试便可以解决,得知当LED灯为低电平时点亮。一开始运行程序只能实现逐个点亮但逐个熄灭确有一些问题,经过检查发现语法并未发现错误,多次尝试未果。后来请教老师,老师查看程序将程序代码中的一句代码改动便可以成功实现要求,但是经理论分析可知该代码未发生逻辑错误,由于时间有限并未得出可靠结果,下次实验一定找出原因。五、心得体会经过第一次实验,作者熟悉了KeilC51开发环境,掌握了用Vision和仿真器进行单片机C51编程开发的方法和DP-51PROC试验仪的基本特性及其应用方法。通过编写简单的程序并进行调试,掌握了dScope的调试方法和主要命令。同时还学会了观察变量及修改变量内容的方法以及查看变量的内存地址,还有观察和修改特殊功能寄存器(SFR)的方法。实验过程中确实遇到了一些问题,作者都尽量自己解决,自己解决不了的便请教老师,在老师的细心帮助下作者收获很多。比如说实验内容3中的程序,明明自己检查了源程序代码很多次并且理论上没有逻辑错误,但是运行结果就是不对,但是老师将代码稍稍修改就可以成功运行,下次实验一定要找出原因并解决掉。做实验虽然会多多少少遇到一些问题,但是作者觉得通过做实验作者会收获很多,接下来的几个实验作者一定会进行充分的预习,提高实验效率,做好实验。

1 / 8
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功