基于AT89C51的定时器实验,汇编语言,分享出来是希望各位能共同学习。附上注释希望能认真研究,若有错误请指出,谢谢。
一、实验目的
- 掌握单片机定时器的使用方法。
- 掌握中断的使用方法。
二、实验内容
采用中断方式控制定时器。使得单片机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闪烁一次
六、实验小结文章来源:https://www.toymoban.com/news/detail-507366.html
要注意到原本电阻很大,LED没办法亮起来,将电阻改为100欧姆以后,LED正常使用(通过测试,低于500欧姆能发光,不过电阻在500欧姆时候只会微亮,不明显)文章来源地址https://www.toymoban.com/news/detail-507366.html
到了这里,关于51单片机定时器实验(汇编)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!