单片机实验心得体会
单片机实验心得体会
时间过得真快,不经意间,一个学期就到了尾声,进入到如火如荼的期末考试阶段。
在学习单片机这门课程之前,就早早的听各种任课老师和学长学姐们说过这门课程的重要性和学好这门课程的关键~~多做单片机实验。
这个学期,我们除了在课堂上学习理论知识,还在实验室做了7次实验。将所学知识运用到实践中,在实践中发现问题,强化理论知识。
现在,单片机课程已经结束,即将开始考试了,需要来好好的反思和回顾总结下了。
第一次是借点亮LED灯来熟悉keil软件的使用和试验箱上器材。第一次实验体现了一个人对新事物的接受能力和敏感度。虽然之前做过许多种实验。但依旧发现自己存在一个很大的问题,对已懂的东西没耐心听下去,容易开小差;在听老师讲解软件使用时,思路容易停滞,然后就跟不上老师的步骤了,结果需要别人再次指导;对软件的功能没有太大的热情去研究探索,把一个个图标点开,进去看看。所以第一次试验相对失败。鉴于此,我自己在宿舍下载了软件,然后去熟悉它的各个功能,使自己熟练掌握。
在做实验中,第二个问题应该是准备不充分吧。一开始,由于没有课前准备的意识,每每都是到了实验室才开始编程,完成作业,导致每次时间都有些仓促。后来在老师的批评下,认识到这是个很大的问题:老师提前把任务告诉我们,就是希望我们私下把程序编好。于是我便在上机之前把程序编好,拷到U盘,这样上机时只需调试,解决出现的问题。这样就会节约出时间和同学讨论,换种思路,换种方法,把问题给吃透。发现、提出、分析、解决问题和实践能力是作为我们这个专业的基本素质。
三是我的依赖性很大,刚开始编程序时喜欢套用书上的语句,却对语句的理解不够。于是当程序出现问题时,不知道如何修改,眼前的程序都是一块一块的被拼凑整合起来的,没法知道哪里错了。但是编程是一件很严肃的事情,容不得半点错误。于是便只能狠下决心,坚持自己编写,即使套用时,也把每条语句弄懂。这也能激发了学习的兴趣。
还有一次实验是调出电脑里的程序,让它在试验箱上实现其功,让我们去体会别人编程的技巧和程序逻辑美感。看了之后,不得不说我目前的水平简直太小儿科了。还有连线也是个问题,对试验箱内部结构功能的不懂,以至于不知道如何连线让程序实现其功能。这让我意识到单片机是软件和硬件的结合,两者是一个整体。所以必须把硬件方面加强。
五是基础知识的薄弱,也是最基础的问题吧!在用C语言编程时,才发现自己C语言真的太差劲了,虽然这门课程早就学过,但是就目前所掌握的C语言知识,对于单片机编程远远不够。C语言也是我们以后学各种语言的基础,必须要花大量的时间温习强化。通过这个学期的单片机实验,我发现了自己很多问题,也从中学到了很多。它不是物理实验时,只需要记住老师说的步骤,顺次做完就可以了;并不是matlab实验,只需要你知道一些语句表达,然后在不违背语法的情况下,组合好就可以了;它不是EDA实验,把一节课混下去就行了,反正大家都不知道,都是混,都跟不上老师的节奏思路。他需要我们在掌握硬件的基础上,用单片机语言在keil软件上写出一定的程序,然后利用stcisp烧到试验箱上,实现其特定的功能。而在编程时需要逻辑力,创新力,知识组合力,知识搜索。单片机在电子技术应用领域中,单片机的应用愈来愈多地应用到各行各业。要开发单片机的应用,不但要掌握单片机硬件和软件方面的知识,而且还要深入了解各应用系统的专业知识,融会贯通和有机结合,才能设计出优良的应用系统。并且需要与时俱进,不断了解各公司最新芯片的结构和应用,在实际应用中找到最好的性能价格比。培养自己接受新知识的自学能力,掌握芯片发展动态。培养自己的创新精神,在原有的基础上进行改进,使之功能不断完善。当然,最重要到还是态度,无论做什么事情,足够认真,足够坚强,足够毅力,足够决心,足够勇气,就一定能办到。
扩展阅读:单片机实验总结
单片机实验总结(小老师)
班级:生物医学工程0803姓名:王俊学号:u201*12657日期:201*.12.20-201*.01.06
在实验之前便收到单片机需要小老师的通知,仔细想了一下相关的问题,也对照着之前的生物化学与分子生物学的小老师的情况,最终决定报名作为小老师。一方面自己对这方面的兴趣比较大,通过这种方式应该可以给自己一些压力,让自己能够学得更好;另一方面,在作为小老师的过程中可以帮助别人,也可以发现更多的问题,这样可以互相促进,共同进步。所以一开始便觉得作为一名小老师是非常有意义的。
在第一个实验之前便对小老师集中进行了一次授课,主要是对实验的内容作一个基本的了解。在这次课后我便开始提前做完实验。第一个实验主要内容是写几个汇编程序。在实验之前我花了一天时间将所有程序写出来,并给出了详细的注释。由于当时对汇编语言还不是非常熟悉,所以程序的冗余度相当高。当时所用的程序中最多的是MOV、MOVX,在涉及到循环时一般用到的都是DJNZ,而CJNE等指令极少用到,这必然使程序太过冗长,而且在各处跳转时要用比较巧妙的方法才能使循环的次数不出现错误。在这些程序中没有很好地使用程序的调用,也使程序变得复杂,不便于理解。
当时为了便于观察程序运行的结果,在程序开始时对相关量进行了赋值,而在程序结尾处又将相关量调出观察效果。
下面举几个例子说明(下面的序号对应《单片微型计算机与接口技术(第2版)》的253页程序设计选题的序号):
(1)将外部数据存储器0001H和0002H单元内容互换。ORG0000H;程序起始位置
MOVA,#0D3H;将一个数先送进A,以便后面观察效果MOVDPTR,#0001H;将外部存储器地址0001H送入DPTRMOVX@DPTR,A;将A中的数据送入0001H中MOVA,#34H;同上
MOVDPTR,#0002H;同上
MOVXMOVMOVXMOVMOVMOVMOVXMOVXXCHMOVX成
MOVXMOVXSJMPEND
A,@DPTR;观察外部存储器0001H中的内容A,@R1;观察外部存储器0002H中的内容$;动态暂停;汇编结束
@DPTR,A;同上DPTR,#0001H;得到外部存储器地址0001H存入DPTRA,@DPTR;将外部存储器0001H中的数据送入A中R2,A;将数据再存入R2中,以保留
P2,#00H;得到第二个外部存储器地址0002H的高位地址00HR1,#02H;得到第二个外部存储器地址0002H的低位地址02HA,@R1;将外部存储器0002H中的数据送入A中
@DPTR,A;将存在A中的外部存储器0002H中的内容送入外部存储器0001H中A,R2;将A与R2中的内容交换,使A得到原外部存储器0001H中的内容
@R1,A;将原外部存储器0001H中的内容送入外部存储器0002H中,交换完
这本来是个简单的程序,但由于将具体的数送进和送出而使程序较为冗长。在前面送数部分可以写得更为有条理,这样可以使程序更加容易理解。
(6)将外部数据存储器0~05H单元中的十六进制数转换成ASCII码放回原单元。ORG0000H;程序起始位置MOVP2,#00H;将程序中的高位地址送入P2中MOVR7,#06H;将子程序的循环次数6送入R7中MOVR0,#00H;将程序中的低位起始地址送入R0中;MOVXA,@Ri或MOVX@Ri,A中i=0或1;为R0指示的外部存储器赋值子程序
MOVA,#9DH;送入一个数到A中,以观察后面效果
MOVR0:MOVX@R0,A;将数据送入R0中存放的地址指示的外部存储器INCR0;R0中存放的地址自加1INCA;将A自加1,以使效果明显DJNZR7,MOVR0;循环执行子程序MOVR7,#06H;将子程序的循环次数6送入R7中MOVR0,#00H;将程序中的低位起始地址送入R0中
MOVR1,#10H;将最后存储数据的低位起始地址送入R1中;转换子程序
MOVE1:MOVXA,@R0;将外部存储器中的内容送入A中ANLA,#0FH;先取A的低位进行转换ADDA,#30H;将A中的内容转完ASCII码,即与30H相加,4位进行一次MOVB,A;将A中的内容暂时存入B中SUBBA,#3AH;判断A中的内容是否小于10JCNUM1;小于10,则跳转到数字子程序1MOVA,B;将B中的内容送回A中ADDA,#07H;将其转换成ASCII码的A-F中的一个MOVX@R1,A;将转换后的内容送回R1中存放的地址指示的外部存储器中
INCR1;R1中存放的地址自加1
MOVE2:MOVXA,@R0;将外部存储器中的内容送入A中ANLA,#0F0H;取A的高位进行转换中
INCR1INCR0DJNZMOVMOVSJMP
NUM1:MOVNUM2:
MOVXINCR1SJMPMOV
;R1中存放的地址自加1;R0中存放的地址自加1
R7,MOVE1;循环执行子程序
R7,#0CH;将子程序的循环次数12送入R7中
R1,#10H;将最后存储数据的低位起始地址送入R1中MOVA;跳到显示子程序
A,B;将B中的内容送回A中,不能直接把B送回@R1中@R1,A;小于10则直接送到外部存储器中;R1中存放的地址自加1MOVE2;跳到变换子程序2
A,B;将B中的内容送回A中,不能直接把B送回@R1中
ADDA,#30H;将A中的内容转完ASCII码,即与30H相加,4位进行一次MOVB,A;将A中的内容暂时存入B中SUBBA,#3AH;判断A中的内容是否小于10JCNUM2;小于10,则跳转到数字子程序2MOVA,B;将B中的内容送回A中
ADDA,#07H;将其转换成ASCII码的A-F中的一个
MOVX@R1,A;将转换后的内容送回R1中存放的地址指示的外部存储器MOVX@R1,A;小于10则直接送到外部存储器中INCR1;R1中存放的地址自加1INCR0;R0中存放的地址自加1DJNZR7,MOVE1;循环执行子程序
MOVR7,#0CH;将子程序的循环次数12送入R7中
MOVR1,#10H;将最后存储数据的低位起始地址送入R1中;观察效果子程序
MOVA:MOVXA,@R1;将R1中存放的地址指示的外部存储器中的数据送入A中INCR1;R1中存放的地址自加1DJNZR7,MOVA;循环执行子程序STOP:SJMPSTOP;停止子程序SJMP$;动态暂停
END;汇编结束这里将程序复杂化了,是将每个单元中的十六进制数转换成两个ASCII码后送回指定单元中。而这里由于用到的指令的类型很少,使程序很复杂,特别是为了不致出现没有转换到的错误而使这个子程序的顺序要安排得相当巧妙才可以。而且在适当的位置上还要加上“SJMPSTOP”这样的语句,使程序不致进入死循环。当然这题不是实验中要求。拿出这题只是来说明一下当时的情况。
单片机书上也有类似的程序,比较简洁,可以作为参考。
在这里我为了观察效果而送进和送出具体的内容,那么有没有什么办法可以直接观察呢?
实验中虽然要求使用Proteus,但实验一完全是汇编程序,所以我当时主要是在Keil中进行的。通过查阅资料,对于单片机中的CODE、DATA、IDATA、SFR、XDATA作了初步的了解,而在Keil中也可以通过以“C:”、“D:”、“I:”、“X:”开头再加上相应的地址的方式观察指定的单元中的内容,这样便可以更方便地观察程序运行的结果。
对于实验一的思考题,我的认识如下:
1、为什么程序结束用“STOP:SJMPSTOP”指令?有没有其他的停止方式?51单片机启动后,是否一直不断地在执行指令?
答:程序的结束还可以使用“SJMP$”,题中的结束指令和这个作用是类似的,是通过循环而使程序停留在此处,其实“SJMP$”是动态暂停,等待中断的到来。51单片机启动后,最后如果执行到此条指令,还是在不断地执行的,只不过看不出具体的效果。
2、比较“跟踪”、“单步”和“断点”调试方式的特点。答:“跟踪”和“单步”的调试方式有很多相似之处,在大多数时候,它们都是一步步执行程序,但在调用子程序的过程中,“跟踪”会进入子程序,然后依然一步步地执行程序,而“单步”会将子程序一次执行完,相当于没有进入子程序内部;“断点”主要是指在某句程序处设置断点,这样程序便可一次执行到此处,观察运行的结果,在Keil中“断点”有很多使用方法,都是很好的调试手段,由于涉及到的内容较多,此处不再赘述。
在提前完成这个实验的过程中,我们小老师也进行了交流,对于可能出现的问题也尽量去解决,这样才能更好地作为小老师帮助其他同学。
以上主要是以第一个实验为例说明在实验之前的情况。下面将结合着实验说说遇到的一些问题和解决办法。
在本次单片机实验中,我是作为生医0804班郑卿杭和朱舟的小老师,当然在实际操作中,各位小老师还经常互相帮助,互相探讨问题的。
在第一次实验中,我们主要让同学们用Keil进行编程。部分同学对于Keil的使用还不是非常熟悉,我们和他们讲解了一下基本的使用和应该注意的问题。
下面对部分人在编程后无法创建目标进行归纳:1、要养成良好的习惯。建立一个属于自己的单独的文件夹,一般以英文命名比较好,有些软件不兼容中文文件名,而且最好也不要出现纯数字命名的文件夹,在新建工程或ASM程序时命名也最好这样去做。另外命名中除扩展名前的“.”,其它地方最好不要再出现。
2、建立工程时的问题。我们使用的一般是Atmel公司的AT89C51,在新建工程时还是将STARTUP.A51添加进去比较好。虽然在后面可能因为它而出现3个警告,但有时没有它却可能导致目标无法创建。建立工程后记得将自己写好的ASM或C文件添加到工程中。
3、编程问题。很多时候无法创建目标都是因为在写具体的程序时出现了错误。最常见的错误是指令写错了。比如将SETB写成了STEB,这需要我们在编程时要十分细心,另外还要将指令的拼写记清楚。这种错误一般程序是不提示的。还有种类似的错误是可能将数字0和字母O混淆了。以上都是拼写的错误中。还有另一种错误是指令不匹配,比如说MOV和MOVX的混用,在作为地址时将地址值送入了除R0或R1之外的寄存器中,比如说R2。最后还有一种错误,这种错误会提示你某一句有语法错误,这时候我们也许会很奇怪:这么简单的句子,我都检查不下十遍了,哪里有错啊?这时你可以试着拖动横向的滚动条,看看很远的地方是不是还有一个句子,如果有,那就是它导致错误了。
4、如果你确定以上错误都排除了,但还是无法创建目标,那么可以从头来过,从新建一个英文文件夹开始。
在第一次编程中还遇到过其它问题,但由于是具体编程的问题,在过程中都有解决,而且编程主要还是要靠自己平时多写程序,所以在此处不再赘述。当时部分人没有提前进行很好地预习,在实验过程中无法写出其中某些程序,但在对照书上的例子后还是可以模仿着写出来,这也是一种学习的方法,但还是要注意预习和坚持去学习,不能写过之后就又全都放下了,要在模仿中学会编程,掌握方法。
后面三次实验有着很多共同之处,主要是要求同学们在理解的基础上,对照着给出的电路图来画出电路图,利用已给出的程序进行运行调试,观察实验的效果。因为这一点,后面三次的实验将放在一起进行总结。
因为在实验之前我们在做单片机作业时已经多次使用Proteus,所以大家对于Proteus的基本使用已经比较熟悉了。先看看实验中的思考题。
对于实验二的思考题,我的认识如下:1、在七段LED显示中,如果设置20H为显示缓冲区,要显示的字段码送入显示缓冲区,反复调用显示子程序即可,试编写该显示子程序。
答:SHOW:MOVP1,20HRET
这个程序与前面的例子并没有什么本质上的区别。有时候可能还要添加延时程序。2、能否显示“H”、“L”、“P”、“U”的字形,试写出它们的字段码。
答:字出它们的字段码实际就是对照七段LED显示的每段的位置,以及是共阴极型还是共阳极型,将相应位置0或置1,然后用十六进制数表示出来。则“H”、“L”、“P”、“U”的共阴十六进制代码分别为76H、38H、73H、3EH;共阳十六进制代码分别为:89H、0C7H、8CH、0C1H。
对于实验三的思考题,我的认识如下:
1、分析用中断和查询方式编写的键盘程序在运行时会出现什么区别?
答:中断方式编写的键盘程序会等待中断的到来,然后执行相应的中断子程序;而查询方式是一直在运行程序,不断地进行扫描,如果达到条件便执行相应的子程序。同时中断方式还可能要将相应的内容送入和送出栈中,以保护现场。查询方式相对来说要简单一些,但是中断方式更加合理实用。当然这些东西都是相对来说的,没有绝对的说法。
2、当单片机进入中断后,其SP、PC等特殊功能寄存器的内容会发生什么变化?答:由于要进入中断子程序,则要保护现场,因为最后要返回主程序。保护现场就是将程序中的一些内容送入栈中,这时SP就要作相应的改变,以指向新的地址,以使最后能够正确地返回。而根据指令的跳转,PC的内容也要作相应的改变,以使子程序能够得到正确地执行。
3、中断程序保护现场有何意义?
答:保护现场是指将主程序中需要保护的寄存器内容进行保护,这样在中断程序执行完毕之后就可以正确地恢复现场,返回主程序。这样一来就不会因为中断程序而影响其他程序的正常运行。
4、在程序中,读入按键端口状态后为什么要取反?
答:因为最开始时端口都是高电平,这样得出的数值并不是我们所想要的,而取反之后,正好与它们对应的数字相等,这样就可以更好地进行程序的编写。(最开始端口是高电平是使读入操作时不致出现误读。)
5、两种键盘输入电路中数码管的硬、软件驱动有何不同?
答:中断方式的电路中数码管和单片机之间只用了RX8,相当于加了电阻,起到限流的作用。查询方式中在RX8和单片机之间又加了74LS244,主要是增加电路的驱动能力。在程序中分别在送入数据到指定端口之前和之后进行了延时去抖动。
下面结合实验中大家遇到的一些问题进行总结。
由于实验中主要是画出电路图,所以也主要是针对这方面的一些问题:
1、首先最基本的是查找器件和连线。在Proteus的库中查找器件比较方便,只要输入相应的单词或其一部分就能快速定位。在连线时注意不要将两个元件的端脚直接相连,这样在很多时候实际上是没有连接上的。在连线时也要注意不要将不相干的线相交了或者将两条线完全重合了。
2、使用元器件一些注意事项。对于电阻、电容或者是它们的其他形式,如RX8等,要记得为它们设定值,否则系统可能将其设为默认值,大多数时候这样可能导致电路无法正常工作。要使用系统可以仿真的元件,如某些人在本来要用74LS系列的元件的地方使用了74ALS系列的元件,这样会导致无法进行仿真,也就看不出程序运行的结果。一些人在使用BUTTON时可能无法正常使用,一般情况下是将BUTTON锁定了,这时需要先将其解除锁定。很多时候感觉一切连接正常,但是无法得到理想的结果,这时候可以逐步排查,锁定某个元件,因为可能是因为你某个不经意的操作改变了元件的属性。
3、一些技巧。这里先以总线为例。使用总线时需要将其所连接的两端连线进行标号,并且需要一一对应,当然我们可以通过放置网络标号的方式进行,但这样效率太低了。我们可以在对总线相关部分操作后,点击:工具属性设置工具,在字符串中输入“NET=P1#”(这里以对P1口连接的线进行分配为例,其它类似),先对某一边的连线进行分配,然后再重新点击,再进行另一边的连线的分配工作。在连接线路时,如果连接的线和上一次的相同,这时直接左键双击元件的端脚即可。这样的技巧还有很多,就不再一一赘述,这需要我们在实验中不断发现、总结、运用,如果掌握了这些技巧可以大大提高我们连接电路的速度。
4、有时候程序说没有载入代码,这时候应该是还没有添加hex文件。有时CPU无法实时、正确的仿真,可能需要我们在程序中加一些内容来调节一下。有时程序运行较快,我们可能需要将延时子程序延时的时间改得更长一点。
以上便是作为单片机实验小老师时同学们遇到的一些问题和解决方法,以及我自己的一点感想。
对于这种小老师的教学方式,同学们的交流更多了,在这过程中互相促进,共同进步了。但同学们对于自己的要求应该不仅仅局限于完成实验中的内容,而是要在实验中发现更多的问题,并且进行深层次的了解,最后进行总结、交流。只有这样才能达到实验的目的,只有这样这种教学方式才能发挥它的最大作用。
友情提示:本文中关于《单片机实验心得体会》给出的范例仅供您参考拓展思维使用,单片机实验心得体会:该篇文章建议您自主创作。
来源:网络整理 免责声明:本文仅限学习分享,如产生版权问题,请联系我们及时删除。
《单片机实验心得体会》
由互联网用户整理提供,转载分享请保留原作者信息,谢谢!
http://m.bsmz.net/gongwen/626170.html
- 上一篇:工程测量实习总结