微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 51单片机定时、中断练习:用延时程序做闪烁灯

51单片机定时、中断练习:用延时程序做闪烁灯

时间:01-10 来源:互联网 点击:

一定的公约数,我们就可以用软件定时器加以实现,如我要实现P10口所接灯按1S每次,而P11口所接灯按2S每次闪烁,怎么实现呢?对了我们用两个计数器,一个在它计到20时,取反P10,并清零,就如上面所示,另一个计到40取反P11,然后清0,不就行了吗?这部份的程序如下

ORG0000H

AJMPSTART

ORG000BH;定时器0的中断向量地址

AJMPTIME0;跳转到真正的定时器程序处

ORG30H

START:

MOVP1,#0FFH;关所灯

MOV30H,#00H;软件计数器预清0

MOVTMOD,#00000001B;定时/计数器0工作于方式1

MOVTH0,#3CH

MOVTL0,#0B0H;即数15536

SETBEA;开总中断允许

SETBET0;开定时/计数器0允许

SETBTR0;定时/计数器0开始运行

LOOP:AJMPLOOP;真正工作时,这里可写任意程序

TIME0:;定时器0的中断处理程序

PUSHACC

PUSHPSW;将PSW和ACC推入堆栈保护

INC30H

INC31H;两个计数器都加1

MOVA,30H

CJNEA,#20,T_NEXT;30H单元中的值到了20了吗?

T_L1:CPLP1.0;到了,取反P10

MOV30H,#0;清软件计数器

T_NEXT:

MOVA,31H

CJNEA,#40,T_RET;31h单元中的值到40了吗?

T_L2:

CPLP1.1

MOV31H,#0;到了,取反P11,清计数器,返回

T_RET:

MOVTH0,#15H

MOVTL0,#9FH;重置定时常数

POPPSW

POPACC

RETI

END

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top