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是需要的至于子程序那就不用中断首地址了,因为你掉用的子程序是固定的,不象中断,不知道发生在什么地方,不好把中断子程序放置,才要定义中断入口!!!!
以上就是关于如何单片机汇编实现中断全部的内容,包括:如何单片机汇编实现中断、如何用汇编语言编写单片机试验中的定时中断实验、汇编中断程序(王爽的除法溢出中断程序实现出错)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)