51单片机,用定时器中断,在P1口实现1S移动一次的流水灯,用汇编语言编写的程序

51单片机,用定时器中断,在P1口实现1S移动一次的流水灯,用汇编语言编写的程序,第1张

//晶振12M

DSEG AT 30H

timetemp: DS 1

LED: DS 1

CSEG AT 00H

ORG 0000H

LJMP START

ORG 000BH

LJMP Timer0Interrupt

START:

MOV SP,#60H

MOV timetemp,#20

MOV P1,#0FFH;LED低电平点亮

LCALL InitTimer0

MOV LED,#0FEH

LOOP:

MOV P1,LED ;add your code here!

LJMP LOOP

InitTimer0:

MOV TMOD,#01H

MOV TH0,#HIGH(65536-50000)

MOV TL0,#LOW(65536-50000);延时50ms

SETB EA

SETB ET0

SETB TR0

RET

Timer0Interrupt:

PUSH ACC

PUSH PSW

CLR TR1

MOV A,TL1

ADD A,#LOW(65536-50000)+7

MOV TL1,A

CLR A

ADDC A,#HIGH(65536-50000)

SETB TR1

DJNZ timetemp,NEXTT1

MOV timetemp,#20

;========================

MOV A,LED

RL A

MOV LED,A;add your code here!

;========================

POP PSW

POP ACC

RETI

问题是:一个程序暂停,还有其它程序在执行吗?主循环程序也暂停吗?

那就设置一个标志位,中断后,标志为1,再次中断,又恢复为0。

回主循环程序,如果标志位为1,就进入一个循环中,循环中只查这个标志位,为1就始终循环,相当于暂停一个程序。不为1,即为0就跳出循环,进入正常的程序,即继续那个程序。

当再次中断,标志位为0,主程序就继续了。

试试下列程序:

ORG 0000H

JMP START

ORG 000BH

JMP T0_INT

;------------------------------

START:

MOV TMOD, #06H

MOV TH0, #255

MOV TL0, #255

MOV IE, #82H

SETB TR0

MOV R2, #0

MOV R3, #0

MOV DPTR, #TAB

;------------------------------

M_LOOP:

MOV A, R3

MOVC A, @A + DPTR

MOV P2, A

MOV A, R2

MOVC A, @A + DPTR

MOV P0, A

SJMP M_LOOP

;------------------------------

T0_INT:

JNB P34, T0_INT

INC R3

CJNE R3, #10, T0_END

MOV R3, #0

INC R2

CJNE R2, #10, T0_END

MOV R2, #0

T0_END:

RETI

;------------------------------

TAB: DB 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f

;------------------------------

END

以上就是关于51单片机,用定时器中断,在P1口实现1S移动一次的流水灯,用汇编语言编写的程序全部的内容,包括:51单片机,用定时器中断,在P1口实现1S移动一次的流水灯,用汇编语言编写的程序、51单片机汇编语言,用中断实现一个程序的暂停与继续,求大神帮忙,只需要说思路就行了。跪求!!、51单片机用计数器中断实现100以内的按键计数,汇编语言程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9324714.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存