好好学习,天天向上,写范文网欢迎您!
当前位置:首页 > > 工作范文 > > 心得体会 > 正文

单片机实验心得3篇 做单片机实验的心得体会

2022-10-30 08:45:37心得体会

  下面是范文网小编整理的单片机实验心得3篇 做单片机实验的心得体会,供大家赏析。

单片机实验心得3篇 做单片机实验的心得体会

单片机实验心得1

  通过这一个学期的单片机学习,我收获了很多关于单片机的知识,并且这些知识和日常的生活息息相关。

  时光飞逝,一转眼,一个学期又进尾声了,本学期的单片机实验也在上周完成了。

  俗话说“好的开始是成功的一半”。说起单片机实验,我认为最重要的就是做好设计的预习,认真的研究老师给的题目。其次,我们对实验程序要一丝不苟的去想,因为只有都明白了,做起设计就会事半功倍,如果没弄明白,就迷迷糊糊的去选题目做设计,到头来一点收获也没有。最后,要重视程序的模块化,修改的方便,也要注重程序的调试,掌握其方法。

  当然,这其中也有很多问题,第一、不够细心比如由于粗心大意打错了程序,由于对课本理论的不熟悉导致编程出现错误。第二,是在学习态度上,这次课设是对我的学习态度的一次检验。每次做实验都必须对整个单片机有个了解,不能接错短路帽,否则实验下载不下来或者不出预期的效果。我们这些实验所遇到的多半问题多数都是由于我们不够严谨。第三,在做人上,我认识到,无论做什么事情,只要你足够坚强,有足够的毅力与决心,有足够的挑战困难的勇气,就没有什么办不到的。

  下面我概括了几点我的学习经验和心得体会:

  1、万事开头难、要勇敢迈出第一步。开始的时候,不要老是给自己找借口,说KEIL不会建项目啦、没有实验板啦之类的。遇到困难要一件件攻克,不会建项目,就先学它,这方面网上教程很多,随便找找看一下,做几次就懂了。然后可以参考别的人程序,抄过来也无所谓,写一个最简单的,让它运行起来,先培养一下自己的感觉,知道写程序是怎么一回事,无论写大程序还是小程序,要做的工序不会差多少,总得建个项目,再配置一下项目,然后建个程序,加入项目中,再写代码、编译、生成HEX,刷进单片机中、运行。必须熟悉这一套工序。个人认为,一块学习板还是必要的,写好程序在上面运行一下看结果,学习效果会好很多,仿真器就看个人需要了。单片机是注重理论和实践的,光看书不动手,是学不会的。

  2、知识点用到才学,不用的暂时丢一边。厚厚的一本书,看着人头都晕了,学了后面的,前面的估计也快忘光了,所以,最好结合实际程序,用到的时候才去看,不必说非要把书从第一页看起,看完它才来写程序。比如你写流水灯,完全就没必要看中断的知识,专心把流水灯学好就是了,这是把整本书化整为零,一小点一小点的啃。

  3、程序不要光看不写,一定要自己写一次。最开始的时候,啥都不懂,可以抄人家的程序过来,看看每一句是干什么用的,达到什么目的,运行后有什么后果,看明白了之后,就要自己写一次,你会发现,原来看明白别人的程序很容易,但到自己写的时候却一句也写不出来,这就是差距。。当你自己能写出来的时候,说明你就真的懂了。。

  4、必须学会掌握调试程序的方法。不少人写程序,把代码写好了,然后一运行,不是自己想要的结果,就晕了,然后跑到论坛上发个帖子,把程序一贴,问:为什么我的程序不能正常运行?然后就等别人来给自己分析。这是一种很不好的行为,应该自己学会发现问题和学会如何解决问题。这就需要学习调试程序的方法,比如KEIL里,可以下断点啦,查看寄存器内容等等,这些都是调试程序的手段,当你发现你写的程序运行结果和你想象中不一样的时候,你可以单步,也可以下断点,然后跟踪,查看各相关寄存器内容,看看程序运行过中是不是有什么偏差,找出影响结果的地方,改正过来。这一个过程非常重要,通过程序的排错,你可以学到的知识是书上得不到的。

  5、找到解决问题思路比找到代码更重要。我们用单片机来控制周边器件,达到我们想到的目的,这是一个题目,而如何写出一个程序,来控制器件按你想要的结果去运作,这个就是解题的思路。要写程序,就得先找到解决问题的思路,你学会找出这个解题思路,比你找到代码更为重要。不少人很喜欢找人家的代码,有的人甚至有了代码就直接复制到自己的程序中,可以说,这不是一种学习的态

  度,无助于你编程水平的提高。我几乎不怎么看人家的代码,多数时候是看别人的思路,有方框图最好,没有的话文字说明也可以,要从代码中看出别人处理问

  题的思路,是相当困难的,特别是大型的程序,看起来是非常的累人,所以现在我也明白了,以前读书时说的程序流程图很重要,现在算是知道了。当你知道一

  个问题怎么去解决了,那么剩下的只是你安排代码去完成,这就已经不是什么问

  题了。举个例子:数码管动态扫描,没写过的初学者可能搞不清是怎么回事,其

  实,就是分时让每一时间段时只控制一只数码管显示数字,几只数码管轮流显示,由于速度很快,人眼的看起来是全部数码管都亮的。明白是这么一回事,事情就

  好办了,剩下的事情,无非是你安排让一只只数码管轮流显示出相应的数值。显

  示数字,然后延时一下,再下一只显示数字,延时,知道是这样,我们实际程序

  上只要做到这样就可以:往段口送段码,然后打开位选显示一只,延时一下,再

  关闭位选,再送出段码,再打开另一只位选..仅此而已。有了解决问题的思路,我们就能问题拆分开来,然后逐一的解决,如果动态扫描的原理都没懂,不知道

  如何做,那么这个程序是怎么也写不出来的。

  6、开动脑筋,运用多种方法,不断优化自己的程序。想想用各种不同方法来实

  现同一功能。这是一个练习和提高的过程,一个问题,你解决了,那么你再想想,能不能换种写法,也可以实现同一功能,或者说,你写出来的代码,能不能再精

  简一点,让程序执行效率更高,这个过程,就是一个进步的过程。很多知识和经

  验的获得,并不是直接写在书让你看就可以得到的,需要自己去实践,开动脑筋,经验才能得到积累,编程水平才能有所提高。

  7、看别人的代码,学习人家的思路。这个在学习初期是很有用,通过看别人的代码,特别是有多年编程经验的人写出的具有一定水平的代码,可以使自己编程

  水平得到迅速的提高,同时,也可以结合别人的编程手法,与自己的想法融合在一起,写出更高水平的代码,从中得到进步。但要注意,切忌将学习变成抄袭,更不是抄袭完了就认为自己学会了,这样做只会使你退步。

  8、尝试编写一下综合应用的程序。从流水灯学起,到动态扫描,再到中断,那

  么,你可以试试写一下时钟这种综合性应用的程序,不要小看时钟,要写好它不

  是一件容易的事情,它包括了单片机大部分的知识,比如有按键(IO读取)、动态扫描(IO输出)、中断等,如何协调好各功能模块正常工作,才是编程者

  需要学习的地方,当你单独写一个功能的时候,比如按键读取,你可能感觉很容

  易,因为你的程序啥也不做,只是读按键。但把它和其它功能混合在一起,如何

  在整个程序运行中使每一部分都正常工作,这就不是写一个按键读取这么容易的事情,功能模块之间有可能会互相影响,比如你需要让数码管既能显示,又要去

  处理按键读取,怎么使这两部分都正常工作,这就是一个协调过程。当你有了这

  个处理协调能力,你就算是入门了。

  9、着重于培养解决问题的能力,而不是具体看自己编写了多少代码或者做过什

  么。“学单片机重点在于学习解决问题的思路,而不是局限于具体的芯片类型和

  语言”这一直是我的座右铭,是我学单片机多年来感悟出来的。经常看到有人说

