当前位置:   article > 正文

51单片机定时器实验(汇编)_用t0定时器方式1,实现0.5s的时间间隔实现第一次一个灯亮

用t0定时器方式1,实现0.5s的时间间隔实现第一次一个灯亮

基于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的方波。

四、实验代码

代码以及注释

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

电路图如下

 

五、实验结果

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

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

六、实验小结

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/637182
推荐阅读
相关标签
  

闽ICP备14008679号