




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、单片机实验报告学生姓名 学号 专 业 指导教师 学 院 信息与电气工程学院 2011年11月单片机实验报告实验一 MCS-51指令系统实验数据排序1.实验目的熟悉MCS-51指令系统,掌握程序设计方法;加深对内部存储器读写的认识;熟悉仿真开发环境,学会源程序的编写、汇编/编译、调试;熟悉单片机硬件实验系统以及良好的实验习惯培养等;学会检查结果的正确性。2.实验内容将程序存储器的一个列表中的10个单字节无符号数据传送到内部RAM,然后用冒泡法对其按从小到大的次序重新排列,并送到外部RAM 以8000H开始的地址单元内。3.实验流程图4.调试程序 ORG 0000H LJMP START ;将程序
2、存储器的一个列表中的10个单字节无符号数据传送到内部RAMORG 0030HSTART: MOV R3,#10 ;设置传送次数 MOV R0,#08H ;设置数据传送的内部RAM的首地址 MOV DPTR,#TAB LOOP0: CLR A MOVC A,A+DPTR ;将程序存储器中的代码字节传送给AMOV R0,A ;A传送到间接寻址R0 INC DPTR ;数据指针加1INC R0 ;寄存器R0加1DJNZ R3,LOOP0 ;R3减1,若为0结束循环,传送结束;冒泡法对其按从小到大的次序重新排列 MOV R3,#9 ;设置外循环次数LOOP1: MOV A,R3MOV R2,A ;设置
3、内循环次数MOV R0,#08H ;数据首地址送R0LOOP2: MOV A,R0 MOV 20H,R0INC R0MOV 21H,R0CLR C ;进位标志位清零SUBB A,R0 ;前一个地址单元的内容和后一个地址单元内容比较JC LOOP3 ;若有借位,前者小,不必交换,程序跳转到LOOP3 ;若无借位,前者大,进行交换MOV R0,20HDEC R0MOV R0,21HINC R0LOOP3: DJNZ R2,LOOP2 ;R2=0,内部循环结束 DJNZ R3,LOOP1 ;R3=0,外部循环结束LOOP4: LJMP NEXT ;送到外部RAM 以8000H开始的地址单元内NEXT
4、: MOV DPTR,#8000H ;设置外部存储器数据存放的首地址 MOV R0,#08H ;数据区数据首地址传送给R0MOV R3,#10 ;传送次数LOOP5: MOV A,R0 MOVX DPTR,A ;A传送到外部RAMINC R0INC DPTRDJNZ R3,LOOP5 ;R3=0,传送结束SJMP $ ORG 0080HTAB:DB 10,2,23,4,5,6,7,24,66,1 ;程序存储器的一个列表中的10个单字节无符号数据END5.实验收获万事开头难、要勇敢迈出第一步。开始的时候,不要老是给自己找借口,说KEIL不会建项目啦、没有实验板啦之类的。遇到困难要一件件攻克,不会
5、建项目,就先学它,这方面网上教程很多,随便找找看一下,做几次就懂了。然后可以参考别的人程序,抄过来也无所谓,写一个最简单的,让它运行起来,先培养一下自己的感觉,知道写程序是怎么一回事,无论写大程序还是小程序个人认为,一块学习板还是必要的,写好程序在上面运行一下看结果,学习效果会好很多,仿真器就看个人需要了。单片机是注重理论和实践的,光看书不动手,是学不会的。通过实验,熟悉MCS-51指令系统,掌握程序设计方法;加深对内部存储器读写的认识;熟悉仿真开发环境,学会源程序的编写、汇编/编译、调试;熟悉单片机硬件实验系统以及良好的实验习惯培养,学会了用汇编语言实现冒泡法排序,受益匪浅实验二 I/O口输
6、入输出实验1 实验目的学习P1口作为输出/输入方式使用的方法;掌握延时子程序的编写和使用;2实验内容(1)P1口做输出口,接8个发光二极管,编写程序,使发光二极管循环点亮。(2)P1.0P1.3口做输入口,接4位拨码开关;P1.4P1.7做输出口,接4个发光二极管。编写程序读取P1口低四位的开关量输入状态,输出到P1口的高四位,由二极管指示出来。3. 实验流程图4. 调试程序(1);1、循环点亮发光二极管 ORG0000H LJMP START ORG4100HSTART:MOV A,#01H LOOP:RL A ;左移一位,点亮下一个发光二极管 MOV P1,A LCALL DELAY ;延
7、时 0.1秒调用标号为delay的子程序 JMP LOOPDELAY:MOV R1,#127;延时0.1秒DEL1: MOV R2,#200DEL2: DJNZ R2,DEL2 DJNZ R1,DEL1 RET END;2、通过发光二极管将P1口的状态显示 ORG0000HLJMP START ORG4100HSTART: MOV P1,#0FFH ;复位P1口为输入状态 MOV A,P1;读P1口的状态值入累加器A SWAP A MOV P1,A JMP START;继续循环监测端口P1的状态 END(2)P1.0P1.3口做输入口,接4位拨码开关;P1.4P1.7做输出口,接4个发光二极管
8、。编写程序读取P1口低四位的开关量输入状态,输出到P1口的高四位,由二极管指示出来。ORG 00HSTART: JB P1.0,NEXT1 ;判断P1.0=1,跳转NEXT1 CLR P1.4 SJMP NEX1NEXT1: SETB P1.4NEX1: JB P1.1,NEXT2 ; 判断P1.1=1,跳转NEXT2 CLR P1.5 SJMP NEX2NEXT2: SETB P1.5NEX2: JB P1.2,NEXT3 ; 判断P1.2=1,跳转NEXT3 CLR P1.6 SJMP NEX3NEXT3: SETB P1.6NEX3: JB P1.3,NEXT4 ; 判断P1.3=1,跳
9、转NEXT4 CLR P1.7 SJMP NEX4NEXT4: SETB P1.7NEX4: SJMP START END5. 实验收获 知识点用到才学,不用的暂时丢一边。厚厚的一本书,看着人头都晕了,学了后面的,前面的估计也快忘光了,所以,最好结合实际程序,用到的时候才去看,不必说非要把书从第一页看起,看完它才来写程序。比如你写流水灯,完全就没必要看中断的知识,专心把流水灯学好就是了,这是把整本书化整为零,一小点一小点的啃。通过实验,学习P1口作为输出/输入方式使用的方法;掌握了延时子程序的编写和使用。并且用二极管生动形象的表现了输入输出情况。实验三 定时器/计数器实验1实验目的了解MCS-
10、51单片机中定时器/计数器的基本结构、工作原理和工作方式,掌握工作在定时器和计数器两种方式下的编程方法。2实验内容(1)定时器实验:在使用6MHz晶振的条件下,用定时器1产生10ms定时,由P1.0口输出周期为2s的方波信号,并通过发光二极管指示P1.0的输出波形。(2)定时器实验(选作):在使用6MHz晶振的条件下,用端口输出不同频率的脉冲(不同频率的脉冲用定时器实现),控制蜂鸣器发出“Do Re Mi Fa Sol La Si Do”不同音调(这些音调的频率可以参考书中P142的表6-3)(3)计数器实验:按计数器模式和方式2工作,对P3.4(T0)引脚进行计数。将其数值按二进制数在P1口
11、驱动LED灯上显示出来。3. 实验流程图4. 调试程序1; 6MHz晶振的条件下,用定时器1产生10ms定时,由P1.0口输出周期为2s的方波信号,并通过发光二极管指示P1.0的输出波形。ORG 0000HLJMP START ;转程序入口 ORG 000BH ;T0的中断入口 LJMP Timer0Interrupt ;转T0中断处理程序IT0PORG 1000HSTART:MOV SP,#60H ;设堆栈指针 SETB P1.0 LCALL InitTimer0 InitTimer0: ;定时器初始化 MOV B,#64H ;设循环100次 MOV TMOD,#01H ;设T0工作在方式1
12、 MOV TL0,#78H ;给T0设初值 MOV TH0,#0ECH SETB TR0 ;启动T0 SETB ET0 ;允许T0中断 SETB EA ; 开中断 RET Timer0Interrupt:PUSH DPHPUSH DPLPUSH ACCMOV TH0,#0ECHMOV TL0,#78HCPL P1.0;输出方波POP ACCPOP DPLPOP DPHRETIEND2 ;附加题SPEAKEREQUP2.0 ;P2.0当做蜂鸣器的输出口ORG0000HLJMPMAINORG000BHLJMPIT0PORG001BHLJMPIT1PORG0100HMAIN:MOVSP,#60H L
13、CALLINITIALMOVTH1,3CHMOVTL1,0B0HLOOP:MOVDPTR,#TONELOOP1:MOVR5,#10CLRPT0SETBPT1 SETBF0ACALLREADTONESETBTR0SETBTR1SETBEALJMPSPEAKINITIAL:MOVTMOD,#11HSETBET1SETBET0RETREADTONE:CLRAMOVCA,A+DPTRJZLOOPMOV20H,A MOVTH0,AINCDPTRCLRAMOVCA,A+DPTRMOV21H,AMOVTL0,AINCDPTRRETSPEAK:CLRPT0SETBPT1JBF0,SPEAKCLRTR0LJMP
14、LOOP1IT0P:CPLSPEAKERCLRTR0MOVA,20HMOVTH0,AMOVA,21HMOVTL0,ASETBTR0RETIIT1P:CLRTR1CLREAMOVTH1,3CHMOVTL1,0B0HSETBTR1SETBEADJNZR5,RECLREACLR TR1CLRF0RE:RETITONE:DB0F0H,0BDH,0F2H,70H,0F3H,0CBHDB0F4H,8BH,0F5H,0D3H,0F6H,0D4HDB0F7H,0DDH,0F8H,5EHEND,3;(3)计数器实验:按计数器模式和方式2工作,对P3.4(T0)引脚进行计数。将其数值按二进制数在P1口驱动LED灯
15、上显示出来。ORG 0000H LJMP MAIN ORG 0030HMAIN: MOV TMOD,#06H ;设定T0工作在方式计数器方式2 MOV TL0,#00H ;给T0设定初值 MOV TH0,#00H SETB TR0;启动T0 MOV P1,TL0HERE: AJMP HERE ;无条件跳转至HERE END5. 实验收获程序不要光看不写,一定要自己写一次。最开始的时候,啥都不懂,可以抄人家的程序过来,看看每一句是干什么用的,达到什么目的,运行后有什么后果,看明白了之后,就要自己写一次,你会发现,原来看明白别人的程序很容易,但到自己写的时候却一句也写不出来,这就是差距。当你自己能
16、写出来的时候,说明你就真的懂了。通过实验,了解了MCS-51单片机中定时器/计数器的基本结构、工作原理和工作方式,掌握工作在定时器和计数器两种方式下的编程方法。由于定时器和计数器在不同的工作方式下有不同的性质,因此学会选取恰当的工作方式十分重要。实验四 外部中断实验1实验目的学习外部中断技术的基本使用方法;学习中断处理程序的编程方法。2实验内容通过按键产生单脉冲作为中断源,触发外部中断,在中断处理程序中对输出信号进行反转,由P1.0口输出信号,使发光二极管点亮或熄灭。3. 实验流程图4. 调试程序ORG0000HLJMPMAINORG 0003H;外部中断0LJMPIN0ORG0030HMAI
17、N:MOVSP,#60H ;设堆栈指针SETBIT0;跳变出发方式SETBEX0SETBEA ;开中断clrp1.0HERE:SJMPHEREIN0:CLREA;关闭中断允许位CPLP1.0SETBEARETIEND5. 实验收获必须学会掌握调试程序的方法。不少人写程序,把代码写好了,然后一运行,不是自己想要的结果,就晕了,然后跑到论坛上发个帖子,把程序一贴,问:为什么我的程序不能正常运行?然后就等别人来给自己分析。这是一种很不好的行为,应该自己学会发现问题和学会如何解决问题。这就需要学习调试程序的方法,比如KEIL里,可以下断点啦,查看寄存器内容等等,这些都是调试程序的手段,当你发现你写的程
18、序运行结果和你想象中不一样的时候,你可以单步,也可以下断点,然后跟踪,查看各相关寄存器内容,看看程序运行过中是不是有什么偏差,找出影响结果的地方,改正过来。这一个过程非常重要,通过程序的排错,你可以学到的知识是书上得不到的。通过实验,学习了外部中断技术的基本使用方法;学习中断处理程序的编程方法。并由二极管发光生动显示。实验五 串行通信实验1实验目的(1)了解MCS-51单片机串行口(UART)的结构、PC机串行通信的基本要求、串行通信的原理和数据交换过程,掌握单片机与单片机间以及单片机与PC机间进行串行通信的编程方法。(2)掌握存储器扩展接口电路的设计方法;掌握单片机内部RAM和外部RAM之间
19、数据传送的特点。2实验内容单片机之间串行通信实验:甲机将存储在片外RAM的一组立即数(00H0FH)通过串口发送到乙机,乙机接收到后保存到片外RAM中,串口采用工作方式1,波特率为4800。晶阵为6MH3. 实验流程图4. 调试程序 1 ORG 0000H ;甲机发送程序 LJMP MAINA ORG 0023H AJMP SA ;串口中断 ORG 0100HMAINA: MOV SP,#60H ;设置堆栈指针 MOV SCON,#40H ;设置串行方式1 MOV TMOD,#20H ; 使用定时器T1的方式2 MOV TL1,#0FDH ;设置波特率为4800 MOV TH1,0FDH MO
20、V PCON,#00H ;电源控制 SETB TR1 ;TCON控制 SETB EA ;IE控制 SETB ES MOV DPTR,#0030H ;取片外RAM的一组立即数首地址 MOV R0,#00H ;设计数初值为0 MOVX A,DPTR ;取发送数据 MOV SBUF,A ;启动串行口 SJMP $ ;等待中断SA: CLR TI ;清发送中断标志 CJNE R0,#0FH,LOOPA CLR ES ; 接收完关串行口中断 AJMP ENDALOOPA: INC R0 ; 计数指针加1 INC DPTR ;地址指针加1 MOVX A,DPTR ;取发送数据 MOV SBUF,A ;启动
21、串行口ENDA: RETI ;中断返回 END 2 ORG 0000H ;乙机接受程序 LJMP MAINB ORG 0023H AJMP SB ;串口中断 ORG 0100HMAINB: MOV SP,#60H ;设置堆栈指针 MOV SCON,#50H ;设置串行方式1,允许串行接收位 MOV TMOD,#20H ; 使用定时器T1的方式2 MOV TL1,#0FDH ;设置波特率为4800 MOV TH1,0FDH MOV PCON,#00H ;电源控制 SETB TR1 ;TCON控制 SETB EA ;IE控制 SETB ES MOV DPTR,#0030H ;数据缓冲区首地址 MO
22、V R0,#00H ;设计数初值为0 SJMP $ ;等待中断SB: CLR RI ;清接收中断标志 MOV A,SBUF ;取接收的数据 MOVX DPTR,A ;接收的数据送缓存区 CJNE R0,#0FH,LOOPB ; 判别是否接收完 CLR ES ; 接收完关串行口中断 AJMP ENDBLOOPB: INC R0 ; 计数指针加1 INC DPTR ;地址指针加1ENDB: RETI ;中断返回 END5. 实验收获找到解决问题思路比找到代码更重要。我们用单片机来控制周边器件,达到我们想到的目的,这是一个题目,而如何写出一个程序,来控制器件按你想要的结果去运作,这个就是解题的思路。
23、要写程序,就得先找到解决问题的思路,你学会找出这个解题思路,比你找到代码更为重要。不少人很喜欢找人家的代码,有的人甚至有了代码就直接复制到自己的程序中,可以说,这不是一种学习的态度,无助于你编程水平的提高。通过实验,了解了MCS-51单片机串行口(UART)的结构、PC机串行通信的基本要求、串行通信的原理和数据交换过程,掌握单片机与单片机间以及单片机与PC机间进行串行通信的编程方法。掌握了存储器扩展接口电路的设计方法;掌握单片机内部RAM和外部RAM之间数据传送的特点。实验六 数码管显示实验1实验目的了解数码管动态显示的原理;了解用总线方式控制数码管显示。1 实验内容编写程序,使数码管显示当前日期(年-月-日)。说明:本实验仪提供了6 位8段码LED显示电路,学生只要按地址输出相应数据,就可以实现对显示器的控制。显示共有6位,用动态方式显示。8位段码、6位位
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025版配电房土建施工与配套设备采购一体化合同
- 2025年度政府采购协议供货及绿色采购认证合同
- 2025版新能源土地租赁合同补充协议书
- 2025版苹果产地直供与零售收购合同范本
- 2025版艺术画廊租赁管理协议
- 2025版室内门个性化设计、安装与售后服务合同
- 贵州省紫云苗族布依族自治县2025年上半年事业单位公开遴选试题含答案分析
- 2025年度环保监测系统软件升级改造变更协议
- 2025年企业员工职业规划培训承包合同
- 2025版全新农业行业劳务派遣合同试用期条款
- 2023施工项目部标准化工作手册
- 初中历史校本课程教案
- 七年级生物《哺乳动物》教案
- 【数学】四川省普通高中2024届高三上学期学业水平考试试题(解析版)
- 原发性骨质疏松症诊疗指南(2022版)第一部分
- 初中信息技术奥赛基础知识
- 重庆医科大学附属第一医院改建PET-CT、PET-MR项目环评报告
- 工业设计方法学
- 2022水电站计算机监控系统上位机现场验收标准手册
- 非计划再次手术管理制度与流程
- 下肢静脉曲张护理查房PPT
评论
0/150
提交评论