微机实验报告.docx

上传人:b****5 文档编号:7929031 上传时间:2023-01-27 格式:DOCX 页数:21 大小:267.66KB
下载 相关 举报
微机实验报告.docx_第1页
第1页 / 共21页
微机实验报告.docx_第2页
第2页 / 共21页
微机实验报告.docx_第3页
第3页 / 共21页
微机实验报告.docx_第4页
第4页 / 共21页
微机实验报告.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

微机实验报告.docx

《微机实验报告.docx》由会员分享,可在线阅读,更多相关《微机实验报告.docx(21页珍藏版)》请在冰豆网上搜索。

微机实验报告.docx

微机实验报告

实验名称

指导教师

专业班级姓名学号

联系电话

一、任务要求

实验目的:

加深对定时/计数器、中断、IO端口的理解,掌握定时/计数器、中断的应用编程技术及中断程序的调试方法。

实验内容:

利用C8051F310单片机设计一个LED灯控制器

主要功能和技术指标要求:

1.LED灯外接于P0.0端。

2.LED灯分别按2Hz,1Hz和0.2Hz三种不同频率闪动,各持续10s。

3.在LED灯开始和停止闪烁时蜂鸣器分别鸣响1次。

4.利用单片机内部定时器定时,要求采用中断方式。

提高要求:

使用按键(KINT)控制LED灯闪烁模式的切换。

二、设计思路

使用TO计时器,先设置25MS的定时,CPL反转20次是一个周期,即产生500ms为周期且占空比为百分之五十的方波,十秒结束即闪烁四十次,选用一个寄存器R3来储存闪烁次数,赋值为40,利用subbA,#39指令来判断是否达到40,并讲R3自加1,当R3到39时,MOVA,R3,SUBBA,#39,CY不会变为一,利用JNC判断转移来进入下一频率的闪烁。

同理,产生周期为1S的方波,需要有20次25ms的定时,并且用R4计数20次来判断是否达到10s即p0.0反转10次,同理,产生0.2HZ的方波,需要有100次25ms的定时,用R5=4来判断是否达到10s。

当0.2HZ达到10s时,跳转HERE指令,完成蜂鸣器指令。

三、资源分配

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)

ORG0000H

LJMPMAIN

ORG000BH;T0计数中断

LJMPIT0_0

ORG0100H

MAIN:

CLRP3.1

MOVP0,#0FFH;把P0口都赋高电平

ACALLInit_Device;调用初始化程序

MOVSP,#60H

MOVTMOD,#01H;设定定时器模式

MOVTH0,#38H

MOVTL0,#8EH;设置初值25ms

SETBET0;中断允许

SETBEA;开总中断

setbTR0;开启定时器

MOVR0,#10;设置250MS的寄存器

MOVR1,#20;设置500MS的寄存器

MOVR2,#100;设置2.5s的寄存器

MOVR3,#0

MOVR4,#0

MOVR5,#0;循环寄存器赋初值

SETBP3.1;开启蜂鸣器

ACALLDELAY;调用延时子程序

CLRP3.1;关闭P3.1

ljmp$

HERE:

SETBP3.1;打开蜂鸣器

LCALLDELAY

NOP

LCALLDELAY;调用延时子程序

CLRP3.1;延时之后关闭蜂鸣器

LJMP$;踏步指令

IT0_0:

_2HZ:

CLRC;清除cy位

MOVA,R3;读取R3的值

SUBBA,#40;作减法运算,判断R3是否达到40

JNC_1HZ;若达到40即10s2hz闪烁结束,跳转1hz

MOVTH0,#38H

MOVTL0,#8EH;重装初值

DJNZR0,NEXT;当R0减到0,达到250MS

MOVR0,#10;重新给R0赋值

CPLP0.0;P0.0翻转

INCR3;R3加一

LJMPNEXT;跳转NEXT

_1HZ:

MOVA,R4;读取R4的值

SUBBA,#20;作减法运算,判断R4是否达到20

JNC_0_2HZ;若达到20即10s1hz闪烁结束,跳转0.2hz

MOVTH0,#38H

MOVTL0,#8EH;重装初值

DJNZR1,NEXT;当R1减到0,达到500MS

MOVR1,#20;重新给R1赋值

CPLP0.0;P0.0翻转

INCR4;次数计数器加一

LJMPNEXT

_0_2HZ:

MOVA,R5;读取R5的值

SUBBA,#4;作减法运算,判断R5是否达到4

JNCHERE;若达到4即10s0.2hz闪烁结束,跳转HERE

MOVTH0,#38H

MOVTL0,#8EH;重装初值

DJNZR2,NEXT

MOVR2,#100;重新给R2赋值

CPLP0.0;P0.0翻转

INCR5;次数计数器加一

NEXT:

RETI

DELAY:

movR4,#10

movR6,#00

movR7,#00

DEL4:

NOP

DEL3:

NOP

NOP

DEL2:

NOP

NOP

NOP

NOP

DJNZR6,DEL2

djnzR7,DEL3

djnzR4,DEL4

RET

PCA_Init:

anlPCA0MD,#0BFh

