51单片机实用程序库 4.1 流水灯
程序介绍:利用P1 口通过一定延时轮流产生低电平
输出,以达到发光二极管轮流亮的效果。实际应用中例如:广告灯箱彩灯、霓虹灯闪烁。 程序实例(LAMP.ASM) ORG 0000H AJMP MAIN ORG 0030H MAIN: 9
MOV A,#00H
MOV P1,A ;灭所有的灯 MOV A,#11111110B MAIN1:
MOV P1,A ;开最左边的灯 ACALL DELAY ;延时 RL A ;将开的灯向右边移 AJMP MAIN ;循环 DELAY:
MOV 30H,#0FFH D1: MOV 31H,#0FFH
D2: DJNZ 31H,D2 DJNZ 30H,D1 RET END 4.2 方波输出
程序介绍:P1.0 口输出高电平,延时后再输出低电 平,循环输出产生方波。实际应用中例如:波形发生器。 程序实例(FAN.ASM): ORG 0000H MAIN:
;直接利用P1.0口产生高低电平地形成方波////////////// ACALL DELAY SETB P1.0 ACALL DELAY 10 CLR P1.0 AJMP MAIN
;////////////////////////////////////////////////// DELAY: MOV R1,#0FFH DJNZ R1,$ RET END
五、定时器功能实例 5.1 定时1秒报警
程序介绍:定时器1每隔1秒钟将p1.o的输出状态改变1 次,以达到定时报警的目的。实际应用例如:定时报警器。程序实例(DIN1.ASM): ORG 0000H AJMP MAIN ORG 000BH
AJMP DIN0 ;定时器0入口 MAIN:
TFLA G EQU 34H ;时间秒标志,判是否到50个 0.2秒,即50*0.2=1秒
MOV TMOD,#00000001B;定时器0工作于方式 1
MOV TL0,#0AFH
MOV TH0,#3CH ;设定时时间为0.05秒,定时 20次则一秒 11
SETB EA ;开总中断
SETB ET0 ;开定时器0中断允许 SETB TR0 ;开定时0运行 SETB P1.0
LOOP: AJMP LOOP DIN0:
;是否到一秒//////////////////////////////////////// INCC: INC TFLAG MOV A,TFLAG CJNE A,#20,RE MOV TFLAG,#00H CPL P1.0
;////////////////////////////////////////////////// RE: MOV TL0,#0AFH
MOV TH0,#3CH ;设定时时间为0.05秒,定时 20次则一秒 RETI END
5.2 频率输出公式 介绍:f=1/t
s51 使用12M晶振,一个周期是1微秒使用定时器1 工作于方式0,最大值为65535,以产生200HZ的频率为 例:
200=1/t:推出t=0.005 秒,即5000 微秒,即一个高电12
平或低电平的时间为2500 微秒。这样,定时值应设为65535-2500=63035,将它转换为十六进制则为:F63B。具体程序请看f200.asm
频率递增:
200HZ:63035:F63B 250HZ:63535:F82F 300HZ:63868:F97C 5.3 200HZ频率输出
程序介绍:利用定时器定时,在P1.0 口产生200HZ 的频率输出。实际应用例如:传感器前级推动。 程序实例(F200.ASM): ORG 0000H AJMP MAIN ORG 001BH AJMP DIN0 MAIN:
CLR P1.0 ;产生一个低电平,实际上 是从p1.0口产生频率
MOV TMOD,#00010000B ;定时器1工作于方式0 MOV TH1,#0F6H
MOV TL1,#3BH ;频率产生的时间,详细请 见频率公式 SETB EA ;开总中断 13
SETB TR1 ;开定时器1运行