如何单片机汇编实现中断

如何单片机汇编实现中断,第1张

ORG

00H

;开始地址

JMP

MAIN

;跳转到主程序

ORG

03H

;外部中断0地址

JMP

EXT1

;跳转

ORG

13H

;外部中断1地址

JMP

EXT2

;跳转

MAIN:

MOV

IE,

#85H

;使能中断

0,1

SETB

TCON2

;边沿触发

SETB

TCON0

;边沿触发

SJMP

$

;--没有这一句,程序,自己就去执行中断函数了

EXT1:

MOV

P2,

#0

;清0,点亮发光二极管

RETI

EXT2:

MOV

P2,

#0FFH

;置1,关闭

RETI

END

第一、设置定时器工作模式;第二、给TLX、THX赋初值;第三、开中断;第四、启动定时器。当然你要编好中断服务程序了。下面给一个简单的示范例程:程序运行后将在P10上产生1K的方波信号输出。

ORG 0000H

LJMP START

ORG 000BH

LJMP TM0

ORG 0100H

START:

CLR EA

MOV SP,#60H

MOV TMOD,#01H

MOV TCON,#01H

MOV TH0,#0FEH

MOV TL0,#0BH

SETB TR0

SETB EA

SJMP $

TM0:

CLR TR0

MOV TH0,#0FEH

MOV TL0,#0BH

SETB TR0

CPL P10

RETI

END

80x86 的 0 号中断,是针对“除数为零”而设置的。

如果在程序中,做除法之前加以判断,避免除数为零,

那么,0 号中断,就不会发生了。

那么,再这么认真的学习这块内容,就没有实用意义了。

-------------------------

CPU 执行除法指令,确实是容易发生溢出。

一般来说,当被除数的高位,大于等于除数时,就会发生“溢出”。

如果你编写一个“不会溢出”的除法程序,这些问题,就都没有了。

参考下图:

在右图中,

被除数:1A 2B 3C 4DH,有 32 位数。

除数是:BL,仅有 8 位数。

商,是:32 位数。

按照图中的步骤,需要执行四次 DIV  BL。

只要 BL 不为零,就绝对不会发生溢出。

按此思路,被除数的字节数,还可以增加,仅受制于内存的大小。

这就是说:这种除法程序,被除数,可以认为是无限大的。

mov di,2000

delay:

mov si,3000

delay1:

dec si

jnz delay

这段就是main process

改成你要的判断

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

000BH 0030H是这两个中断的入口地址,也就是发生中断后将要跳到这里来

T0INT,T1INT都是中断子程序的名字,也相当于地址,我们要跳到那个地方去执行中断子程序!!!!

在程序中,一般只有中断才会用到保护和恢复现场,我到现在还没有看见其它情况用它们的!!!

你的第3个问题就要看你用什么IC了,有的IC自带的有那些功能,你就不需要了,但是51是需要的至于子程序那就不用中断首地址了,因为你掉用的子程序是固定的,不象中断,不知道发生在什么地方,不好把中断子程序放置,才要定义中断入口!!!!

以上就是关于如何单片机汇编实现中断全部的内容,包括:如何单片机汇编实现中断、如何用汇编语言编写单片机试验中的定时中断实验、汇编中断程序(王爽的除法溢出中断程序实现出错)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存