1、四、 流程图 五、源代码 (含文件头说明、语句行注释)$include (C8051F310.inc)ORG 0000H 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 R
2、0,#10 ;设置250MS的寄存器 MOV R1,#20 ;设置500MS的寄存器 MOV R2,#100 ;设置2.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
3、A,#40 ;作减法运算,判断R3是否达到40 JNC _1HZ ;若达到40即10s2hz闪烁结束,跳转1hz MOV TL0,#8EH ;重装初值 DJNZ R0,NEXT ;当R0减到0,达到250MS重新给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 DJNZ R1,NEXT ;当R1减到0,达到500MS重新给R1赋值P0.0翻转 INC R4 ;次数
4、计数器加一 LJMP NEXT_0_2HZ: MOV A,R5 ;读取R5的值 SUBB A,#4 ;作减法运算,判断R5是否达到4 JNC HERE ;若达到4即10s0.2hz闪烁结束,跳转HERE DJNZ R2,NEXT重新给R2赋值 INC R5 ; NEXT: RETIDELAY: mov R4,#10 mov R6,#00 mov R7,#00 DEL4: DEL3: DEL2: NOP DJNZ R6,DEL2 djnz R7,DEL3 djnz R4,DEL4 RET PCA_Init: anl PCA0MD, #0BFh mov PCA0MD, #000h retPort_
5、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 - Unassigne
6、d, 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
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, #001h mov P3MDOUT, #002h mov XBR1, #040hOscillator_Init: mov OSCICN, #083hTimer_Init: mov TMOD,
8、#001h; Initialization function for device, Call Init_Device from your main programInit_Device: lcall PCA_Init lcall Port_IO_Init lcall Oscillator_Init lcall Timer_Initend六、程序测试方法与结果 程序测试方法:软件仿真测试方法:进入单步调试界面的波形仿真测试,调出P0.0以及P3.5的波形,仿真结果如截图所示。如图所示,该图为P0.0的整体波形,还有蜂鸣器p3.1的波形如图所示,前10s的闪烁,周期约为500ms,即为2HZ,满
9、足实验要求如图所示,为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.如上图所示。硬件调试方法:在TARET OPTION界面选择DEBUG菜单,连接调试适配器之后,进行如下选择随后点击进入调试界面。程序全速运行时,
10、蜂鸣器轻微鸣响,灯以比较快的速度(2HZ)闪烁,闪烁20次后频率变慢(1HZ),闪烁十次后频率进一步下降(0.2HZ),闪烁两次后蜂鸣器轻微鸣响,整个过程结束。提高部分: ORG 0003H LJMP EXT0 ORG 0200HMOV P0,#0FFH ; CLR p0.0 ; P0.0清零 SETB IP.0 ; 将外部中断设为高优先级 MOV TL0,#09EH ;SETB IT0 ;设置成下降沿触发 SETB EX0 ; 开外部中断开启定时器设置2.5s的寄存器 MOV R3,#100 EXT0: INC R5 ; R5自加1 INC R6 ; R6自加1 INC R7 ; R7自加1
11、 CJNE R5,#3,LOOP; 当R5不是3时跳转LOOP MOV R5,#0 ; MOV R6,#0 ; MOV R7,#0 ;当R5,R6,R7均为3时,将这三个寄存器清零 LOOP: CLR C MOV A,R7 ; 将R7赋值给A SUBB A,#1 ; A-1 JNC _1HZ ; 若CY为0,即R7为1,进入_1HZ DJNZ R0,NEXT ; 若R0未到10次,即250MS,则跳转NEXT CPL P0.0 ; P0.0反转 MOV R0,#10 ; 给R0重新赋值 LJMP NEXT CLR C ; MOV A,R6 ; 将R6赋值给A SUBB A,#2 ; A-2 J
12、NC _0_2HZ ; 若CY为0,即R6为2,进入_0.2HZ MOV TH0,#38H DJNZ R1,NEXT ; 若R1未到20次,即500MS,则跳转NEXT CPL P0.0 ; MOV R1,#20 ; 给R1重新赋值_0_2HZ : CLR C ; MOV A,R5 ; SUBB A,#3 ; A-3 JNC _2HZ ; 若CY为0,即R5为3,进入_2HZ DJNZ R2,NEXT ; 若R2未到100次,即2.5S,则跳转NEXT MOV R2,#100 ; 给R2重新赋值 NEXT :RETI 调试:软件仿真调试:进入单步调试界面的波形仿真测试,调出P0.0波形如截图所
13、示(此时没有按下键,执行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,为了区分三种不同频率的工作模式,使思路更加简单(虽然消耗较多寄存器
14、资源)。硬件调试:全速运行,先是很快速的闪烁,按下按键,切换至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