赞
踩
基于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闪烁一次
六、实验小结
要注意到原本电阻很大,LED没办法亮起来,将电阻改为100欧姆以后,LED正常使用(通过测试,低于500欧姆能发光,不过电阻在500欧姆时候只会微亮,不明显)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。