51单片机定时器实验详细教程(汇编版)

基于AT89C51的定时器实验,汇编语言,分享出来是希望各位能共同学习。附上注释希望能认真研究,若有错误请指出,谢谢。

一、实验目的

  1. 掌握单片机定时器的使用方法。
  2. 掌握中断的使用方法。

二、实验内容

采用中断方式控制定时器。使得单片机P1.0引脚产生周期为1S的方波,控制发光二极管D1以1S为周期闪烁(即亮、灭的时间各为0.5S)。单片机P1.1引脚产生周期为20S的方波,控制发光二极管D2以20S为周期闪烁(即亮、灭的时间各为10S)。

三、 实验说明

       中断定时时间可设置为50ms,计时50ms时间到即进入中断子程序。同时,程序设置两个计数器,进入中断子程序则计数器10减1,计数器10减为0则定时时间为0.5s,此时可将P1.0口的值取反,产生周期为1s的方波;而当0.5s时间到,计数器20可减1,当减为0则定时时间为10s,此时可将P1.1口的值取反,产生周期为20s的方波。

四、实验代码

代码以及注释

  ORG	0000H			;程序入口地址
	    AJMP	START			;跳转到START程序
	    ORG	000BH			;中断服务程序入口
	    AJMP	TIME			;中断服务程序TIME
	    ORG	0030H			;START程序起始地址
START:	
	    MOV	SP,#60H			;设置堆栈指针
	    MOV	TMOD,#01H	;设置T0方式1定时模式
	    MOV	TL0,#0B0H		;TL0赋初值
	    MOV 	TH0,#3CH		;TH0赋初值,总定时50ms
	    SETB	ET0				;允许T0中断
	     SETB	TR0			  ;启动T0计数
	    SETB	EA				;允许总中断
	    MOV	R7,#20			;计数器2	,只有R1循环十次,R0才循环一次
	    MOV	R2,#10			;计数器1
LOOP:	
	    AJMP	LOOP			;等待循环
TIME:   
	    MOV	TL0,#0B0H		;恢复定时器初值
	    MOV	TH0,#3CH		
	    DJNZ	R2,SS			;当R1不为0时,跳出中断,又开始计时,为0时,将R1的循环次数恢复,为下一次循环做准备
	    MOV	R2,#10
	    CPL	P0.0			;计时到0.5s,P0.0取反
	    DJNZ	R7,SS			;当R0不等于0时,跳出中断,计时,为0时,恢复循环次数,
	    MOV	R7,#20
	    CPL	P0.1
SS:	  	    
	    RETI	    
	    END

电路图如下

 

五、实验结果

1.定时器D1 0.5S闪烁一次

2.定时器D2 10S闪烁一次

六、实验小结

要注意到原本电阻很大,LED没办法亮起来,将电阻改为100欧姆以后,LED正常使用(通过测试,低于500欧姆能发光,不过电阻在500欧姆时候只会微亮,不明显)

物联沃分享整理
物联沃-IOTWORD物联网 » 51单片机定时器实验详细教程(汇编版)

发表评论