华中科技大学单片机实验报告完整版LED灯控制器Word文档格式.docx
《华中科技大学单片机实验报告完整版LED灯控制器Word文档格式.docx》由会员分享,可在线阅读,更多相关《华中科技大学单片机实验报告完整版LED灯控制器Word文档格式.docx(15页珍藏版)》请在冰豆网上搜索。
定时中断25ms
定时器T1:
定时10s
【流程图】
【源代码 (含文件头说明、资源使用说明、语句行注释)】
;
------------------------------------
- GeneratedInitializationFile --
------------------------------------
$include(C8051F310.inc)
public Init_Device
INITSEGMENTCODE
rsegINIT
ORG0000H
ﻩLJMPMAIN
ORG000BHﻩﻩﻩ ;
T0中断入口
ﻩ LJMPIT0Pﻩﻩﻩ ;
转T0中断服务程序
ﻩORG001BHﻩ ;
T1中断入口
LJMPIT1Pﻩﻩﻩﻩ;
转T1中断服务程序
ﻩ ORG1000Hﻩﻩ;
主程序
MAIN:
LCALLInit_Device ﻩﻩ;
设备初始化
MOVSP,#60Hﻩﻩ;
赋堆栈指针
MOVTMOD , #11Hﻩ ;
T1定时方式1,T0定时方式1
ﻩMOV R0,#40ﻩﻩ ;
循环400次
ﻩﻩMOVR2, #10
ﻩMOV R1,#10ﻩﻩﻩ ;
定时0.25s
ﻩﻩ MOVTH1,#38Hﻩﻩ ;
T1置初值
ﻩMOV TL1,#9EH
ﻩMOV TH0,#38Hﻩﻩ ;
T0置初值
ﻩMOVTL0 , #9EH
ﻩSETB EAﻩﻩﻩﻩﻩﻩ;
允许中断
ﻩSETB ET0
SETB ET1
LOOP:
SETBTR0ﻩﻩ;
计时开始
SETBTR1
ﻩ CJNE R1, #0,LOOPﻩ;
判断是否到达0.25s
CLRP3.1
CPL P0.0ﻩﻩ;
取反
ﻩ MOV R1,#10
ﻩCJNE R0 ,#0,LOOPﻩﻩﻩ;
判断是否到达10s
ﻩCLR TR0ﻩﻩﻩ ;
清零
ﻩﻩ CLR TR1
ﻩ MOV R1,#20ﻩﻩﻩ;
R1重新赋值
ﻩﻩ MOVR0,#40ﻩﻩﻩ;
循环400次
ﻩﻩ MOV R2,#10
ﻩSETB P3.1
LOOP1:
SETBTR0ﻩ ;
计时
SETB TR1
ﻩCJNER1,#0,LOOP1ﻩﻩ;
判断是否到达0.5s
ﻩCLRP3.1
CPLP0.0 ;
ﻩﻩ MOV R1,#20
CJNER0,#0,LOOP1ﻩﻩ;
判断是否到达10s
CLRTR0ﻩ;
ﻩCLR TR1
ﻩ MOVR1 ,#40ﻩﻩ ;
R1再次赋值
MOVR0 ,#40ﻩﻩﻩ;
循环
ﻩﻩ MOV R2,#10
LOOP2:
SETB P3.1
SETBTR0ﻩﻩﻩﻩ ;
ﻩﻩSETB TR1
CJNE R1, #0 ,LOOP2ﻩ;
判断是否到达1s
ﻩCLR P3.1
ﻩ CPL P0.0ﻩﻩﻩ ;
ﻩ MOV R1 ,#40
ﻩ CJNE R0,#0,LOOP2ﻩ;
ﻩCLRTR0ﻩ ;
ﻩ CLRTR1
HERE:
AJMP HEREﻩ ﻩﻩ;
等待中断
ﻩORG 1500Hﻩﻩ;
T0中断服务程序
IT0P:
MOVTH0,#38Hﻩﻩ;
重置计数初值
MOV TL0 ,#9EH
ﻩ DJNZR2 ,LOOP0 ;
ﻩ MOVR2,#10
ﻩDEC R0
ﻩ RETI
LOOP0:
RETI
ORG1600Hﻩﻩ ;
T1中断服务程序
IT1P:
MOV TH1,#38Hﻩﻩ;
ﻩ MOVTL1 ,#9EH
ﻩDEC R1
ﻩ RETI
Peripheralspecificinitializationfunctions,
Calledfromthe Init_Devicelabel
PCA_Init:
anl PCA0MD,#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
mov XBR1,#040h
ret
Oscillator_Init:
mov OSCICN,#083h
ret
Interrupts_Init:
mov IE, #082h
ret
;
Initializationfunctionfordevice,
CallInit_Devicefromyourmainprogram
Init_Device:
lcallPCA_Init
lcall Timer_Init
lcall Port_IO_Init
lcallOscillator_Init
lcallInterrupts_Init
ret
end
【程序测试方法与结果、软件即硬件性能分析】
【一】软件测试与性能分析
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计时时间。