“你会驱动XX芯片,真牛啊”“你搞过XX项目,真厉害”之类的话,其实这是

  非常片面的,搞过XX芯片,搞过XX项目,只能说明你做过这一项目,它只是你的业绩,并不是代表能力就一定高。真正的能力应该是:“遇到没有解决过的问

  题或器件,能利用自己已学的知识,迅速找到解决问题的方法。”这个才是能力。

  写程序的过程就是一个创造的过程,几乎没有完全一样的项目,每次你遇上的几

  乎都不相同,所以你拥有的必须是你面对新项目时的创造能力,而不是标榜着你

  以往做过多少项目。当然,业绩也能从另一侧面反映你的经验和水平。

  通过这几天的单片机的实训,我在理论的基础上更深刻的掌握了单片机的深层内容及实际生活中的应用,实训锻炼了自己动手能力和思维能力,还有在软件方面的编程能力,让我受益匪浅,同时也暴露出一些平时学习上的问题,让我深刻反思。这些问题的发现将为我以后的学习和工作找明道路,查漏补缺为进一步学习作好准备。通过实训,让我懂得了如何编写一些简单的程序,学会了如何制作单片机应用程序,并且可以在今后的日常生活中灵活运用。

  在这次难得的课程设计过程中我锻炼了自己的思考能力和动手能力。通过七个实验的操

  作,加强了我思考问题的完整性和实际生活联系的可行性。在方案设计选择和芯片的选择上,培养了我们综合应用单片机的能力,对单片机的各个管脚的功能也有了进一步的认识。还锻

  炼我们个人的查阅技术资料的能力,动手能力,发现问题,解决问题的能力。并且我们熟练

  掌握了有关器件的性能及测试方法。

  再次感谢老师的辅导以及同学的帮助,是他们让我有了一个更好的认识,无论是学习还是生

  活,生活是实在的,要踏实走路。单片机实验学习时间虽然很短,但我学习了很多的东西,使我眼界打开,感受颇深。

