如图 我想用单片机汇编语言编写中断程序,要求是 开始等不亮,当按钮按下,LED等亮一秒灭一秒,这样循环。

如图 我想用单片机汇编语言编写中断程序,要求是 开始等不亮,当按钮按下,LED等亮一秒灭一秒,这样循环。,第1张

思路:

1,程序开始准备

2,标志位为0?是则等待中断,为1则执行下一步

3,亮灯,延时一秒,灭灯,延时一秒

4,跳到第二步步

中断程序:

1,标志位取反

2,reti

还有就是你按键接错了,你那样是查询方法,不是中断。

mov di,2000

delay:

mov si,3000

delay1:

dec si

jnz delay

这段就是main process

改成你要的判断

还有也不要用21h了,换个保留的中断号就行了

我告诉你思路,例子就不举了,很简单:

1、定义一个dword变量xxx用以存储原来的中断向量(所谓中断向量即中断发生时执行的子程序入口地址)

2、编写自己的中断处理过程(yyy proc far),该处理过程内应保存所有可能修改的寄存器,并在返回前恢复原状;一般情况下,如果还需要执行原有中断处理过程,那么调用jmp far xxx链接到原来的中断过程;如果不需要执行原有过程,那么直接以iret返回即可

3、在主程序开始时,先调用int 35h,获取指定中断号的中断向量,将返回的中断向量存储在xxx变量中

4、调用int 25h,将指定的中断号的中断向量指向自己的过程yyy

5、当前程序在退出前,应再次调用int 25h,将被修改掉的中断号的中断向量恢复为xxx变量的值

ORG 0000H

LJMP START

ORG 000BH

LJMP Timer0Interrupt

START:

MOV SP,#60H

LCALL InitTimer0

LOOP:

;add your code here!

LJMP LOOP

InitTimer0:

MOV TMOD,#01H

MOV TH0,#0FCH

MOV TL0,#18H

SETB EA

SETB ET0

SETB TR0

RET

Timer0Interrupt:

PUSH DPH

PUSH DPL

PUSH ACC

MOV TH0,#0FCH

MOV TL0,#18H

CPL P10

POP ACC

POP DPL

POP DPH

RETI

END

这是定时器0的一个1ms中断一次的程序 在P10端口输出1KHz方波

用c语言的话中断程序是单独写在中断服务函数中的,51单片机的中断服务函数的定义:

void functionname(void) interrupt num //functionname是自己定义的函数名字,num对应实际的中断向量号

以上就是关于如图 我想用单片机汇编语言编写中断程序,要求是 开始等不亮,当按钮按下,LED等亮一秒灭一秒,这样循环。全部的内容,包括:如图 我想用单片机汇编语言编写中断程序,要求是 开始等不亮,当按钮按下,LED等亮一秒灭一秒,这样循环。、汇编 中断处理程序怎么写、汇编中断程序具体例子等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址:https://54852.com/zz/10216661.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存