(1)用延时程序.
MAIN: SETB P1.0 ;让P1.0引脚变为高电平
LCALL DELAY
CLR P1.0 ;让P1.0引脚变为低电平
LCALL DELAY
LJMP MAIN
DELAY: MOV R7,#250 ;将立即数250送给工作寄存器R7
D1: MOV R6,#250
D2: DJNZ R6,D2 ;指令被执行250次,DJNZ的执行过程是
将其后面第一个参数值减1,然后看这个值是否等于0.如果等于0,往下执行;如果不等于0,则转到第二个参数所指定的位置去执行.
DJNZ R7,D1
RET
END
注:延时程序占用CPU时间,作为演示可以,实际工作中这样做并不恰当.
截一个图看看实际运行的效果:
(2)定时器的应用
ORG 0000H
AJMP START
ORG 30H
START:
MOV P1,#0FFH ;关P1口的所有灯
MOV TMOD,#00000001H ;定时器/计数器0工作于方式1
MOV TH0,#15H
MOV TL0,0A0H ;15A0H即十进制的5536
SETB TR0 ;定时器/计数器0开始运行
LOOP:
JBC TF0,NEXT ;这是一条判断转移并清0的指令,JBC后面的第1个参数值如果等于1,则跳到标号(NEXT)所指的位置去执行,同时把这一位清0
LJMP LOOP
NEXT:
CPL P1.0 ;取反
MOV TH0,#15H
MOV TL0,#0A0H ;重置定时器/计数器的初值
LJMP LOOP
END
文章评论(0条评论)
登录后参与讨论