单片机实验心得2

  实验一清0、移数

  将片内20H~2FH及片外0010H~001FH单元清0;

  然后将片内30H~3FH的数据移到片外0000H~000FH中;判断:

  若(30H)≤10,则求其平方存到31H中,并将位00H置1(其它位清0)若(30H)=10,则将AA存到31H中,并位01H置1(其它位清0)若(30H)≥10,则减10存到31H中,并位02H置1(其它位清0)

  实验二加法、排序

  有两个长度为10的无符号数分别放在片内20H和30H为首的存储单元中(低位),求其对应项之和(带进位位),结果放在40H为首的单元中(若最高位有进位则存在后续单元中),然后按升序排列放在50H为首的单元中

  实验三查表、散转

  设有一表格,表中数为:00H、11H、22H、33H、44H、55H、66H、77H、88H、99H、AAH、BBH、CCH、DDH、EEH、FFH。根据片外0001H单元的低4位的数,取出表中相应的值存到片内30H中;根据片外0001H单元的高4位的数,将片内RAM区中可位寻址的相应的位置1(从位00H~位0FH,只可有一个位地址为1)

  实验四外中断

~接8个发光二极管,管脚INT0、INT1接两个按键,分别定义为“L”和“R”。

  要求:上电全灭,按 “L”(或R)键,最右(左)侧灯亮,每按一次“L” ”(或R)键,则亮的灯向左(右)移一位,当移到最左(右)端时,灯全灭

  实验五定时器

、分别接两个发光二极管,INT0脚接

  一按键做开关,按一次开关,则启动,两个发

  光管一亮一灭,亮灭时间均为1秒;再按一次

  开关,则关闭,即两个发光管都灭。

  实验六定时器、计数器

  口输出周期为2S的方波,T1口为脉冲输入端,记录输入的脉冲个数,脉冲个数由P1口所接的8个数码管显示(二进制),设一按键作为开关控制系统运行,关闭时数码管全灭,无输出。

