微机实验报告Word下载.docx
《微机实验报告Word下载.docx》由会员分享,可在线阅读,更多相关《微机实验报告Word下载.docx(21页珍藏版)》请在冰豆网上搜索。
四、流程图
五、源代码(含文件头说明、语句行注释)
$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
MOVTL0,#8EH;
重装初值
DJNZR0,NEXT;
当R0减到0,达到250MS
重新给R0赋值
CPLP0.0;
P0.0翻转
INCR3;
R3加一
LJMPNEXT;
跳转NEXT
_1HZ:
MOVA,R4;
读取R4的值
SUBBA,#20;
作减法运算,判断R4是否达到20
JNC_0_2HZ;
若达到20即10s1hz闪烁结束,跳转0.2hz
DJNZR1,NEXT;
当R1减到0,达到500MS
重新给R1赋值
P0.0翻转
INCR4;
次数计数器加一
LJMPNEXT
_0_2HZ:
MOVA,R5;
读取R5的值
SUBBA,#4;
作减法运算,判断R5是否达到4
JNCHERE;
若达到4即10s0.2hz闪烁结束,跳转HERE
DJNZR2,NEXT
重新给R2赋值
INCR5;
NEXT:
RETI
DELAY:
movR4,#10
movR6,#00
movR7,#00
DEL4:
DEL3:
DEL2:
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
Oscillator_Init:
movOSCICN,#083h
Timer_Init:
movTMOD,#001h
;
Initializationfunctionfordevice,
CallInit_Devicefromyourmainprogram
Init_Device:
lcallPCA_Init
lcallPort_IO_Init
lcallOscillator_Init
lcallTimer_Init
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),闪烁两次后蜂鸣器轻微鸣响,整个过程结束。
提高部分:
ORG0003H
LJMPEXT0
ORG0200H
MOVP0,#0FFH;
CLRp0.0;
P0.0清零
SETBIP.0;
将外部中断设为高优先级
MOVTL0,#09EH;
SETBIT0;
设置成下降沿触发
SETBEX0;
开外部中断
开启定时器
设置2.5s的寄存器
MOVR3,#100
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:
CLRC
MOVA,R7;
将R7赋值给A
SUBBA,#1;
A-1
JNC_1HZ;
若CY为0,即R7为1,进入_1HZ
DJNZR0,NEXT;
若R0未到10次,即250MS,则跳转NEXT
CPLP0.0;
P0.0反转
MOVR0,#10;
给R0重新赋值
LJMPNEXT
CLRC;
MOVA,R6;
将R6赋值给A
SUBBA,#2;
A-2
JNC_0_2HZ;
若CY为0,即R6为2,进入_0.2HZ
MOVTH0,#38H
DJNZR1,NEXT;
若R1未到20次,即500MS,则跳转NEXT
CPLP0.0;
MOVR1,#20;
给R1重新赋值
_0_2HZ:
CLRC;
MOVA,R5;
SUBBA,#3;
A-3
JNC_2HZ;
若CY为0,即R5为3,进入_2HZ
DJNZR2,NEXT;
若R2未到100次,即2.5S,则跳转NEXT
MOVR2,#100;
给R2重新赋值
NEXT:
RETI
调试:
软件仿真调试:
进入单步调试界面的波形仿真测试,调出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,为了区分三种不同频率的工作模式,使思路更加简单(虽然消耗较多寄存器资源)。
硬件调试:
全速运行,先是很快速的闪烁,按下按键,切换至1HZ模式闪烁,再按下,切换至0.2HZ频率闪烁,然后再次按下重新回到2HZ频率闪烁。
思考题:
1.若想实现3种闪烁方式的持续时间在5s-20s范围内可调,且每种方式的持续时间各不相同,应如何设计程序?
先采用三分频,然后设置单位循环时间为200ms,利用矩阵键盘不同的键盘按下后,对应的长定时寄存器加5,达到不同循环加一秒,然后当达到20s时,转化为初值,即5s
本人承诺:
本报告内容真实,无伪造数据,无抄袭他人成果。
本人完全了解学校相关规定,如若违反,愿意承担其后果。
签字:
年月日
其它说明:
1.标题:
黑体,小四号
2.正文:
宋体,五号,1.5倍行距
3.流程图使用SmartDraw7或Visio软件绘制
4.不要加封面