单片机课程总结报告
单片机课程总结报告201*/6/15山东大学物理学院201*基地班高原201*1001020高众201*1001022韩恩道201*10010
目录
1.整个过程中出现的问题及解决的方案.........................................................................3
1.1.
软件调试中出现的问题...................................................................................31.1.1.1.1.2.1.1.3.1.1.4.1.1.5.1.1.6.1.1.7.
PC2~PC5接口输出不正常......................................................................3如何禁用JTAG端口..............................................................................3JTAG口与芯片连接不上........................................................................3程序不能正常编译................................................................................3icc程序修改与avrstudio不同步............................................................3显示频闪..............................................................................................4子函数的单独调试................................................................................4
1.1.8.找不到相关文件...................................................................................41.2.硬件调试中出现的问题...................................................................................4
1.2.1.1.2.2.
电烙铁的使用.......................................................................................4焊点焊锡量..........................................................................................5
1.2.3.焊接过程中7805稳压芯片...................................................................5
2.团队管理的心得体会.................................................................................................53.课程设计的心得体会..........................................................................................5
3.1.3.2.
细节决定成败:..............................................................................................5动手实践能力有着非常重要的意义:..............................................................6
3.3.团队合作和分工的重要意义:.........................................................................6
3.4.交流请教的必要性:.......................................................................................63.5.计划的重要性:..............................................................................................64.项目成员贡献排序.....................................................................................................65.课程改革的建议........................................................................................................6
21.整个过程中出现的问题及解决的方案
1.1.软件调试中出现的问题
1.1.1.PC2~PC5接口输出不正常
在调试courseproject显示模块的过程中,我们发现PORTC驱动的LED无法正常显示。起初以为是程序编写的问题,但是与PORTC使用相同程序的PORTA却可以正常显示。而后我们检查了DDRC设置,也没有问题。最后想到用软件进行仿真。可是仿真结果更增加了我们的疑惑,因为PORTC正是输出的我们的预想值。后来得出结论,我们的单片机坏了。换用别人的单片机仍然是相同的结果。问题一度陷入僵局。后来向同学才知道PC2~PC5端口是被JTAG利用的,因而不能用作I/O端口使用。老师在实验课上讲过这个问题。但由于清明放假冲掉了我们的那一节课,导致我们组没人知道这个问题,大量时间被浪费。1.1.2.如何禁用JTAG端口
在courseproject的电路已经焊好,程序也正剩下硬件仿真调试的情况下我们才得知PC2~PC5端口不能正常时使用。这就迫使我们要么修改写程序和电路,要么想办法禁用JTAG端口。但由于Mega16的所有端口已被利用而且大部分端口都是复用的,修改意就等于重做。于是我们只能选择禁用的方式。经过查课本我们找到了通过修改熔丝位禁用JTAG在线仿真功能,然后通过程序对JTD置为来禁用JTAG的方案。通过上网查询资料,得知在toolprogrammeavr中可以修改熔丝位。最后,冒着芯片被锁的危险,和一番惊心动魄的操作,熔丝位修改成功,courseproject的显示模块得以正常工作。
1.1.3.JTAG口与芯片连接不上
这个问题在实验过程中遇到了多次,可以总结一下连接不上时的检查步骤。a)检查JTAG接线是否与计算机串口连接好了。
b)检查JTAG接口是否插正了,是否插在了ISP端口上。c)
检查芯片电源是否连接正常。如果是用实验箱还可以将查一下开关是否按到了底。如果仿真器上的指示灯亮了,说明硬件连接上没有问题。剩下的可能性有三个:
a)端口类型选择错误。
b)avrstudio的稳定性不好造成出错。解决方案是关掉avrstudio重新进入,多试几次可能
正常。c)芯片被锁,需要用ISP下载线或并行编程器改回熔丝位。1.1.4.程序不能正常编译
程序本来在宿舍的电脑编译正常,但在实验室编译时出现一连串想同类型的错误:某某地址上已赋值。检查程序若干遍还是未能发现有什么错误。将程序加入新建工程重新编译还是未能通过。一番周折后去问老师,才知道是projectoption选项中单片机类型错误造成的。之后每次编译,总要先检查option中是否选择了正确的芯片类型。1.1.5.icc程序修改与avrstudio不同步
courseproject工作过程中,有一个表示状态的灯不能正常显示。经过仔细读程序和单步调试后发现出错语句的可能位置。通过icc修改程序和avrstudio的同步更新后,依然不能正常显示。多方判断程序不可能在其它语句中出错,再次怀疑是硬件问题。通过对该端口强制置一,发现仍不能正常显示。通过对该端口的软件仿真发现它竟然是我第一次修改程序之前的值。由此发现,avrstudio的同步更新只是针对计算机上显示的程序,而非芯片中的程序。因而每次错修改时必然要重新编译,重新烧录。
31.1.6.显示频闪
courseproject(五子棋)中的棋盘显示模块一直不断闪烁。为了解决这个问题,我们总共做过以下尝试:
a)修改熔丝位,提高系统的时钟频率。编写程序时,一直以为系统时钟频率是4MHz。出
现频闪后经多番讨论和提问才知道适中的默认设置是1MHz。所以扫屏时间一定是不合
适的。最简单的方式是把时钟频率改为4MHz。修改效果是棋子闪动频率加快,但距稳定还有一定差距。
b)修改扫描屏幕的时间间隔。老师和学长对于频闪的说法不一。老师的说法是一秒钟只要
能扫描25次就会得到稳定的图像。但学长的说法是,不但一秒钟要有25帧图像,而且
图像每次都要稳定保持6ms后才能最终中得到稳定图像。鉴于说法上的矛盾,我们决定采用实验的方式,即采用行扫描的方式,每行扫描时间由1ms,2ms,3ms…依次递增,直到找到效果最好的点。实验时,我们发现,屏幕闪动频率先增后减,一直没有出现过稳定图像。最终选定逐行扫描,每行停留2.5ms的方式。这种情况下,显示效果相对较好。c)
修改工作模式。周三上课时老师讲到CTC工作模式与普通工作模式的差别,才发现我们想要利用的是CTC的工作方式,但选择的确是普通工作模式,我们的板子到底是怎样工
作的呢?带着这一疑问,我们修改了timer0的工作模式,然后又用上述实验测定的方法选定了每1ms扫描一行的方式。最终得到了稳定的棋盘显示效果。1.1.7.子函数的单独调试
avrstudio4提供的仿真功能只能显示每个端口的输出值,但是要对应到我们无子棋的棋盘位置就需要我们自行计算。而且由于应用的是黑白棋规则,每次落子后都要对棋盘进行重新计算。假如直接在硬件上调试,硬件问题与软件问题的叠加必然会增加调试难度。于是我们将落子规则、得分计算、胜负判定等可以独立于硬件的子函数单独导出,然后编写相应的输入输出函数,使其能够在c++中运行。最终,我们在硬件尚未完成的情况下,利用c++完成了可与硬件独立的子函数的调试,为参加校内科技创新大赛赢得了宝贵的时间。1.1.8.找不到相关文件
a)在程序来回拷贝和编译的过程中,我们遇到过多次找不到相关文件的提示,下面将提示的类型和解决方案进行汇总。b)文件名改动导致源文件找不到。对于一个已经建好的工程,随便改变其源文件的名称会
导致在编译过程中找不到源文件。即便把源文件名称改回去依然会出现这样的提示。比c)
较快的解决方式是把该源文件由工程中移走,然后重新加入该工程。头文件找不到。不知道为什么,一个已经能够通过编译的程序在拷贝到另一台电脑上以后再次编译,系统有时会提示找不到头文件。即便把相应头文件拷贝到该文件夹下并加入工程也不能消除该项错误。最简单的方法就是重建一个工程,加入源文件就可以通过编译了。
d)烧录时找不到相应cof文件。系统提示文件已移动,但文件就在相应文件夹里。解决方
案是重新编译一次程序,然后进行烧录。
1.2.硬件调试中出现的问题
1.2.1.电烙铁的使用
先向有经验的同学请教电烙铁的用法和注意事项,然后用自己买来的二极管、电阻和面包板进行了练习,做好了充足的技术上的准备。并且在焊接电路板的过程中不断总结经验,发现了许多技巧和问题。比如烙铁头并不热,熔化焊锡应用电烙铁尖锥中部。
41.2.2.焊点焊锡量
焊锡过多过多易造成短路,过少则虚焊;焊点的形状不规则,表面不光滑,有毛刺经过练习基本对焊锡量心中有数。经实践发现,先将焊锡一点点熔化到焊点上(形状可不在意),调整到一个合适的量,再用烙铁将其在电路板上再次熔化,利用熔化焊锡的表面张力和对金属的吸引力形成一个火山一样的尖锥形。这样既可把握好焊锡量,又能使焊点比较光滑和完整,还能很好地避免虚焊。。如焊锡过多,则用烙铁向元件较长的引脚上拨,最后随多出来的金属引脚剪掉就行了。如果发生短路,用烙铁将中间部分熔化分开即可。
1.2.3.焊接过程中7805稳压芯片
这种芯片三引脚的不规则形状给我们的焊接带来了很大困难,始终无法将其表面弄得比较规则,两引脚间焊锡还经常练在一起
对于这种问题只能反复焊接,注意了不能一次加热时间过长。7805芯片的引脚最终焊得也不好,但是功能没问题。虽然最终电路板并不是焊得非常美观,但是性能还是符合要求的。除了蜂鸣器由于电路板上金属环的脱落而使那一点虚焊而无法使用,其他的部分均功能良好。我们还在扩展区焊了两排插针在VCC和GND线上以扩展功能。
2.团队管理的心得体会
在小组成员的选择上我们考虑到,每位组员必须具备履行工作职能的胜任能力,并且善于与其他小组成员合作。只有这样,每一位成员才会清楚自己的角色,清楚自己在每一个职能流程中的工作位置以及上一道工序和下一道工序,每一个进入团队的人,才能真正成为一个团队成员。实际中,我们小组队成员能根据工作的需要自发的作出反应,采取适当的行动来全力以赴地完成我们课程设计的目标。在选题阶段,我们集思广益,同学们都提出了很多有趣的构想,在确定了我们的大体方向后,根据我们的实际能力和学习兴趣,我们确定了我们课程设计的题目,即基于AVR单片机的“无子棋”的设计和制作.每个人根据自己的兴趣和能力选择自己希望承担的项目内容,然后在小组的讨论过程中平衡各个组员的任务量.每次周一实验课结束和例行的讨论交流,我们都记录下参与同学所提出的问题,能够当场讲明的应从速,不能及时解决的待讨论结束之后分头查找和思考答案并在下次讨论中着重提出。对于提出问题或者意见的同学,大家都抱有一种鼓励和赞许的态度,因为能够提出意见和问题,暂不论其正确或科学与否,首先表明了这个同学积极思考而且关心在乎我们团队的的项目,这表明了小组成员的一种自觉和归属感.在项目进行过程中,倡导成员为集体考虑问题,锻炼成员的全局观,从课程设计整体的角度思考问题,解决问题。由于同学们的课程压力都很大和时间都很紧张,这要求各位成员尽量以整个小组计划的进度为重,以小组项目的质量为重,从项目整体出发科学安排时间,保质保量地完成各自承担的任务.在课程设计的初期,在老师的鼓励下,我们就设定了参加五月上旬的山东大学科技创新大赛的目标,出于这个目标我们不等不靠,自学了很多知识,充分利用课余时间购买元器件,设计电路,焊接电路,编制计算机程序.在这个紧张的过程中,小组成员都在自学能力、团队合作能力都得到了极大地激发和培养.值得一提的是,我们在这次大赛中获得了一等奖的好成绩,同学们对单片机这门很有价值且妙趣横生的课程更有热情和兴趣了。
3.课程设计的心得体会
通过一个学期单片机课程的学习和实践,以及我们组学期项目的制作,我们确实产生了许多感想,有许多的心得体会。下面简要列出一些:
3.1.细节决定成败:
使用软件和编写程序时一定要注意每一个细节,一个分号的遗漏也会造成错误。制作前
5一定要做好规划设计,反复论证和计算,防止考虑不到的地方使得做好的东西需要翻工。如果制作或使用中发现问题,既极大地打击积极性和自信心,还会极大地消耗时间,拖延项目的进度。制作硬件也一定要耐心细致,极小的失误都会造成短路等问题而直接造成大错。在设计中,如果没有考虑到哪怕任何一个细节,都有可能让没考虑到的情况造成BUG,使各个子程序的时序和运行之间可能会互相干涉和冲突。
3.2.动手实践能力有着非常重要的意义:
多年接受应试教育使我们忽视了动手技能的培养和这方面素质的养成。这次对单片机实验板的焊接对各个成员都非常有吸引力,而且确实使我们培养了动手能力,并且意识到了动手实践的重要意义。单片机课是到目前为止我们所接触到的与实际最为接近的一门课程。在这之前,学习到的理论性课程让我们走入了一种误区:理论的完备性是最重要的,只要理论完美了,具体实践上的落实是顺理成章的事情。但是学习了这门课之后,我们发现实践中蕴藏的智慧也是非常丰富的,实践能力对于我们的意义同理论知识同样重要。
3.3.团队合作和分工的重要意义:
没有完美的个人,只有完美的团队。在这样复杂和长期的任务面前,一个人的力量是薄弱的,一个人能想到和做到的也是极其有限的。通过分工合作,每个人不必在短期内掌握太多的东西,而是通过充分信任队友的能力和专心钻研自己的任务来使团队效率大大提高。
3.4.交流请教的必要性:
遇到问题有时候凭借一个人或一组人的智慧是不好解决的。我们周围有许多很强的同学,还有许多经验丰富,实力雄厚的学长,通过请教和讨论可以产生一种茅塞顿开的效果。事情总是越说越明白,而且好多非常有新意和实用价值的想法也是在大家的讨论中得到和发展出来的。
3.5.计划的重要性:
在这样一个复杂项目的实施过程中,我们遇到了很多困难和挫折。很幸运我们方向一直明确,坚持按照计划,一步步克服困难,最终在学校的科技创新大赛前成功做出了我们的项目成品。现在想来,我们确实是因为一个明确的计划,一点点克服困难,一点点积累经验,才走到现在的。这其中计划的重要性不言而喻。
这门课的学习确实给了我们很多,而且不单单是知识和技能,还有精神层面上的东西。而在项目制作过程中的困难和喜悦,希望和失望,成功和失败,也都是我们心中永远的宝贵财富。
4.项目成员贡献排序
高众1/3;韩恩道1/3;高原1/3
5.课程改革的建议
a)从分析解决实际问题出发学习了解单片机的知识和技能,案例教学。
b)由于单片机的内容较多且琐碎,应增加课时量,以满足同学们对单片机知识的需要。c)教师在讲授某一知识时,最好再多做一些当堂演示。
6扩展阅读:单片机课程设计总结报告
单片机课程设计
频率计总结报告
姓名:陈艺端学号:0829201*
班级:电气0809
所在组:陈艺端白英杰
电气0809班0829201*陈艺端单片机课程设计频率计总结报告
【实验准备】在实验前,我通过上网、上图书馆查找了一些关于频率计的资料,结合单片机所学的中断和定时器的知识,并对电路板各个元器件、接线等的清楚认识,完成了对电路板仿真图的绘制,以及初步的程序,并实现了初步的仿真效果。【设计内容】
设计一个频率计。【设计要求】
分频段(高频、低频),在10k~20kHz范围做切换。
CPU为AT89S51,利用内部T0、T1的定时计数器或外部INT0中断功能来完成对输入的信号进行频率计数或脉宽计时,计数(计时)的频率结果通过6位七段LED数码管显示出来。数字式频率计原理框图:
【设计方案】一、实验原理:1、测频方式
利用单片机计数器T0和定时器T1中断。定时器T1中断产生闸门时间,在闸门时间Ts内,用计数器记录输入脉冲的个数N,从而计算出被测频率Fx=N/Ts。
第2页共22页
电气0809班0829201*陈艺端单片机课程设计频率计总结报告
2、测周方式
利用单片机外部中断INT0和定时器T1中断。定时器T1中断产生时标信号Ts,用外部中断INT0控制定时器T1的计数,计算出在被测信号的一个周期内定时器T1计得的数N,从而计算出被测频率Fx=NTs。
二、电路结构:
①NE555构成多谐振荡器,产生频率可调的方波信号;
②74HC74里的一个D触发器连成计数器,用来对555产生的方波分频;
③74HC14非门做驱动,防止产生的信号不能驱动单片机的I/O口;
第3页共22页电气0809班0829201*陈艺端单片机课程设计频率计总结报告
④方波信号连接在单片机的INT0和T0口上。
⑤单片机的P1口做字位,连接74HC245驱动数码管的共阴端;⑥P0口做字形,连接74HC573锁存器和74HC245驱动数码管的a~dp端。
三、测频测周转换的讨论以及试验参数:1、测频方式和测周方式的转换频率
依要求来说在10kHz~20kHz之间做切换。
2、转换频率过程中产生的问题
当被测信号频率与转换频率非常接近,并且抖动时,容易产生两种方式一直跳变的现象,进入死循环,可以利用迟滞比较器的原理进行解决。通常将测频方式和测周方式的转换频率设为程序判断测频还是测周的比较点,但为避免在转换频率附近产生死循环,设置两个比较点,分别为f1和f2,从高频测频方式向低频测周方式变化时,比较点为f1,从低频测周方式向高频测频方式变化时,比较点为f2,使f1电气0809班0829201*陈艺端单片机课程设计频率计总结报告
3、参数设定
根据以上讨论,测频方式的闸门周期要大于1/f1,并且越大测量结果越精确,但还要考虑到闸门周期太大会导致测量得到的脉冲数N过大,影响程序大小。同理,测周方式的时标周期要小于1/f2,并且越小越精确,同样要考虑到程序大小以及程序执行时间。
四、程序流程图⑴测频法:①主程序:
②T0中断子程序:②T1中断子程序:
开始中间变量初始化,定时计数器T0、T1初始化启动T1定时10ms,T0开始计数等待中断
中T0计数器溢出中断断返回,存储T0溢出次数的单继元自增1续计数
第5页共22页
电气0809班0829201*陈艺端单片机课程设计频率计总结报告
显示初始化(显示位数、字位初值、显示缓冲区起始地址)573锁存器使能端置1中断返回,继续定时和重新计数调用显示子程序,显示计数值判断1s定时是否到达停止计数,采集数据计数值由十六进制转化为十进制数查表,存储六个字形定时计数初值重置⑵测周法:①主程序:
开始
中间变量初始化,定时器T1初始化启动T1定时50us等待中断
第6页共22页电气0809班0829201*陈艺端单片机课程设计频率计总结报告
②T1定时子程序:定时器时间到中断返回,继续定时和重新计数判断INT0口是否为1脉冲计数单元自增1检测到INT0口为0时采集数据计数值由十六进制转化为十进制数查表,存储六个字形定时初值重置五、仿真图
第7页共22页
电气0809班0829201*陈艺端单片机课程设计频率计总结报告
可见,改变电阻值或电容值,即改变NE555输入方波的频率,仿真实现的数码管显示值与用频率计测量的理论值相差不大,基本满足设计要求,但还是存在一定的误差,可以加以改进,增加精确度。
说明:由于软件版本问题,没有可调节的滑动变阻器,于是,我用多选开关来代替,通过开关选择不同的电阻来模拟滑动变阻器滑片的移动。
第8页共22页
电气0809班0829201*陈艺端单片机课程设计频率计总结报告
七、总结
在去实验室前,我经过多番努力,将电路板上的电路用仿真软件画出,并且确保了每一条连线都包含了,芯片的每一个管脚都清楚的认识到是用来干什么的,怎么连接的,仿真时各个点将会出现什么情况。尔后,我又进行了初步的编程,将程序模块化,分为了主程序、中断子程序(测频和测周)、显示子程序、十六进制转化为十进制的子程序、延时子程序等,但在十六进制转化为十进制的子程序的编程过程中,我不是很了解怎么实现这个过程,导致未能完成该子程序的编写。
验收当天,我和我的组员在互相讨论了自己的编程思路后,综合了对方的意见,得到了初步的程序,但是在仿真过程中,还是存在诸多问题,我们合力讨论了很久,但还是有点问题,于是我们和另外一组一起商讨,在测频和测周的转换过程方面讨论了很久,还尝试了用双闸门的方法,来代替测频和测周的转换,但是结果还是不理想,尝试了烧程序看看电路板能否实现,但经过了一天的努力,我们还是未能实现所要的结果。临走前,我们询问老师,老师的意思是我们做得复杂了,想太多了,重心已经偏移了,于是,我们经过一个晚上的修改,初步定型了程序,第二天又到实验室去调试。
调试的时候发现显示出来的总是乱码,后用万用表测数码管,才发现电路板上的数码管接反了,于是我们将数码管重新插了一遍。编程时的值都是理论计算得到的值,调试时发现测得的频率和实际频率总有点差别,原因是忽略了程序中其他语句执行所需要的时间,而且一开始由于为将某些语句在等待中断的时间完成,导致仿真结果是一段时间显示一次,时延较长,细微修改定时器定时,并修改程序结果后,减小了测得值和实际值的差别,显示结果也较稳定。在烧程序的过程中出现了很多的问题,比如,接线的问题,芯片的问题等,我们第一天没能将课设验收完成,但我们不断地检查电路板和我们的程序,以及仿真图,不断地寻找问题所在,最终成功地将设计在电路板上实现出来。
六、实验程序①测频法:
ORG0000H
AJMPSTART
ORG000BH;T0中断入口AJMPT0INT
ORG001BH;T1中断入口AJMPT1INTORG0030HSTART:MOVSP,#70H
第9页共22页电气0809班0829201*陈艺端单片机课程设计频率计总结报告
MOVIE,#8AH;10001010B,开放T0、T1中断
MOVTMOD,#15H;00010101,T1定时,T0计数,允许T0溢出中断MOVTH1,#0ECH
MOVTL1,#78H;定时10msMOV20H,#100;100*10ms=1s
MOVTH0,#00HMOVTL0,#00H
MOV21H,#0MOV22H,#0
MOV23H,#0;存放采集到的频率
SETBTR1;开始计数SETBTR0WAIT:
AJMPWAIT;等待中断
T0INT:
INC23H;T0计数器溢出则23H单元自增1RETI
T1INT:;定时10ms产生中断MOVR2,#06;显示初始化MOVR4,#0FEH
MOVR1,#60H;显示缓冲区起始地址SETBP3.0
LOOP:MOVA,R4
MOVP1,A;字位MOVA,@R1
MOVP0,A;字形LCALLDELAY
INCR1MOVA,R4
RLA;字位左移MOVR4,A
DJNZR2,LOOP;判断6个数码管是否显示完
DJNZ20H,NEXT1;判断1s定时CLRTR1;停止计数CLRTR0
MOV20H,#100
MOV22H,TH0;1s时间到则采集数据MOV21H,TL0
第10页共22页电气0809班0829201*陈艺端单片机课程设计频率计总结报告
LCALLDISPLAY
MOVTH0,#00H;计数初值置0MOVTL0,#00H
NEXT1:MOVTH1,#0ECH;继续定时MOVTL1,#78HSETBTR1SETBTR0EXIT:RETI
DISPLAY:
MOVR0,#60H
MOVR1,#06H;对60H-65H单元清零NEXT2:MOV@R0,#0INCR0
DJNZR1,NEXT2
ZHUANHUAN:;进制转换MOVA,23HMOVB,#0AHDIVAB
MOV24H,A;存储第一位商
MOVA,B
MOV30H,22HANL30H,#0F0HADDA,30HSWAPA
MOVB,#0AHDIVAB
MOV25H,A;存储第二位商
MOVA,BSWAPA
ANL22H,#0FHADDA,22HMOVB,#0AHDIVAB
MOV26H,A;存储第三位商
MOVA,B
MOV30H,21HANL30H,#0F0HADDA,30HSWAPA
MOVB,#0AHDIVAB
MOV27H,A;存储第四位商
第11页共22页电气0809班0829201*陈艺端单片机课程设计频率计总结报告
MOVA,BSWAPA
ANL21H,#0FHADDA,21HMOVB,#0AHDIVAB
MOV28H,A;存储第五位商MOV50H,B;存储十进制数个位
MOVA,24HSWAPAADDA,25HMOVB,#0AHDIVAB
MOV24H,A
MOVA,BSWAPAADDA,26HMOVB,#0AHDIVAB
MOV25H,A
MOVA,BSWAPAADDA,27HMOVB,#0AHDIVAB
MOV26H,A
MOVA,BSWAPAADDA,28HMOVB,#0AHDIVAB
MOV27H,AMOV51H,B
MOVA,24HSWAPAADDA,25HMOVB,#0AHDIVAB
MOV24H,A
MOVA,BSWAPAADDA,26HMOVB,#0AH
;存储第一位商;存储第二位商;存储第三位商;存储第四位商;存储十进制数十位;存储第一位商第12页共22页
电气0809班0829201*陈艺端单片机课程设计频率计总结报告
DIVAB
MOV25H,A;存储第二位商
MOVA,BSWAPAADDA,27HMOVB,#0AHDIVAB
MOV26H,A;存储第三位商MOV52H,B;存储十进制数百位
MOVA,24HSWAPAADDA,25HMOVB,#0AHDIVAB
MOV24H,A;存储第一位商
MOVA,BSWAPAADDA,26HMOVB,#0AHDIVAB
MOV25H,A;存储第二位商MOV53H,B;存储十进制数千位
MOVA,24HSWAPAADDA,25HMOVB,#0AHDIVAB
MOV54H,B;存储十进制数万位MOV55H,A;存储十进制数十万位
MOVR2,#06MOVR0,#50HMOVR1,#5FHMOVDPTR,#TABNEXT3:MOVA,@R0
MOVCA,@A+DPTR;查表,字形INCR0INCR1
MOV@R1,ADJNZR2,NEXT3RET
TAB:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHDB77H,7CH,39H,5EH,79H,71HDELAY:MOV40H,#250LP0:NOP
第13页共22页电气0809班0829201*陈艺端单片机课程设计频率计总结报告
DJNZ40H,LP0RETEND
②测周法:
ORG0000HLJMPMAINORG0100H
MAIN:MOVDPTR,#0000H
SETBC
MOVP3.4,CMOV23H,#00HF1:MOVC,P3.4
JCF1
F2:MOVC,P3.4
JNCF2
F3:MOV22H,DPH
MOV21H,DPLMOVA,#0FFHCJNEA,22H,JIACJNEA,21H,JIAINC23H
JIA:INCDPTR
MOVC,P3.4JCF3
F4:MOV22H,DPH
MOV21H,DPLMOVA,#0FFHCJNEA,22H,JIA1CJNEA,21H,JIA1INC23H
JIA1:INCDPTR
MOVC,P3.4JNCF4
MOV22H,DPHMOV21H,DPL
ACALLDISPLAY
MOV21H,#0MOV22H,#0MOV23H,#0
LJMPMAIN
DISPLAY:MOVR0,#60H
MOVR1,#06HNEXT2:MOV@R0,#0
INCR0
DJNZR1,NEXT2
第14页;对60H-65H单元清零
共22页
电气0809班0829201*陈艺端单片机课程设计频率计总结报告
ZHUANHUAN:;进制转换MOVA,23HMOVB,#0AHDIVAB
MOV24H,A;存储第一位商
MOVA,B
MOV30H,22HANL30H,#0F0HADDA,30HSWAPA
MOVB,#0AHDIVAB
MOV25H,A;存储第二位商
MOVA,BSWAPA
ANL22H,#0FHADDA,22HMOVB,#0AHDIVAB
MOV26H,A;存储第三位商
MOVA,B
MOV30H,21HANL30H,#0F0HADDA,30HSWAPA
MOVB,#0AHDIVAB
MOV27H,A;存储第四位商
MOVA,BSWAPA
ANL21H,#0FHADDA,21HMOVB,#0AHDIVAB
MOV28H,A;存储第五位商MOV50H,B;存储十进制数个位
MOVA,24HSWAPAADDA,25HMOVB,#0AHDIVAB
MOV24H,A;存储第一位商MOVA,BSWAPA
第15页共22页电气0809班0829201*陈艺端单片机课程设计频率计总结报告
ADDA,26HMOVB,#0AHDIVAB
MOV25H,A;存储第二位商
MOVA,BSWAPAADDA,27HMOVB,#0AHDIVAB
MOV26H,A;存储第三位商
MOVA,BSWAPAADDA,28HMOVB,#0AHDIVAB
MOV27H,A;存储第四位商MOV51H,B;存储十进制数十位
MOVA,24HSWAPAADDA,25HMOVB,#0AHDIVAB
MOV24H,A;存储第一位商
MOVA,BSWAPAADDA,26HMOVB,#0AHDIVAB
MOV25H,A;存储第二位商
MOVA,BSWAPAADDA,27HMOVB,#0AHDIVAB
MOV26H,A;存储第三位商MOV52H,B;存储十进制数百位
MOVA,24HSWAPAADDA,25HMOVB,#0AHDIVAB
MOV24H,A;存储第一位商
第16页共22页电气0809班0829201*陈艺端单片机课程设计频率计总结报告
MOVA,BSWAPAADDA,26HMOVB,#0AHDIVAB
MOV25H,A;存储第二位商MOV53H,B;存储十进制数千位
MOVA,24HSWAPAADDA,25HMOVB,#0AHDIVAB
MOV54H,B;存储十进制数万位MOV55H,A;存储十进制数十万位
MOVR2,#06MOVR0,#50HMOVR1,#5FHMOVDPTR,#TABNEXT3:MOVA,@R0
MOVCA,@A+DPTRINCR0INCR1
MOV@R1,ADJNZR2,NEXT3
MOVR2,#06MOVR4,#0FEHMOVR1,#60HSETBP3.0
LOOP:MOVA,R4
MOVP1,AMOVA,@R1MOVP0,A
LCALLDELAY
INCR1MOVA,R4RLA
MOVR4,A
DJNZR2,LOOP
RET
TAB:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHDB77H,7CH,39H,5EH,79H,71HDELAY:MOV40H,#250LP0:NOP
DJNZ40H,LP0RET
第17页共22页电气0809班0829201*陈艺端单片机课程设计频率计总结报告
END
十六进制转化为十进制的方法:
第一步将最高位的高半字节提出来,除以10,把商存储起来,余数与最高位的低半字节组合成一个字节,再除以10,再存储商,余数以此类推,直到最后一次计算得到的余数即为十进制数的个位;第二步把第一步存储的商组合成一个字节,依次除以10,仍然把每次得到的商存储起来,以此类推最后一次得到的余数即为十进制数的十位;以后也是以此类推得到十进制数的百位、千位……以上算法必须要注意的一个问题是,每次得到的余数与低位的半字节组合成一个字节时,余数必须放在该字节的高半字节,否则计算错误。该本次频率计系待测的时钟信号的最高频率为460800Hz,对应的十六进制数为70800H,这里就以70800H转换为十进制数为例来说明这种算法。
第一步:用7H除以10,商0H余7H,把商0存储在24H单元,余数7H与下一个字节08H的高半字节0H组合成一个字节70H。70H除以10,商BH余2H,把商BH存储在25H单元,余数2H与8H组合成一个字节28H。28H除以10,商4H余0H,把商4H存储在26H单元,余数0H与0H组合成一个字节00H。00H除以10,商0H余0H,把商0H存储在27H单元,余数0H与0H组合成一个字节00H。00H除以10,商0H余0H,把商0H存储在28H单元,余数0即为所需十进制数的个位。
第二步:把存储在24H与25H单元的商组合成一个字节0BH。0BH除以10,同第一步,存储商,余数与下一个商组合成一个字节,再除以10,一次类推得到十进制数的十位0。
第三步:方法同第二步,得到十进制数的百位8。第四步:方法同第三步,得到十进制数的千位0。
第五步:方法同第四步,得到十进制数的万位6和十万位4。
最后得到了十进制数460800。图5.3详细的展示了这种进制转换算法的过程。
第18页共22页电气0809班0829201*陈艺端单片机课程设计频率计总结报告
个位为0(23H)=07H(22H)=08H(21H)=00H07H/10商0余770H/10商B余228H/10商4余000H/10商0余000H/10商0余0
0BH/10商1余114H/10商2余000H/10商0余000H/10商0余0十位为012H/10商1余880H/10商C余880H/10商C余8百位为81CH/10商2余88CH/10商E余0千位为02E/10商4余6万位为6十万位为4③双闸门法:
ORG0000H
AJMPSTART
ORG000BH;T0中断入口AJMPT0INT
ORG001BH;T1中断入口AJMPT1INTORG0030HSTART:MOVSP,#70H
MOVIE,#8AH;10001010B,开放T0、T1中断MOVTMOD,#15H;00010101B,T1定时,T0计数MOVTH1,#3CH
MOVTL1,#0B0H;定时100msMOV20H,#100;100*100ms=10sMOV24H,#10MOVTH0,#00HMOVTL0,#00HMOV21H,#0MOV22H,#0
MOV23H,#0;存放采集到的频率SETBTR1;开始计数SETBTR0
第19页共22页电气0809班0829201*陈艺端单片机课程设计频率计总结报告
WAIT:AJMPWAIT;等待中断MOVR2,#06MOVR0,#50HMOVR1,#5FHMOVDPTR,#TAB
NEXT30:MOVA,@R0;50H55H查表,字形存在60H65HMOVCA,@A+DPTRINCR0INCR1
MOV@R1,A
DJNZR2,NEXT30;6次
MOVR6,#100;循环显示100次MOV66H,#3FH;最高位显示0KOP0:MOVR2,#06
MOVR4,#0FEH;字位初值MOVR1,#61H;乘以10SETBP3.0
LOOP0:MOVA,R4;字位MOVP1,A
MOVA,@R1;字形MOVP0,A
LCALLDELAYINCR1MOVA,R4RLA
MOVR4,A
DJNZR2,LOOP0DJNZR6,KOP0
T0INT:INC23H;计数器溢出则23H单元自增1RETI
T1INT:DJNZ20H,NEXT1;定时100ms产生中断CLRTR1;停止计数CLRTR0
MOV20H,#100
MOV22H,TH0;10s时间到则采集数据MOV21H,TL0CLRC
MOVA,22HSUBBA,#30HJNCCEPINGCLRC
MOVA,23HSUBBA,#01HJNCCEPINGMOVTH0,#00HMOVTL0,#00H
CEZHOU:LCALLDISPLAY0LJMPKK
第20页共22页电气0809班0829201*陈艺端单片机课程设计频率计总结报告
CEPING:LCALLDISPLAY1KK:MOV21H,#0MOV22H,#0MOV23H,#0
NEXT1:MOVTH1,#3CH;继续定时MOVTL1,#0B0HSETBTR1SETBTR0EXIT:RETI
DISPLAY0:MOVR0,#60H
MOVR1,#07H;对60H-66H单元清零NEXT20:MOV@R0,#0INCR0
DJNZR1,NEXT20ZHUANHUAN0:;进制转换
;////////////////////////////////////////////////////////////////////////////////////////////DISPLAY1:
MOVR0,#60H
MOVR1,#06H;对60H-65H单元清零
NEXT2:MOV@R0,#0
INCR0
DJNZR1,NEXT2
ZHUANHUAN:;进制转换
MOVR2,#06MOVR0,#50HMOVR1,#5FHMOVDPTR,#TAB
NEXT3:MOVA,@R0
MOVCA,@A+DPTRINCR0INCR1
MOV@R1,ADJNZR2,NEXT3MOVR6,#20
KOP:MOVR2,#06
MOVR4,#0FEHMOVR1,#60HSETBP3.0LOOP:MOVA,R4
MOVP1,AMOVA,@R1MOVP0,A
LCALLDELAYINCR1
MOVA,R4RLA
第21页共22页电气0809班0829201*陈艺端单片机课程设计频率计总结报告
MOVR4,A
DJNZR2,LOOPDJNZR6,KOPRET
TAB:DB03FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHDB77H,7CH,39H,5EH,79H,71HDELAY:MOV40H,#250LP0:NOP
DJNZ40H,LP0RETEND
第22页共22页
友情提示:本文中关于《单片机课程总结报告》给出的范例仅供您参考拓展思维使用,单片机课程总结报告:该篇文章建议您自主创作。
来源:网络整理 免责声明:本文仅限学习分享,如产生版权问题,请联系我们及时删除。