单片机实验报告_第1页
单片机实验报告_第2页
单片机实验报告_第3页
单片机实验报告_第4页
单片机实验报告_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、单片机实验报告指导老师:王巍 姓 名: 班 级: 学 号:实验一 实验开发环境的学习(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)设计思路:

2、(a)从片内23H,22H和33H,32H单元中分别取出BCD码,做加法操作,所得结果再送入43H,42H中。 (b)从40H中取出存储的内容,用一个循环,两两进行比较,所得的较大者放入寄存器中,最后获得的最大的数放入50H中。 开始(4)流程图:(a)初始化 读入数据 ADD 读入数据输出结果 结束将A中的数值存放在50H中。已比较10次?取出大数,存放在累加器A中。该单元再下一个单元? 从40H中取数 初始化 预置循环次数 开始(b) N Y N Y 结束(5)源程序代码如下:(a) ORG 0000H SJMP MAIN ORG 0030H MAIN: MOV R0,#42H MOV R

3、1,#22H MOV R2,#32H MOV A,R1 ADD A,R2 ACALL SUB MOV R3,#23H MOV R4,#33H MOV A,R3 ADDC A,R4 ACALL SUB MOV A,#00H ADDC A,#00H ACALL SUB ORG 01A0H SUB: DA A MOV R0,A INC R0 RET END(b) ORG 0000H AJMP START ORG 0030H START: CLR 00H MOV R1,#50H MOV R0,#40H MOV A,R0 LOOP: INC R0 SUBB A,R0 JC LOOP MOV R1,A E

4、ND(6)调试过程与解决问题:开始对对keil的建立工程以及参数系数的修改不是太了解,仪器还不太熟悉,程序出现过一些小问题,但经过多次操作解决,已经解决了。实验二 单片机输入及输出实验(1)实验目的: 1) 学习单片机的I/O口的使用方法; 2) 学习延时子程序的编写和使用; 3) 学习分支指令的使用; 4) 学习使用定时器完成延时的方法。(2)实验内容: P1口做输出口,接八只发光二极管,编写程序,使发光二极管循环点亮,每个发光二极管点亮时间为一秒。(3) 设计思路: 用一个寄存器R1存储用于点亮P1口LED灯的数据,R1首先存储点亮与P1.0相连的LED灯D0(数据为H),可以通过指令 M

5、OV P0,R1将与P1.0相连的LED灯D0点亮,然后调用延时一秒的程序,延时时间到后,可以带进位左移指令,将R1中的数据左移一位(数据为:),再送给P1口,可将与P1.1相连的LED灯D1点亮,以此类推,用寄存器R2存储LED灯从D0移动到D7的移动次数为8次,每移一次减一,当R2的值为0时,表示第一次循环结束,接下来用从点亮D0开始下一个循环,即可达到循环点亮LED灯的效果。 开始(4) 流程图: 初始化预置循环次数连接P1.0,点亮D1 调用延时子程序进位左移指令已左移7次? Y N(5) 源程序代码: ORG 0000H AJMP START ORG 0030H START: MOV

6、 R1, #B MOV R2, #08 LOOP: MOV A, R1 MOV P1, A CALL DEL1S RL A MOV R1,A DJNZ R2,LOOP AJMP START DEL1S: MOV R3, #5 DEL: MOV R4, #100 DEL1: MOV R5, #250 DEL2: NOP DJNZ R5, DEL2 DJNZ R4, DEL1 DJNZ R3, DEL RET END(6) 调试过程与解决问题: 做设计的时候,曾经无法实现多次循环,经过查资料了解,实验过程中,程序出现一些问题,通过调试解决,开始的连接线路出现问题,导致LED灯无法按照预定的方式循环

7、点亮,后修改线路,可正常使用。实验三 单片机定时器及中断实验(1)实验目的: 1) 学习单片机定时器的使用方法; 2) 学习中断使用及中断程序的编写; 3) 学习查询方式和中断方式进行信息传递的不同。(2)实验内容: 使用单片机定时器资源,在P1.0口上输出一个周期为1s的方波,占空比为50%。分别采用查询和中断的方式实现。(3)设计思路: 据题意,定时器工作在定时模式,且定时时间为周期的一半,即500ms。可以通过10次循环实现定时500ms,选择T0,确定工作方式为0.由于方式0的计数单元由TL0的低5位和TH0的8位共同组成,因此将上述计算结果拆分成低5位和高8位的组合,然后开启中断,等

8、待中断,中断服务程序,重新赋值,改变P1.0状态使之输出方波。 开始(4)流程图:制定定时器模式及常数 启动定时器 开中断 等待中断 (a)主程序流程图 中断入口 保护现场 计数单位重新赋初值 预置循环次数 循环次数到? N 重置循环次数 改变P1.0的状态 恢复现场 中断返回 (b)中断服务程序流程图(6) 程序源代码: ORG 0000H AJMP START ORG 000BH AJMP INT_T0 ORG 0030HSTART: MOV SP, #68H SETB P1.0 MOV R7, #10 MOV TMOD, #01H MOV TH0, #3CH MOV TL0,#0B0H

9、SETB TR0 SETB EA SETB ET0 SJMP $ INT_T0: PUSH ACC PUSH PSW MOV TH0,#3CH MOV TL0,#0B0H DJNZ R7, EXIT MOV R7, #10 CPL P1.0 EXIT: POP PSW POP ACC RETI END(6)调试过程与解决问题: 开始设计程序时,因定时时间较长,不知道怎么办,经过查阅ppt,了解到使用循环解决,还有就是工作方式的选择,经过计算得出的,实验过程中,编写的程序出现一些小问题,就是周期变长了,经过对参数的更改修正,线路连接正常。实验四 单片机键盘及LED显示(1)实验目的: 1) 学习

10、数码管动态显示的原理和程序编写; 2) 学习矩阵键盘的扫描原理和扫描程序。(2)实验内容: 使用单片机I/O口,完成一个6位七段数码管动态显示程序,显示自己学号的后六位。数码管共阴极,段码为AH,位码为G0G5.(3)设计思路: 六位数码管,通过程序控制逐个显示,相邻的数码管显示通过左移指令实现,将要显示的数字的段码送入借口,调用程序,使用循环使得数码管实现动态显示,通过左移指令相连接即可显示出学号的后六位了。 开始(4)流程图: 送入段码 左移指令 调用子程序 预置循环次数循环次数到? Y N 结束(5)程序源代码: ORG 0000H SJMP START ORG 0030HSTART: MOV A,#01H MOV P1,A MOV P2,#7FH ACALL DELAY RL A MOV P1,A MOV P2,#06H ACALL DELAY RL A MOV P1,A MOV P2,#6FH ACALL DELAY RL A MOV P1,A MOV P2,#3FH ACALL DELAY RL A MOV P1,A MOV P2,#3FH ACALL DELAY RL A MOV P1,A MOV P2,#3FH ACALL DELAY SJMP STARTDELAY: MOV R7,#05HLOOP1:

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论