您好,欢迎访问三七文档
单片机实验报告指导老师:王巍姓名:班级:学号:实验一实验开发环境的学习(1)实验目的:1)学习keil软件的使用方法。2)学习单片机汇编程序的开发流程。3)学习程序的调试仿真方法。(2)实验内容:1)学习使用keil软件开发MCS-51单片机程序的流程,熟悉调试和仿真过程2)完成以下程序,并进行调试。(a)设有两个4位的BCD码,分别存放在片内RAM的23H,22H单元和33H,32H单元中,求他们的和,并送入43H,42H单元中(低位在低字节中,高位在高字节中)。(b)找出放在内存单元40H开始的十个数中的最大值,并放在内存单元50H中。(3)设计思路:(a)从片内23H,22H和33H,32H单元中分别取出BCD码,做加法操作,所得结果再送入43H,42H中。(b)从40H中取出存储的内容,用一个循环,两两进行比较,所得的较大者放入寄存器中,最后获得的最大的数放入50H中。(4)流程图:(a)ADD初始化读入数据读入数据结束输出结果开始(b)NYNY(5)源程序代码如下:(a)ORG0000HSJMPMAINORG0030H开始初始化从40H中取数预置循环次数该单元再下一个单元?取出大数,存放在累加器A中。已比较10次?将A中的数值存放在50H中。结束MAIN:MOVR0,#42HMOVR1,#22HMOVR2,#32HMOVA,R1ADDA,R2ACALLSUBMOVR3,#23HMOVR4,#33HMOVA,R3ADDCA,R4ACALLSUBMOVA,#00HADDCA,#00HACALLSUBORG01A0HSUB:DAAMOV@R0,AINCR0RETEND(b)ORG0000HAJMPSTARTORG0030HSTART:CLR00HMOVR1,#50HMOVR0,#40HMOVA,@R0LOOP:INCR0SUBBA,@R0JCLOOPMOVR1,AEND(6)调试过程与解决问题:开始对对keil的建立工程以及参数系数的修改不是太了解,仪器还不太熟悉,程序出现过一些小问题,但经过多次操作解决,已经解决了。实验二单片机输入及输出实验(1)实验目的:1)学习单片机的I/O口的使用方法;2)学习延时子程序的编写和使用;3)学习分支指令的使用;4)学习使用定时器完成延时的方法。(2)实验内容:P1口做输出口,接八只发光二极管,编写程序,使发光二极管循环点亮,每个发光二极管点亮时间为一秒。(3)设计思路:用一个寄存器R1存储用于点亮P1口LED灯的数据,R1首先存储点亮与P1.0相连的LED灯D0(数据为00000001H),可以通过指令MOVP0,R1将与P1.0相连的LED灯D0点亮,然后调用延时一秒的程序,延时时间到后,可以带进位左移指令,将R1中的数据左移一位(数据为:00000010),再送给P1口,可将与P1.1相连的LED灯D1点亮,以此类推,用寄存器R2存储LED灯从D0移动到D7的移动次数为8次,每移一次减一,当R2的值为0时,表示第一次循环结束,接下来用从点亮D0开始下一个循环,即可达到循环点亮LED灯的效果。(4)流程图:YN(5)源程序代码:ORG0000HAJMPSTARTORG0030HSTART:MOVR1,#00000001BMOVR2,#08LOOP:MOVA,R1MOVP1,ACALLDEL1SRLAMOVR1,ADJNZR2,LOOP初始化连接P1.0,点亮D1调用延时子程序进位左移指令已左移7次?预置循环次数开始AJMPSTARTDEL1S:MOVR3,#5DEL:MOVR4,#100DEL1:MOVR5,#250DEL2:NOPDJNZR5,DEL2DJNZR4,DEL1DJNZR3,DELRETEND(6)调试过程与解决问题:做设计的时候,曾经无法实现多次循环,经过查资料了解,实验过程中,程序出现一些问题,通过调试解决,开始的连接线路出现问题,导致LED灯无法按照预定的方式循环点亮,后修改线路,可正常使用。实验三单片机定时器及中断实验(1)实验目的:1)学习单片机定时器的使用方法;2)学习中断使用及中断程序的编写;3)学习查询方式和中断方式进行信息传递的不同。(2)实验内容:使用单片机定时器资源,在P1.0口上输出一个周期为1s的方波,占空比为50%。分别采用查询和中断的方式实现。(3)设计思路:据题意,定时器工作在定时模式,且定时时间为周期的一半,即500ms。可以通过10次循环实现定时500ms,选择T0,确定工作方式为0.由于方式0的计数单元由TL0的低5位和TH0的8位共同组成,因此将上述计算结果拆分成低5位和高8位的组合,然后开启中断,等待中断,中断服务程序,重新赋值,改变P1.0状态使之输出方波。(4)流程图:(a)主程序流程图N开始制定定时器模式及常数启动定时器开中断等待中断中断入口保护现场计数单位重新赋初值预置循环次数循环次数到?(b)中断服务程序流程图(6)程序源代码:ORG0000HAJMPSTARTORG000BHAJMPINT_T0ORG0030HSTART:MOVSP,#68HSETBP1.0MOVR7,#10MOVTMOD,#01HMOVTH0,#3CHMOVTL0,#0B0HSETBTR0SETBEASETBET0SJMP$INT_T0:PUSHACCPUSHPSWMOVTH0,#3CH重置循环次数改变P1.0的状态恢复现场中断返回MOVTL0,#0B0HDJNZR7,EXITMOVR7,#10CPLP1.0EXIT:POPPSWPOPACCRETIEND(6)调试过程与解决问题:开始设计程序时,因定时时间较长,不知道怎么办,经过查阅ppt,了解到使用循环解决,还有就是工作方式的选择,经过计算得出的,实验过程中,编写的程序出现一些小问题,就是周期变长了,经过对参数的更改修正,线路连接正常。实验四单片机键盘及LED显示(1)实验目的:1)学习数码管动态显示的原理和程序编写;2)学习矩阵键盘的扫描原理和扫描程序。(2)实验内容:使用单片机I/O口,完成一个6位七段数码管动态显示程序,显示自己学号的后六位。数码管共阴极,段码为A~H,位码为G0~G5.(3)设计思路:六位数码管,通过程序控制逐个显示,相邻的数码管显示通过左移指令实现,将要显示的数字的段码送入借口,调用程序,使用循环使得数码管实现动态显示,通过左移指令相连接即可显示出学号的后六位了。(4)流程图:YN(5)程序源代码:ORG0000HSJMPSTARTORG0030HSTART:MOVA,#01HMOVP1,A开始送入段码左移指令调用子程序预置循环次数循环次数到?结束MOVP2,#7FHACALLDELAYRLAMOVP1,AMOVP2,#06HACALLDELAYRLAMOVP1,AMOVP2,#6FHACALLDELAYRLAMOVP1,AMOVP2,#3FHACALLDELAYRLAMOVP1,AMOVP2,#3FHACALLDELAYRLAMOVP1,AMOVP2,#3FHACALLDELAYSJMPSTARTDELAY:MOVR7,#05HLOOP1:MOVR6,00HLOOP2:DJNZR6,LOOP2DJNZR7,LOOP1RETEND(6)调试过程与解决问题:编写程序时,不能实现六位数码管同时显示出数字,后经过询问同学解决,实验过程中,用到两个I/O接口,开始不小心连线连接错误,直接导致无法显示,后改正,一切正常,只是数码管的显示亮度不够,后对延时进行调节,稍有变化。
本文标题:单片机实验报告
链接地址:https://www.777doc.com/doc-5216669 .html