华中科技大学单片机实验报告完整版LED灯控制器解读.docx
《华中科技大学单片机实验报告完整版LED灯控制器解读.docx》由会员分享,可在线阅读,更多相关《华中科技大学单片机实验报告完整版LED灯控制器解读.docx(13页珍藏版)》请在冰豆网上搜索。
华中科技大学单片机实验报告完整版LED灯控制器解读
任务要求】
利用C8051F310单片机设计一个LED灯控制器,LED灯外接于P0.0端,LED灯分别按2Hz,1Hz和0.5Hz三种不同频率闪动,各持续10s,在LED灯开始和停止闪烁时蜂鸣器分别鸣响1次,利用单片机内部定时器定时,要求采用中断方式。
设计思路
【设计思路】
设置定时器T0定时时间为25ms,每隔25ms开一次中断,共R1次,R0与R2共同作用构成循400次循环,以达到定时10秒的目的。
首先LED灯以2Hz频率闪动,初始赋值R1=10,循环执行10次中断后,即过去0.25s,灯闪烁一次,依次循环,直至10s定时时间到,蜂鸣器响一次,2Hz频率的闪烁结束。
然后LED灯以1Hz频率闪动,设置R1=20,与上类似,每过0.5s灯闪烁一次,十秒定时到,蜂鸣器响一次,到下一阶段。
最后LED灯以
0.5Hz频率闪动,设置R1=40即可,思路同上。
当三十秒执行完毕后,使用无条件转移语句跳转到程序开始处,循环以上过程。
【资源分配】
R1:
定时0.25秒,0.5秒或1秒
R0,R2:
循环400次,定时10秒
定时器T0:
定时中断25ms
定时器T1:
定时10s
流程图】
ORG0000H
LJMPMAIN
ORG000BH
LJMPIT0P
ORG001BH
LJMPIT1P
ORG1000H
MAIN:
LCALLInit_Device
MOVSP,#60H
MOVTMOD,#11H
MOVR0,#40
MOVR2,#10
MOVR1,#10
MOVTH1,#38H
MOVTL1,#9EH
MOVTH0,#38H
源代码(含文件头说明、资源使用说明、语句行注释)】
;-GeneratedInitializationFile--
$include(C8051F310.inc)
publicInit_Device
INITSEGMENTCODE
rsegINIT
;T0中断入口
;转T0中断服务程序
;T1中断入口
;转T1中断服务程序
;主程序
;设备初始化
;赋堆栈指针
;T1定时方式1,T0定时方式1
;循环400次
;定时0.25s
;T1置初值
;T0置初值
sgso
0械103
AOIAI
WWW心:
0械’心
AOIAI
心丄
dio
韋戦:
03丄
dio
买[1显者哪條t
idoon1o#103
3NrO
02#'心
AOIAI
00d
IdO
led
dio
买[1显者哪條t
idoon1o#'心
3NrO
丄日丄ms
府44:
03丄
日丄msJdOOl
led
日丄ms
0L#1Sd
AOIAI
邈oo>随動:
0械10d
AOIAI
WWW重凶
os#'心
AOIAI
心丄
dlO
韋戦:
03丄
dlO
买[1显者哪條:
doon'o#'03
3Nro
01#1Id
AOIAI
台盜:
00d
IdO
led
dlO
买[1显者哪條:
doon'o#'心
3Nro
lb丄日丄ms
帥胚拄144-
03丄日丄ms:
doon
日丄ms
o丄m
日丄ms
:
V3
日丄ms
SOL
S90
SOL
H36#'OUAOIAI
MOVR2,#10
LOOP2:
SETBP3.1
SETBTR0
SETBTR1
CJNER1,#0,LOOP2
CLRP3.1
CPLP0.0
MOVR1,#40
CJNER0,#0,LOOP2
CLRTR0
CLRTR1
计时
判断是否到达1s
取反
判断是否到达10s
清零
HERE:
AJMPHERE
等待中断
ORG1500H
IT0P:
MOVTH0,#38H
MOVTL0,#9EH
DJNZR2,LOOP0
MOVR2,#10DECR0
RETI
LOOP0:
RETI
;T0中断服务程序
;重置计数初值
;循环
ORG1600H
IT1P:
MOVTH1,#38H
;T1中断服务程序
;重置计数初值
MOVTL1,#9EH
DECR1
RETI
;Peripheralspecificinitializationfunctions,
;CalledfromtheInit_DevicelabelPCA_Init:
anlPCA0MD,#0BFh
movPCA0MD,#000h
ret
Timer_Init:
movTMOD,#001h
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
movXBR1,#040h
ret
Oscillator_Init:
movOSCICN,#083h
ret
Interrupts_Init:
movIE,#082h
ret
;Initializationfunctionfordevice,
;CallInit_Devicefromyourmainprogram
Init_Device:
lcallPCA_Init
lcallTimer_Init
lcallPort_IO_Init
lcallOscillator_Init
lcallInterrupts_Init
retend
程序测试方法与结果、软件即硬件性能分析】
一】软件测试与性能分析
1.开始时,LED灯以2Hz频率闪动,P0.0位输入,可以看到P0.0位的闪动。
10秒前,蜂鸣
器位P3.1一直为低电平。
截图如下:
此时时间为:
2.10s时刻,蜂鸣器响一次,P3.1恰变为高电平,截图如下:
此时时间为:
3.之后LED灯以1Hz频率闪动,观察发现,P0.0口的闪动比之前慢,且与显示时间对应,符合设计要求,截图如下:
此时时间为:
4.20s时刻,蜂鸣器响一次,对应的P3.1口变为高电平。
截图如下:
此时时间为:
5.20s之后,LED灯以0.5Hz频率闪动,观察发现,
P0.0口的闪动比之前又慢
,且与显
示时间对应,符合设计要求,截图如下:
此时时间为:
6.30s时刻,蜂鸣器又响一次,P3.1口变为高电平,截图如下:
此时时间为:
7.30s之后,LED灯又以2Hz闪动,即循环执行以上过程,截图如下:
通过以上分析可知程序在每一步骤运行正常,0~10sLED灯内以频率2Hz闪动,10s时蜂
鸣器响一次,之后10s~20s间,LED灯以频率1Hz闪动,20s时蜂鸣器又响一次,之后LED
灯以频率0.5s闪动,30s时蜂鸣器响一次,30s之后循环以上操作。
软件运行结果达到预期
目标,测试成功!
硬件测试(照片说明)
【思考题】
1.若想实现3种闪耀方式的持续时间在5s-20s范围内可调,且每种方式的持续时间各不相同,应如何设计程序?
答:
可以通过更改定时器T1的多次循环计时次数,来使10s计时变为其他时间。
通过KINT键进入更改模块,使用矩阵键盘以1s的步长增减T1计时时间。