51单片机与汇编之定时器中断闪烁LED

发布者:BlissfulSpirit最新更新时间:2023-01-11 来源: zhihu关键字:51单片机  汇编  定时器  LED 手机看文章 扫描二维码
随时随地手机看文章

话不多说,先上程序

ORG 0000h

AJMP START

ORG 000BH

AJMP TIME0

START:

MOV 66H,#0

MOV TMOD,#00000001B

MOV TH0,#0BBH

MOV TL0,#0CCH

SETB EA

SETB ET0

SETB TR0

AJMP $

TIME0: PUSH ACC

PUSH PSW

MOV TH0,#0BBH

MOV TL0,#0CCH

INC 66H

MOV A,66H

CJNE A,#30,TIME00

CPL P1.0

MOV 66H,#0

TIME00: POP PSW

POP ACC

RETI

END

这段程序的达成的目标是:用定时器产生一个中断,中断内容是让LED灯闪烁。现在来分析程序的每一个步骤。

ORG 0000h ;。。。

AJMP START ;跳到start处去运行程序

ORG 000BH ;定时器0的中断在中断向量表中的地址

AJMP TIME0 ;跳到中断内容处运行

START:

MOV 66H,#0 ;给60h这个单元赋0

MOV TMOD,#00000001B ;以下6行都是定时器的基本设置,我就不说这个了,用c写过的哥们应该都懂,后面三行是开启中断的。

MOV TH0,#0BBH

MOV TL0,#0CCH

SETB EA

SETB ET0

SETB TR0

AJMP $ ;进入死循环中,等待中断的产生

TIME0: PUSH ACC ;把ACC和PSW中的东西压入栈中,把进入中断前的现场进行保护,就是中断不改变原来的累加器和状态寄存器的内容。

PUSH PSW

MOV TH0,#0BBH ;重新赋初值让它进行下一次中断

MOV TL0,#0CCH

INC 66H ;这个单元内的数值自己加一,相当于i++

MOV A,66H ;传到A中与30进行比较

CJNE A,#30,TIME00 ;如果不相等则跳去让PSW和ACC出栈,然后返回主函数中的死循环。如果相等则继续执行下面的程序,就是把LED灯进行反转,就是让定时器计时到时30次才进行一次灯的状态的改变。

CPL P1.0 ;灯的状态的反转

MOV 66H,#0 ;地址内的数归零,进行下一次的定时器计数

TIME00: POP PSW

POP ACC

RETI ;中断返回的指令,注意不是主程序的返回ret

END


关键字:51单片机  汇编  定时器  LED 引用地址:51单片机与汇编之定时器中断闪烁LED

上一篇:汇编写51单片机之按键检测
下一篇:定时器1之使用定时器的查询方式来反转LED

小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved