基于51单片机的程序设计实例

需积分: 10 0 下载量 184 浏览量 更新于2024-07-24 收藏 112KB DOC 举报
51单片机程序 51单片机程序是学习汇编语言的有力工具,对学习汇编语言有很大帮助。下面我们将对51单片机程序进行详细的解释和分析。 4.1流水灯程序 流水灯程序的目的是利用P1口通过一定延时轮流产生低电平输出,以达到发光二极管轮流亮的效果。实际应用中例如广告灯箱彩灯、霓虹灯闪烁。 程序实例(LAMP.ASM): ORG 0000H AJMP MAIN ORG 0030H MAIN: MOVA, #00H MOVP1, A ; 灭所有的灯 MOVA, #11111110B MAIN1: MOVP1, A ; 开最左边的灯 ACALL DELAY ; 延时 RLA ; 将开的灯向右边移 AJMP MAIN ; 循环 DELAY: MOV 30H, #0FFH D1: MOV 31H, #0FFH D2: DJNZ 31H, D2 DJNZ 30H, D1 RET END 在这个程序中,我们首先将P1口的所有灯灭掉,然后将最左边的灯打开,并延时一段时间,然后将开的灯向右边移,最后循环这个过程。 4.2方波输出程序 方波输出程序的目的是P1.0口输出高电平,延时后再输出低电平,循环输出产生方波。实际应用中例如波形发生器。 程序实例(FAN.ASM): ORG 0000H MAIN: ; 直接利用P1.0口产生高低电平地形成方波////////////// ACALL DELAY SETB P1.0 ACALL DELAY CLRP1.0 AJMP MAIN ; /////////////////////////////////////// DELAY: MOVR1, #0FFH DJNZ R1, $ RET END 在这个程序中,我们首先输出高电平,然后延时一段时间,然后输出低电平,最后循环这个过程。 五、定时器功能实例 5.1定时1秒报警程序 定时1秒报警程序的目的是定时器1每隔1秒钟将P1.0的输出状态改变1次,以达到定时报警的目的。实际应用例如定时报警器。 程序实例(DIN1.ASM): ORG 0000H AJMP MAIN ORG 000BH AJMP DIN0 ; 定时器0入口 MAIN: TFLAG EQU 34H ; 时间秒标志,判是否到50个 0.2秒,即50*0.2=1秒 MOVTMOD, #00000001B ; 定时器0工作于方式 1 MOVTL0, #0AFH MOVTH0, #3CH ; 设定时时间为0.05秒,定时 20次则一秒 SETB EA ; 开总中断 SETB ET0 ; 开定时器0中断允许 SETB TR0 ; 开定时0运行 SETB P1.0 LOOP: AJMP LOOP DIN0: ; 是否到一秒//////////////////////////////////////// INCC: INCTFLAG MOVA, TFLAG CJNE A, #20, RE MOVTFLAG, #00H CPL P1.0 在这个程序中,我们首先设置定时器0的工作方式,然后设置定时时间为0.05秒,最后每隔1秒钟将P1.0的输出状态改变1次。 51单片机程序提供了多种实用的程序实例,能够帮助学习汇编语言的学生更好地理解和掌握汇编语言的知识和技能。