单片机实验心得3

  实验

  一、MCS51单片机基本开发环境

  1. 实验目的:

  1)熟悉软件的集成开发环境 2)掌握单片机软件设计流程

  3)掌握单片机存贮器结构及各窗口之间的联系 2. 实验内容:

  1)用三种方法实现将累加器A内容改为20H

  方法1--MOV A,#20H 方法2—MOV R0,#20H MOV A,R0 方法3—MOV R0,#20H XCH A,R0 心得:越往下做实验时就越感觉这题根本不能说是题目,但不得不说在没接触过编程软件,刚开始学的汇编,第一次做的实验就光这道题都觉得不知道做什么.所以凡是总有开始,不了解情况的多简单的都会觉得难.2)将58H位单元置为1,观察内部RAM中2BH内容的变化 代码:

  SETB JMP $ END 心得:这是关于内部存储中对单元和字节了解,不理解很容易做错.比如开始写的指令为

  MOV R0,#58H;MOV @R0,#1

  这是错误的指令。这就需要认真去了解单片机中的字节地址与位地址的关系。80C51中有位寻址区和字节寻址区。题目中58H为位地址,2BH为字节地址,且58H为2B字节的最低位。由于58H属于位寻址区,可用位操作指令 SETB 进行置位,SETB 执行后,2BH中内容变为01

  3)如果当前状态为有进位、工作寄存器使用区2,请用3种方法设置这种状态

  代码:

  ANL PSW,#01H MOV A,PSW

  CJNE A,#01,LAB2 LAB1:JMP LAB1

  LAB2: SETB MOV P0,#01H MOV R0,#18H CLR MOV C, MOV PSW,R0 MOV ,C CPL C MOV ,C END

  心得:以上LAB2写了三段代码,可分别完成题目要求。不过实验时只是对代码进行了错误调试,没有对结果进行检验。其中值得注意的是对于布尔(位)操作指令的用法,比如传送指令必须经累加器C,如第二段中MOV P0,#01H;MOV C,,以及对于位寻址的方式(如需用到“.”隔开)的应用。4)编一个小程序将内部RAM中的20H单元的内容送到21H单元并调试

  代码:

  MOV R0,#20H MOV @R0,#10H MOV R1,#21H MOV @R1,20H JMP $ END

  5)用程序将堆栈指针指向60H,然后在堆栈中依次压入01,02,03,04,05五个数,观察哪些单元内容发生了变化,各变为多少?从哪些窗口可以发现这些变化?顺序将堆栈中的五个数放入30H~34H五个单元中,编程实现之。

  代码:

  MOV R1,#60H MOV SP,R1 MOV DPL,#1H LAB1:PUSH DPL INC DPL MOV A,DPL CJNE A,#6,LAB1 POP 34H POP 33H POP 32H POP 31H POP 30H JMP $ END

  6)将外部数据存贮器1000H~100FH 16个单元中存放00H~0FH 代码:

  MOV DPTR,#1000H MOV R1,#10H LOOP:MOVX @DPTR,#1234H MOVX A,@DPTR MOV @R1,A INC DPTR INC R1 CJNE R1,#40H,LOOP JMP $ END

  心得:此处需要访问片外存储空间,需要借助寄存器DPTR,需注意其为16位的寄存器,在使用时若与八位寄存器进行数据交换时需分为高八位DPH与低八位DPL来用。7)若要求程序从0010H单元开始运行,可用两种方法实现?

  方法一 ORG 0010H 方法二 AJMP 0010H

  3. 选做实验内容:数据传送 目的:

  1)掌握8051单片机内部数据存贮器、外部数据存贮器的数据传送特点和应用 2)掌握MOV,MOVX和MOVC类指令的用法及区别 内容:

  1)将片内RAM数据区20H为首地址的十六个字节传送到30H为首地址的数据区,即:20H~2FH送30H~3FH

  代码: ORG 0000H JMP MAIN ORG 0030H MAIN:MOV R0,#20H MOV R1,#30H LOOP:MOV @R0,#1234H MOVA,@R0 MOV @R1,A INC R0 INC R1 CJNE R1,#30H,LOOP JMP $ END

  2)将外部数据存储器2000H~200FH单元的十六个数传送至内部数据存储器的30H~3FH 代码: ORG 0000H JMP MAIN ORG 0030H MAIN: MOV DPTR,#2000H MOV R1,#30H LOOP:MOVX @DPTR,#12H MOVX A,@DPTR MOV @R1,A INC DPTR INC R1 CJNE R1,#40H,LOOP JMP $ END

  总体心得体会:

  第一次做实验主要是熟悉了解了下单片机编程软件的使用,开始接触时在对其软件不是太了解的情况下实验编程做的确实很乱,不清楚该怎样进行,比如不知如何进行对指令的调试,也不清楚该如何观察结果,没有一个整体的概念,所以在了解其开发环境上花了不少时间。经过一段时间的摸索后也终于了解了其具体的使用,也能够顺利的对指令的编程运用。运行指令时遇到的一些问题需要注意的也在上面各题中做了说明。还有需要注意的是:进入软件仿真时需要对存储空间进行查看的方法是在Address窗口中输入:d:00h 显示内部数据存储器从00h开始的单元; x:1000h 显示外部数据存储器从1000h开始的单元; c:0000H 显示程序存储器内容。还有由于伪指令 END 定义的原因,在程序末需加一条死循环调转指令(如 JMP $)使程序不会进入其他未知空间执行其他指令。实验

  二、加、减法实验

  1. 实验目的

  1)正确使用单片机的加减运算指令

  2)掌握不同指令对于程序状态字的影响及程序状态字的意义、用处 3)掌握ADD,ADDC,SUBB和DA A等指令的用法 4)学习模块化程序设计方法 2. 实验内容

  1)编写3字节二进制加法子程序,并用主程序调用不同的加数和被加数来检测该子程序的正确性。需考虑有进位和无进位情况。程序入口为: 加数:22H,21H,20H三字节,22H为最高位

  被加数:32H,31H,30H三字节,32H为最高位

  程序出口为: 23H,22H,21H,20H四字节,23H为最高位 例如:地址:23 22 21 20 32 31 30 执行前数据: 01 23 45 FF 01 01 执行后数据:01 00 24 46

  代码:

  ORG 0000H AJMP MAIN ORG 30H MAIN: MOV 22H,#01H MOV 21H,#23H MOV 20H,#45H MOV 32H,#0FFH MOV 1H,#01H MOV 30H,#01H ACALL ADDI HERE:JMP HERE ORG 100H ADDI: PUSH PSW MOV R0, #20H;加数1地址、和的地址 MOV R1, #30H;加数2地址 CLR C MOV R2, #3;循环3次 LOOP: MOV A, @R0;取 ADDC A, @R1;加 MOV @R0, A;存 INC R0 INC R1 DJNZ R2, LOOP CLR A ADDC A, #0;得到进位 MOV 23H, A;保存 POP PSW RET END

  2)编写三字节二进制减法子程序 入口:被减数: 52H,51H,50H, 50H为最低位

  减数: 42H,41H,40H, 40H为最低位

  出口:差:外部数据存贮器2003H~2000H(2000H为最低位)用主程序调用多组数据来调试,需考虑无借位和有借位两种情况。例如:

  执行前:地址: 52 51 50 42 41 40

  数据: 90 80 70 10 10 10

  执行后:地址: 2003 2002 2001 2000

  数据: 00 80 70 60 代码:

  ORG 0000H AJMP MAIN ORG 30H MAIN: MOV 52H,#90H MOV 51H,#80H MOV 50H,#70H MOV 42H,#10H MOV 41H,#10H MOV 40H,#10H ACALL SUB1 HERE:JMP HERE SUB1: PUSH PSW MOV R0, #50H;被减数地址 MOV R1, #40H;减数地址 MOV DPTR, #2000H;差的地址 CLR C MOV R2, #3;循环3次 LOOP: MOV A, @R0;取 SUBB A, @R1;减 MOVX @DPTR, A;存 INC R0 INC R1 INC DPTR DJNZ R2, LOOP CLR A SUBB A, #0;得到借位 MOVX @DPTR, A;存 POP PSW RET END

  3)编写10位十进制加法子程序(十进制数采用压缩BCD码存放)入口: 加数:24H—20H,低地址放低字节

  被加数:29H—25H,低地址放低字节

  出口 和:4005H—4000H,低地址放低字节

  要求调用多组数据调试,注意观察PSW的变化,理解DA A指令的含义。例如:

  执行前地址:24 23 22 21 20 29 28 27 26 25

  数据:12 34 56 78 90 88 99 33 12 74

  执行后地址:4005 4004 4003 4002 4001 4000

  数据: 01 01 33 89 91 64

  代码:

  ORG 0000H AJMP MAIN ORG 30H MAIN: MOV 24H,#12H MOV 23H,#34H MOV 22H,#56H MOV 21H,#78H MOV 20H,#90H MOV 29H,#88H MOV 28H,#99H MOV 27H,#33H MOV 26H,#12H MOV 5H,#74H ACALL ADD2 HERE:JMP HERE ADD2: PUSH PSW MOV R0, #20H;加数1地址 MOV R1, #25H;加数2地址 MOV DPTR,#4000H CLR C MOV R2, #5;循环5次 LOOP: MOV A, @R0;取 ADDC A, @R1;加

  DA A;调整为BCD码 MOVX @DPTR, A;存 INC R0 INC R1 INC DPTR DJNZ R2, LOOP POP PSW RET END


相关热搜
相关文章