ImageVerifierCode 换一换
格式:DOCX , 页数:21 ,大小:267.66KB ,
资源ID:7929031      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/7929031.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(微机实验报告.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

微机实验报告.docx

1、微机实验报告实验名称 指导教师 专业班级 姓名 学号 联系电话 一、 任务要求实验目的:加深对定时/计数器、中断、IO端口的理解,掌握定时/计数器、中断的应用编程技术及中断程序的调试方法。实验内容:利用C8051F310单片机设计一个LED灯控制器主要功能和技术指标要求:1. LED灯外接于P0.0端。2. LED灯分别按2Hz,1Hz和0.2Hz三种不同频率闪动,各持续10s。3. 在LED灯开始和停止闪烁时蜂鸣器分别鸣响1次。4. 利用单片机内部定时器定时,要求采用中断方式。 提高要求:使用按键(KINT)控制LED灯闪烁模式的切换。二、 设计思路使用TO计时器,先设置25MS的定时,CP

2、L反转20次是一个周期,即产生500ms为周期且占空比为百分之五十的方波,十秒结束即闪烁四十次,选用一个寄存器R3来储存闪烁次数,赋值为40,利用subb A,#39指令来判断是否达到40,并讲R3自加1,当R3到39时,MOV A,R3, SUBB A,#39,CY不会变为一,利用JNC判断转移来进入下一频率的闪烁。同理,产生周期为1S的方波,需要有 20次25ms的定时,并且用R4计数20次来判断是否达到10s即p0.0反转10次,同理,产生0.2HZ的方波,需要有 100次25ms的定时,用R5=4来判断是否达到10s。当0.2HZ达到10s时,跳转HERE指令,完成蜂鸣器指令。三、 资

3、源分配R0为长定时标志寄存器,为达到250ms,设为10,即25ms循环10次R1为长定时标志寄存器,为达到500ms,设为20,即25ms循环20次R2为长定时标志寄存器,为达到2.5s,设为100,即25ms循环100次R3为闪烁次数寄存器,为达到10s,需要p0.0翻转40次,即闪烁20次R4为闪烁次数寄存器,为达到10s,需要p0.0翻转20次,即闪烁10次R5为闪烁次数寄存器,为达到10s,需要p0.0翻转4次,即闪烁2次R6为延时循环计数器,控制蜂鸣器鸣声的时间。四、 流程图 五、源代码 (含文件头说明、语句行注释)$include (C8051F310.inc)ORG 0000H

4、 LJMP MAIN ORG 000BH ;T0计数中断 LJMP IT0_0 ORG 0100HMAIN: CLR P3.1 MOV P0,#0FFH ;把P0口都赋高电平 ACALL Init_Device ;调用初始化程序 MOV SP,#60H MOV TMOD , #01H ; 设定定时器模式 MOV TH0,#38H MOV TL0,#8EH ;设置初值25ms SETB ET0 ; 中断允许 SETB EA ;开总中断 setb TR0 ;开启定时器 MOV R0,#10 ;设置250MS的寄存器 MOV R1,#20 ;设置500MS的寄存器 MOV R2,#100 ;设置2.

5、5s的寄存器 MOV R3,#0 MOV R4,#0 MOV R5,#0 ;循环寄存器赋初值 SETB P3.1 ;开启蜂鸣器 ACALL DELAY ;调用延时子程序 CLR P3.1 ;关闭P3.1 ljmp $HERE: SETB P3.1 ;打开蜂鸣器 LCALL DELAY NOP LCALL DELAY ;调用延时子程序 CLR P3.1 ;延时之后关闭蜂鸣器 LJMP $ ;踏步指令IT0_0: _2HZ: CLR C;清除cy位 MOV A,R3 ;读取R3的值 SUBB A,#40 ;作减法运算,判断R3是否达到40 JNC _1HZ ;若达到40即10s2hz闪烁结束,跳转

6、1hz MOV TH0,#38H MOV TL0,#8EH ;重装初值 DJNZ R0,NEXT ;当R0减到0,达到250MS MOV R0,#10 ;重新给R0赋值 CPL P0.0 ;P0.0翻转 INC R3 ;R3加一 LJMP NEXT ;跳转NEXT_1HZ: MOV A,R4 ;读取R4的值 SUBB A,#20 ;作减法运算,判断R4是否达到20 JNC _0_2HZ ;若达到20即10s1hz闪烁结束,跳转0.2hz MOV TH0,#38H MOV TL0,#8EH ;重装初值 DJNZ R1,NEXT ;当R1减到0,达到500MS MOV R1,#20 ;重新给R1赋

7、值 CPL P0.0 ;P0.0翻转 INC R4 ;次数计数器加一 LJMP NEXT_0_2HZ: MOV A,R5 ;读取R5的值 SUBB A,#4 ;作减法运算,判断R5是否达到4 JNC HERE ;若达到4即10s0.2hz闪烁结束,跳转HERE MOV TH0,#38H MOV TL0,#8EH ;重装初值 DJNZ R2,NEXT MOV R2,#100 ;重新给R2赋值 CPL P0.0 ;P0.0翻转 INC R5 ;次数计数器加一 NEXT: RETIDELAY: mov R4,#10 mov R6,#00 mov R7,#00 DEL4: NOP DEL3: NOP

8、NOP DEL2: NOP NOP NOP NOP DJNZ R6,DEL2 djnz R7,DEL3 djnz R4,DEL4 RET PCA_Init: anl PCA0MD, #0BFh mov PCA0MD, #000h retPort_IO_Init: ; P0.0 - Unassigned, Open-Drain, Digital ; P0.1 - Unassigned, Open-Drain, Digital ; P0.2 - Unassigned, Open-Drain, Digital ; P0.3 - Unassigned, Open-Drain, Digital ; P0

9、.4 - Unassigned, Open-Drain, Digital ; P0.5 - Unassigned, Open-Drain, Digital ; P0.6 - Unassigned, Open-Drain, Digital ; P0.7 - Unassigned, Open-Drain, Digital ; P1.0 - Unassigned, Open-Drain, Digital ; P1.1 - Unassigned, Open-Drain, Digital ; P1.2 - Unassigned, Open-Drain, Digital ; P1.3 - Unassign

10、ed, Open-Drain, Digital ; P1.4 - Unassigned, Open-Drain, Digital ; P1.5 - Unassigned, Open-Drain, Digital ; P1.6 - Unassigned, Open-Drain, Digital ; P1.7 - Unassigned, Open-Drain, Digital ; P2.0 - Unassigned, Open-Drain, Digital ; P2.1 - Unassigned, Open-Drain, Digital ; P2.2 - Unassigned, Open-Drai

11、n, Digital ; P2.3 - Unassigned, Open-Drain, Digital mov P0MDOUT, #001h mov P3MDOUT, #002h mov XBR1, #040h retOscillator_Init: mov OSCICN, #083h retTimer_Init: mov TMOD, #001h ret; Initialization function for device,; Call Init_Device from your main programInit_Device: lcall PCA_Init lcall Port_IO_In

12、it lcall Oscillator_Init lcall Timer_Init retend六、程序测试方法与结果 程序测试方法:软件仿真测试方法:进入单步调试界面的波形仿真测试,调出P0.0以及P3.5的波形,仿真结果如截图所示。如图所示,该图为P0.0的整体波形,还有蜂鸣器p3.1的波形 如图所示,前10s的闪烁,周期约为500ms,即为2HZ,满足实验要求 如图所示,为10-20s的LED闪烁,周期约为1s,即1HZ满足实验要求。 如图所示,为20-30s的LED闪烁,周期约为5s,满足0.2hz的实验要求。如图所示,当2hz的闪烁达到10s时,进入1HZ闪烁阶段。如图所示,当1HZ

13、的闪烁达到10s时,进入0.2HZ闪烁阶段。当0.2HZ闪烁结束时,即达到30s时,闪烁结束,蜂鸣器随后高电平鸣响,持续时间约为0.5s。再次按键,此时再次循环进入2HZ的闪烁状态,此时,模式选择寄存器为工作模式0.如上图所示。硬件调试方法:在TARET OPTION界面选择DEBUG菜单,连接调试适配器之后,进行如下选择随后点击进入调试界面。程序全速运行时,蜂鸣器轻微鸣响,灯以比较快的速度(2HZ)闪烁,闪烁20次后频率变慢(1HZ),闪烁十次后频率进一步下降(0.2HZ),闪烁两次后蜂鸣器轻微鸣响,整个过程结束。提高部分:$include (C8051F310.inc)ORG 0000H

14、LJMP MAIN ORG 0003H LJMP EXT0 ORG 000BH ;T0计数中断 LJMP IT0_0 ORG 0200H MAIN: CLR P3.1 MOV P0,#0FFH ;把P0口都赋高电平 ACALL Init_Device ;调用初始化程序 CLR p0.0 ; P0.0清零 SETB IP.0 ; 将外部中断设为高优先级 MOV SP,#60H MOV TMOD , #01H ; 设定定时器模式 MOV TH0,#38H MOV TL0,#09EH ;设置初值25msSETB IT0 ;设置成下降沿触发 SETB EX0 ; 开外部中断 SETB ET0 ; 中断

15、允许 SETB EA ;开总中断 setb TR0 ;开启定时器 MOV R0,#10 ;设置250MS的寄存器 MOV R1,#20 ;设置500MS的寄存器 MOV R2,#100 ;设置2.5s的寄存器 MOV R3,#100 LJMP $ ;踏步指令EXT0: INC R5 ; R5自加1 INC R6 ; R6自加1 INC R7 ; R7自加1 CJNE R5,#3,LOOP; 当R5不是3时跳转LOOP MOV R5,#0 ; MOV R6,#0 ; MOV R7,#0 ;当R5,R6,R7均为3时,将这三个寄存器清零 LOOP: RETIIT0_0: _2HZ: CLR C M

16、OV A,R7 ; 将R7赋值给A SUBB A,#1 ; A-1 JNC _1HZ ; 若CY为0,即R7为1,进入_1HZ MOV TH0,#38H MOV TL0,#09EH ;设置初值25ms DJNZ R0,NEXT ; 若R0未到10次,即250MS,则跳转NEXT CPL P0.0 ; P0.0反转 MOV R0,#10 ; 给R0重新赋值 LJMP NEXT _1HZ: CLR C ; MOV A,R6 ; 将R6赋值给A SUBB A,#2 ; A-2 JNC _0_2HZ ; 若CY为0,即R6为2,进入_0.2HZ MOV TH0,#38H MOV TL0,#09EH ;

17、设置初值25ms DJNZ R1,NEXT ; 若R1未到20次,即500MS,则跳转NEXT CPL P0.0 ; P0.0反转 MOV R1,#20 ; 给R1重新赋值 LJMP NEXT_0_2HZ : CLR C ; MOV A,R5 ; 将R6赋值给A SUBB A,#3 ; A-3 JNC _2HZ ; 若CY为0,即R5为3,进入_2HZ MOV TH0,#38H MOV TL0,#09EH ;设置初值25ms DJNZ R2,NEXT ; 若R2未到100次,即2.5S,则跳转NEXT CPL P0.0 ; P0.0反转 MOV R2,#100 ; 给R2重新赋值 NEXT :

18、RETI PCA_Init: anl PCA0MD, #0BFh mov PCA0MD, #000h retPort_IO_Init: ; P0.0 - Unassigned, Open-Drain, Digital ; P0.1 - Unassigned, Open-Drain, Digital ; P0.2 - Unassigned, Open-Drain, Digital ; P0.3 - Unassigned, Open-Drain, Digital ; P0.4 - Unassigned, Open-Drain, Digital ; P0.5 - Unassigned, Open-D

19、rain, Digital ; P0.6 - Unassigned, Open-Drain, Digital ; P0.7 - Unassigned, Open-Drain, Digital ; P1.0 - Unassigned, Open-Drain, Digital ; P1.1 - Unassigned, Open-Drain, Digital ; P1.2 - Unassigned, Open-Drain, Digital ; P1.3 - Unassigned, Open-Drain, Digital ; P1.4 - Unassigned, Open-Drain, Digital

20、 ; P1.5 - Unassigned, Open-Drain, Digital ; P1.6 - Unassigned, Open-Drain, Digital ; P1.7 - Unassigned, Open-Drain, Digital ; P2.0 - Unassigned, Open-Drain, Digital ; P2.1 - Unassigned, Open-Drain, Digital ; P2.2 - Unassigned, Open-Drain, Digital ; P2.3 - Unassigned, Open-Drain, Digital mov P0MDOUT,

21、 #001h mov P3MDOUT, #002h mov XBR1, #040h retOscillator_Init: mov OSCICN, #083h retTimer_Init: mov TMOD, #001h ret; Initialization function for device,; Call Init_Device from your main programInit_Device: lcall PCA_Init lcall Port_IO_Init lcall Oscillator_Init lcall Timer_Init retend调试:软件仿真调试:软件仿真测试

22、方法:进入单步调试界面的波形仿真测试,调出P0.0波形如截图所示(此时没有按下键,执行2HZ频闪) 如图所示,此时R5=0,即进入0状态,一个周期约为500MS,即2HZ,此时模式0为2HZ闪烁状态。 如图所示,采用下降沿触发方式,当P0.1变低时,R5,R6,R7,加一,此时进入1模式,一个周期约为1s,即模式1为1HZ的闪烁,波形如上图所示。 如图所示,当将P0.1拉高运行一段时间再拉低,此时再次进入中断,R5,R6,R7变成2,进入2模式,周期约为5S如上图所示,即工作模式2为0.2HZ闪烁的工作模式。 分析:若使用电平触发,则会对循环产生影响,故选择使用下降沿触发。使用R5,R6,R7

23、,为了区分三种不同频率的工作模式,使思路更加简单(虽然消耗较多寄存器资源)。硬件调试:硬件调试方法:在TARET OPTION界面选择DEBUG菜单,连接调试适配器之后,进行如下选择随后点击进入调试界面。全速运行,先是很快速的闪烁,按下按键,切换至1HZ模式闪烁,再按下,切换至0.2HZ频率闪烁,然后再次按下重新回到2HZ频率闪烁。思考题:1. 若想实现3种闪烁方式的持续时间在5s-20s范围内可调,且每种方式的持续时间各不相同,应如何设计程序?先采用三分频,然后设置单位循环时间为200ms,利用矩阵键盘不同的键盘按下后,对应的长定时寄存器加5,达到不同循环加一秒,然后当达到20s时,转化为初值,即5s本人承诺:本报告内容真实,无伪造数据,无抄袭他人成果。本人完全了解学校相关规定,如若违反,愿意承担其后果。签字: 年 月 日 其它说明:1.标题:黑体,小四号2. 正文:宋体,五号,1.5倍行距3.流程图使用 SmartDraw7 或Visio软件绘制4.不要加封面

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1