movPCA0MD,#000h

ret

Port_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-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-Unassigned,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-Drain,Digital

;P2.3-Unassigned,Open-Drain,Digital

movP0MDOUT,#001h

movP3MDOUT,#002h

movXBR1,#040h

ret

Oscillator_Init:

movOSCICN,#083h

ret

Timer_Init:

movTMOD,#001h

ret

;Initializationfunctionfordevice,

;CallInit_Devicefromyourmainprogram

Init_Device:

lcallPCA_Init

lcallPort_IO_Init

lcallOscillator_Init

lcallTimer_Init

ret

end

六、程序测试方法与结果

程序测试方法:

软件仿真测试方法:

进入单步调试界面的波形仿真测试,调出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的闪烁达到10s时,进入0.2HZ闪烁阶段。

当0.2HZ闪烁结束时,即达到30s时,闪烁结束,蜂鸣器随后高电平鸣响,持续时间约为0.5s。

再次按键,此时再次循环进入2HZ的闪烁状态,此时,模式选择寄存器为工作模式0.如上图所示。

硬件调试方法:

在TARETOPTION界面选择DEBUG菜单,连接调试适配器之后,进行如下选择

随后点击进入调试界面。

程序全速运行时,蜂鸣器轻微鸣响,灯以比较快的速度(2HZ)闪烁,闪烁20次后频率变慢(1HZ),闪烁十次后频率进一步下降(0.2HZ),闪烁两次后蜂鸣器轻微鸣响,整个过程结束。

提高部分:

$include(C8051F310.inc)

ORG0000H

LJMPMAIN

ORG0003H

LJMPEXT0

ORG000BH;T0计数中断

LJMPIT0_0

ORG0200H

MAIN:

CLRP3.1

MOVP0,#0FFH;把P0口都赋高电平

ACALLInit_Device;调用初始化程序

CLRp0.0;P0.0清零

SETBIP.0;将外部中断设为高优先级

MOVSP,#60H

MOVTMOD,#01H;设定定时器模式

MOVTH0,#38H

MOVTL0,#09EH;设置初值25ms

SETBIT0;设置成下降沿触发

SETBEX0;开外部中断

SETBET0;中断允许

SETBEA;开总中断

setbTR0;开启定时器

MOVR0,#10;设置250MS的寄存器

MOVR1,#20;设置500MS的寄存器

MOVR2,#100;设置2.5s的寄存器

MOVR3,#100

LJMP$;踏步指令

EXT0:

INCR5;R5自加1

INCR6;R6自加1

INCR7;R7自加1

CJNER5,#3,LOOP;当R5不是3时跳转LOOP

MOVR5,#0;

MOVR6,#0;

MOVR7,#0;当R5,R6,R7均为3时,将这三个寄存器清零

LOOP:

RETI

IT0_0:

_2HZ:

CLRC

MOVA,R7;将R7赋值给A

SUBBA,#1;A-1

JNC_1HZ;若CY为0,即R7为1,进入_1HZ

MOVTH0,#38H

MOVTL0,#09EH;设置初值25ms

DJNZR0,NEXT;若R0未到10次,即250MS,则跳转NEXT

CPLP0.0;P0.0反转

MOVR0,#10;给R0重新赋值

LJMPNEXT

_1HZ:

CLRC;

MOVA,R6;将R6赋值给A

SUBBA,#2;A-2

JNC_0_2HZ;若CY为0,即R6为2,进入_0.2HZ

MOVTH0,#38H

MOVTL0,#09EH;设置初值25ms

DJNZR1,NEXT;若R1未到20次,即500MS,则跳转NEXT

CPLP0.0;P0.0反转

MOVR1,#20;给R1重新赋值

LJMPNEXT

_0_2HZ:

CLRC;

MOVA,R5;将R6赋值给A

SUBBA,#3;A-3

JNC_2HZ;若CY为0,即R5为3,进入_2HZ

MOVTH0,#38H

MOVTL0,#09EH;设置初值25ms

DJNZR2,NEXT;若R2未到100次,即2.5S,则跳转NEXT

CPLP0.0;P0.0反转

MOVR2,#100;给R2重新赋值

NEXT:

RETI

PCA_Init:

anlPCA0MD,#0BFh

movPCA0MD,#000h

ret

Port_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-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-Unassigned,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-Drain,Digital

;P2.3-Unassigned,Open-Drain,Digital

movP0MDOUT,#001h

movP3MDOUT,#002h

movXBR1,#040h

ret

Oscillator_Init:

movOSCICN,#083h

ret

Timer_Init:

movTMOD,#001h

ret

;Initializationfunctionfordevice,

;CallInit_Devicefromyourmainprogram

Init_Device:

lcallPCA_Init

lcallPort_IO_Init

lcallOscillator_Init

lcallTimer_Init

ret

end

调试:

软件仿真调试:

软件仿真测试方法:

进入单步调试界面的波形仿真测试,调出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,为了区分三种不同频率的工作模式,使思路更加简单(虽然消耗较多寄存器资源)。

硬件调试:

硬件调试方法:

在TARETOPTION界面选择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